STM32硬件I2C死锁原因及解决办法

ctime:2019-09-24 23:49:23 +0800|1569340163

标签(空格分隔): 硬件 技术


一些基础知识:

  • I2C通信的两条信号线需要使用OD方式,连接上拉电阻
  • I2C通信有主机、从机之分,主机即为发起通信的一方。主机未必是数据的发送方或者接收方
  • I2C总线上可以有多个设备,每次仅能有一个设备控制总线
  • 如何界定当前总线是由哪个设备控制?看当前哪个设备能拉低SCL\SDA信号线
    • 理论上来说,所有I2C设备都可以拉低这两条信号线
    • 但实际操作中,I2C设备会有个标志,标志当前总线是否由自己控制,如果不是自己控制,它是不会去拉低总线的
    • I2C检测总线被占用的方式也很简单,检测SCL\SDA是否都是高电平,如果都是,则为空闲

死锁的发生:

  • 一般死锁发生于主机与从机通信之间,出现意外的通信错误(可能是SCL、SDA与3V3 GND意外短路,或者通信速率太高,而总线电容太大,导致丢失某些bit),或者丢失ack
  • 死锁即为:
    • 主机认为此时应该由从机控制总线(即可能是主机在等待从机发送一定数量的数据,但中间丢了1个bit,没发送完)
    • 从机认为此时应该由主机控制总线(即从机已经把数据发送完了,在等待主机接管总线)
    • 双方互相等待,陷入死锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值