如何知道多主机环境下 I2C 总线是否繁忙?

How to know if I2C bus is busy in Multi master environment?

假设一个 I2C 网络连接了多个主机和一些从机。 主机已经在与特定的从机通信。 现在如果另一个主机想通过在总线上发送一些从机地址来启动通信,那么新的主机如何知道总线已经很忙并且应该等到它被释放?

所有设备(包括主设备和从设备)都会跟踪总线的状态。

一旦找到启动条件,总线就会被视为忙碌,直到收到停止条件。总线仲裁决定了哪个主机拥有总线。

仲裁失败的主机将报告仲裁失败(通过寄存器中的一些标志)并等待直到找到停止条件。

如果主机没有启动事务,它将报告总线忙于其他标志,并将继续跟踪总线状态以检测停止条件。

无法仅通过对公交线路进行一次采样来判断公交车是否空闲。是的,如果你看到某条线路为 0,那肯定意味着公交车正忙,但是当你看到两条线路都为 1 时,并不意味着公交车空闲。所有设备都必须跟踪总线状态变化以检测 Start/Stop 条件。