I²C上拉越小,总线为何不一定更稳?
发表时间:2026-08-04 17:30:46
I²C的SDA和SCL依靠开漏输出拉低、上拉电阻释放为高。阻值过大时,Rp与总线电容形成的RC会拖慢上升沿;阻值过小时,低电平电流和VOL压降增大。可靠阻值位于“上升时间上限”和“灌电流能力下限”共同限定的窗口内。
I²C偶发NACK,工程师把4.7kΩ换成2.2kΩ,上升沿变快,问题似乎消失;再换成1kΩ,却出现低电平抬高、器件发热或弱驱动从机仍不稳定。这里要打破一个很常见的经验:上拉电阻越小,不等于总线越稳。
I²C器件通常只主动拉低线路,高电平由Rp给总线电容充电。Rp减小会让充电更快,也会让拉低器件承担更大灌电流;可靠阻值只能落在“上升时间允许的上限”和“低电平能力允许的下限”之间。
高电平不是被器件“推”上去的
开漏结构释放SDA或SCL后,晶体管关断,线路通过上拉电阻回到VDD。走线、连接器、探头和所有器件引脚共同形成总线电容,Rp与Cb组成RC网络。电容越大、Rp越大,上升沿越慢。
慢上升沿会压缩高电平有效时间。主机按设定频率继续翻转SCL,但信号可能到采样点仍未跨过输入高阈值;逻辑分析仪解码失败只是结果,根因在模拟电压还没爬到合法区间。
图1 多器件接入I²C总线时的上拉连接方式
上升时间不是从0V到VDD的全部时间,规范按规定电平区间定义。示波器自动测量若阈值设置不同,读数可能与规范不一致;评审前应统一测量门限和探头位置。
为什么阻值不能一直往下减?
当任一器件拉低线路时,电流近似由VDD、Rp和器件低电平压降共同决定。Rp太小,灌电流增加,输出晶体管上的压降也会增大;最终VOL可能高于接收端认可的低电平上限。
因此最小阻值由电源电压、允许VOL与器件可承受的拉低电流决定。总线上驱动能力最弱的器件往往是边界,不能只看主控数据手册,更不能因为一块样机能工作就忽略温度和批次。
图2 Rp最小值与电源、串联电阻之间的关系
多块板通过连接器并在一起时,还要检查每块板是否各自装了上拉。几个4.7kΩ并联后的等效阻值会明显变小,单板测试正常,整机组合后反而可能把低电平电流推高。
Rp的下限由低电平能力约束,上限才由上升时间和总线电容约束。
总线电容把上限压到哪里?
Rp最大值会随总线电容增加而下降:Cb越大,允许的最大Rp越小。增加设备、延长排线、换更大封装或并接探头,都会增加电容;同一组上拉在短板上正常,接上长线后就可能越界。
图3 Rp最大值随总线电容增加而下降
估算只解决第一步。实际还要用示波器在器件附近测SDA和SCL的10%到90%上升过程,并在目标速率、最差电压和最差温度下验证。逻辑分析仪的数字门限不能替代模拟波形。
电平转换器、缓冲器和热插拔器件会引入额外导通压降、传播延迟与电容。总线分段后,应分别计算每一段Rp窗口,不能把整机所有电容简单归到同一只上拉上。
· 线长与分支:增加分布电容和反射机会。
· 器件数量:输入电容与漏电流都会累加。
· 探头:测量本身也可能改变上升沿。
用一个窗口完成选值
先按最弱器件的VOL与灌电流能力算出Rp最小值,再按目标模式的上升时间和实测Cb估算Rp最大值。只有最小值小于最大值时,才存在可用窗口。常见4.7kΩ或2.2kΩ只是起点,不是答案。
图4 快速模式开关上拉与总线电容模型
若窗口已经很窄,继续减小电阻并不优雅。应检查线长、分支、连接器、电平转换器和速率;必要时分段总线或使用合适的缓冲器。动作仍要单一:每次只改一个Rp,记录上升时间与VOL。
若SDA正常而SCL慢,还要检查哪些从机允许时钟拉伸。持续低电平可能是协议行为,也可能是器件未释放;先区分“没被拉高”和“仍被主动拉低”,再调整Rp。
1. 算下限由VDD、VOL和IOL确定。
2. 算上限由允许上升时间和Cb确定。
3. 做实测同时记录tr与低电平VOL。
结论
I²C上拉选值不是“把波形拉陡”这么简单。小电阻改善上升沿的同时,也在加重每个拉低器件的负担;大电阻降低电流,却可能让采样点还停在阈值区。
真正稳定的阻值,是落在两条边界之间,并且经过最差线长、器件数量、温度和电压验证的那一个。
你的I²C问题更像上升沿过慢,还是低电平VOL被抬高?






哔哩哔哩
微信公众号
小红书
抖音
知乎
西瓜视频
头条
微信视频号