ZHCAE64 July 2024 TCA4307
I2C 总线阻塞是指在 SCL 线路为高电平时 SDA 线路无限期保持低电平。这种情况会带来问题,因为通常总线上有多个 I2C 器件,如果 SDA 线路一直处于低电平,则无法再进行 I2C 通信。在这种情况下,I2C 控制器无法控制 SDA 线路,因此无法发出启动和停止条件。在最坏的情况下,甚至处理器也可能会一直处于等待 SDA 线路变为高电平的状态。由于处理器处于无限期等待状态,不再执行任何其他代码行,因此可能导致整个系统或终端设备卡住。本文重点介绍这种特定类型的 I2C 总线阻塞问题,并提供尝试解决此类总线阻塞问题的一些方法。
还有另一种类型的 I2C 总线阻塞事件,即 SCL 线路可能一直处于低电平。通常,I2C 总线上唯一可以控制 SCL 线路的器件是会发出 SCL 脉冲的 I2C 控制器。不过,有一些 I2C 目标器件可以执行时钟延展,在极少数情况下,可能会导致时钟一直处于低电平。在这些情况下,唯一的恢复方法可能是对使总线一直处于低电平的器件进行复位或下电上电。