ZHCAE64 July 2024 TCA4307
当需要读取信息或需要通过总线传输数据时,SDA 一直处于低电平会导致问题。有几种可能的方法可以释放总线。如果总线的系统设计人员能够修改或构建总线上处理器或主机的软件,他们可以为处理器或主机编写代码,以便寻找潜在的总线阻塞问题,并做出反应以尝试解决该问题。对于 I2C 总线,为了实现此目的,可以将串行时钟线路 (SCL) 切换八到十六次,然后发出停止条件。这样可以推进在整个处理流程中使串行数据线路 (SDA) 保持低电平的 I2C 器件状态机,将状态机复位为空闲状态以释放总线。对于 SMBus,SCL 线路保持低电平的时间可能超过 t_timeout,这可能强制所有 SMBus 器件全部复位并解决总线阻塞问题。如果 I2C 目标器件有一个专用的复位引脚,则总线上的处理器可以启动复位以释放总线。但是,如果存在大量 I2C 目标器件,这种设计的效率很低。可以强制处理器对连接到该复位引脚的所有目标器件进行复位,从而使总线上的所有 I2C 目标器件重新初始化(尽管最初只有一个器件导致总线阻塞问题)。
从硬件角度来看,使用具有热插入保护功能的 I2C 缓冲器器件可以解决因热插入事件导致的总线阻塞问题。TCA9511A 和 TCA4307 具有专用逻辑可用于将未通电的 I2C 总线(子卡)与通电的 I2C 总线(背板)分离,直到两侧都准备好连接,从而防止总线上出现干扰。面向热插拔应用的 I2C 解决方案 应用手册中详细介绍了这种安全连接机制。
为了解决由串扰、EMI 或不良的上电复位引起的总线阻塞问题,可将 TCA4307 设计用于 I2C 总线,因为其具有一种称为总线阻塞恢复的附加功能。总线阻塞恢复功能可以检测 SDA 线路是否一直处于低电平。如果器件一直处于低电平的时间超过 40ms (t_stuckbus),则会将下游 I2C 总线与上游 I2C 总线断开,并将 RDY 引脚驱动为低电平。这样会让处理器知道下游通道已从总线断开。因此,可以防止 I2C 控制器/处理器通常所在的上游总线发生阻塞,并允许继续与上游总线段上的其他 I2C 器件通信。TCA4307 随后可生成多达 16 个时钟脉冲,直至 SDA 线路释放。然后,TCA4307 可发出一个停止条件来尝试将 I2C 器件的状态机复位为空闲状态。如果总线阻塞问题得到解决,TCA4307 可以自动重新连接下游总线和上游总线。
从下图可以看到这一点。通道 1(蓝色)是 SCL 线路,通道 4(绿色)是 SDA 线路,通道 3(紫色)是 RDY 引脚,这表示下游总线和上游总线再次连接在一起。在图 6-1 所示的示例中,在 6 个时钟脉冲过后,TCA4307 会控制 SDA 线路以发出停止条件,总线即由 TCA4307 解除阻塞。