IIC(Inter-Integrated Circuit)是一种串行通信协议,由飞利浦公司于1980年代提出。它允许多个从设备通过两条线(SDA和SCL)与一个或多个主设备进行通信。IIC协议是多主、多从的,适合在短距离内的设备间通信。
IIC通信的基本步骤
-
初始化IIC接口:
- 设置IIC时钟频率。
- 配置SDA(数据线)和SCL(时钟线)引脚的方向。
-
发送数据:
- 开始信号:拉低SDA线,同时拉低SCL线以开始数据传输。
- 发送设备地址:发送目标设备的地址(一般是7位或10位),并加上读写位。
- 发送数据:发送数据字节,并等待从设备的确认(ACK)。
- 停止信号:发送完数据后,释放SDA线并拉高SCL线,生成停止信号。
-
接收数据:
- 开始信号:与发送数据时相同,拉低SDA线和SCL线。
- 发送设备地址:发送目标设备的地址,设置为读模式。
- 接收数据:在时钟信号的控制下接收数据,并发送ACK信号以继续接收(或NACK信号以结束接收)。
- 停止信号:接收完毕后,发送停止信号。
如下图:
对于起始信号,其实就是当SCL线为高电平时,SDA线上面的下降沿触发,停止信号就是SDA线上面的上升沿触发,这时起始信号和停止信号,对于数据字节的读取,当SCL为高电平状态的时候,从设备进入工作状态,如果在当前SCL为高电平状态时,SDA为低电平,那么从设备认为数据为0,如过SDA为高电平,那么从设备认为数据为1。如果当前确认了从设备地址后,开始数据传输,主设备发送数据的格式为,起始信号,数据字节一般为8位,然后是应答信号,应答信号,应答信号就是从机接收到数据字节之后,会将SDA的电平拉低,从而告诉主设备数据有效,如果没有拉低,则数据无效,最后停止发送的时候,主设备会将SDA在SCL为高电平期间将由低电平拉高到高电平,产生上升沿。
下面是总的发送:
首先,第一段数据是主设备会发送起始信号,后面是从机地址7位,第八位是读写位,后面是应答信号从机发送,然后是第二段数据,没有起始信号,内容是从机设备的寄存器地址,应答信号等等
图片取自b站博主洋桃电子,大家可以去看其视频,讲解得非常清晰