I2C总线死锁问题

I2C总线死锁

死锁现象

I2C在某一个特殊时刻出现异常:SLC一直为高,SDA一直为低。

死锁示例

  1. 当主机进行写操作时,在写数据的ACK阶段,SDA被从机拉低作为ACK,主机突然复位,SCL被复位为高电平,这样主机检测到SDA为低,会认为I2C总线被占用,一直等待SCL和SDA信号拉高。从机不知道主机异常复位,还在等待SCL拉低,然后结束ACK信号,这样主从互相等待,就造成死锁。
  2. 当主机进行读操作时,从机应答后输出数据,如果此时主机异常复位而从机输出的数据正好为0,也会导致死锁。

解决办法

  1. 采用模拟I2C。
  2. 将从机电源设计为可控,当出现死锁时将从机复位。
  3. 从机程序添加监测功能,检测到总线长时间被拉低则释放对总线的控制。
  4. 主机程序添加恢复功能,当主机复位后,若检测到SDA被拉低,则控制SCL产生9个时钟脉冲。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值