I2C 上拉电阻计算
上拉电阻有上下两个边界:太大上升沿太缓,太小灌电流超标。中间才是能用的区间,4.7k 只是其中一种巧合。
上升时间 ≤ 300 ns,电容 ≤ 400 pF
电阻区间
区间可用1.3 kΩ
推荐上拉(快速模式 400 kHz,200 pF)
总线电容估算
器件引脚 + 走线估算 60 pF(按 10 pF/个 + 1 pF/cm)
各模式下的区间
200 pF,3.3 V| 模式 | 电阻范围 | 推荐 | 推荐值上升时间 |
|---|---|---|---|
| 标准模式 100 kHz | 967 Ω – 5.9 kΩ | 2.4 kΩ | 407 ns |
| 快速模式 400 kHz | 967 Ω – 1.8 kΩ | 1.3 kΩ | 220 ns |
| 快速+ 1 MHz | 967 Ω – 708 Ω | 967 Ω | 164 ns |
| 高速模式 3.4 MHz | 967 Ω – 472 Ω | 967 Ω | 164 ns |
使用说明
上升时间按 30%/70% VDD 计算:t = R·C·ln(0.7/0.3) ≈ 0.8473·R·C。有些资料用 0.8·R·C,差 6%,选值时留余量就行。
推荐值取区间几何中点再落到 E24。想省电往大取,想留速度余量往小取;两个方向都不能越界。
上拉是开漏总线的必要条件,SDA 和 SCL 各一只,不能只给 SDA 加。多个模块并联时确认是否重复上拉,否则等效电阻减半、灌电流翻倍。
常见问题
为什么常见的 4.7k 上拉有时候不工作?
4.7k 只在总线电容小、速率低时合适。100 kHz 下 4.7k 配 200 pF 的上升时间约 800 ns,还在 1000 ns 限内;一旦电容到 400 pF 或速率提到 400 kHz,上升时间就超标,波形变成圆角,采样点读错。
上拉电阻越小越好吗?
不是。电阻越小上升越快,但器件拉低时灌电流越大。3.3 V、1kΩ 时灌电流约 2.9 mA,已经接近很多器件的 3 mA 上限;多主仲裁或时钟拉伸时,某个器件可能拉不动。功耗也会上升。
总线电容怎么估?
每个器件的引脚电容约 10 pF,OLED 这类模组可到 20 pF;FR4 走线大约 1 pF/cm,排线更高。把它们相加,再留 20% 余量。超过 400 pF 就不该继续靠减小上拉硬撑,应该缩短走线或加 I2C 缓冲器。
快速模式为什么上限只有 300 ns?
400 kHz 的一个位只有 2.5 μs,上升沿必须在前 300 ns 内完成,否则留给采样和保持的时间不够。规范按 30%/70% VDD 定义上升时间,所以公式里是 0.8473·R·C,不是简单的 R·C。
1.8 V 系统和 3.3 V 有什么不同?
上限由上升时间决定,和电压关系不大;下限由 (VDD − V_OL)/I_OL 决定,电压越低允许的电阻越小。1.8 V、3 mA、V_OL 0.4 V 时下限约 467Ω,可选范围明显比 5 V 窄。
多个上拉并联会怎样?
并联电阻变小,上升更快,但等效灌电流变大。两块板各带 4.7k 上拉,接在一起就是 2.35k,电流翻倍。模块化设计时只保留一组上拉,或者用跳线断开。