1. I2C总线基础

1.1 I2C总线历史

I2C(Inter-Integrated Circuit)总线由飞利浦半导体(现恩智浦半导体)于1982年发明,最初用于电视接收机中微控制器与外设之间的低速通信。其设计目标是以最少的引脚数(仅需两根线)实现芯片间可靠的数据交换。

时间 里程碑 关键特性
1982年 飞利浦发布I2C总线规范v1.0 标准模式100 kbit/s,7位地址
1992年 规范升级至v2.0 快速模式400 kbit/s,10位地址扩展
1998年 规范升级至v2.1 高速模式3.4 Mbit/s,兼容性增强
2007年 NXP发布v3.0 超快速模式1 Mbit/s,仅单向写入
2012年 NXP发布v4.0 超快速+模式5 Mbit/s,新增USDA/USCL
2021年 NXP发布v7.0 I3C Basic规范融合,向后兼容经典I2C
嵌入式工程师提示: VxWorks驱动开发中最常接触的是标准模式(100 kHz)和快速模式(400 kHz)。高速模式(3.4 MHz)对PCB布局和上拉电阻要求极高,在工业级VxWorks系统中较少使用。

1.2 物理层特性:SDA与SCL

I2C总线仅使用两条双向信号线:

  • SDA(Serial Data Line):串行数据线,用于传输地址、数据和控制信号。
  • SCL(Serial Clock Line):串行时钟线,由主设备产生,同步数据传输。

两条线均采用开漏(Open-Drain)输出结构,即设备只能将线拉低(输出0),不能主动拉高(输出1)。高电平由外部上拉电阻提供。这种设计允许多个设备共享总线,通过线与(Wired-AND)机制避免总线冲突。

关键概念: 开漏结构 + 上拉电阻 = 多主设备仲裁的基础。任何设备拉低总线时,其他设备都会检测到总线被占用。
I2C总线物理连接示意图(开漏 + 上拉电阻) 主设备 (Master) 从设备1 (Slave 0x50) 从设备2 (Slave 0x51) SDA SCL Rp Rp VDD (3.3V / 5V) 开漏结构说明 每个设备的SDA/SCL引脚内部为MOSFET漏极开路,只能拉低到GND,不能主动输出高电平 高电平由外部上拉电阻Rp连接到VDD提供,实现多设备线与逻辑

1.3 电气特性:上拉电阻与电压电平

上拉电阻计算

上拉电阻的取值直接影响总线上升时间、功耗和最大通信速率。电阻值需满足两个约束:

  • 最小值(Rp_min):由输出低电平时允许的最大灌电流决定。
  • 最大值(Rp_max):由总线电容和要求的上升时间决定。
参数 标准模式 (100 kHz) 快速模式 (400 kHz) 高速模式 (3.4 MHz)
最大上升时间 tr 1000 ns 300 ns 120 ns
总线电容 Cb(典型) ≤ 400 pF ≤ 400 pF ≤ 100 pF
Rp_min(VDD=3.3V, Vol=0.4V, Iol=3mA) ≈ 967 Ω ≈ 967 Ω ≈ 967 Ω
Rp_max(Cb=200pF) ≈ 5.0 kΩ ≈ 1.5 kΩ ≈ 600 Ω
常用推荐值 4.7 kΩ 2.2 kΩ 1.0 kΩ
故障排查要点: 上拉电阻过大 → 上升沿变缓 → 高速通信失败或数据错误。上拉电阻过小 → 灌电流超标 → 设备IO口损坏或功耗异常。VxWorks驱动中可通过调整时钟延展(Clock Stretching)参数补偿上升沿过缓问题。

电压电平兼容性

I2C总线支持多种电压域混合工作,但需满足以下电平标准:

  • 输入低电平(VIL):最大 0.3 × VDD
  • 输入高电平(VIH):最小 0.7 × VDD
  • 输出低电平(VOL):最大 0.4 V(在 3 mA 灌电流下)

当主设备(如VxWorks板卡)为3.3V,从设备为5V时,需使用电平转换器或采用I2C专用电平转换芯片(如PCA9306、TXS0102)。

I2C电平标准与噪声容限(VDD=3.3V) 电压 (V) 3.3V 2.31V 0.99V 0V VIH ≥ 0.7×VDD 高电平输入区 过渡区(不确定) VIL ≤ 0.3×VDD 低电平输入区 电平兼容性检查清单 ✓ 主设备VDD = 3.3V → VIH_min = 2.31V ✓ 从设备VDD = 5V → VOL_max = 0.4V ✓ 3.3V主设备可识别5V从设备的低电平 ✓ 5V从设备VIH_min = 3.5V > 3.3V ✗ 必须使用电平转换器! 推荐芯片:PCA9306 / TXS0102

1.4 总线拓扑结构

I2C总线采用多主设备、多从设备的总线拓扑,所有设备通过SDA和SCL两条线并联连接。每个从设备拥有唯一的7位或10位地址。

拓扑类型对比

拓扑类型 描述 典型应用 注意事项
单主-多从 一个主设备控制总线,多个从设备响应 VxWorks板卡 + 多个传感器/EEPROM 最常用,无需仲裁逻辑
多主-多从 多个主设备可发起通信,通过仲裁决定总线控制权 双CPU系统共享外设 需处理总线仲裁和时钟同步
星型拓扑 通过I2C多路复用器(如TCA9548)扩展 地址冲突时隔离从设备 增加延迟,需配置复用器通道

总线负载与电容限制

I2C规范规定最大总线电容为400 pF(标准/快速模式)。超过此限制会导致上升沿过缓,通信不可靠。常见电容贡献:

  • 每个设备引脚电容:约 5~10 pF
  • PCB走线电容:约 1~2 pF/cm(取决于板层和线宽)
  • 连接器/线缆电容:约 50~100 pF/m
VxWorks驱动调试经验: 当总线挂载超过8个设备或线缆长度超过30cm时,建议使用I2C总线缓冲器(如P82B96)或降低通信速率至50 kHz以下。在驱动中可通过配置时钟分频系数(CLK_DIV)调整SCL频率。
I2C总线拓扑结构(单主-多从 + 多路复用器扩展) VxWorks主设备 (Master) 主I2C总线(SDA + SCL) 温度传感器 0x48 EEPROM 0x50 RTC时钟 0x68 I2C MUX TCA9548 子总线0 ADC芯片 0x48(隔离) 拓扑设计建议 总线总电容 ≤ 400pF | 地址冲突时使用MUX扩展 | 长距离传输使用缓冲器P82B96

1.5 本章小结