I2C总线的基本操作
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总线的数据传输
- 一种基于DSP的张力、深度、速度测量系统(04-15)
- I2C总线及EEPROM的Linux驱动程序的设计(01-05)
- 基于C语言的I2C总线软件模块设计(01-09)
- 基于MSP430单片机的智能IC卡水表控制器(07-08)
- 实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序(07-25)
- 基于FPGA的嵌入式图像采集系统设计(06-05)