ZHDA239 July 2026 DS90UB981-Q1 , DS90UB983-Q1 , DS90UB984-Q1
通常,当 MCU(在本地连接至解串器的 I2C 目标器件)正在处理多个进程时,它可能会在本地 I2C 总线上进行时钟延展,以向 SOC 请求等待状态。
图 4-1 展示了该时钟延展的示例。D0 和 D1 分别代表解串器与 MCU 之间的 SDA 总线和 SCL 总线,而 D2 和 D3 则分别代表 SOC 与串行器之间的 SCL 总线和 SDA 总线。如果 MCU 的时钟延展持续时间超过串行器中配置的 ARB_TIMEOUT 阈值,则会触发仲裁器超时。此时,串行器将在内部生成一个 NACK,并将其发送给解串器,以释放解串器与 MCU 之间的总线。
图 4-1 时钟延展会导致 ARB_TIMEOUT 条件该时钟延展发生在通过 FPD-Link 远程对目标器件执行读取事务的过程中。SCL 在读取命令的目标地址阶段保持低电平,事务在收到 ACK 之前无法继续执行。然而,当串行器侧的 ARB_TIMEOUT 被触发并发送 NACK 时,这并不足以让解串器进入读取事务的下一状态,导致解串器在 ARB_TIMEOUT 触发后无法退出该读取状态。
如果时钟延展持续时间小于串行器和解串器双方的仲裁器超时时间,则可以防止该问题发生。但是,如果时钟延展持续时间大于串行器 ARB_TIMEOUT 寄存器中所编程的值,则必须禁用串行器侧的 I2C 仲裁器,以防止过早释放总线。在这是跨越 FPD-Link 的事务的情况下,解串器侧也有一个会触发的仲裁器;如果 MCU 的时钟延展时间预计会超过 ARB_TIMEOUT 寄存器中设定的时间,则必须禁用该仲裁器。因此,在目标器件的时钟延展时间预计会超过串行器和解串器 ARB_TIMEOUT 功能所分配时间的情况下,禁用串行器和解串器双方的 I2C 总线仲裁器是合适的做法。这种方法不会引入额外风险,因为 BCC 看门狗计时器和 I2C 总线超时功能仍然能够处理超时条件,并在必要时释放 I2C 总线。