4. 上拉电阻理论基础:Rp最小值计算、Rp最大值计算、上升时间约束
好,咱们进入正题。上拉电阻这东西,看着不起眼,就俩电阻加个电源。但你要是选错了,整个I2C总线就跟你闹脾气。我早年吃过这个亏,板子调了三天,最后发现就是上拉电阻没算对。
说白了,上拉电阻就是给总线一个确定的空闲电平。SCL和SDA都是开漏输出,没有上拉,它们就悬空了。悬空的状态,干扰随便进,数据全乱套。
那怎么选?核心就三个约束:最小值、最大值、上升时间。咱们一个一个拆。
4.1 Rp最小值:别把管子烧了
Rp最小值,保护的是谁?是主设备里那个开漏输出的NMOS管。你想想看,当设备把总线拉低时,电流从Vdd流过Rp,再经过NMOS管到地。电阻太小,电流就太大,管子就过热,甚至烧掉。
I2C规范给了个公式:
Rp(min) = (Vdd - Vol(max)) / Iol(max)
参数解释:
- Vdd:总线供电电压,常见3.3V或5V
- Vol(max):输出低电平的最大允许值,标准模式0.4V
- Iol(max):输出管在Vol时的最大灌电流,标准模式3mA
算个例子。Vdd=3.3V,Vol=0.4V,Iol=3mA:
Rp(min) = (3.3 - 0.4) / 0.003 = 966.7 Ω
所以,最小电阻不能低于967Ω。我一般取1kΩ,留点余量。
4.2 Rp最大值:别让信号爬不动
Rp最大值,约束的是上升时间。电阻太大,RC充电时间常数就大,信号从低到高爬得慢。I2C对上升时间有硬性要求,超了就违反时序。
公式长这样:
Rp(max) = Tr(max) / (0.8473 × Cb)
其中:
- Tr(max):允许的最大上升时间,标准模式1000ns,快速模式300ns
- Cb:总线总电容,包括所有设备的引脚电容、走线寄生电容
- 0.8473:RC充电到70.7%的时间常数系数
举个例子。标准模式,Tr=1000ns,Cb=200pF:
Rp(max) = 1000 / (0.8473 × 200) ≈ 5.9 kΩ
所以最大电阻约5.9kΩ。超过这个值,上升沿就太慢了。
4.3 上升时间约束:RC充电那点事
上升时间,说白了就是信号从低电平跳变到高电平需要多久。I2C总线是RC电路,上拉电阻Rp是R,总线电容Cb是C。充电时间常数τ = Rp × Cb。
从低电平(约0V)充到高电平(约Vdd)的70.7%,需要1个τ。从30%充到70%,大约需要0.85个τ。I2C规范里定义的上升时间,就是从30% Vdd到70% Vdd的时间。
所以:
Tr = 0.8473 × Rp × Cb
反过来,给定Tr和Cb,就能算出Rp(max)。
不同模式的上升时间要求:
| 模式 | 最大频率 | 最大上升时间 Tr(max) | 典型Cb范围 |
|---|---|---|---|
| 标准模式 (Sm) | 100 kHz | 1000 ns | 50 ~ 200 pF |
| 快速模式 (Fm) | 400 kHz | 300 ns | 50 ~ 200 pF |
| 快速模式+ (Fm+) | 1 MHz | 120 ns | 50 ~ 200 pF |
4.4 知识结构图:上拉电阻选型逻辑
下面这张图,把整个选型逻辑串起来了。你一看就明白。
4.5 实战选型步骤
光讲理论不行,我给你一套实战步骤,照着做就行。
- 估算总线电容Cb:查每个设备的输入电容,加上走线寄生电容(约1pF/cm)。把所有值加起来,再留20%余量。
- 确定工作模式:标准模式还是快速模式?这决定了Tr(max)。
- 计算Rp(min):用Vdd、Vol、Iol算出来。
- 计算Rp(max):用Tr(max)和Cb算出来。
- 选标准值:在Rp(min)和Rp(max)之间,选一个E24系列的电阻值。我常用3.3kΩ或4.7kΩ。
- 验证上升时间:用实际选的Rp和Cb,算一下Tr,确保小于Tr(max)。
嗯,上拉电阻的理论基础就到这。记住三个约束:最小值保护管子,最大值保证上升时间,上升时间约束决定通信速度。下节课咱们用实际波形说话,看看选错了会出什么幺蛾子。