分享下我刚搜到的
I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。SCL同步是根据总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理。
SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时,能够正常通信并且不丢失数据。
所以当一个节点发送数据时,每发送一位数据后,都需要判断总线上所呈现的数据是否与自己发送的一致,如果不一致,放弃发送;否则,继续发送。 |