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 等总线最本质的物理差异。
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 并减小上拉电阻。
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)。