0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在I2C总线上需要接上拉电阻?您对I2C上拉电阻足够了解吗

精通单片机与嵌入式 来源:玩转单片机与嵌入式 作者:济南行远智能科技 2022-11-24 09:19 次阅读

相信很多人都清楚,在I2C总线上需要接上拉电阻?但是您针对对I2C上拉电阻足够了解吗?本文带您详细掌握一下I2C的上拉电阻。目录如下:

上拉电阻的含义、上拉电阻在 I2C 电路中的作用

根据VOL和IOL计算I2C上拉电阻的最小值

根据总线电容计算上拉电阻的最大值

一:I2C的上拉电阻

我们知道,在I2C的电路中,在SCL、SDA线与电源之间通常会接一个电阻,这个电阻称之为上拉电阻。

但什么是上拉电阻? 上拉电阻主要用于为信号线或GPIO引脚提供默认状态。通常选择几K或几十K阻值的电阻。阻值较大的电阻确保不会通过电阻不断地将过多的电流引入到信号线上(5V Vdd / 10KΩ = 0.5mA 电流)。在常见的MCU中有大约几十K的电阻可以通过代码启用的上拉电阻将 GPIO 引脚预设为逻辑高电平状态。

在I2C 的电路中,I2C设备(芯片)的 SCL 和 SDA 的内部电路是“开漏”的,这意味着它们可以吸收电流,但无法提供电流。

通俗点讲就是:这种信号可以被设置为低电平,但不能被设置为高电平。

所以我们在电路中以逻辑高电压的形式给这些信号提供电流,在常见的芯片中,电压通常为5V或3.3V。为了提供这个高电压,你需要分别在在 5V 和 SCL 、SDA 总线之间连接了一个上拉电阻。如下图所示:

d7c20d34-6b83-11ed-8abf-dac502259ad0.png

但是,I2C上拉电阻的阻值和封装可不是随便选择的。也是有理论依据的

二:上拉电阻最小值计算

在数字TTL电路中,通常情况下定义的高低电平电压值如下:

“低电平的电压”VL=0.3 x Vdd

“高电平的电压”VH=0.7 x Vdd

所以,我们将I2C设备接到5V系统的电路中时,SDA和SCL的电压高于3.5V时被识别为“高电平”,低于1.5V时被识别为“低电平”。在1.5V~3.5V之间的电平,我们不能确定为高or低~ I2C设备内是有mosfet的,我们需要保证电压值高于一定值才能使mosfet导通,但电压值也不能高太多,否则容易造成mosfet损坏。

此处以LED举例:假设LED的压降是1.7V,需要高于1.7V的电压才能使LED导通,但是电流必须在LED的限定值以内。如压降为1.7V、额定电流为30mA的LED,想要LED点亮的理想情况是:(5V-1.7V)/30mA=110欧。所以针对该LED选用的限流电阻为110欧。

对于I2C引脚,在芯片手册中可以清楚的查到VOl(输出低电压)和IOL(输出低电流)。以AT24C128 EEPROM芯片的手册为例:

d7f876b2-6b83-11ed-8abf-dac502259ad0.png

按照上述参数计算:(5-0.4)V / 2.1mA=2.2K。

我们计算出的这个值,就是I2C总线上拉电阻的最小值。我们如果选用更小的电阻值,就可能对I2C设备造成损坏。

三:上拉电阻最大值计算

电容是无处不在的,I2C总线也不例外。I2C电路中SDA和SCL引脚也会存在某种形式的引脚电容。

同样,查看AT24C128的数据手册可以查到对应的引脚电容。如下图所示。

d822b198-6b83-11ed-8abf-dac502259ad0.png

包括引脚电容、PCB电容等所有的叠加,我们可以理解成有一堆的小电容连到I2C总线上,现在暂且将这些电容的累加定义为Cbus。

我们之所以关心Cbus,是因为在信号变化的过程中,其实是对Cbus进行充电和放电,这样会影响到信号的延时时间。

这些电容是如何充电的呢?就是通过VCC和上拉电阻给电容充电。

从AT24C128手册中可发现,SDA的引脚电容为8pF,SCL的引脚电容为6pF。假设PCB的电容平均值为10pF。则,在SDA总线的电容总计18pF;在SCL总线的电容总计为16pF。

关于PCB电容怎么计算,本公众号将以专门的文章进行讲解,此处不再讲述。欢迎持续关注本公众号。

我们现在关注的是上拉电阻的阻值最大值应该是多少才能保证SDA和SCL在要求的时间内进行信号高低电平的切换。引入总线电容就是为了确定上拉电阻最大值。

在AT24C128的收据手册中,也可以查询到上升时间tR的值,如下图。

d83e1604-6b83-11ed-8abf-dac502259ad0.png

tR就是I2C总线最大允许的上升时间。除了芯片手册有规定tR值,I2C总线也规定了tR的值如下:

d88d8f5e-6b83-11ed-8abf-dac502259ad0.png

下面引入上拉电阻计算的重量级公式:

d8ab467a-6b83-11ed-8abf-dac502259ad0.png

到目前为止,我们已经确定了tR和Cb的值,就可以计算出上拉电阻的最大值。以400KHz的快速模式I2C为例计算:

Rp sda max=300ns/(0.8473x18pf)≈ 18K

Rpscl max=300ns/(0.8473x16pf)≈18K

所以,18K就是我们确定的I2C总线上拉电阻的最大值。

结合2.2K的最小值,I2C总线的上拉电阻只能选择:2.2K~18K之间的阻值,一般选择4.7K或10K。

四:总结

上面的计算我们是只计算了I2C总线只有AT24C128的情况,只需要选用2.2K~18K之间的电阻即可。

当I2C总线挂接的设备增加、PCB布线不同等多个方面都会影响到上拉电阻阻值的选择。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 上拉电阻
    +关注

    关注

    5

    文章

    359

    浏览量

    30606
  • SDA
    SDA
    +关注

    关注

    0

    文章

    124

    浏览量

    28126
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    17057
  • I2C接口
    +关注

    关注

    1

    文章

    125

    浏览量

    25190

原文标题:【硬件】I2C的上拉电阻可不是随便选的……超全讲解I2C的上拉电阻

文章出处:【微信号:精通单片机与嵌入式,微信公众号:精通单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电阻的含义、电阻I2C电路中的作用

    我们知道,I2C的电路中,SCL、SDA线与电源之间通常会接一个电阻,这个电阻称之为
    发表于 09-08 14:43 7317次阅读

    I2C总线上电阻的计算实例

    。当开路漏极接口未将线路驱动为低电平时,电阻器将线路拉高。电阻器的值是
    发表于 06-02 10:17 1539次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>的计算实例

    I2C为什么要接上电阻

    I2C为什么要接上电阻?因为它是开漏输出。
    发表于 07-08 16:14 2717次阅读
    <b class='flag-5'>I2C</b>为什么要<b class='flag-5'>接上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>?

    聊聊I2C总线上电阻

    I2C总线上电阻的选择以及作用,以及计算方法。
    的头像 发表于 07-14 12:49 4349次阅读
    聊聊<b class='flag-5'>I2C</b><b class='flag-5'>总线上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>

    开发板I2C总线上为什么没有电阻

    开发板I2C连接到RTC(RX8010)芯片,I2C总线上没有接上电阻,LS1012A手册上说
    发表于 01-05 06:28

    I2C总线一定要接上电阻电阻阻值怎么确定?

    I2C为什么要接上电阻?因为它是开漏输出。 1 为什么是开漏输出? I2C协议支持多个主设备与多个从设备
    的头像 发表于 06-21 10:30 1.5w次阅读

    I2C为什么要接上电阻

    I2C为什么要接上电阻?因为它是开漏输出!
    的头像 发表于 06-21 16:34 1.3w次阅读
    <b class='flag-5'>I2C</b>为什么要<b class='flag-5'>接上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>?

    I2C电阻设计

    I2C电阻 一些PCB的layout中,大家往往会看到
    发表于 01-14 14:10 10次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>设计

    I2C总线的常见通信方式

    SDA和SCL需要接上电阻,根据总线上I2C设备数量,系统的通信速度,设计选择不同的
    发表于 06-29 11:28 6848次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b>的常见通信方式

    I2C电阻如何选择合适的阻值?

    I2C总线是微电子通信控制领域中常用的一种总线标准,具备接线少,控制简单,速率高等优点。I2C电路中常见的
    的头像 发表于 05-10 16:17 6917次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>如何选择合适的阻值?

    I2C的开漏输出和电阻

    信息和接收信息无法同时进行,I2C工作时的传输速率标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。I2C总线采用漏极开路的设计,
    的头像 发表于 07-02 16:39 5457次阅读
    <b class='flag-5'>I2C</b>的开漏输出和<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>

    电阻I2C电路中的作用 I2C电阻的计算方法

    相信很多人都清楚,I2C总线上需要接上电阻?但是
    的头像 发表于 07-25 10:37 2685次阅读
    <b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b><b class='flag-5'>在</b><b class='flag-5'>I2C</b>电路中的作用 <b class='flag-5'>I2C</b><b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>的计算方法

    I2C总线上电阻的必要性

    数据线加上电阻。这一设计不仅关乎技术的实现,更涉及系统安全和信号传输效率的优化。本文将深入探讨I2C总线上加上
    的头像 发表于 09-09 17:16 995次阅读

    I2C总线上电阻计算

    电子发烧友网站提供《I2C总线上电阻计算.pdf》资料免费下载
    发表于 10-08 09:54 1次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>总线上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>计算

    I2C总线为什么要接上电阻

    I2C为什么要接上电阻?因为它是开漏输出。 为什么是开漏输出? I2C协议支持多个主设备与多个从设备
    的头像 发表于 11-20 10:07 441次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b>为什么要<b class='flag-5'>接上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>