常见通信协议–系列
IIC
一、简介
IIC(Inter-Integrated Circuit,集成电路总线)是由由飞利浦公司开发的一种两线式串行总线通信协议,也可以写作I2C。IIC有如下基本特征:
- 两线制结构:I2C总线由两根线组成,即数据线SDA和时钟线SCL。SDA负责传输数据,而SCL用于同步数据传输。
- 地址帧与数据帧:在I2C通信中,消息被分为地址帧和数据帧。地址帧用于主设备指明消息发往哪个从设备,数据帧则包含实际传输的数据。
- 支持多设备连接:I2C允许多个设备通过总线连接,并通过设备地址来识别每个设备,从而实现设备间的信息交换。
- 软件控制:I2C的一个优势是微控制器只需要两个通用I/O引脚和相应的软件即可控制整个芯片网络。
- 速度与地址扩展:I2C最初设计时只允许100KHz的速度和7-bit标准地址,后来的规范增加了400KHz的快速模式以及10bit地址扩展,IIC的高速模式可达3.4MHZ。
- 短距离通信:I2C适用于短距离的设备间通信,如处理器与外围设备的接口。
- 半双工通信:I2C属于半双工同步通信方式,数据传输线只有一根,传输和接收要去占用SDA线。
- 多主控:任何能够进行发送和接收的设备都可以成为主控设备,当然在任何时间点上只能有一个设备总线的主控。
总的来说,I2C协议因其简洁的布线要求和高效的通信机制,在嵌入式系统和电子设备中得到广泛应用,特别是在需要微控制器与多个外围设备通信的场景中。
二、IIC总线拓扑结构
为什么SDA和SCL需要外接上拉电阻?
由于IIC总线支持多设备连接,所以需要采用开漏输出实现“线与“功能。这样一来就会导致只能输出低电位无法输出高电位,所以需要外接上拉电阻,才能实现输出高点位。
三、IIC协议的三种信号
IIC在传输过程中共有三种类型的信号:开始信号、接收信号和应答信号。
IIC设备的一般流程:闲置——开始信号——发送地址/应答——发送数据/应答——停止信号
- 开始信号:
在时钟线(SCL)为高时,数据线(SDA)由高到低进行跳变 - 停止信号:
当时钟线(SCL)为高时,数据线(SDA)由低到高进行跳变 - 应答信号:
接收数据的IC在接收完八位数据后会发送一个特定低电平脉冲的信号,告诉发送方已经完成接收。应答信号为低电平时,规定为有效应答位(ACK,简称应答位);应答信号为高电平时,规定为非应答位(NACK)
四、IIC协议时序
- 在SCL时钟信号为高电平期间,SDA上的数据必须保持稳定。
- 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
五、IIC协议的传输地址以及数据
IIC总线上传送的数据信号不仅包括真正的数据信号,并且包括地址信号。
IIC总线规定,在起始信号后面必须传送一个从设备的地址(7位),第8位是数据传送的方向位。用”0“表示主设备发送;”1“表示主设备读取。每次数据传送总是由主设备产生终止信号而结束。
六、IIC协议读写流程
主机向从机写数据:
- 主机产生开始信号
- 紧跟着发送一个从机地址(7位),第8位是数据方向位
0表示主机发送数据(写);1表示主机接收数据(读)
- 总线上的每个从机都将自己的设备地址与主机发出的从机地址进行比较。如果 相同,则认为主机正在被主机寻址,然后根据第8位确定自己位发送器或接收器。
- 主机等待从机应答信号
- 主机收到应答信号,发送要访问从机的地址,继续等待从机的应答信号。
- 主机收到应答信号,发送N个字节的数据,继续等待从机的N此应答信号
- 主机产生停止信号。
主机从从机读取数据
- 主机产生开始信号
- 紧跟着发送一个从机地址(7位),但是此时第8位应该为0
- 主机等待从机应答信号
- 主机收到应答信号,发送要访问从机的地址,继续等待从机的应答信号。
收到应答信号后,主机改变通信模式,主机重新发送一个开始信号,然后紧跟着发送一个从机地址,但是此时第8为应该设置为1,设置成接收模式开始读取数据
。- 等到从机的应答信号,当主机收到应答信号时就可以开始就收一个字节的数据。接收完成后主机发送非应答信号表示不在接收数据,当然也可以发送应该信号,继续接收下一个 地址的一个字节数据。
- 主机产生停止信号。
为什么主机读取数据时需要进行两次寻址?为什么主机第一次发送从机地址第8位为0表示写?
->如果第一次发送从机地址第8位就设置位1(读)时,从机开始应答后就会开始发送从机当前地址的数据,主机无法控制读取从机的地址,所以必须用一次写寻址来将从机定位到主机要读的地址。第一次的寻址操作其实就是控制从机发送数据的地址。