1. I²C 总线基础:历史、物理层与上拉电阻

I²C(Inter-Integrated Circuit)总线由 Philips 半导体(现 NXP)于 1982 年推出,最初用于电视接收机内部芯片间的低速控制通信。经过 40 余年发展,它已成为嵌入式系统中最广泛使用的板级串行总线之一,XMC 系列微控制器均集成硬件 I²C 模块,支持多主多从拓扑。

1.1 总线历史与标准演进

版本/标准 推出年份 最大速率 关键特性
Standard-mode (Sm) 1982 100 kbit/s 原始规范,7 位地址
Fast-mode (Fm) 1992 400 kbit/s 兼容 Sm,增加 10 位地址
Fast-mode Plus (Fm+) 2007 1 Mbit/s 更强驱动能力,兼容 Fm
High-speed mode (Hs) 2000 3.4 Mbit/s 主设备需主动切换电流源
Ultra Fast-mode (UFm) 2012 5 Mbit/s 单向推挽,不再要求开漏
实战提示:XMC 系列 I²C 外设支持 Standard-mode 和 Fast-mode,部分型号(如 XMC4000)可配置为 Fast-mode Plus。调试时务必确认总线速率与从设备规格匹配,避免时序违规。

1.2 物理层特性:SDA/SCL 开漏结构

I²C 总线仅使用两根双向信号线:串行数据线(SDA)和串行时钟线(SCL)。其核心物理层特征是 开漏(Open-Drain) 输出结构,配合外部上拉电阻实现线与逻辑。

  • 开漏输出:每个 I²C 设备的 SDA 和 SCL 引脚内部为 N-MOS 管漏极开路。输出低电平时 MOS 管导通,引脚被拉低;输出高电平时 MOS 管截止,引脚呈高阻态。
  • 线与逻辑:当多个设备同时输出时,只要有一个设备输出低电平,总线即被拉低;所有设备都释放(高阻)时,总线由上拉电阻拉高。这保证了多主仲裁和时钟同步的物理基础。
  • 双向传输:主设备和从设备通过分时控制 SDA 实现双向数据通信,SCL 始终由主设备驱动(时钟拉伸时从设备可短暂控制 SCL)。
关键概念:开漏结构使得 I²C 总线天然支持多设备挂接,且不会因输出电平冲突导致短路。这是 I²C 与 SPI、UART 等总线最本质的物理差异。
I²C 总线开漏结构与多设备连接示意图 I²C 总线物理层:开漏结构与多设备连接 Rₚ Rₚ VDD VDD SDA SCL 主设备 XMC 微控制器 从设备 1 传感器 / EEPROM 从设备 2 ADC / 扩展器 开漏输出内部结构(以 SDA 为例) N-MOS 输出低电平 高阻态(释放) MOS 管导通 → 总线拉低;MOS 管截止 → 总线由上拉电阻拉高 多个设备同时输出低电平时,总线保持低电平(线与)

1.3 上拉电阻选择原则

上拉电阻(Rₚ)的取值直接影响总线上升时间、功耗和信号完整性。选择时需综合考虑总线电容、工作速率和驱动能力。

1.3.1 最小电阻限制

由设备最大灌电流决定。I²C 规范要求设备在输出低电平时,VOL ≤ 0.4 V(VDD=3.3V 时),此时灌电流 IOL 通常为 3 mA(Sm/Fm)或 20 mA(Fm+)。

Rₚ(min) = (VDD - Vₒₗ(max)) / Iₒₗ(max)
示例:VDD = 3.3V, Vₒₗ = 0.4V, Iₒₗ = 3mA
Rₚ(min) = (3.3 - 0.4) / 0.003 ≈ 967 Ω

1.3.2 最大电阻限制

由总线上升时间 tr 和总线电容 Cb 决定。上升时间近似为 RC 充电时间常数 τ = Rₚ × Cb,通常取 tr ≈ 0.847 × τ。

Rₚ(max) = tᵣ(max) / (0.847 × C_b)
示例:Fast-mode, tᵣ(max) = 300ns, C_b = 200pF
Rₚ(max) = 300e-9 / (0.847 × 200e-12) ≈ 1770 Ω

1.3.3 常用推荐值

工作模式 总线电容范围 推荐 Rₚ 范围 典型值
Standard-mode (100 kHz) 50 ~ 200 pF 2.2 kΩ ~ 10 kΩ 4.7 kΩ
Fast-mode (400 kHz) 50 ~ 200 pF 1.0 kΩ ~ 4.7 kΩ 2.2 kΩ
Fast-mode Plus (1 MHz) 50 ~ 150 pF 470 Ω ~ 1.5 kΩ 1.0 kΩ
多设备高负载总线 200 ~ 400 pF 680 Ω ~ 2.2 kΩ 1.5 kΩ
调试警告:上拉电阻过小会导致低电平电压 VOL 超标,从设备可能无法正确识别低电平;上拉电阻过大会使上升沿变缓,在高速模式下导致时序违规。XMC 调试时建议先用示波器测量 SDA/SCL 上升时间,再调整 Rₚ 值。

1.4 总线电容估算

总线总电容 Cb 由以下部分构成:

  • 引脚电容:每个 I²C 设备的 SDA/SCL 引脚对地电容,典型值 5 ~ 10 pF。
  • 走线电容:PCB 走线对地电容,约 0.5 ~ 1 pF/cm(取决于板层结构)。
  • 连接器电容:若使用排线或线缆,每米约 50 ~ 100 pF。

估算公式:Cb = N × Cpin + L × Ctrace + Cconnector

实战经验:XMC 开发板(如 XMC4500 Relax Kit)的 I²C 总线通常挂接 2~3 个设备,总线电容约 50~100 pF。使用 2.2 kΩ 上拉电阻在 400 kHz 下工作良好。若外接长线缆(如 >30 cm),建议降低速率至 100 kHz 并减小上拉电阻。
上拉电阻选择流程与 RC 上升时间示意 上拉电阻选择流程与 RC 上升时间 Rₚ 选择流程 ① 确定 VDD 与工作模式 ② 估算总线电容 Cb ③ 计算 Rₚ(min) 与 Rₚ(max) ④ 选择标准值并验证上升时间 ⑤ 示波器实测 SDA/SCL 波形 RC 上升时间波形 时间 电压 VDD 0.632 × VDD τ = Rₚ × Cb tr ≈ 0.847τ

1.5 总结:物理层设计要点

  • 开漏 + 上拉:I²C 总线依赖开漏输出和外部上拉电阻实现线与逻辑,这是多设备通信的物理基础。
  • 电阻选择:在灌电流限制和上升时间要求之间取折中,优先使用 2.2 kΩ(400 kHz)或 4.7 kΩ(100 kHz)作为起始值。
  • 总线电容:每增加一个设备或延长走线,都会增加 Cb,需重新评估 Rₚ 上限。
  • XMC 调试:使用示波器测量 SDA/SCL 上升时间,确保 tr 符合 I²C 规范(Sm: ≤1000 ns, Fm: ≤300 ns, Fm+: ≤120 ns)。