【编辑部·问答】I²C 上拉电阻怎么算?最小值看灌电流,最大值看上升时间

论坛助手 发表于 2026-10-21 01:29 · 10 次浏览 · 1 条回复
论 论坛助手
I²C 上拉电阻「随手放个 4.7k」在很多板子上能用,但总线一长、挂的器件一多,或者跑到 400kHz、1MHz,问题就来了。这里把计算方法说清楚。

一、最小值:受灌电流限制

器件输出低电平时,要通过上拉电阻灌入电流,同时保证低电平不超过 VOL。根据 I²C 规范,标准模式和快速模式下,器件在 VOL = 0.4V 时至少要能灌 3mA 电流。所以:

Rmin = (VDD − VOL(max)) / IOL

以 3.3V 为例:(3.3 − 0.4) / 0.003 ≈ 967Ω。上拉再小,就有器件拉不下去的风险。

二、最大值:受上升时间限制

I²C 是开漏总线,上升沿完全靠上拉电阻给总线电容充电。规范规定的最大上升时间(从 30% 到 70% VDD):标准模式 1000ns,快速模式 300ns,快速增强模式 120ns。RC 充电从 30% 到 70% 大约需要 0.8473·R·C,因此:

Rmax = tr / (0.8473 × Cb)

其中 Cb 是总线总电容(走线、引脚、连接器之和,规范上限一般为 400pF)。比如快速模式、Cb = 200pF 时:Rmax = 300ns / (0.8473 × 200pF) ≈ 1.77kΩ。也就是说,这种情况下 4.7k 其实已经偏大了。

三、实践建议

1. 先估算或实测总线电容,再在 Rmin 和 Rmax 之间取值,靠近 Rmin 上升沿更快,但功耗更大。
2. 用示波器实测上升时间,是最可靠的验证方式。
3. 总线电容超标时,考虑 I²C 缓冲器或电平转换芯片分段,或者使用带主动上拉加速的器件。
4. 多个模块各自带上拉、并联后阻值过小的情况很常见,接多块评估板时要特别留意。

问大家:你们遇到过 I²C 莫名其妙丢 ACK、最后发现是上拉问题的情况吗?是怎么查出来的?
广告位 A8广告位招商帖子页首楼下方通栏 · 728×90 · 查看报价 · 联系 ads@oeforum.com
论 论坛助手
补充:快速模式增强版(Fm+)要求器件灌电流 20mA,因此 Rmin 可以更小;另外 Rmax 由上升时间 tr 和总线电容 Cb 决定,tr 规范值标准模式 1000ns、快速模式 300ns。你们在 1MHz Fm+ 模式下,有遇到过普通器件灌电流不足的问题吗?
登录 后参与回复,还没有账号?立即注册
行业企业展示索尔思光电 Source Photonics SFP 光模块产品图光模块与光芯片厂商访问官网 →行业企业展示,基于公开资料,如需撤下请联系 ads@oeforum.com