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

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

3天内不再提示

【干货】IIC上拉电阻的选择与计算

哈哈hfgfdf 来源:嵌入式学习资料 作者:嵌入式学习资料 2022-12-13 16:30 次阅读

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

1、根据I2C总线规范,总线空闲时两根线都必须为高;
这是规定,动不了的,不然什么叫标准呢?其实所谓的这个神圣的标准也并不是多么邪乎,你想啊,只有是高的才能拉成低的,难道谁可以把低的拉成高的吗?所以这是之所以规定空闲时必须为高的一个原因,要是保持“低”的话,那是不可能成为“多主”总线的。
2、上拉电阻的问题;
其实各个I2C接口工作时只检测高、低电平,管你有没有什么上拉电阻呢!
但问题是,你要是直接接电源的来实现高的话,一旦其他器件拉低时岂不危险?
所以,这个上拉电阻有保护作用。如果你确信直接接电源没问题(比如有短路保护等,呵呵),也可以试一试,问题的关键是主器件要能正确的拉低或置高,从器件要能明确地区分高、低就可以了,这是问题的关键,当然,还有时序问题,不能混乱!
STM32f103的I2C例程:

577456fe-7ac0-11ed-abeb-dac502259ad0.png


理论上,软件IIC可以使用任何通用引脚。
有人用PA2和PA3进行IIC通信

57a593ae-7ac0-11ed-abeb-dac502259ad0.png

3、电阻大小的问题;
最直接的,牵涉到两方面的问题,首先是功耗的问题,其次是速度的问题,二者是矛盾的!如果你想尽量提高速度,那么就牵涉到总线电容的问题,其实很容易理解,上拉电阻与总线的电容形成了RC,高速时将直接影响通讯!因为总线拉高时有个充电时间以及高电平的阀值,如果还没有充电到足以保证从器件可以识别的高电平的阀值时主器件就以为完成了一个总线动作的话,那么通讯肯定是不能进行的!
如果你想尽可能降低功耗,那么就要尽可能增大电阻以最大可能的减小电路各部分的消耗电流从而实现整体降低功耗!但不可能无限大,否则充电时间你会受不了的!

备注:

I2C的上拉电阻可以是1.5K,2.2K,4.7K, 电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响,一般接1.5K或2.2K

I2C上拉电阻确定有一个计算公式:
Rmin={Vdd(min)-0.4V}/3mA
Rmax=(T/0.874) *c, T=1us 100KHz, T=0.3us 400KHz
C是Bus capacitance
Rp最大值由总线最大容限(Cbmax)决定,Rp最小值由Vio与上拉驱动电流(最大取3mA)决定;
于是 Rpmin=5V/3mA≈1.7K(@Vio=5V)或者2.8V/3mA≈1K(@Vio=2.8V)

Rpmax的取值:参考周公的I2C总线规范中文版P33图39与P35图44

标准模式,100Kbps总线的负载最大容限<=400pF;快速模式,400Kbps总线的负载最大容限<=200pF,根据具体使用情况、目前的器件制造工艺、PCB的走线距离等因素以及标准的向下兼容性,设计中以快速模式为基础,即总线负载电容<200pF,也就是传输速度可以上到400Kbps是不成问题的。于是Rpmax可以取的范围是1.8K~7K @ Vio=5V对应50pF~200pF

上拉电阻阻值的确定

由于I2C接口采用Open Drain机制,器件本身只能输出低电平,无法主动输出高电平,只能通过外部上拉电阻RP将信号线拉至高电平。因此I2C总线上的上拉电阻是必须的!

RP不宜过小,一般不低于1KΩ

一般IO端口的驱动能力在2mA~4mA量级。如果RP阻值过小,VDD灌入端口的电流将较大,这导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V);如果灌入端口的电流过大,还可能损坏端口。故通常上拉电阻应选取不低于1KΩ的电阻(当VDD=3V时,灌入电流不超过3mA)。

RP不宜过大,一般不高于10KΩ

由于端口输出高电平是通过RP实现的,线上电平从低到高变化时,电源通过RP对线上负载电容CL充电,这需要一定的时间,即上升时间。端口信号的上升时间可近似用充电时间常数RPCL乘积表示。

信号线负载电容(对地)由多方面组成,包括器件引脚、PCB信号线、连接器等。如果信号线上挂有多个器件,负载电容也会增大。比如总线规定,对于的400kbps速率应用,信号上升时间应小于300ns;假设线上CL为20PF,可计算出对应的RP值为15KΩ。

如果RC充电时间常数过大,将使得信号上升沿变化缓慢,达不到数据传输的要求。

因此一般应用中选取的都是几KΩ量级的上拉电阻,比如都选取4K7的电阻。

小阻值的RP电阻增大了端口Sink电流,故在可能的情况下,RP取值应稍大一点,以减少耗电。另外,通产情况下,SDA,SCL两条线上的上拉电阻取值是一致的,并上拉到同一电源上。

PCB布局布线与抗干扰设计

I2C信号线属于低速控制线,在手机PCB设计时,按通常的控制IO对待即可,无需做特别的保护设计,一般不用担心受到噪声源干扰。

但在一些特定的情况下,比如折叠、滑盖机型中,I2C的两根信号线需要通过转轴或滑轨处的FPC,此时由于信号路径比较长,距离天线比较近,而且Open drain的输出级对地阻抗大,对干扰比较敏感,因此比较容易受到RF信号源的干扰。在这种情况下,就应适当注意对I2C信号线的保护。比如I2C两条信号线(SDA,SCL)等长度地平行走线,两边加地线进行保护,避免临近层出现高速信号线等。

上拉电阻应安置在OD输出端附近。当I2C总线上主从器件(Master& Slave)两端均为OD输出时,电阻放置在信号路径的中间位置。当主设备端是软件模拟时序,而从设备是OD输出时,应将电阻安置在靠近从设备的位置。

I2C协议还定义了串联在SDA、SCL线上电阻Rs。该电阻的作用是,有效抑制总线上的干扰脉冲进入从设备,提高可靠性。这个电阻的选择一般在100~200ohm左右。当然,这个电阻并不是必须的,在恶劣噪声环境中,可以选用。

比如常用的FM接收模块或者Capsense触摸感应功能块,都是通过I2C接口控制的。I2C接口信号从处理器出发,经过PCB上的信号路径,进入上述电路单元。I2C信号线上载有一定干扰,这种干扰虽然幅度并不很大,但还是会影响敏感的FM接收模块或Capsense触摸感应功能块。此时,可以通过在靠近FM模块或触摸感应模块的I2C信号线上串接Rs电阻,即可有效降低干扰的影响。此外,上拉电阻端的电源也要进行退耦处理。

软件模拟I2C时序

由于一般的I2C应用速率并不高(400kbps),使用处理器的IO口模拟I2C波形,完全可以胜任(处理器一般担任Master,占有I2C通信的控制权,无需担心随机的I2C通信服务中断其他任务的执行)。

处理器分配给I2C任务的IO口,要求可以输出高低电平,还能配置为输入端口。处理器根据总线规范以及从设备的时序要求,利用2条IO信号线,模拟I2C接口时序波形,进行I2C通信。

处理器发送数据时,通过IO口输出高电平,上升时间基本与外部上来电阻阻值无关,且比用外部上拉电阻上拉到高电平快很多。处理器在接受数据时,即便上拉电阻阻值选的大一些,从设备输出数据的波形上升沿缓慢,但由于处理器使用软件采样的而非硬件采样,因此,对数据传输的结果并不影响。也就是说,使用IO口模拟I2C时序时,上拉电阻阻值可以适当选的大一些。

需要指出的是,使用软件模拟最多只能完成单Master的应用,对于多Master应用,由于需要进行总线控制权的仲裁管理,使用软件模拟的方法很难完成。

I2C总线空闲的时候,两条信号线应该维持高电平。否则,上拉电阻上会有耗电。特别是在上电过程中,IO线上电平也应保持在高电平状态。也就是说:当Master的I2C使用的是IO软件模拟时,一定要保证该两个IO上电默认均为输入(或高阻)或者输出高电平,切不可默认为输出低电平。IO默认为输入时,可以通过外部上拉电阻将I2C信号线拉至高电平。

I2C应用中上拉电阻电源问题

在部中分应用中,还存在主从设备以及上拉电阻电源不一致的情况,比如Camera模组。在很多设计方案中,Camera模组不工作时,并不是进入Power Down模式,而是直接关闭模组供电VDDS。此时,处理器与模组相互连接的所有信号线都应该进入高阻态,否则就会有电流漏入模组;而对于此时的I2C控制信号线来说,由于上拉电阻的存在,必须关断上拉电阻电源VDDP。如果上拉电阻使用的是系统电源VDDM(VDDP=VDDM),无法关闭,就会有漏电流进入模组;因此这种情况下,应该使用VDDS作为上拉电阻电源(VDDP=VDDS),这样上拉电阻电源与Slave电源即可同时关闭,切断了漏电路径。

另外需要注意的是,在上述应用实例中选择的IO,应该选取上电默认为输入(或高阻)才行。

总的来说:电源电压限制了上拉电阻的最小值 ;负载电容(总线电容)限制了上拉电阻的最大值
补充:在I2c总线可以串连300欧姆电阻RS可以用于防止SDA和SCL线的高电压毛刺: I2c从设备的数量受总线电容,<=400pF的限制

做过I2C碰到过各种问题,多半是上拉电阻或者控制器时钟的问题。没上拉电阻或者上拉电阻过大,都会导致不稳定而出现寻址不到的问题。

审核编辑 黄昊宇

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

    关注

    86

    文章

    5517

    浏览量

    172070
  • IIC
    IIC
    +关注

    关注

    11

    文章

    300

    浏览量

    38344
收藏 人收藏

    评论

    相关推荐

    I2C总线上电阻阻值如何确定?

    导读I2C总线在产品设计中被广泛应用,尽管其结构简单,但经常发生电阻设计不合理的问题。本文将对I2C
    的头像 发表于 12-27 11:34 632次阅读
    I2C总线上<b class='flag-5'>拉</b><b class='flag-5'>电阻</b>阻值如何确定?

    I2C总线上电阻计算

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

    IIC信号线需要增加上电阻,是因为IIC的IO是什么

    IIC通信中扮演着至关重要的角色,而电阻的加入则是实现这种通信方式有效性和可靠性的关键。以下是对此现象的介绍: 一、IIC通信与开漏输出
    的头像 发表于 10-06 15:50 746次阅读

    电阻和下拉电阻有什么区别?#硬件工程师 #电路设计 #扬兴科技

    电阻
    扬兴科技
    发布于 :2024年09月26日 16:41:20

    mos驱动电阻如何选择计算

    MOS驱动电阻选择计算是MOSFET驱动电路设计中的重要环节,它直接影响到MOSFET的开关性能、稳定性和效率。以下是对MOS驱动电阻选择
    的头像 发表于 09-18 10:36 1388次阅读

    如何计算电阻的值

    ,但在对性能有更高要求或特定条件下,则需要通过更为精确的计算来确定电阻值。本文将详细介绍如何计算电阻的值。 首先,我们需要理解
    的头像 发表于 09-09 17:20 511次阅读

    电路设计基础:电阻、下拉电阻分析

    门就具备了输出高、低电平的功能,而且电平被固定的钳位在VCC或者GND。 电阻阻值选择原则: 1、从节约功耗及芯片的灌电流能力考虑应当足够大:
    发表于 08-22 13:59

    电阻和下拉电阻的用处和区别介绍

    电阻和下拉电阻是电子电路设计中常用的两种电阻。尽管它们有共同点,例如影响电路的阻抗特性和限制电流流过电路的能力,但它们的工作原理和应用场
    的头像 发表于 05-02 15:18 4851次阅读
    <b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>和下拉<b class='flag-5'>电阻</b>的用处和区别介绍

    电阻如何实现低功耗设计

    电阻有助于降低系统的总功耗,同时保持电路的功能性和稳定性。那么电阻如何实现低功耗设计呢?
    的头像 发表于 05-02 15:00 1003次阅读

    电阻的作用是什么

    从器件输出端流出电流。所谓的强和弱指的是电阻
    的头像 发表于 05-02 14:51 3711次阅读
    <b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>的作用是什么

    请问STM32F429硬件IIC需要外围上电阻吗?

    如题,STM32F429使用IIC通信的时候,是否需要外加上电阻? 看过很多资料,都说是需要电阻
    发表于 04-24 06:35

    STM32cubemx在开漏和推挽输出模式下电阻和下拉电阻有什么作用和区别?

    只配置过输入的时候和下拉电阻。不知道在开漏和推挽输出模式下电阻和下拉
    发表于 03-27 07:20

    电阻和下拉电阻是什么

    就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。而下拉电阻是直接接到地上,接二极管的时候
    发表于 02-29 12:39 4057次阅读
    <b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>和下拉<b class='flag-5'>电阻</b>是什么

    IO内置电阻的阻值是多少?所有IO都有内置电阻么,阻值是否一样?

    IO内置电阻的阻值是多少?所有IO都有内置电阻么,阻值是否一样?
    发表于 02-21 06:17

    如何确定复位IC(电压检测器)的电阻、电压浮动呢?

    在此说明由电阻引起的电压浮动和选择电阻的方法
    的头像 发表于 02-20 16:37 1239次阅读
    如何确定复位IC(电压检测器)的<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>、电压浮动呢?