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

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

3天内不再提示

IIC为什么要用开漏输出和上拉电阻?

Q4MP_gh_c472c21 来源:玩转嵌入式 作者:玩转嵌入式 2021-03-09 13:57 次阅读

最近在调ICM20602模块(一个六轴陀螺仪和加速度计), 使用IIC通信协议, 这个过程中遇到一个困扰我很长时间的问题。

IIC协议正确, 但是一直读取失败.最后发现因为没配置GPIO为开漏输出。

推挽输出和开漏输出

推挽输出: 输出逻辑0,则N-MOS激活; 输出逻辑1,则P-MOS激活。 开漏输出: 在不接上拉电阻时, 输出逻辑0,则N-MOS激活; 输出逻辑1,P-MOS不会激活, 不会输出高电平。 在接上拉电阻时, 输出逻辑0,则N-MOS激活; 输出逻辑1,P-MOS激活, 可以输出高电平。
也就是说开漏输出如果不接上拉电阻, 没有输出高电平的能力。 如果需要开漏输出有输出高电平的能力需要接一个上拉电阻. 目前很多单片机GPIO可以通过软件配置上拉电阻.

左图为开漏输出(接上拉电阻), 右图为推挽输出

开漏输出的作用

防止短路: 在一些情况下(比如总线), 多个GPIO口可能会连接在同一根线上, 存在某个GPIO输出高电平, 另一个GPIO输出低电平的情况. 如果使用推挽输出, 你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起, 也就是短路了(凉凉了). 如果换成开漏输出呢? VCC和GND多了个电阻, 这样电路就是安全的.所以总线一般会使用开漏输出.

76d0b9bc-7ec2-11eb-8b86-12bb97331649.png

线与: 开漏输出还能实现线与(自行百度), 减少一个与门, 简化电路.

IIC为什么用开漏输出和上拉电阻

IIC协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出, 而用推挽输出, 会出现主设备之间短路的情况. 至于为什么需要上拉电阻, 那是因为IIC通信需要输出高电平的能力. 为了实现多个主设备抢占总线时的仲裁.IIC只有两根线(SCL和SDA), 怎么判断哪个主设备占用总线(当然是先来后到了). 假设主设备A需要启动IIC, 他需要在SCL高电平时, 将SDA由高电平转换为低电平作为启动信号. 主设备A在把SDA拉高后, 它需要再检查一下SDA的电平。 为什么? 因为线与. 如果主设备A拉高SDA时, 已经有其他主设备将SDA拉低了. 由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平, 而是低电平. 说明其他主设备抢占总线的时间比它早, 主设备A只能放弃占用总线. 如果是高电平, 则可以占用。

这就是开漏输出在IIC通信中的另一个作用。 SDA是高电平, 说明主设备A可以占用总线, 然后主设备A将SDA拉低, 开始通信. SDA是低电平, 说明有人已经捷足先登了, 主设备A不能占用总线, 结束通信. 因此, 模拟IIC一定要将GPIO端口设置为开漏输出并加上上拉电阻.(硬件IIC会自动配置为开漏输出)。

原文标题:IIC为什么需要用开漏输出和上拉电阻?

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    85

    文章

    5036

    浏览量

    169614
  • 通信
    +关注

    关注

    18

    文章

    5699

    浏览量

    134359
  • IIC
    IIC
    +关注

    关注

    11

    文章

    285

    浏览量

    37792

原文标题:IIC为什么需要用开漏输出和上拉电阻?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32驱动cd4067遇到的几个疑问求解

    ,小白菜解决不了。 首先是,stm32i/o口输出的问题,将标有FT的引脚设置为输出,将
    发表于 04-10 07:51

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

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

    集电极输出电阻的缺点

    在晶体管集电极输出时需要电阻电阻会导致开关
    发表于 01-30 13:10

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

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

    EEPROM手册说IIC接口建议接K级电阻,可以不接吗?

    看到EEPROM手册说IIC接口建议接K级电阻,说这样可以提高稳定性,那不接行吗
    发表于 11-10 06:41

    i.MX6ULL--ElfBoard IIC接口介绍

    可以向 SCL 线发出低电平信号以延长总线时钟信号周期。总线空闲时,因各设备都是输出电阻
    发表于 11-08 10:01

    电阻到底是咋完成的啊?

    电阻到底是咋完成的啊
    发表于 10-31 06:52

    电阻主要与什么有关?是否高波特率必须强

    一般IIC和SPI接口建议加上电阻 但有时(比如SPI)不,或使用内部
    发表于 10-28 06:23

    请问单片机外设电路什么情况下使用上电阻或下拉电阻

    本人刚入门没多久 经验不足。使用过IIC通信输出 要匹配上电阻?有没有大神能够总结一下 那
    发表于 10-19 07:21

    PCA9685芯片的模拟的IIC需要加上电阻吗?

    pca9685用的是IIC通讯,如果用的是模拟的IIC,需要加上电阻吗?
    发表于 10-18 06:59

    输出模式下不外接上电阻有驱动能力吗?

    输出模式下不外接上电阻有驱动能力吗
    发表于 10-15 13:28

    形式的电路有哪些特点?

    输出模式 输出输出端相当于三极管的集电极.
    发表于 06-20 08:38

    76e003 P1.3 P1.4输出上升沿缓慢是怎么回事?

    请教各位大师,我用003P1.3 P1.4 输出做模拟I2C,电阻4.7K(试过1K有改
    发表于 06-14 09:09

    GPIO上有电阻吗?

    GPIO上有电阻吗? 如果不是,那么当您释放按钮时,GPIO 基本只是浮动的,可以是任何值。 要么从 GPIO
    发表于 05-22 06:54

    今日说“法”:、下拉电阻那点事

    确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用,下拉同理。是对器件注入电流,下拉是输出电流;弱强只是
    发表于 05-18 17:30