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

相关推荐
周洲08304 小时前
STM32 最简工程搭建|标准库/HAL库规范化模板,零冗余可直接落地
stm32·单片机·嵌入式硬件
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256736 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
OIDCAT7 小时前
国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
网络·嵌入式硬件·智能硬件·国产芯片·usb转千兆网卡
HRTOS8 小时前
HRTOS 4.0 驱动库:06_Storage 存储设备驱动——24C02 EEPROM与I²C驱动开发
c语言·驱动开发·嵌入式硬件·51单片机
周洲08308 小时前
STM32 串口不定长接收|空闲中断 IDLE 方案,无固定帧长限制,项目实战
stm32·单片机·嵌入式硬件
我和头发拼了11 小时前
STM32--10硬件读写MPU6050
stm32·单片机·嵌入式硬件
糖糖单片机设计12 小时前
基于STM32的鱼缸水质检测系统
stm32·单片机·嵌入式硬件
HRTOS12 小时前
HRTOS 4.0 正式发布:Driver Library 基础外设驱动模块介绍
驱动开发·单片机·嵌入式硬件·51单片机
染予13 小时前
20个点位下发该如何正常操作?
单片机·嵌入式硬件