3. I2C 总线协议进阶:多主机仲裁、时钟同步、10 位地址模式、高速模式

在掌握了 I2C 基本的数据传输流程后,本章深入探讨 I2C 总线的高级特性。这些特性是 I2C 从简单传感器通信迈向复杂多主系统、大容量存储及高速外设的关键。理解多主机仲裁、时钟同步、10 位地址模式与高速模式,对于设计健壮、高性能的嵌入式系统至关重要。

3.1 多主机仲裁与时钟同步

I2C 总线支持多个主机同时尝试控制总线。为了避免数据冲突,总线内置了分布式仲裁与时钟同步机制。

3.1.1 多主机仲裁机制

仲裁发生在 SDA 线上,基于“线与”特性:当多个主机同时输出数据时,任何一个主机输出低电平,SDA 线就会被拉低。仲裁规则为:输出低电平的主机赢得仲裁,输出高电平但检测到 SDA 为低的主机则失去仲裁,并立即释放总线。

  • 仲裁过程: 发生在数据位(包括地址位和数据位)的传输过程中。每个主机在输出数据位后,都会读取 SDA 线的实际电平。如果读取的电平与自己输出的不同,则判定为仲裁失败。
  • 仲裁失败处理: 失败的主机必须立即将其 SDA 输出切换为高阻态(释放 SDA),并停止产生 SCL 时钟,直到总线再次空闲(检测到 STOP 条件)。
  • 无数据丢失: 由于仲裁过程不破坏数据,赢得仲裁的主机可以继续完成其未完成的传输,而不会丢失任何数据帧。
关键点: 仲裁只在 SDA 线上进行,SCL 线由所有主机共同参与时钟同步。地址头部的 R/W 位也参与仲裁,这意味着多个主机可以同时尝试读取同一个从机,但最终只有一个主机能成功。

3.1.2 时钟同步机制

时钟同步通过 SCL 线的“线与”特性实现。所有主机都会产生自己的 SCL 时钟,但 SCL 线的实际低电平时间由所有主机中低电平周期最长的主机决定,高电平时间由高电平周期最短的主机决定。

  1. 低电平同步: 当某个主机开始拉低 SCL 时,其他主机检测到 SCL 为低,也会立即开始计数自己的低电平周期。SCL 线保持低电平,直到所有主机都结束其低电平周期。
  2. 高电平同步: 当所有主机都释放 SCL 后,SCL 线被上拉电阻拉高。此时,每个主机开始计数自己的高电平周期。第一个结束高电平周期的主机会再次拉低 SCL,从而开始下一个时钟周期。

这种机制确保了所有主机在同一个同步时钟下工作,避免了时钟竞争,为仲裁提供了稳定的时序基础。

时钟同步与仲裁的关系: 时钟同步为仲裁提供了稳定的时序环境。在同步的 SCL 下,所有主机在 SDA 线上进行位级别的仲裁,保证了多主机系统的有序运行。
多主机仲裁与时钟同步流程 主机 1 主机 2 主机 3 SDA 线与仲裁 + SCL 时钟同步 规则:低电平优先(SDA),低电平周期最长(SCL) 赢得仲裁的主机继续传输 失败主机释放总线,等待下次空闲

3.2 10 位地址模式

标准 I2C 使用 7 位地址,最多支持 112 个从机(保留 16 个地址)。为了满足更复杂系统的需求,I2C 规范引入了 10 位地址模式,将地址空间扩展到 1024 个。

3.2.1 地址格式与传输序列

10 位地址的传输分为两个阶段,使用保留的 1111 0XX 作为首字节头部。

阶段 SDA 数据内容 说明
第 1 字节 1111 0 A9 A8 R/W 前 5 位固定为 11110,后跟地址最高 2 位 (A9, A8) 和读写位
第 2 字节 A7 A6 A5 A4 A3 A2 A1 A0 地址的低 8 位
从机应答 ACK / NACK 从机在每字节后应答,第 2 字节应答后开始数据传输

3.2.2 传输序列示例(写操作)

主机发送: S 11110 A9 A8 W  ACK  A7-A0  ACK  Data  ACK  P
          |-- 第1字节 --|      |-- 第2字节 --|     |-- 数据 --|
  • S: START 条件。
  • 11110: 10 位地址标识符。
  • A9, A8: 10 位地址的最高两位。
  • W: 写位 (0)。
  • ACK: 从机应答(可能来自多个匹配地址的从机,但最终只有一个会继续)。
  • A7-A0: 地址的低 8 位。
  • Data: 数据字节。
  • P: STOP 条件。
兼容性注意: 10 位地址模式与 7 位地址模式在总线上可以共存。主机通过首字节的 11110 前缀来区分。7 位地址的从机不会响应 11110 开头的地址,因此两种设备可以安全地挂载在同一条 I2C 总线上。
10 位地址模式写操作传输序列 S 11110 A9 A8 W ACK A7 A6 ... A0 ACK Data Byte ACK P 起始 地址头 + 高2位 + R/W 地址低8位 数据 停止

3.3 高速模式 (Hs-mode)

标准模式 (100 kHz) 和快速模式 (400 kHz) 对于现代高带宽外设(如高分辨率图像传感器、高速 ADC)已显不足。I2C 高速模式 (Hs-mode) 将传输速率提升至 3.4 MHz,同时保持与现有设备的兼容性。

3.3.1 高速模式的关键特性

特性 标准/快速模式 高速模式 (Hs-mode)
最大速率 100 kHz / 400 kHz 3.4 MHz
主从机电流源 开漏输出 + 上拉电阻 开漏输出 + 上拉电阻 + 从机电流源
传输启动 直接 START 条件 主码 (0000 1XXX) + NACK + 重复 START
SCL 上升沿 由上拉电阻决定 由从机电流源加速,上升时间极短
兼容性 所有设备 需 Hs-mode 从机支持,可与标准设备共存

3.3.2 高速模式传输协议

高速模式传输分为两个阶段:

  1. 主码阶段: 主机以快速模式 (400 kHz) 发送一个 8 位主码 (0000 1XXX),后跟 NACK。这用于唤醒总线上所有支持 Hs-mode 的从机,并通知它们即将进入高速传输。
  2. 高速传输阶段: 主机发送重复 START 条件,然后以 3.4 MHz 的高速进行地址和数据传输。在此阶段,从机必须提供电流源来加速 SCL 的上升沿。
主机发送: S 0001 1XXX NACK  Sr 7位/10位地址  R/W  Data  ...  P
          |-- 主码阶段 (F/S模式) --|  |-- 高速传输阶段 (Hs模式) --|
电流源的作用: 在高速模式下,传统的上拉电阻无法在 3.4 MHz 下快速将 SCL 拉高。因此,每个支持 Hs-mode 的从机内部都集成了一个可编程电流源,在 SCL 上升沿时主动注入电流,从而将上升时间从微秒级缩短至纳秒级。
高速模式 (Hs-mode) 传输协议 S 0001 1XXX NACK Sr 地址 + R/W ACK Data ACK P 主码阶段 (F/S 模式, 400 kHz) 高速传输阶段 (Hs 模式, 3.4 MHz) 主码用于唤醒 Hs-mode 从机,NACK 表示主码阶段结束 重复 START (Sr) 后,总线进入高速模式,从机提供电流源加速 SCL 上升沿

3.4 本章小结

本章深入剖析了 I2C 总线的高级特性:

  • 多主机仲裁与时钟同步 保证了多个主机可以安全共享总线,通过 SDA 线与仲裁和 SCL 线与同步机制,实现了无冲突的分布式总线控制。
  • 10 位地址模式 将地址空间从 112 个扩展到 1024 个,通过两字节地址传输序列,解决了大型系统中地址不足的问题,并保持了与 7 位地址设备的向后兼容。
  • 高速模式 (Hs-mode) 通过主码唤醒和从机电流源技术,将传输速率提升至 3.4 MHz,满足了高带宽外设的需求,同时通过主码阶段保持了与标准/快速模式设备的共存。