打印

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

[复制链接]
584|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
I2C由一条时钟线和一条数据线组成,我们先看两张图。
I2C的波形
I2C协议基本形式
I2C的输入输出结构采用的是开漏的结构 开漏结构 不能够自主得到高电平,所以需要通过外部上拉电阻 来的实现 I2C 通信过程中的高电平。上拉电阻 的大小取决于 I2C 不同模式时的灌电流大小。这种结构作为逻辑输出时候,必须要有外部上拉,一般是通过电阻加到VCC电源,平时保持高电平,当输入低电平时也可被拉低,也就是说此时的开漏输出的可以作为外部的输入I/O
因为多个设备共用一条I2C总线,如果 I2C 使用的是推挽输出,假设在某个时间,A设备和B设备刚好在不同的电平输出,则会引起短路。

下图是I2C 获得高低电平的情景。
如果我们不接上拉电阻,设备的I2C SCL SDA引脚是浮空状态,浮空的意思是没有确定的电平,可能是高,也可能是低。而根据I2C的协议,在总线空闲期间,SDASCL都是高电平,当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是标准上升沿时间;
通过上面这个公式可以计算出合适的取值。由上可知,供电电压决定上拉电阻的最小值,总线负载电容决定上拉电阻的最大值。
常见的上拉电阻阻值有1k1.5k2.2k4.7k5.1k10k等。

微信图片_20231016093913.png (68 KB )

微信图片_20231016093913.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

37

帖子

1

粉丝