对I2C总线的时钟同步和总线仲裁的深入理解

2016-03-01来源: eefocus关键字:I2C总线  时钟同步  总线仲裁
        每一个IIC总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器[1]。这种电路具有两个特点: 

①由于SDA、SCL为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑;

②引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟同步”和“总线仲裁”提供硬件基础。

I2C总线接口内部结构

 

         IIC设备对总线的操作仅有“把线路接地”——输出逻辑0。基于IIC总线的设计,线路上不可能出现电平冲突现象。如果一设备发送逻辑0,其他发送逻辑1,那么线路看到的只有逻辑0。也就是说,如果出现电平冲突,发送逻辑0的始终是“赢家”。总线的物理接法允许主设备往总线写数据的同事读取数据。这样两主设备争总线的时候“赢家”并不知道竞争的发生,只有“输家”发现了冲突——当写一个逻辑1,却读到了0——而退出竞争。

时钟同步

 

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

总线仲裁

               假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。
不难看出:
  • ① 对于整个仲裁过程主控器1和主控器2都不会丢失数据;
  • ② 各个主控器没有对总线实施控制的优先级别;
  • ③总线控制随即而定,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。
根据上面的描述,“时钟同步”与“总线仲裁”可以总结如下规律:
  • ①主控器通过检测SCL上的电平来调节与从器件的速度同步问题——时钟同步;
  • ②主控器通过检测SDA上自身发送的电平来判断是否发生总线“冲突”——总线仲裁。因此,I2C总线的“时钟同步”与“总线仲裁”是靠器件自身接口的特殊结构得以实现的。

 

[1]同相器:当输入高电平时输出也是高电平,输入低电平时输出也是低电平。主要要于需要缓冲的场合,就是只要输入很小的电流,可输出较大的电流,增加带载能力。

关键字:I2C总线  时钟同步  总线仲裁

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016030124863.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于I2C和SPI总线协议
下一篇:I2C总线时序模拟(一)-加深理解总线协议

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

物联网之STM32开发八(I2C总线通信)

STM32-I2C总线通信内容概要I2C总线通信原理三轴加速度传感器mpu6050介绍I2C通信实例I2C总线通信原理内容概要:I2C总线简介I2C总线协议I2C总线读写操作STM32F0-I2C控制器特性I2C总线简介:I2C总线介绍:I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,期间封装形式少,通信速率高等优点。I2C总线特征:     两条总线线路:一条串行数据SDA,一条串行时钟线
发表于 2019-07-10
物联网之STM32开发八(I2C总线通信)

STM32中I2C总线上数据的读、写。

/**  * @brief  从I2C1总线上的某一器件的某一起始地址中读取一定字节的数据到数组中  * @param  driver_Addr:I2C器件地址  * @param  start_Addr:起始字节地址  * @param  number_Bytes:要读取的字节数量(小于一页)  * @param  read_Buffer:存放读取数据的数组指针  * @retval 是否读取成功  */u8 I2C1_Read_NBytes(u8 driver_Addr, u8 start_Addr, u8
发表于 2019-05-23

PIC单片机-普通IO口模拟I2C总线对24C02进行读写操作

使用PIC单片机的普通IO口模拟I2C总线,对24C02进行读写操作。其中,总线定义为:#define       IIC_SCLK     RC3      //24C02时钟线#define      IIC_SDAT     RC4      //24C02数据线将跳线帽P11短接至24C02方向,将跳线帽P6段接至IIC方向。I2C 总线协议规定任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器,数据传送是由产生
发表于 2019-05-11

Gpio模拟i2c总线对24c02进行读写

使用资料:i2c总线时序手册、24c02手册及ARM主芯片的datasheet一、通过原理图查看i2c的sda/scl两个引脚连接到ARM主芯片的哪两个GPIO口,以我现在使用的单板为例,如下图从此图可以看出连接的GPIO口为9_3、9_2两个引脚。二、通过控制GPIO高低电平来模拟I2C的时序完成总线驱动首先通过i2c时序手册可以查看到如下图的一个时序使用gpio9_2 和gpio9_3两个引脚来模拟sda/scl的时序,核心代码如下:Gpioi2c.c#define SCL (1 <<3) /* GPIO 9_3 */#define SDA (1 << 2) /* GPIO 9_2 */#define
发表于 2019-04-02
Gpio模拟i2c总线对24c02进行读写

单片机模拟I2C总线通信的几个关键程序

I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。以下为单片机模拟I2C总线通信的几个关键程序: 1、总线初始化void main(){    SCl=1;    delay();    SDA=1;    delay();}//将总线都拉高以释放总线2、启动信号void start(){    SDA=1;    delay();    SCL=1;    delay();    SDA=0; 
发表于 2019-01-29

STM32中I2C总线上数据的读、写。

/**  * @brief  从I2C1总线上的某一器件的某一起始地址中读取一定字节的数据到数组中  * @param  driver_Addr:I2C器件地址  * @param  start_Addr:起始字节地址  * @param  number_Bytes:要读取的字节数量(小于一页)  * @param  read_Buffer:存放读取数据的数组指针  * @retval 是否读取成功  */u8 I2C1_Read_NBytes(u8 driver_Addr, u8 start_Addr, u8
发表于 2018-09-11

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved