您的位置:首页 > 其它

I2C设备驱动(四)-- 调试问题

2017-06-10 16:10 337 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: