一.I2C简介
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。I2C总线在使用时,需要接上拉电阻,这是因为I2C接口是开漏输出,如图1所示。
I2C有5种速度模式:标准(100KHz)、快速(400KHz)、快速增强(1MHz)、高速(3.4MHz)以及超快速(5MHz)。不同模式,对上拉电阻阻值的要求不同,另外,上拉电压VCC不同,对上拉电阻阻值的要求也不同。
二.上拉电阻选取不当的后果
如果上拉电阻过小,会带来哪些不利影响呢?
1) 通信速度下降
上拉电阻与总线电容形成RC时间常数,影响总线的充电时间及高电平阈值。电阻越小,充电时间越长,从而影响通讯速度。如果上拉电阻过小,可能无法保证从设备在主设备完成总线动作前识别到足够高的电平,导致通讯失败。
2) 功耗增加
上拉电阻越小,总线上的电流越大,从而导致功耗增加,对一些电池供电设备不友好,会加快电池电量耗尽。
3) 保护作用减弱
上拉电阻还具有一定的保护作用,能够防止总线在高电压毛刺下的损坏。如果上拉电阻过小,这种保护作用会减弱,可能会对I2C总线上的设备造成损害。
上拉电阻阻值过大,又会如何?
上拉电阻如果过大,会造成上升沿时间变长。速度越快,要求上升沿时间越短。如果上拉电阻过大,会导致通讯失败。
那么如何选择上拉电阻呢?
三.上拉电阻计算
我们以DS3132为例,DS3132是一款RTC驱动芯片,采用I2C接口进行读写,以下是其I2C相关参数。
1) 上拉电阻最小值计算
如图1红线箭头所示,假设SCL是低电平,即MOS管导通,则有R=(VCC-VL)/IL;
其中VL定义为漏极开路或集电极开路时,有3mA下拉电流时的低电平输出电压。IL为该端口的灌电流,即IL=3mA。因此,当VCC不变,VL取最大值时,上拉电阻有最小值。
取VCC为3.3V,VLmax=0.4V,则Rmin=(3.3V-0.4V)/3mA=0.96KΩ。
注意:VLmax取VOL,而不是VIL
2)上升沿时间计算
通常,I2C电平,低于0.3VCC为低电平,高于0.7VCC为高电平。
Vt1=0.3*VCC=VCC(1-e-t1/RC),则t1=0.3566749*RC;
Vt2=0.7*VCC=VCC(1-e-t2/RC),则t2=1.2039729*RC;
上升沿时间tr =t2-t1=0.8473*RC,由此得出R= tr /(0.8473*C);
3)上拉电阻最大值计算
根据上升沿时间计算公式,得出R= tr /(0.8473*C);
其中tr取I2C挂载的所有设备中tr最小值,C为总的负载电容。
DS3132中要求快速模式下上升沿时间tr=300ns,负载电容为10pF。
- 假设I2C总线上只挂载了DS3132一个设备,
那么Rmax= tr /(0.8473*C)=300ns/(0.8473*10pF)=35.4KΩ;
- 如果按各速度模式最大允许的挂载量来计算,如表1所示,列出了各速度模式下的最大允许负载电容。快速模式下,C=200pF。
则Rmax= tr /(0.8473*C)=300ns/(0.8473*200pF)=1.77KΩ;
表1 各速度模式下最大允许负载电容
速度模式 | 标准模式 | 快速模式 | 高速模式 | 超快速模式 |
最大允许总线负载电容 | 400pF | 200pF | 100pF | 120pF |
小结:上拉电压决定上拉电阻的最小值,总线负载电容决定上拉电阻的最大值。
四. 参考资料
1. I²C总线上拉电阻阻值如何选择?
2. 教你精确计算 I2C 上拉电阻阻值-腾讯云开发者社区-腾讯云
3. https://www.cnblogs.com/duwenqidu/p/11043889.html