I2C总线时钟同步与总线仲裁

SCL信号的同步

如果被控器希望主控器降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主控器,当主控器在准备下一次传送发现SCL的电平被拉低时就进行等待直至被控器完成操作并释放SCL线的控制控制权。这样以来,主控器实际上受到被控器的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟同步,它解决了I2C总线的速度同步。

总线上的总线仲裁

如果在同一个I2C总线系统中存有两个主控器,其时钟信号分别为SCK1、SCK2,它们都具有控制总线的能力。假设两者都开始要控制总线进行通信,由于“线与”的作用,实际的SCL的波形如图7.6所示。在总线做出仲裁之前,两个主控器都会以“线与”的形式共同参与SCL线的使用,速度快的主控器1等待落后的主控器2。

对于SDA线上的信号的使用,两个主控器同样也是按照“线与”的逻辑来影响SDA上的电平变化。假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”。总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。 

① 对于整个仲裁过程主控器1和主控器2都不会丢失数据;
② 各个主控器没有对总线实施控制的优先级别;

③总线控制随即而定,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

 根据上面的描述,“时钟同步”与“总线仲裁”可以总结如下规律:
①主控器通过检测SCL上的电平来调节与从器件的速度同步问题——时钟同步;

②主控器通过检测SDA上自身发送的电平来判断是否发生总线“冲突”——总线仲裁。

因此,I2C总线的“时钟同步”与“总线仲裁”是靠器件自身接口的特殊结构得以实现的。

I2C总线的其他注意点:

1 、发送应答信号ACK
在SDA为低电平期间,SCL发送一个正脉冲。

 2 、发送非应答信号NACK
在SDA为高电平期间,SCL发送一个正脉冲。

3  、应答位检测子程序CACK

与上面发送ACK和NACK信号不同,这是主控器对接收被控器反馈的应答信号进行的检测处理。在正常情况下被控器返回的应答信号ACK=0。如果ACK=1则表明通信失败。在这个子程序中使用了一个位标志F0作为出口参数,当反馈给主控器的应答信号ACK正确时F0=0;反之F0=1。

4、I2C到底可以挂载多少个器件呢?

答:IIC协议规定,在启动总线后第1字节的高7位是从节点的寻址地址,其中高四位为器件类型识别符,接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作,所以具体挂载多少个器件由I2C地址决定,7位寻址地址减去1个广播地址0x00不用,所以有2^7=128 - 1 = 127,那就是127个地址, 所以理论上可以挂127个从器件。

出自:http://blog.sina.com.cn/s/blog_6582c5f30102v9ic.html

猜你喜欢

转载自blog.csdn.net/xv1356027897/article/details/79665541
今日推荐