微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > I2C总线的基本操作

I2C总线的基本操作

时间:07-23 来源:互联网 点击:
  I2C总线上只具有SOL(时钟)和SDA(数据)2根信号线。如果是单纯的串行传输,一旦因为某种原因造成引脚的偏差,则可能会造成不能区分总线上传输的是数据还是地址信息的后果。解决上述问题的简单办法就是附加独立于总线的Reset(复位)信号,由主机控制该信号。因为I2C至少利用2根线进行所有的操作,因此在数据传输时,通常当SCL为低电平时,设置下一个数据;当SDA变化后,SCI为高电平,这可以解释为一连串操作的开始/结束。

1. 起始条件

始条件表示一系列操作的开始。图1表示起始条件以及随后数据传输的开始操作。在I2C总线的空闲状态下,SDA及SCL通过上拉电阻都为高电平。在这样的状态下,如果SCL仍保持高电平,而SDA变为低电平,则成为开始指令。

  

图1 I2C总线的起始条件   

由于该状态并不出现于地址及数据的发送与接收过程中,因此,即使在途中发生异常,只要检测出该状态,初始化内部的状态机,就可以使其恢复。

2. 结束条件

在一系列操作的最后是结束条件。结束条件如图2所示。当SOL为高电平时,一旦SDA由低电平变化为高电平,即成为结束条件,主机与器件之间的通信将停止,器件恢复为空闲状态。进行写操作时的结束状态是开始进行EEPROM内部单元写操作的指示标志。

 

图2 I2C总线的结束条件   

结束前所传输的数据是ACK/NoACK的状态位,如果是ACK,则该状态位为低电平。但如果发生某种错误时,则表示为NoACK的高电平。读操作时的最后字节是主机向器件返回NoˉACK信息,所以SDA为高电平。这样就不能形成结束条件所需要的SDA的上升沿,因此在结束之前需要加入哑元“0”数据位作为解决办法。

在最终数据的ACK NoACK之后,主机通过下述的流程,形成结束条件,如下所述:

①SCL变为低电平;

②SDA变为低电平;

③SOL变为高电平(发送哑元数据);

④SDA变为高电平(结束条件)。

3. 数据传输

数据传输的流程如图3所示。除去开始与结束条件,在传输包含地址指定等数据时,能够使SDA发生变化的条件只能是在SOL为低电平时。因此,总线操作以如下的步骤进行:

①SCL变为低电平;

②为SDA设置数据(主机或者器件);

③SCL变为高电平。

进行数据读操作时,主机在SOL恢复为高电平之前读取数据。

图3 I2C总线的数据传输

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top