首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

I2C需不需要上拉电阻?如何取值?

I2C总线特点

I2C总线是飞利浦公司开发的一种2线的半双工串行通信协议,通常用于电子设备的短距离通信。I2C总线具有两根总线,分别是时钟线SCL和数据线SDA;SCL用来进行通信双方信号同步,SDA用于进行数据交互。I2C总线是多主多从的拓扑结构,支持总线仲裁。

I2C为什么加上拉电阻?

I2C总线是一种我们使用得比较多的总线协议,在使用时是否考虑过要加上拉电阻?I2C总线需要加上拉电阻,但是我们大多数小伙伴都没有仔细想过为什么要加上拉电阻。

我们都知道I2C协议中规定I2C的SCL和SDA都是开漏输出,开漏输出只能输出低电平不能输出高电平,我们想要输出高电平就需要加上拉电阻来实现。I2C协议中为什么要规定SCL和SDA是开漏输出?首先I2C是多主多从结构,一条总线上挂有多个设备;如果是推挽输出,当两个设备的电平不同时则会造成短路。

I2C 架构

开漏输出除了能防止多设备使用时造成短路,还具有线与功能。I2C支持多主多从,当多个设备同时抢占总线时就需要仲裁机制。I2C总线是通过线与机制来实现总线仲裁的,在I2C协议中定义SDA为高电平时,说明总线空闲主设备可以占用总线,占用后将其拉低开始传输数据。SDA为低电平期间,标志总线已经被一个主设备占用其余主设备将退出。由于有上拉电阻,默认状态下SDA是高电平表示总线空闲,当总线上的一个设备将SDA拉低后,由于线与逻辑,SDA整条线都为低,其余设备就无法抢占总线了从而达到了仲裁的效果。

上拉电阻取值

上面我们已经说到,由于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等。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oxx1jpOkEDTKdK_54I0lRPbw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券