IIC总线基础知识
一、简介
IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。它仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。
二、原理
1、开漏输出&上拉电阻
-
IIC协议支持多个主设备与多个从设备在一条总线上, 如果不用开漏输出, 而用推挽输出, 会出现主设备之间短路的情况。
-
开漏输出还能实现线与,用于切换不同主设备。
-
需要上拉电阻是因为开漏输出只有低电平与高阻态两种状态,而IIC需要有输出高电平的能力。
下图为开漏输出电源短路示意图
2、空闲状态
空闲状态: IIC总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。在空闲状态期间,输出场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
3、起始信号&停止信号
起始信号: 当 SCL 线是高电平时 SDA 线从高电平向低电平切换,表示通信的开始。
停止信号: 当 SCL线 是高电平时 SDA 线由低电平向高电平切换,表示通信的停止。
下图为起始信号(S)和停止信号(P)的示意。
4、应答信号&非应答信号
应答信号(ACK): 主机发送8bit数据后,会再产生一个时钟。此时主机释放SDA,上拉电阻使SDA电平为高,从机拉低SDA信号。
非应答信号(NACK): 主机发送8bit数据后,会再产生一个时钟。此时主机释放SDA,上拉电阻使SDA电平为高,从机不拉低SDA信号。
发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答(ACK简称应答位),表示接收器已经成功地接受了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
如果接收器是主控器,则在主控器收到最后一个字节后,发送一个NACK信号,通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。
下图为应答信号(ACK)和非应答信号(NACK)的示意。
5、时钟同步&仲裁
在单主设备中,不需要时钟同步和仲裁。而在多设备时,多个主设备可以同时在空闲的总线上开始发送数据,这时就需要仲裁决定哪一个来控制总线并完成它的数据传输,有时候也需要时钟同步来协同设备间的工作。而这正是通过时钟同步和仲裁来完成的。
时钟同步: 有的时候,主机的速度快于从机的速度,或者从机需要处理其他事情而不能及时地从主机接收数据或者向主机发送数据。如果从设备希望主设备降低传输速率,可以通过将SCL主动拉低,延长SCL低电平时间的方法来通知主设备。当主设备下一次传输时发现SCL电平被拉低时,就进入等待,直到从设备完成操作并释放SCL线。这就要使用时钟同步来完成。
- 时钟同步是通过连接到SCL总线的IIC接口“线与”实现。
- SCL线上的低电平时间是由时钟低电平最长的器件决定,SCL的高电平则是由高电平时间最短的期间决定。
- 时钟同步解决了IIC总线设备间的速度同步。
下图为时钟同步的示意。
时钟同步的过程:
1、一旦主设备1的时钟拉低,就会把SCL总线拉低。当SCL总线从高拉低时,主设备将计数主设备时钟的低电位周期。
2、主设备2检测到SCL线为低,也会立刻将CLK1拉低,不会等到CLK1的正常周期才拉低。
3、如果此时另外一个主设备的时钟仍然是低电平的,此时SCL总线也同样的保持为低。在此期间,低周期比较短的主设备1将进入高电平状态等待。如图,主设备1提前进入高电平等待,主设备2继续保持低电平。
4、当所有主设备的时钟都为高电平时,将会把SCL线拉高。也就是说时钟低电平周期较长的主设备2决定了SCL线为低的周期长度。
5、所有的主设备时钟都拉高时,将对他们的高电平时钟计数,第一个结束时钟高电平周期的主设备将会把SCL线拉低。主设备2将SCL拉低后,主设备1检测到SCL线为低时,CLK1也立刻拉低。
仲裁: 在系统使用多个主设备(master)时才需要,而从设备(slave)不参与仲裁程序。当然,只有在主线空闲的情况下,主设备才可以发起传输。两个主机可以在启动条件的最小保持时间内生成一个启动条件,从而在总线上生成一个有效的传输启动条件,然后仲裁程序决定哪一个主设备可以完成它的传输。谁先在SDA线上发送低电平,谁就掌握对总线的控制权。I2C总线的控制权完全取决于竞争主设备发送的地址和数据,因此没有中央主设备,总线上也没有任何优先级顺序。
下图为总线仲裁的示意
仲裁的步骤:
1、 当两个master对同一个地址的slave进行传输时,多个master会都能进入数据周期,仲裁会单比特对单比特进行比较。
2、在SCL为高的每一个比特位期间,每个主设备检查SDA线的电平是否与它所发送的相匹配。这个过程很可能需要比对很多位。
3、如果传输的数据时完全相同的,则这个主设备可以完成地发送整个事务。
4、当主设备发送的比特位与SDA线不匹配时,例如图中DATA1在SCL线的第三个周期,此时DATA1拉高,而DATA2为低,DATA1和DATA2在线与后SDA为低,匹配不成功。当主设备1检测到一个与自身不相符的低电平,这时会关闭主设备1的SDA传输驱动,另一个主设备2会继续完成传输。
三、其它
1、总线速率
一般的,对于双向传输总线有以下几种模式
模式 | 速率 |
---|
标准模式(Standard-mode) | 高达100Kb/s |
快速模式(Fast-mode) | 高达400kb/s |
快速模式+(Fast-mode Plus) | 高达1Mb/s |
高速模式(High-speed mode) | 高达3.4Mb/s |
2、其它特性
上拉电阻选择: 如果上拉电阻Rp阻值过小,VDD灌入端口的电流较大,这会导致端口输出的低电平值增大,而且还可能损坏端口。
所以Rp最小值计算公式为:
R
p
(
m
i
n
)
=
(
V
d
d
−
V
o
l
(
m
a
x
)
)
/
I
o
l
R_p(min) = (V_{dd} - V_{ol}(max)) / I_{ol}
Rp(min)=(Vdd−Vol(max))/Iol
R
p
(
m
a
x
)
=
t
r
/
(
0.8437
∗
C
b
)
R_p(max) = t_r / (0.8437 * C_b)
Rp(max)=tr/(0.8437∗Cb)
tr:Signal rise time Cb:Capactive load of each bus line Vol:Output drive low
可挂载设备数: IIC总线上可挂载的数量受总线最大电容400pF限制,同时也受器件地址位限制。由于地址位为8位,有一位广播地址,且0X00位不用,所以IIC最多能挂载127个从设备。
电平转换电路: 下图是3.3V-5V的转换电路
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)