一、IIC 协议简介
IIC 协议是属于同步串行半双工的有线通信协议,支持一主多从(就是一个主机接多个从机设备),IIC 一共两根线,一根 SCL 叫时钟线,就是只产生时钟信号的如上图 SCL,还有一根是 SDA 数据线,就是传输 IIC 数据的。
二、IIC 协议应用
IIC 总线由于结构简单、引脚占用少、支持多从设备,广泛应用于嵌入式系统中主控芯片与低速外设之间的通信。典型应用场景包括连接各类传感器(如温湿度、气压、加速度传感器)、非易失性存储器(如 EEPROM)、实时时钟(RTC)、IO 扩展器、OLED/LCD 显示屏、电源管理芯片(PMIC)、电池管理芯片、触摸屏控制器以及音频/视频控制设备等。在这些场合中,IIC 通常用于配置设备或周期性读取状态数据,尤其适用于短距离、低速、低功耗的板内通信,是资源受限系统中连接外设的理想选择。
三、IIC 协议特点
IIC 是一种常用的串行通信协议,具有结构简单、只需两根通信线(SCL 和 SDA)的显著特点。它采用主从式架构,支持多主多从设备,通过地址区分各个从设备,通信过程由主机控制。IIC 是同步、半双工的通信方式,使用开放漏极输出结构,需外接上拉电阻,便于多个设备挂载和总线仲裁。
IIC 的优点在于其节省引脚资源,硬件实现简单,能够轻松实现多个从设备的连接,具有一定程度的通信可靠性,并适用于功耗敏感的场景。标准应用中常见于 EEPROM、RTC、传感器等设备的连接,尤其适合短距离、低速率通信。
IIC 也存在一些缺点。由于协议中存在地址帧和应答机制,其传输效率低于 SPI,且最大通信速率相对较低(标准模式 100kbps,快速模式 400kbps)。此外,通信距离有限,通常不超过 1 米,多个设备连接时对总线容量要求较高。时序控制相对复杂,特别是在多主或热插拔的系统中更难调试。因此,IIC 更适用于板内低速外设通信,不适合高速或远距离的数据传输场合。
四、IIC 协议帧格式
(一) 起始信号(START)
SCL为高时,SDA从高到低的跳变产生开始信号
(二) 停止信号(STOP)
SCL为高时,SDA从低到高的跳变产生结束信号
(三) 读写信号(Read/Write)
0:主机写入数据
1:主机读取数据
(四) 应答信号(ACK/NACK)
SDA 总线上为高电平 0 表示 ACK (Acknowledge)
SDA 总线上为低电平 1 表示 NACK(Not Acknowledge)
主机发送数据,从机接收时,ACK 信号由从机发出。
从机发送数据,主机读取数据时,ACK信号由主机给出。主机响应 ACK 表示还需要再接收数据,而当主机接收完想要的数据后,通过发送 NACK 告诉从机读取数据结束、释放总线。随后主机发送停止信号,将总线释放,结束读操作。
(五) 主机读取数据流程
- 主机发起 START
- 主机发送 7bit 从机设备地址位 + 1bit 写模式位,等待从机 ACK
- 从机发送 ACK
- 主机发送 8bit 寄存器地址,等待从机 ACK
- 从机发送 ACK
- 主机发起 START
- 主机发送 7bit 从机设备地址位 + 1bit 读模式位,等待从机发送数据
- 从机发送 8bit 数据,即寄存器里的值,等待主机 ACK
- 主机发送 ACK 表示继续接收,主机发送 NACK 表示停止接收
- 主机发起 STOP(主机发送 NACK 后)
(六) 主机写入数据流程
- 主机发起 START
- 主机发送 7bit 从机设备地址位 + 1bit 写模式位,等待从机 ACK
- 从机发送 ACK
- 主机发送 8bit 寄存器地址,等待从机 ACK
- 从机发送 ACK
- 主机发送 8bit 数据,即要写入寄存器中的数据,等待从机 ACK
- 从机发送 ACK
- 主机发起 STOP