深入理解 I²C 协议

嵌入式系统 时间:2026-03-20来源:

互连集成电路(I²C)协议一直是短距离、板内通信的核心技术。然而,实现稳定可靠的 I²C 通信并非仅仅连接两根线那么简单。本文通过常见问题解析,深入探讨开漏物理层寄存器级寻址的技术细节,帮助读者更透彻地理解 I²C 通信原理。

I²C 与 SPI 等推挽式接口有何区别?

I²C 最核心的特征是开漏(或开集电极)架构

与 SPI、UART 采用推挽驱动、主动将信号线拉至高电平或低电平不同,I²C 设备只能主动将总线拉低,无法主动拉高

图 1 展示了该拓扑结构:多个设备(控制器与目标设备)连接到共享的串行数据线(SDA)和串行时钟线(SCL)。值得注意的是,两条总线均通过外部上拉电阻(Rp)连接至电源电压(VDD)。

1773990319574312.png

图 1. 简化 I²C 系统拓扑,展示控制器与多个目标设备连接至共享 SDA、SCL 总线(图片来源:安世半导体 Nexperia)

I²C 的高低电平逻辑如下:

多主机系统中为何必须采用开漏架构?

该架构形成了线与(Wired‑AND)逻辑

由于没有设备主动输出高电平,多个设备可同时挂接在总线上,不会出现一个设备输出高电平、另一个拉低而导致 VDD 到 GND 短路的风险。

只要任意一个设备将总线拉低,整个总线就会呈现低电平。这一物理特性支撑了 I²C 两项关键功能:

  1. 时钟同步:低速目标设备可拉低 SCL,暂停控制器传输。

  2. 总线仲裁:多控制器系统中,若两个控制器同时发送,发送 0 的一方会 “覆盖” 发送 1 的一方,实现非破坏性仲裁

有效 I²C 通信的基本规则

1773990362872009.png

图 2 展示了完整的 I²C 帧结构:8 位数据、高位先行、双向传输协议。为便于理解,可将通信分为三部分。

图 2. 完整 I²C 数据传输结构(图片来源:恩智浦半导体 NXP)

传输事务

传输帧由仅在时钟为高电平时才会出现的特定电气状态界定:

用于唤醒总线上所有设备并开始监听。

标志事务结束,总线回到空闲状态。

注意:数据传输期间,SCL 为高电平时 SDA 必须保持稳定,仅允许在 SCL 低电平时改变状态。

地址处理

起始条件后的第一个字节为地址帧,包含:

第 9 位:应答位

每传输一个字节(地址或数据)后,都会跟随第 9 个时钟脉冲,即应答位(ACK/NACK)

通常代表设备不存在、设备忙或读序列结束。

实例分析

以下是 I²C 在硬件层面写入设备内部指定寄存器的实际应用。图 3 展示对德州仪器 DAC80501 数模转换器进行多字节写入的过程。

1773990394610327.png

图 3. I²C 写帧解析,展示配置外设所需的地址、命令与数据字节序列(图片来源:德州仪器 Texas Instruments)

操作可简化为三步:

  1. 地址帧:控制器发送地址 + 写位(如 0x49 + 0)。

  2. 命令帧:控制器发送寄存器指针(如 0x08),

告知 DAC 后续数据将写入 DAC 数据寄存器。

  1. 数据帧:控制器发送 16 位电压值(高位在前,低位在后)。

这是执行器类设备的标准工作流程:地址 → 命令 → 数据

总结

掌握 I²C 不能只停留在调用库函数层面,还需要理解:

关键词: I²C 协议

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版