本文主要是介绍IIC总线仲裁机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
IIC总线仲裁机制与CAN总线极为相似总的来说就三个机制,线与机制,回读机制,低电平优先机制(显性电平优先机制);
什么是总线仲裁
总线上可能在某一时刻有两个主控设备要同时向总线发送数据,这种情况叫做总线竞争。
IIC总线仲裁
I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:
假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。不难看出:
- 对于整个仲裁过程主控器1和主控器2都不会丢失数据;
- 各个主控器没有对总线实施控制的优先级别,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。
i2c总线仲裁主要遵循三个机制:
线与机制
线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1
回读机制
回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实地发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1(若回读不是自己发送的电平,则仲裁失利,则主动退出,当然只有发送1时,两根线在120Ω的作用下处于同一电平(隐形电平1),当其他设备输出0时,这时,这个设备读入电平为0,1>0所以是设备号大的设备后占用总线)
低电平优先机制
从回读机制中看出低电平赢(显性电平)得仲裁,因此是低电平优先。
这篇关于IIC总线仲裁机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!