20.IIC通信上拉电阻的计算

这一节我们专门把 I²C 上拉电阻这件事讲"算清楚 + 看明白"

这是 I²C 最容易被忽略、但最致命的点之一。

我按 ①原理 → ②计算方法 → ③工程速算 → ④波形对比 → ⑤调试结论 来。


一、为什么 I²C 一定要上拉电阻(先立住逻辑)

1.1. I²C 是"开漏 + 线与"结构

  • 所有器件只能拉低

  • 不能主动拉高

  • 高电平 = 靠上拉电阻慢慢充电

VCC │ Rpull │ SDA ──── 多个器件(只能下拉)

总结: 没有上拉 = SDA/SCL 永远低 = 总线瘫痪


1.2.上拉电阻直接决定了什么?

影响项 说明
上升沿速度 由 R × C 决定
最大通信速率 上升沿过慢会违背 I²C 规范
电流 R 太小 → 器件拉不动
稳定性 R 不合适 → 偶发错误

二、I²C 上拉电阻的"数学模型"

2.1. I²C 上升沿是 RC 充电曲线

SDA 从 0 → 1,不是跳变,而是:

V(t) = Vcc × (1 - e^(-t / (R × C)))

I²C 规范关心的是: 上升时间 tr


2.2. I²C 对上升时间的硬性要求(标准)

模式 速率 tr 最大值
Standard 100 kHz 1000 ns
Fast 400 kHz 300 ns
Fast+ 1 MHz 120 ns

📌 超过这个,算违规


2.3.关键公式(工程必背)

I²C 规范给出的近似公式:

tr ≈ 0.8473 × Rpull × Cbus

反推上拉电阻:

Rpull ≤ tr / (0.8473 × Cbus)


三、工程级"上拉电阻计算示例"

示例 1:100kHz,普通 MCU + 2 个从设备

假设:

  • 总线电容 Cbus ≈ 100 pF

  • 模式:Standard(100kHz)

  • tr ≤ 1000 ns

计算:

R ≤ 1000ns / (0.8473 × 100pF) R ≤ 11.8kΩ

结论

  • 4.7kΩ / 10kΩ 都 OK

  • 工程上常用 4.7kΩ


示例 2:400kHz,线稍长

  • Cbus ≈ 200 pF

  • tr ≤ 300 ns

R ≤ 300ns / (0.8473 × 200pF) R ≤ 1.77kΩ

结论

  • 2.2kΩ 合理

  • 4.7kΩ 已经危险


示例 3:1MHz Fast Mode Plus

  • Cbus ≈ 100 pF

  • tr ≤ 120 ns

R ≤ 120ns / (0.8473 × 100pF) R ≤ 1.4kΩ

工程结论

  • 1kΩ ~ 1.2kΩ

  • 注意电流能力!


四、工程速算口诀(不用算公式)

100kHz → 4.7kΩ
400kHz → 2.2kΩ
1MHz → 1kΩ

前提:总线不超过 200pF


五、不同上拉电阻的"真实波形对比"(重点)

下面是你在示波器 / LA 上看到的典型现象


5.1.上拉过大(比如 10kΩ @ 400kHz)

波形特征

  • SDA 上升很慢

  • 斜坡明显

  • 未到高电平就被拉低

_____/‾‾‾\_____

后果:

❌ 从机误判

❌ ACK 丢失

❌ 偶发 NACK


5.2.上拉合适(2.2kΩ @ 400kHz)

波形特征

  • 上升沿干净

  • 在 SCL 高电平前稳定

_____/‾‾‾‾‾\_____

后果

✅ 稳定通信

✅ ACK 正常


5.3.上拉过小(470Ω)

波形特征

  • 上升很快

  • 下降沿有"拖尾"

  • 低电平不够低

后果:

⚠️ 从设备拉不动

⚠️ 电流过大

⚠️ IO 过载风险


六、拉电流能力检查(常被忽略)

拉低电流:

I = Vcc / Rpull

例如:

  • 3.3V / 1kΩ ≈ 3.3mA

⚠️ 你要确认:

  • MCU

  • 从设备

都能稳定下拉 ≥ 这个电流

📌 很多传感器只能拉 3mA 左右


七、多个上拉电阻的"暗雷"

⚠️ 常见事故

  • 模块自带 4.7kΩ

  • 主板又加了 4.7kΩ

👉 等效电阻 = 2.35kΩ

1 / Req = 1/R1 + 1/R2

📌 这会:

  • 拉电流翻倍

  • 低电平抬高

  • 偶发死锁


八、调试 I²C 上拉的"实战步骤"

1️⃣ 万用表量 SDA / SCL 静态电压

2️⃣ 示波器看上升沿时间

3️⃣ 降速(400k → 100k)验证

4️⃣ 更换上拉阻值

5️⃣ 单设备测试(排除某个从设备拖线)


九、一句话工程结论(请记住)

I²C 稳不稳,先看上拉电阻
上升沿 = I²C 的生命线
能跑 100k,不代表能跑 400k

相关推荐
踏着七彩祥云的小丑8 小时前
嵌入式——认识电子元器件——晶体谐振器系列
单片机·嵌入式硬件
玩转单片机与嵌入式8 小时前
TinyML应用场景解析:动作识别!
人工智能·单片机·嵌入式硬件·嵌入式ai·ai+嵌入式
xiangw@GZ8 小时前
智能锁TouchKey的抗干扰设计-1.概述
单片机·嵌入式硬件
这波不该贪内存的9 小时前
嵌入式开发避坑指南
单片机·嵌入式硬件
振南的单片机世界9 小时前
单片机是嵌入设备的“单芯片计算机”
单片机·嵌入式硬件
zhangrelay9 小时前
三分钟云课实践速通--单片机原理与应用--Arduino--SimulIDE--
linux·单片机·嵌入式硬件·学习·ubuntu
czwxkn9 小时前
1.PCB设计:电容
单片机·嵌入式硬件
达不溜的日记10 小时前
PDUR路由基本功能
网络·stm32·单片机·嵌入式硬件·mcu·51单片机·信息与通信
踏着七彩祥云的小丑10 小时前
嵌入式——认识电子元器件——可控硅系列
单片机·嵌入式硬件