Part 01、前言
I2C通信电路是嵌入式设计中的“常客”,在各种产品比如家电,工控,医疗器械等产品的板内通信中I2C总能派上用场。但设计I2C电路时,上拉电阻Rp的选择却是个让人头疼的问题:选小了不行,选大了也不行。今天咱们就来聊聊I2C上拉电阻的计算方法吧。
Part 02、为啥I2C需要上拉电阻?
I2C是一种开漏Open-Drain通信协议,SDA和SCL线上的信号只能被拉低(输出0V),而拉高(输出1)全靠上拉电阻Rp。
工作原理:
没有信号时,上拉电阻把线路拉到高电平(接近Vcc)。
IC需要输出0时,会通过内部的MOSFET把线路拉低到接近0V。
上拉电阻的作用:
电阻决定了线路从低电平到高电平的上升速度,同时也影响功耗。选的值不对,要么通信慢得像“乌龟爬”,要么功耗高得像“电老虎”。
那上拉电阻的阻值如何确定呢?
Part 03、上拉电阻计算
我们需要计算上拉电阻的最小值Rp(min)和最大值Rp(max),咱们一步步分析。
最小值 Rp(min)计算
如果上拉电阻太小,电流会太大,IC可能拉不下来低电平,导致通信失败。最小电阻由以下公式决定:
Vcc:电源电压
VoL(max):IC能输出的最大低电平电压(I2C标准要求逻辑低电平低于 0.3×Vcc)
IoL:IC拉低时的灌电流能力(Sink Current)
举个例子,Vcc = 3.3V,VoL(max)=0.4V,IoL=3mA,
所以,上拉电阻不能小于966.67Ω,不然IC拉低电平会“力不从心”,逻辑0 可能变成“半吊子”,通信直接崩。
最大值 Rp(max)计算
如果上拉电阻太大,线路的上升时间会变长,达不到I2C标准的上升时间要求(Rise Time),导致通信失败。最大电阻由以下公式决定:
tr:I2C标准的最大上升时间
0.8473:RC电路上升时间的常数(从0.3×Vcc到0.7×Vcc的时间系数)
举个例子,如果tr=300 ns,Cb = 200pF
所以,上拉电阻不能大于1770Ω,不然信号上升太慢,I2C主设备可能还没等到高电平就“等不及了”,通信又崩。
上拉电阻的范围算出来了(966.67Ω到1770Ω),但具体选多大,还得看速度和功耗的平衡。小电阻(接近Rp(min)),优点是上升时间短,通信速度快。缺点是电流大,功耗高。比如用1kΩ,上升时间:
速度很快,但平均电流(信号频繁切换时):
功耗
大电阻(接近 Rp(max)),优点是电流小,功耗低。缺点是上升时间长,速度慢。比如用1.5kΩ,上升时间:
速度慢了点,但功耗:
Part 04、注意事项
1.总线线电容Cb要估准:
Cb包括PCB走线电容(每厘米约1-2pF)、IC引脚电容(通常5-10pF/个)。比如10cm走线+2个IC,Cb ≈ 20 + 2 × 10 = 40 pF。实际设计时留点余量,测一下最好。
2.Vcc变化的影响:
Vcc不是稳定的,而是波动的,比如不是3.3V,而是2.9-3.5V之间,Rp(min)会变化,重新算一下。
3.环境温度:
高温下IC的IoL可能变小,Rp(min)会变大,注意评估。
4.多设备场景:
多个IC挂在I2C 总线上,电容Cb会增加,Rp(max)变小,重新算一下范围。
有问题欢迎在评论区留言交流哦!