二十、I2C总线仲裁机制
一、概述
I2C (Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,一个i2C总线上可以挂载多个从设备,多个设备同时使用总线时,怎么防止数据冲突,这就需要i2c的总线仲裁机制。
二、i2c总线仲裁机制
1、I2C总线上可能在某一时刻有两个主控设备要同时向总线发送数据,这种情况叫做总线竞争。
2、I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:
假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。不难看出:
- 对于整个仲裁过程主控器1和主控器2都不会丢失数据;
- 各个主控器没有对总线实施控制的优先级别,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。
3、i2c总线仲裁主要遵循三个机制:
- “线与”机制:
多主机时,总线具有“线与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。
- SDA回读机制
总线被启动后,多个主机在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,就会继续占用总线。
- 低电平优先机制
由于线与的存在,当多主机发送时,谁先发送低电平谁就会掌握对总线的控制权。