[其他产品] STM32 IIC总线死锁问题总结

[复制链接]
208|0
liao6 发表于 2025-10-21 14:21 | 显示全部楼层 |阅读模式
, , , AC
#申请原创#

@21小跑堂

简介
      重要提示:IIC总线通信时,如果设计为一主多从时,主机为硬件IIC,从机也得是硬件IIC,从机是软件模拟IIC时,那么主机最好也设计为模拟IIC,否则,在写数据时有可能会出现总线死锁。
      另外,一主多从通信时,最好都是只读数据,如果有一个从机有写数据,要单独一路IIC通信。

问题点:
IIC死锁也就是SDA, SCL电平都为低电平,无法通信。
案例中设备是低功耗设备,设备休眠时会关闭IIC上拉电源,以降低功耗,外部从机有2个。
问题:偶发唤醒的时候,IIC挂死,通信崩溃?

一、分析软件
当IIC死锁复现时,首先确认两个问题:
1.用STM32CubeProgrammer读取寄存器状态数据,IIC配置时要把故障中断使能,TCIE和ERRIE标志为1,则表示故障中断已配置。
  

I2C_CR1的寄存器TCIE和ERRIE
  
配置IIC故障[color=rgb(78, 161, 219) !important]中断,可以手动加入程序中:
  
  
2.PE标志位置1就是说明IIC已经使能,等效于__HAL_I2C_ENABLE(&hi2c1);BUSY标志位置1说明硬件已经开始,没有问题。
  
  

IIC寄存器数据没有问题,说明软件是OK的,那么,再从硬件角度分析。

二、分析硬件
1.IIC上拉电源是否稳定?
2.IIC上拉电阻阻值是否合适?一般1~10K。
3.IIC电源的电容是否过大?
4.一主多从通信,是否都为读数据?如果有一路有写数据,要分时去通信,避免数据交叉通信。
5.主机、从机是否都为硬件IIC?
经过以上排查,基本问题可以解决。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

193

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部