作者:mobiledu2502885243 | 来源:互联网 | 2023-10-12 11:37
1i2c死锁异常现象:master设备复位后,不能对slave进行读写操作,总线表现为SCL为高,SDA一直为低原因:master与slave进行通信时,正好发生打算发第9个时钟,
1 i2c死锁
异常现象:master设备复位后,不能对slave进行读写操作,总线表现为SCL为高,SDA一直为低
原因:master与slave进行通信时,正好发生打算发第9个时钟,此时SCL为高,而从开始拉低SDA为低做准备(作为ACK信号),等待SCL变低后,从再释放SDA为高。如果此时正好master复位,master SCL还没来得及变低,直接变成高电平,此时slave还在等待SCL变低,所以一直拉低SDA;而master由于复位,发现SDA一直为低,也在等待slave释放SDA为高。因此主从都进入一个相互等待的死锁状态。
解决方法:每次I2C master设备复位后,如果检测到SDA数据线被拉低,则控制I2C中的
SCL时钟线产生9个时钟脉冲(针对8位数据的情况),这样I2C slave设备就可以完成被挂起的读操作,从死锁状态中恢复过来。
2 …3