IIC协议
IIC通信只有两条线就可以实现,一条是时钟线SCL,另一条是数据线SDA。是一种半双工通信协议。
关于IIC协议主要记住以下几点:
1、数据线SDA只有在时钟线SCL为低电平的时候才能改变电平状态。起始信号、应答信号、结束信号除外。
2、在传输数据时,每个时钟线SCL的高电平时刻采集数据线SDA电平状态,每个时钟线SCL的低电平时刻数据线SDA电平状态发生改变。
3、每一次通信都需要接收器回复一个应答信号给发送器。
4、发送、接收双方都能控制时钟线和数据线。
这里注意一个问题,收发双方都能驱动数据线,那么在同一时刻,一方驱动数据线为高电平,另一方驱动数据线为低电平,这样电路就会烧掉。关于这个问题,在另一篇文章:硬件知识2–协议类(基于百问网硬件操作大全视频教程)_山、的博客-CSDN博客中有介绍,这里不再详细说明,只简单说一下。
在硬件电路上,采用三极管来驱动时钟线和数据线,如上图所示。这样,如果双方只要有一方驱动三极管,那个数据线就会被拉低,不用担心电路被烧毁。
下面主要介绍下IIC的时序。
分析一下上面的时序:
起始信号:SCL = 1,SDA产生一个下降沿。
结束信号:SCL = 1,SDA产生一个上升沿。
ACK应答信号:应答信号由从机发出,一个时钟内,SDA始终为低电平,则认为是应答信号,主机接收到了从机的应答,才会正常继续通信。
主机每次发送8个bit,然后等待从机的应答信号。在第一个发送的时候,发送的不是数据,而是7位的从机地址加一位的工作模式,R/W = 0:写数据;R/W = 1:读数据。从第二次开始,传输的八位数据就都是真正的数据了,当然每次发送一个字节都要等待从机的应答。
读操作的时序跟上面的差不多,只不过是从机发送数据,主机回应,流程是:主机产生开始信号–>主机发送7bit设备地址+1bitR/W–>从机回应–>从机发送8bit数据–>主机回应–> …从机发送8bit数据–>主机回应–>主机发送结束信号。
写操作流程
读操作流程:
上图中,灰色背景表示数据方向为"主→从",白色背景表示"从→主"
根据上面信息可以总结下IIC总线的通信过程:
1、主机发送起始信号启用总线。
2、主机发送一个字节的数据指明从机地址和后续数据的传输方向(7bit的地址,1bit的方向命令)。
3、被寻址的从机发送应答信号回应主机。
4、发送器发送一个字节的数据。
5、接收器发送应答信号回应发送器、
6、…(循环第4、5步骤)
7、通信完成后,主机发送停止信号释放总线。
注意:上面的发送器和接收器既可以是主机又可以是从机,主要看谁发送数据,谁接收数据。