iic通信协议
一.iic通信原理
IIC通信协议采用2条信号线,1条时钟线(SCL)和1条数据线(SDA),属于串行半双工通信。标准模式的传输速率为100Kb/s,快速模式为400Kb/s。总线上可以接多个从设备,从设备的地址必须不同。也可也接多个主设备,但同一时刻只能有一个主设备控制总线。最大设备数量受总线的最大负载电容400pf限制。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
IIC总线上有两种状态,一种是MOS管导通总线被拉低,另外一种是MOS关断总线被上拉电阻拉高,如下图所示
IIC的一些特点:
-
IIC是半双工,而不是全双工
-
IIC是真正的多主机总线
,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏 -
起始和终止信号都是由主机发出的
,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号 -
在
起始信号后
必须发送一个
7位从机地址+1位方向位
,用“0”表示主机发送数据**,**“1”表示主机接收数据。 -
每当主机向从机发送完一个字节的数据,
主机总是需要等待从机给出一个应答信号
,以确认从机是否成功接收到了数据 -
起始信号是必需的
,结束信号和应答信号,都可以不要
注
:实际使用中,
一般是单片机作为主机,其它器件作为从机
,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。
-
起始:时钟线SCL为高时,数据线SDA由高到低
-
停止:时钟线SCL为高时,数据线SDA由低到高
-
开始标志(S)发出后,主设备会传送一个7 位的地址,并且后面跟着一个第8位,称为Read/Write 位。
-
R/W 位表示主设备是在接受从设备的数据还是在向其写数据。
-
然后,主设备释放SDA 线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一个应答位。
-
应答产生时,从设备将SDA 线拉低并且在SCL 为高电平时保持低。
-
数据传输以停止标志(P)结束,然后释放总线。但主设备也可以产生重复的开始信号去操作另一台从设备,而不发出结束标志。
-
所有的SDA 信号变化都要在SCL 时钟为低电平时进行,除了开始和结束标志
下面这张图是通过示波器抓取的IIC波形,可以看到:
- 时钟线SCL是一种间歇性的方波(需要通信时才产生方波)
- 数据线SDA根据SCL提供的节拍,高电平代表数据1,低电平代表数据0
- 没有数据传输时,SDA和SCL均为高电平状态
- 起始信号后,数据是9个一组,包括8位的数据和另一方的1位回应
图中
红色数字表示单片机发送的8位数据,黄色数字表示IIC器件回应的信号
,低电平0表示器件收到了单片机发来的数据。
总的来说,iic通信协议是一种串行半双工的通信协议,它有两根总线,一根数据线,一根时钟线。
iic通信
-
先由主机发送一个起始信号启用总线(时钟线为
高电平
,数据线
由高到低
)。 -
然后主机发送一个地址(
7位
),指明要通信的从机,然后发送一个方向位(
1位
),用“0”表示主机发送数据**,**“1”表示主机接收数据。从机发送应答信号(
1位
)。(
时钟线为低电平时是主机向总线上写数据,时钟线为高时是从机从总线上读数据,通常情况下iic一次发送
9
位,起始状态下是
7
位地址+
1
位方向+应答,发送数据状态下是
8
位数据+
1
位应答,有时从机不应答,就意味着通信结束
)。 -
通信结束,发送停止信号,释放总线(时钟线为
高电平
,数据线
由低到高
)。