I3C是在I2C基础上改进来的新协议。和I2C相比,传输速度更快,在电路构成上,I2C的SCL和SDA都用的开漏模式加上拉电阻,而I3C中,SCL采用推挽模式(只有在推挽输出模式下I3C才可以达到12.5MB),SDA采用上拉电阻加开漏。I3C支持热拔插和IBI中断(在地址仲裁阶段允许从机给主机发中断)。
奇偶校验位
与I2C不同,I3C为了安全与可靠,第九位采用的是奇偶校验位,原始的I2C第九位为ACK信号,接收方收到这个信号时需要把SDA拉低已表示收到ACK信号并返回确认ACK信号告知主机已经接收完成,I3C第九位使用的是奇偶校验位,XOR (Data [7:0], 1),即所有位与1进行异或的结果,接收方接收到以后需要自行异或并与第九位做比较,如果相同则回复ACK确认,否则NACK要求重发。
I3C总体下来每次传输数据可以说是传输十位:data[7 : 0] → T [0] → ACK [0]
I3C把这个位称之为T位,也叫过渡位/交换位
应答的方式
I2C
发送方将SCL拉高,随后将SDA也拉高,接收方需要在一个周期内将SDA拉低以回应确认收到信息,如果周期内没有拉低则代表NACK。
I3C
发送方将SCL拉低,随后SDA拉高,从机需要将SDA拉低来确认ACK,如果不将SDA拉低则意味着NACK。
I3C上因为SCL是推挽电路,但同时I3C仍然支持I2C的ACK确认方式,只是某些情况下I3C要求只能使用I3C的方式来进行ACK,这么做的目的是忽略掉总线上I2C的设备,例如分配动态地址是时不想让I2C设备参与进来那么久使用这个方式来忽略掉I2C设备,因为传统I2C设备只会在SCL拉高时来确认ACK,如果I3C将SCL拉低那么I2C设备会把此次通讯视为没有ACK讯息视为失败则放弃本次通讯。