I2C_pull_up_reg
本文最后更新于 2026年4月2日 晚上
I2C上拉电阻选择
I²C 总线是开漏/开集结构,需要外部上拉电阻(Rp)将信号线(SDA/SCL)拉高。上拉电阻的取值由总线电容(Cb) 和目标通信速率共同决定,核心在于满足信号上升时间(tr)的要求。
计算公式
-
RC 充电公式:
信号从 30% VDD 上升到 70% VDD 所需的时间(即上升时间 tr)由以下公式决定: -
常数 0.8473 的来源:
这个常数是数学推导的结果。它来源于一阶 RC 充电电路方程,计算电压从 30% VDD 升至 70% VDD 所需时间的精确解:结论:0.8473 是理论计算出的固定常数,用于描述在标准工程定义下的上升时间。
-
取值范围的约束:
- 下限约束(电阻不能太小):由 GPIO 引脚的最大灌电流(Sink Current)能力决定,以防止损坏引脚。计算公式为:
此电流值应小于 GPIO 的规格(通常为 4-8 mA)。
- 上限约束(电阻不能太大):由总线电容和通信速率决定,确保上升时间满足协议要求。电阻太大,RC 充电慢,上升沿过缓,会导致高速通信失败。
- 下限约束(电阻不能太小):由 GPIO 引脚的最大灌电流(Sink Current)能力决定,以防止损坏引脚。计算公式为:
计算示例:
假设总线电容 Cb 为 200 pF,需要在 400 kHz 模式下满足 tr < 300 ns 的要求。根据公式计算 Rp 的理论最大值:
考虑到余量,应选取比此值更小的电阻,例如 1.5 kΩ。
二、快速选型速查表
对于大多数应用,可以基于以下经验表格快速选择:
| 通信模式 | 速率 | 典型 Rp 值 (3.3V 系统) | 典型 Rp 值 (5V 系统) | 备注 |
|---|---|---|---|---|
| 标准模式 (Standard-mode) | 100 kbps | 4.7 kΩ - 10 kΩ | 2.2 kΩ - 4.7 kΩ | 最常用,兼顾速度与功耗。 |
| 快速模式 (Fast-mode) | 400 kbps | 1.5 kΩ - 3.3 kΩ | 1.0 kΩ - 2.2 kΩ | 需减小电阻以保证上升沿速度。 |
| 快速模式+ (Fast-mode Plus) | 1 Mbps | 680 Ω - 1.5 kΩ | 470 Ω - 1.0 kΩ | 功耗较大,需确认主从设备支持。 |
核心原因:
- 在相同速率下,5V 系统可以使用更小的 Rp,因为在相同电流下,5V 系统产生的电压变化(dV/dt)更快,更容易满足上升时间要求。
- 高速模式必须用更小的 Rp 来对抗总线电容的影响,加速 RC 充电。
注:实际取值应比计算值略小(留 20%-30% 裕量),以应对 PCB 寄生参数和温度漂移。
三、总结与决策路径
- 常规情况:3.3V 系统选用 4.7 kΩ,5V 系统选用 2.2 kΩ。这是最稳妥的起点。
- 高速/多负载情况:如果通信距离长、挂载设备多(总线电容 Cb 大),或使用快速模式(400k/1M),应选用更小的电阻(如 1.5kΩ 或 1kΩ)。
- 低功耗场景:如果对速度不敏感,可选用更大的电阻(如 10kΩ)以降低静态电流。
- 最终验证:最可靠的方法是使用示波器观察 SCL 信号,确保上升沿陡峭、无过冲。如果上升沿圆滑,说明 Rp 太大或 Cb 太大,需要减小 Rp 或优化布线。
补充说明: 0.8473 的数学推导(RC 充电方程)
I²C 总线的上升沿被建模为一个一阶 RC 充电电路。其电压随时间变化的公式为:
其中 是 RC 时间常数。
1. 定义工程阈值
在数字电路中,我们并不关心信号从 0% 充到 100% 的完整过程,而是关心它何时进入“有效逻辑区间”。标准定义如下:
- V_IL(输入低电平阈值):
- V_IH(输入高电平阈值):
2. 求解时间点
我们需要计算电压到达这两个阈值的时间差,即上升时间 。
-
到达 30% 的时间 :
-
到达 70% 的时间 :
3. 得出系数
结论:0.8473 是计算 得到的纯数学常数,它精确描述了在 30%-70% 区间内的 RC 充电速度。
在工程中,时间常数 是一个基准单位,它衡量了电容充电/放电的“惯性”。
为什么 I²C 不直接用 而用 0.8473?
- (63%):是物理学的通用度量,用于描述“变化快慢”的基准。
- 0.8473 (30%-70%):是数字逻辑的特定定义。因为芯片的输入引脚只有在电压超过 V_IH (70%) 时才确认为高电平,低于 V_IL (30%) 确认为低电平。0.8473 直接决定了信号能否被正确采样,是时序约束的直接体现。