串行通信协议:I2C介绍

介绍

I2C(Inter-Integrated Circuit,集成电路总线)是一种由飞利浦(Philips)公司开发的 短距离串行通信协议,主要用于设备内部 多个集成电路 之间的低速数据传输。它以 线数少、协议简单、支持多设备互联 为核心优势,广泛应用于消费电子、嵌入式系统和传感器网络中。

特点

  1. 极简布线:仅需两根线即可实现多设备通信

    • SCL(Serial Clock):时钟线,由主设备控制,用于同步数据传输节奏
    • SDA(Serial Data):数据线,双向传输数据(主设备发送/接收,从设备响应)
  2. 多设备支持:支持“一主多从”或“多主多从”架构

    • 每个从设备有唯一的7位或10位地址(标准模式支持127个设备)
    • 主设备通过地址选择通信对象,无需额外片选线
  3. 半双工通信:同一时间只能单向传输数据(主发从收或从发主收)

  4. 速率灵活:支持多种传输速率

    • 标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps)等
    • 速率越低,抗干扰能力越强,适合长距离(通常不超过几米)

典型应用场景

  1. 消费电子:智能手机、智能手表中的传感器组网(如加速度计、陀螺仪、环境光传感器)
  2. 嵌入式系统:单片机与外设通信(如OLED屏幕、EEPROM存储芯片、实时时钟模块RTC)
  3. 工业控制:小型传感器节点(温湿度、压力传感器)与主控单元的低速率数据交互
  4. 汽车电子:车内低速率设备通信(如座椅调节、灯光控制模块)

通信例子

如图所示,老师(MCU)将球(数据)传给众多学生中的一个(众多外设设备中的一个)。

首先老师将球踢给某学生,即主机发送数据给从机,步骤如下:

① 老师:开始了(start);
② 老师:A!我要发球给你!(地址/方向);
③ 学生A:到!(回应);
④ 老师把球发出去(传输);
⑤ A收到球之后,应该告诉老师一声(回应);
⑥ 老师:结束(停止);

接着老师让学生把球传给自己,即从机发送数据给主机,步骤如下:

① 老师:开始了(start);
② 老师:B!把球发给我!(地址/方向);
③ 学生B:到!
④ B把球发给老师(传输);
⑤ 老师收到球之后,给B说一声,表示收到球了(回应);
⑥ 老师:结束(停止)。

从上面的例子可知,都是老师(主机)主导传球,按照规范的流程(通信协议),以保证传球的准确性,
收发球的流程总结如下:

① 老师说开始了,表示开始信号(start);
② 老师提醒某个学生要发球,表示发送地址和方向(address/read/write);
③ 该学生回应老师(ack);
④ 老师发球/接球,表示数据的传输;
⑤ 收到球要回应:回应信号(ACK);
⑥ 老师说结束,表示IIC传输结束。

电路

① I2C 是一个支持设备的总线。总线指多个设备共用的信号线。在一个I2C 通讯总线中,可连接多个I2C 通讯设备,支持多个通讯主机及多个通讯从机。

② 一个I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

③ 每个连接到总线的设备都有一个独立地址,主机可以利用这个地址进行不同设备之间的访问。

④ 总线通过上拉电阻接到电源。当I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

⑤ 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

⑥ 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多I2C 设备尚不支持高速模式。

⑦ 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

特点

  1. 线与逻辑:SDA和SCL线通过上拉电阻(通常4.7kΩ)接电源,设备通过开漏输出(Open Drain)控制线路电平

    • 任何设备都可将线拉低,但不能主动拉高(需依赖上拉电阻)
    • 多个设备同时发送时,不会出现电平冲突(“线与”特性)
  2. 抗干扰设计:通过差分信号和上拉电阻,提升短距离传输的稳定性

    • 传输距离通常限制在1米以内(高速模式下更短),超过需额外驱动电路

通信原理

I2C通过“主设备主导通信时序+数据帧结构”实现同步,核心过程包括:

数据传输的基本单元:位与字节

  • 数据以 字节(8位) 为单位传输,高位在前(MSB first)
  • 每传输1位数据,SCL线产生一个时钟脉冲(高电平期间数据有效)
  • 数据线上的信号(高/低电平)在SCL为低电平时可修改,高电平时需保持稳定

关键控制信号

  • 起始信号(S):主设备将SDA从高电平拉低(同时SCL为高),表示通信开始
  • 停止信号(P):主设备将SDA从低电平拉高(同时SCL为高),表示通信结束
  • 应答信号(ACK):接收方在第9个时钟周期将SDA拉低,表示“已收到字节”;若保持高电平,则为“非应答(NACK)”,通常表示通信终止

典型通信流程(主设备写数据到从设备)

[起始信号(S)] → [从设备地址+写命令(8位)] → [从设备应答(ACK)] → [数据字节1(8位)] → [从设备应答(ACK)] → ... → [停止信号(P)]
  • 主设备先发送从设备地址(7位)+ 读写位(1位,0表示写,1表示读)
  • 从设备地址匹配后返回ACK,主设备开始发送数据
  • 每发送1字节,从设备需返回ACK确认,直到主设备发送停止信号

与其他串行协议的对比

协议 线数 速率 设备数量 典型应用
I2C 2(SCL/SDA) 100kbps-3.4Mbps 最多127个 传感器、小型外设
SPI 4(CLK/MOSI/MISO/CS) 几Mbps-50Mbps 主从结构,需片选 高速外设(屏幕、Flash)
UART 2(TX/RX) 通常 <1Mbps 点对点 调试、模块通信

I2C的核心优势是“少线多设备”,适合低速率、多节点的近距离场景,但速率和抗干扰能力不及SPI,灵活性不及UART。

总结

I2C是一种“简单、经济、灵活”的串行通信协议,通过两根线实现多设备互联,特别适合设备内部空间有限、传输速率要求不高的场景。其协议设计注重硬件简化和多设备兼容性,使其成为嵌入式系统中连接传感器、外设的主流选择。理解I2C的时序和信号规则,是调试多设备通信故障的基础(如地址冲突、应答失败等问题)。

详细解释:
https://zhuanlan.zhihu.com/p/678229227
https://blog.csdn.net/Neutionwei/article/details/118653379


原文出处:/show_1GW1zIHsGmFI.html