IIC通讯协议的学习与理解

IIC总线是一种串行数据总线,由两条线组成,其中一条双向SDA;负责数据的读与写,另一条是时钟线SCL。

在硬件物理结构上面,IIC总线有如下特点:

1.SDA、SCL均为漏极开路结构(OD),只能输出低电平,所以必须接有外部上拉电阻,常见的阻值与电压对应关系是

1.8V(1.8K)、3.3V(4.7K)、5V(10k),所以在总线空闲时,两根线均为高电平。而IIC总线支持多主机多从机的结构又使

得在总线上各器件的SCL和SDA都是线“与”的关系。

主机和从机都可以传输数据,但从机不能主动发起传输,必须依靠主机的时序指令来进行硬件触发。即从设备是受到主设备控制的。

一、协议

空闲状态:空闲状态时的I2C总线,两根线均上拉后处于高电平,规定为总线的空闲状态。内部的场效应管处于截止状态、

起始信号:当SCL为高电平期间,SDA发生由高往低的跳变,启动信号是一种电平跳变时序信号,而不是一个电平信号。

停止信号:当SCL为高电平期间,SDA发生由低到高的跳变,停止信号也是一种电平跳变时序信号。

IIC通讯协议的学习与理解

因为IIC的起始和停止信号都是在SCL为高电平时SDA进行变化而实现的,所以IIC在传输数据即SDA的电平变化只能在SCL为低电平时才能进行,否则会被误判为起始或停止信号。

二、协议时序图

写时序:

IIC通讯协议的学习与理解

1.起始信号:SCL置高,SDA产生一个下降沿。进入数据传输状态。

2.数据传输:将SCL置低,从最高位开始传输字节的每一位,然后拉高SCL,完成该位数据的传输,一旦SCL处于高电平,SDA上面的数据必须保持稳定,如果有跳变就会成为起始信号或者停止信号发生错误。

3.一个字节数据传输完毕时,主机释放总线,读取SDA线上的信息来获得应答信号。成功读取到SDA线上被拉低,则说明数据传输成功,否则表示无应答,即失败。

4.停止信号:SCL置高,SDA产生一个上升沿,结束此次传输

IIC通讯协议的学习与理解

通讯过程:主机发起开始信号 --> 主机发送一个命令字节(一般由7位器件地址和1位读写位R/W组成,=0是为写) --> 从机

                 收到命令字节后回馈应答信号ACK(ACK = 0) --> 主机收到应答信号后开始发送第一个字节数据 --> 从机收到数据后

                 返回一个应答信号ACK --> 主机收到应答信号后发送下一个数据 --> 当主机发送最后一个字节数据并且接受到从机的ACK应答信号后,通过向从机发送一个停止信号结束本次通信并释放总线,从机收到停止信号后也退出与主机之间的通信。


读时序:

IIC通讯协议的学习与理解

主机发送启动信号 --> 主机发送第一个命令字节(R/W=1) --> 从机接收到地址字节后,返回一个应答信号并向主机发送数据 --> 主机收到数据后向从机反馈一个应答信号 --> 从机收到应答信号后发送下一个数据 --> 主机完成所有数据接收发送一个非应答信号(ACK = 1) --> 从机接收到ACK = 1的非应答信号后停止发送数据 --> 主机发送非应答信号后,再发送一个停止信号,释放总线结束通信。


IIC通讯协议的学习与理解