找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

I2C 总线为什么要接上拉电阻?

[复制链接]
矽杰单片机原厂 发表于 2023-10-16 14:26:38 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
I2C由一条时钟线和一条数据线组成,我们先看两张图。

图片1.png 图片2.png
I2C的波形

I2C协议基本形式
I2C的输入输出结构采用的是开漏的结构 。 开漏结构 不能够自主得到高电平,所以需要通过外部上拉电阻 来的实现 I2C 通信过程中的高电平。上拉电阻 的大小取决于 I2C 不同模式时的灌电流大小。这种结构作为逻辑输出时候,必须要有外部上拉,一般是通过电阻加到VCC电源,平时保持高电平,当输入低电平时也可被拉低,也就是说此时的开漏输出的可以作为外部的输入I/O口。
因为多个设备共用一条I2C总线,如果 I2C 使用的是推挽输出,假设在某个时间,A设备和B设备刚好在不同的电平输出,则会引起短路。

图片3.png
下图是I2C 获得高低电平的情景。
图片4.png

如果我们不接上拉电阻,设备的I2C SCL SDA引脚是浮空状态,浮空的意思是没有确定的电平,可能是高,也可能是低。而根据I2C的协议,在总线空闲期间,SDA和SCL都是高电平,当SDA出现下降沿时信号传输开始,如果没有确定的电平,一旦有外部的干扰,则可能会误启动I2C。
上拉电阻取值
上面我们已经说到,由于I2C开漏输出需要输出高电平我们就需要加上拉电阻。那上拉电阻该如何取值呢?通常情况下我们使用4.7kΩ,就能适用于大多数应用场景。如果需要更精确的电阻值,我们可以使用以下公式:
Rmin = (Vcc - Vol) / Iol
Rmax=Tr / (0.8473 * Cb)
R 是所需的上拉电阻值(Ω);
Vcc 是供电电压(伏特,V);
Vol 是I2C总线上的输出电平电压(通常是0.4V);
Iol 是I2C总线上的输出电流(通常是3mA);
Tr是上升沿时间,Cb是总线电容,0.8473是标准上升沿时间;
通过上面这个公式可以计算出合适的取值。由上可知,供电电压决定上拉电阻的最小值,总线负载电容决定上拉电阻的最大值。
常见的上拉电阻阻值有1k、1.5k、2.2k、4.7k、5.1k、10k等。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-10 12:31 , Processed in 0.078097 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表