BUG: I3C读取I2C设备数据,I3C主机接收数据时未产生ACK
一.BUG描述
I3C主机读取I2C从机版本号,过程如下:
I3C主机先发送I2C设备地址0x5C, 从机正常响应ACK。
I3C主机发送需要读取寄存器地址0x10(版本号),从机正常响应ACK。
I2C设备开始发送4byte的信息,主机接收完第一个byte 0x29, 没有产生ACK,导致从机发送的整个数据产生了错误。

二.BUG原因
IIC时钟延展:IIC设备的数据没来得及准备好,所以IIC设备利用了总线开漏输出的特性,将时钟拉低一段时间暂停传输,待准备号数据后,再释放总线,继续传输。
但是由于I3C的总线引脚都是推挽输出,不支持时钟延展,所以如果IIC从机产生clock-strech,拉低时钟,那么I3C主机就会检测到异常,也就不再产生ACK。(如下图)

三.解决办法
降低I3C主机的通信速率到100khz以下,避免I2C设备产生时钟延展。
浙公网安备 33010602011771号