文章目录
- 一,简单介绍
- 二,IIC物理层
- 三,IIC通信时序
- 1.起始位与停止位
- 2.IIC读写地址位信号
- 3.IIC应答信号
- 4.IIC数据位收发信号
- 四,总线速率
- 五,主机发送数据流程
- 六,主机接收数据流程
- 七,IIC的时钟延展(clock strectching)
一,简单介绍
IIC Bus是飞利浦公司推出的,在电子控制领域的通信协议典型的电压准位是3.3v和5v。**IIC 是串行,同步的半双工协议。**IIC的电路简单,连接线少,控制简单,通信速率高。
二,IIC物理层
- IIC总线是一种主从结构(master/slave)的总线协议,一条总线上的每一个设备都可以作为主设备或从设备使用,但是一般一条总线上只有一个主设备,主设备通常是CPU,从设备通常是各种传感器,一般来讲,从设备只能被动的接收主设备的通信请求,也就是说,通信的开始往往是主设备主机发起的。
- IIC具有SCL时钟线和SDA数据线两条线来传输数据。
- IIC寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
- 具有三种传输模式,标准模式传输速率100kbit/s,快速模式400kbit/s,高速模式3.4Mbit/s,但是大部分的IIC设备目前不支持高速模式。
- 连接到相同总线的IIC设备的数量收到总线最大电容400pF的限制。
IIC寻址:
# 7bit寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
# 10bit寻址:10bit寻址是和7bit寻址相兼容的这样就可以在一条线上兼容使用了,10bit地址传输时,总共占两个字节,前5bit用来选择寻址模式,剩下三位中,两位是地址高位ADDRESS9,和ADDRESS8,最后一位依旧是读写位置,剩下的第二个字节就是剩下的地址,即ADDRESS7~ADDRESS0。
三,IIC通信时序
1.起始位与停止位
首先,一般情况下,IIC的SDA和SCL线是被上拉电阻拉高的,也就是说,默认情况下的SDA线和SCL线是高电平的。
- 起始位s位:SCL时钟线保持高电平,SDA出现一个下降沿。
- 停止位p位:SCL时钟线保持高电平,SDA出现一个上升沿。
2.IIC读写地址位信号
在发出start起始位信号后,第二个时序应该立刻给出从机的目标物理地址(7bit或10bit地址),而站在主设备的角度来讲有读/写从设备两个功能。
- 8bit时,高7位表示从机的地址,最低的一位表示读写方向。
- 0为写操作,1为读操作。
3.IIC应答信号
应答信号分为两种,一种是希望继续进行通信的ACK信号,一种是NACK的结束信号。主机在发送start信号和地址,读写信号后,主机将释放对SDA的限制权,SDA电平被上拉电阻拉高,由接收方(从机)控制。
- ACK应答信号:希望继续通信,SCL低电平时,从机将把SDA改为低电平。
- NACK应答信号:不希望继续通信,SCL低电平时,从机将把SDA保持高电平。
4.IIC数据位收发信号
IIC的数据收发时,每个字节必须是8个字节。同时是采用MSB字节序收发的。**高电平是1,低电平是0。**SCL高电平期间,SDA必须保持稳定,高低电平的跳变,必须在SCL低电平期间进行跳变,(因为SCL高电平期间,SDA的变化代表的是信号的起始位和终止位)。数据收发时,每个字节收发结束后必须跟一个ACKX信号或者NACK信号。
所以读取数据位时,应该在SCL为高电平时进行读取,因为这时候SDA线上的电平是保持稳定的。
四,总线速率
I2C 总线是一种同步、半双工、采用电平信号收发的串行总线,其速率支持:
- 标准模式(Standard-mode):速率高达 100kbit/s。
- 快速模式(Fast-mode):速率高达 400kbit/s。
- 快速模式+(Fast-mode Plus):速率高达 1Mbit/s。
- 高速模式(High-speed mode):速率高达 3.4Mbit/s
- 超快速模式(Ultra Fast-mode):速率高达 5Mbit/s (单向传输时支持)
五,主机发送数据流程
- 主机检测到总线是空闲的,发送s信号(即起始位)。开始通信。(r/w=0)
- 紧接着主机发送目标从机的地址以及读写位。
- 对应的从机返回ACK信号。(SDA低电平0)
- 主机发送8bit一字节的数据。
- 从机接收数据后返还ACK应答信号。
- 主机收到ACK数据后继续发送下一个数据字节。
- 主机发送完最后一个字节并收到ACK信号后,发送P停止位信号,结束本次通信并且释放总线。
- 从机收到P信号后退出通信。
六,主机接收数据流程
- 主机发送s信号(即起始位)。开始通信。(r/w=1)
- 紧接着发送要从哪一个从机接收地址,和读写位。
- 从机返回应答信号后向主机发送数据。
- 主机收到数据后向从机发送ACK信号。
- 从机接收到应答信号后继续发送数据。反复循环。
- 当主机发现接收数据后,向从机发送NACK信号,从机收到非应答信号后停止发送。
- 主机发送非应答信号后,发送P停止信号,主机和从机停止通信。
七,IIC的时钟延展(clock strectching)
首先,什么是时钟延展呢?一般情况下来说,IIC的时钟是由主机cpu提供的,但是有的时候从设备的速率跟不上主设备的速率。例如,一个从机温湿度传感器的速率比较慢,没采集到温度的时候怎么办呢?总不能发空数据回去给主机吧,这个时候支持时钟延展的设备会“等待”,即从机主动拉低时钟信号,等采样结束后,从机再给主机一个ACK信号告诉主机可以继续通信。