IIc死锁的问题
首先补充基本的,iic是线与(wire-and)接口,时钟线SCL数据线SDA在配置时都会使用开漏输出
可以靠io拉到0电平,1电平需要硬件设计外部上拉电阻。
总线空闲的时候SCL、SDA都是高电平,
起始信号 时钟线高的时候,数据线由高到低
结束信号 时钟线高的时候,数据线由低拉高
应答 接收方接收完数据后,在时钟高的时候,数据为低
不应答就是不拉低
死锁
当数据传输时,发生程序崩溃,bug,硬件故障等问题,从设备发送低电平的0bit时,从机不会释放总线
会把数据线一直拉低,此时主机便无法停止和重启,因为数据线一直被占用
此时可以手动给时钟线扣9个多的时钟信号,让从机把数据发送出来释放总线
当主机检测到数据线被释放,就可以发出停止信号停止,再重新开始iic的进行
手动扣时钟信号的时候保持数据线无数据,可能检测到应答后从机又会发数据,不应答数据线便会处于空闲