Linux学习笔记协议篇(一):IIC通信原理
仲裁可以持续多位,它的第一个阶段是比较地址位,如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位(如果是主机-发送器),或者比较响应位(如果是主机-接收器)主机只能在总线空闲的时侯启动传输,两个或多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。因为I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息,丢失仲裁的主机可以产生时钟脉冲
一、I2C通信过程
1、数据的有效性
SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变

2、起始和停止条件
SCL线是高电平时,SDA线从高电平向低电平切换 这个情况表示起始条件;当SCL是高电平时 SDA线由低电平向高电平切换表示停止条件

3、字节格式
发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟 一个响应位。首先传输的是数据的最高位MSB。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。
4、整体传输过程
在I²C总线通信中,数据传输以8位(1字节)为单位,按照高位优先(MSB First)的顺序依次传输。每发送完一个字节后,接收器必须返回1位应答信号(ACK),因此完整的一帧数据共包含9位(8位数据 + 1位应答)

(1)主机发送起始信号(电平1变0)以启动总线通信。
(2)主机发送一个字节的地址信息(7位从机地址+1位R/W),用于指定目标从机及后续数据传输方向。
(3) 被寻址的从机返回1bit应答信号。
(4) 根据地址字节中的方向位,确定的数据发送方(发送器)传输一个字节数据。
(5)数据接收方(接收器)返回应答信号确认接收。
(6)重复步骤4和5实现连续数据传输。
(7)通信结束时,主机发送停止信号(0变1)释放总线控制权。
注:除起始信号、地址字节和停止信号由主机发起外,其余数据传输和应答的双方角色由地址字节的最后一位(R/W位)动态决定。
二、时钟的同步与仲裁
1 时钟同步
所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文,数据只在时钟的高电平周期有。 因此,需要一个确定的时钟进行逐位仲裁

- SCL 线采用“线与”逻辑(开漏输出 + 上拉电阻)。
- 所有主机在SCL上都写1时,SCL的数据才是1,只要有一个主机写0,那此时SCL上的数据就是0
- 最终 SCL 频率由最慢的主机决定
2 总线仲裁
主机只能在总线空闲的时侯启动传输,两个或多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。

- 采用"线与"逻辑(开漏输出 + 上拉电阻)
- 所有主机在SDA上都写1时,SDA的数据才是1,只要有一个主机写0,那此时SDA上的数据就是0
- 所有主机每发送一个bit数据,在SCL为高电平时,均检查SDA的电平是否和发送的数据一致,不一致便输掉仲裁
- 其他主机检测到输掉仲裁退出,不再产生时钟SCL脉冲,停止向SDA写数据
仲裁可以持续多位,它的第一个阶段是比较地址位,如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位(如果是主机-发送器),或者比较响应位(如果是主机-接收器)
因为I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息,丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾
更多推荐



所有评论(0)