1. I2C总线基础:历史、物理层与多主从架构
1.1 发展简史
I2C(Inter-Integrated Circuit)总线由 Philips(现 NXP)于 1982 年推出,最初用于电视、音响等消费电子中连接微控制器与外设。其核心设计目标是用最少的引脚(仅需 2 根线)实现板级多设备通信。1992 年引入 400 kbit/s 快速模式,1998 年扩展至 3.4 Mbit/s 高速模式,后续又增加了超快速(5 Mbit/s)和增强型 I2C 规范。至今,I2C 仍是音频 Codec、传感器、EEPROM、电源管理芯片等嵌入式系统中最通用的片内总线之一。
1.2 物理层特性:SDA 与 SCL
I2C 总线由两根双向信号线构成:
- SDA(Serial Data Line):串行数据线,用于传输地址、数据和控制位。
- SCL(Serial Clock Line):串行时钟线,由主设备产生,同步所有数据传输。
两根线均为开漏(Open-Drain)结构,即器件只能将线拉低(输出 0),不能主动拉高(输出 1)。高电平由外部上拉电阻提供。这种结构允许多个设备共享总线而不会发生短路冲突。
1.3 上拉电阻与电平标准
上拉电阻的阻值直接影响总线速度、功耗和信号完整性。阻值过小会导致电流过大、上升沿变缓;阻值过大会使上升时间过长,无法满足高速通信时序。
| 参数 | 标准模式 (100 kHz) | 快速模式 (400 kHz) | 高速模式 (3.4 MHz) |
|---|---|---|---|
| 最大上升时间 tr | 1000 ns | 300 ns | 120 ns |
| 典型上拉电阻(5V) | 4.7 kΩ – 10 kΩ | 2.2 kΩ – 4.7 kΩ | 1.0 kΩ – 2.2 kΩ |
| 典型上拉电阻(3.3V) | 2.2 kΩ – 4.7 kΩ | 1.5 kΩ – 2.2 kΩ | 0.8 kΩ – 1.5 kΩ |
| 总线电容 Cb | ≤ 400 pF | ≤ 400 pF | ≤ 100 pF |
电平标准方面,I2C 器件通常支持 1.8V、2.5V、3.3V 或 5V 逻辑电平。混合电压系统需使用电平转换器(如 PCA9306)或 I2C 专用缓冲器。调试音频 Codec 时,务必确认 Codec 的 VDDIO 电压与主控 I2C 接口电平匹配,否则可能导致寄存器读写失败甚至损坏器件。
1.4 多主从架构与总线仲裁
I2C 支持多主(Multi-Master)架构,即总线上可以挂载多个主设备,每个主设备都能主动发起通信。每个从设备拥有唯一的 7 位或 10 位地址。多主架构依赖以下机制保证数据不冲突:
- 总线仲裁(Arbitration):当多个主设备同时拉低 SDA 时,输出低电平的设备赢得仲裁,输出高电平但检测到 SDA 为低的设备自动退出并转为从模式。
- 时钟同步(Clock Synchronization):多个主设备通过线与 SCL 实现时钟同步,最慢的主设备决定最终时钟频率。
在音频 Codec 调试场景中,绝大多数系统采用单主多从拓扑(主控 SoC 作为唯一主设备,Codec 作为从设备),但了解多主仲裁机制有助于分析总线异常挂死时的根因。
1.5 总线时序基础
I2C 通信以起始条件(START)开始,以停止条件(STOP)结束。每个字节(8 位)后跟随一个应答位(ACK/NACK)。
- 起始条件:SCL 高电平时,SDA 从高电平切换到低电平。
- 停止条件:SCL 高电平时,SDA 从低电平切换到高电平。
- 数据有效性:SCL 高电平时,SDA 上的数据必须保持稳定;SCL 低电平时,SDA 允许变化。