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

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

    关注

    88

    文章

    5736

    浏览量

    178573
  • 通信
    +关注

    关注

    18

    文章

    6318

    浏览量

    139569
  • IIC
    IIC
    +关注

    关注

    11

    文章

    308

    浏览量

    40381

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ‌onsemi NL37WZ07输出三路缓冲器技术解析与应用指南

    安森美 NL37WZ07输出型三路缓冲器是高性能三路缓冲器,工作采用1.65V至5.5V电源。内部电路由多个级组成,包括一个
    的头像 发表于 11-25 15:29 226次阅读
    ‌onsemi NL37WZ07<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>三路缓冲器技术解析与应用指南

    请问CW32F003内部电阻是多少?

    最近在调试DS18B20,用寄生电源,所以需要电阻,如果不接外部电阻,芯片内部的
    发表于 11-21 06:15

    USART RX引脚应该上还是浮空?

    电阻(如4.7kΩ~10kΩ)可稳定空闲状态电平。 /集电极输出:若发送端TX为
    发表于 11-19 06:14

    GPIO无输出/输入的故障排查

    1、确认时钟已使能。 2、检查 GPIO 模式设置是否正确(输出:推挽/? 输入:浮空//下拉?)。 3、检查复用功能映射(如果该
    发表于 11-18 07:37

    用STM32F407的IO去驱动5V的外部电阻,请问VDD_FT的电压范围是多少?

    目前想用STM32F407的IO去驱动5V的外部电阻,看手册5V容忍的VDD_FT且有保护二极管。 请问VDD_FT的电压范围是多少?
    发表于 07-10 06:03

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

    电阻、下拉电阻在电子元器件间中,并不存在上电阻和下拉
    的头像 发表于 05-22 11:45 1601次阅读
    电路设计基础:<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>、下拉<b class='flag-5'>电阻</b>分析

    CYUSB3065 (CX3) GPIO 所有输出都是推挽还是? 需要配置外部/下拉电阻吗?

    CYUSB3065 (CX3) GPIO 所有输出都是推挽还是? 需要配置外部/下拉电阻
    发表于 05-12 07:42

    嵌入式硬件杂谈:推挽、、高阻态、电阻

    对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对推挽、、高阻态、
    的头像 发表于 04-17 19:31 1820次阅读
    嵌入式硬件杂谈:推挽、<b class='flag-5'>开</b><b class='flag-5'>漏</b>、高阻态、<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>

    一次性说清电阻和下拉电阻

    在电子元件领域,电阻与下拉电阻并非独立的物理实体,而是依据电阻在不同电路场景中的功能定义。它们的本质仍是普通
    的头像 发表于 04-03 19:34 1429次阅读
    一次性说清<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>和下拉<b class='flag-5'>电阻</b>

    74LV07AT具有输出的六路缓冲器规格书

    电子发烧友网站提供《74LV07AT具有输出的六路缓冲器规格书.pdf》资料免费下载
    发表于 02-08 18:03 0次下载
    74LV07AT具有<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>的六路缓冲器规格书

    电阻的工作原理详解

    在电子电路中,电阻起着非常重要的作用,其工作原理基于基本的电学定律,主要用于在特定的电路场景下将信号电平拉高。 首先,需要了解电路中的电平概念。在数字电路中,信号电平通常分为高电平
    的头像 发表于 02-05 17:40 1332次阅读

    电阻阻值怎么选择

    在电子电路设计中,电阻是一种常用的元件,它的阻值选择至关重要,需要综合考虑多个因素来确定合适的阻值。 一、功耗因素 功耗是选择
    的头像 发表于 02-05 17:25 1317次阅读

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

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

    Ads7142在执行一次完整的读寄存器时出现波形无法拉高的情况,怎么解决?

    以后可以正常,在执行第二个数据帧之后无法正常,所读到的数据正常。采用stm32处理器模拟IIC进行通讯,速度只有160K。上述波形是
    发表于 12-17 06:21

    ADS1118在5V供电时是不是还需要输出CS SCK DIN至5V?

    我在使用ADS1118 5V 供电时,数据读不出来。 想问一下ADS1118在 5V供电时是不是还需要输出CS SCK DIN至
    发表于 12-10 06:53