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

相关推荐
CODECOLLECT7 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen7 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠10 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_10 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技12 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计12 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报14 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业14 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能14 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn14 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件