Edit online

总线挂死恢复机制

SDA 挂死恢复

I2C 通信异常可能会造成总线挂死情况,例如 slave 设备应答 ACK 拉低 SDA 时出现异常,此时 slave 无法释放总线,造成 master 无法继续掌握总线进行通信。

因此检测到SDA挂死条件,则触发恢复机制。原理如下:

  1. Master 尝试在 SDA 发送逻辑 1 并且检查 SDA 是否恢复,最多连续发送 9 个时钟周期。

  2. 如果 SDA 在九个时钟周期内恢复,master 则发送一个 STOP 信号释放总线。

  3. 如果 SDA 在九个时钟周期内未恢复,则系统需要硬件复位。

下图表示第九个时钟恢复:

下图表示第七个时钟恢复

SCL 挂死恢复

通常只有在电路电气发生故障才存在SCL一直处于低电平,除了硬件复位系统外,没有有效的方法来解决此问题,若使能 SCL 挂死中断,可查看 I2C_INTR_STAT[14] 检查 SCL 状态。