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

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

3天内不再提示

I2C的开漏输出和上拉电阻

CHANBAEK 来源:四梯 作者:四梯 2023-07-02 16:39 次阅读

I2C的开漏输出和上拉电阻

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线,它采用同步方式串行接收或发送信息,I2C总线是由串行数据线SDA和串行时钟线SCL组成。因为I2C只有一根数据线,故发送信息和接收信息无法同时进行,I2C工作时的传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。I2C总线采用漏极开路的设计,且SDA和SCL通过上拉电阻连接V CC 。今天就和大家来探讨一下I2C为什么需要用开漏输出和上拉电阻。

图片

首先,让我们简单地来回顾一下上周所介绍的推挽输出和开漏输出。

开漏输出:如果输出控制电路接收到低电平(0)时,此时地N-MOS导通,不管有没有接上拉电阻,I/O端口处的电平都会被N-MOS管拉低。但是当输出控制电路接收到高电平(1)时,N-MOS管截止,有上拉电阻存在时,输出高电平,没有上拉电阻存在时,输出电路开路,不能输出高电平。简而言之,开漏输出只有接上上拉电阻时,才有输出高电平的能力。

推挽输出:因为增加了一个P-MOS管,当CPU输出逻辑“1 ”时,P-MOS管导通,输出高电平。当CPU输出逻辑“0 ”时,P-MOS管截止,输出低电平。

为什么I2C需要用开漏输出?

因为I2C协议是支持多个主设备与多个从设备在一条总线上的,此时就会有多个GPIO口连接在同一条总线上,就势必会出现输出高、低电平不统一的情况,如果采用推挽输出时,就可能会出现某个GPIO的Vcc和GND连接在一起造成短路的情况,当你采用开漏输出时,因为有上拉电阻的存在就可以避免这一问题的出现。

为什么要上拉电阻?

①:因为开漏输出不接上拉电阻时无法输出高电平。而I2C通信需要有输出高电平的能力,故在漏极接上上拉电阻

②:I2C总线由SDA(串行数据接线)和SCL(串行时钟线)及上拉电阻组成,这样能够实现“线与”功能,不仅简化了电路,而且依照“线与”逻辑,可以实现多个主设备抢占总线时的仲裁,因为如果一个设备需要启动I2C时,它需要在SCL为高电平时,将SDA由高电平拉低作为启动信号,SDA拉高后,设备会对SDA的电平进行检查,如果此时SDA为低电平,就表示总线已经被占用,如果SDA为高电平,就说明总线可以被占用。

上拉电阻阻值怎么确定?

一般I\\0端口的驱动能力在2mA-4mA量级。

阻值不能过小:

当上拉电阻阻值过小时会导致从VCC输入的电路较大,进而使得MOS管不完全导通(由饱和状态变成放大状态),因为I2C协议规定,端口输出低电平的最高允许值为0.4V,故这样就会使得端口输出的低电平值增大。所以上拉电阻选取时不能低于1KΩ。

阻值不能过大:

因为上拉电阻和总线电容之间形成了RC,如果电阻过大会导致总线拉高的时间拉长以及输出阻抗的增大,当输出阻抗增大到可以与负载阻抗抗衡时,输出的高电平会因为分压而减少。

综上所述,建议上拉电阻选择使用1.5K、2.2K、4.7K。

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

    关注

    5

    文章

    346

    浏览量

    30260
  • 总线
    +关注

    关注

    10

    文章

    2714

    浏览量

    87228
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1348

    浏览量

    120880
  • SDA
    SDA
    +关注

    关注

    0

    文章

    122

    浏览量

    27561
  • 开漏输出
    +关注

    关注

    0

    文章

    29

    浏览量

    7258
收藏 人收藏

    评论

    相关推荐

    请问如何让PSoc4的I2C配置下工作?

    当设置为 \" 时,低速行驶 \" 没有信号。 你知道这是什么原因吗? 设备:cyble-014008-00 I2C CLK:100kHz I2C SDA:P3 [4
    发表于 01-22 06:14

    PSoc4 I2C配置下不起作用的原因是什么?

    I2C 为 4.7kΩ,驱动模式设置为极\"开路,驱动器低电平\" 但是,使用此设置,I2C 不会发出任何信号。 但是当设置为 “\"
    发表于 01-24 06:27

    推挽输出输出

    、PIN_B、PIN_C任意一个变低后,线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。3. 可以利用改变上
    发表于 11-18 22:05

    【转】单片机I/O口的输出及推挽输出区别

    、PIN_C任意一个变低后,线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。3. 可以利用改变上电源的电压,
    发表于 03-08 15:32

    请问单片机I/O口的输出及推挽输出区别是什么?

    、PIN_C任意一个变低后,线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。 3. 可以利用改变上电源的电压
    发表于 06-28 10:32

    请问TMS320F28335使用软件模拟I2C接口时GPIO应该如何设置?

    换个说法,如何将28335的GPIO设置成输出呢?之前使用硬件I2C接口,工作正常,但是因为I2C外设管脚和另外一个外设管脚重复了,只能
    发表于 10-08 17:10

    IIC为什么用输出电阻

    IIC通信协议推挽输出输出输出的作用IIC
    发表于 02-26 06:48

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

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

    单片机I2C时序相关资料推荐

    单片机 I2C 时序介绍在硬件I2C 总线是由时钟总线 SCL 和数据总线 SDA 两条线构成,连接到总线上的所有器件的 SCL 都连到一起,所有 SDA 都连到一起。I2C 总线
    发表于 01-07 06:19

    I2C总线简析

    在硬件I2C 总线是由时钟总线 SCL 和数据总线 SDA 两条线构成,连接到总线上的所有器件的 SCL 都连到一起,所有 SDA 都连到一起。I2C 总线是
    发表于 01-07 06:03

    如何去实现一种I2C电阻的设计呢

    I2C电阻 在一些PCB的layout中,大家往往会看到在I2C通信的接口处,往往会接入一个4.7K的
    发表于 01-14 07:22

    怎样使用STM32的GPIO模拟I2C总线时序

    使用STM32的GPIO模拟I2C总线时序,GPIO设置为模式,SDA和SCK外部必须使用上电阻,一般是4.7K。
    发表于 02-22 06:48

    I2C总线上电阻设计要点

    I2C电阻最小值确定为什么I2C需要
    发表于 11-29 08:00

    LPC55xx为I2C总线配置非“真正的”引脚,还需要考虑什么?

    端口引脚配置为“模式”(通过设置相应 ICON 寄存器中的 OD 位)?在我看来,如果不启用极开路模式,可能无法满足 I2C 总线规范,例如,从设备将信号
    发表于 05-16 07:21

    形式的电路有哪些特点?

    上。通过一只电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus 等总线判断总线占用状态的原理。
    发表于 06-20 08:38