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

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

3天内不再提示

IIC为什么要配置GPIO为开漏输出?

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2023-03-28 10:16 次阅读

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

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

060b2e7a-cca3-11ed-bfe3-dac502259ad0.png

推挽输出和开漏输出

推挽输出:

输出逻辑0,则N-MOS激活;

输出逻辑1,则P-MOS激活。

开漏输出:

在不接上拉电阻时, 输出逻辑0,则N-MOS激活;

输出逻辑1,P-MOS不会激活, 不会输出高电平。

在接上拉电阻时, 输出逻辑0,则N-MOS激活;

输出逻辑1,P-MOS激活, 可以输出高电平。

也就是说开漏输出如果不接上拉电阻, 没有输出高电平的能力。

如果需要开漏输出有输出高电平的能力需要接一个上拉电阻。目前很多单片机GPIO可以通过软件配置上拉电阻。

061b645c-cca3-11ed-bfe3-dac502259ad0.png

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

开漏输出的作用

防止短路:

在一些情况下(比如总线), 多个GPIO口可能会连接在同一根线上, 存在某个GPIO输出高电平, 另一个GPIO输出低电平的情况. 如果使用推挽输出, 你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起, 也就是短路了。

如果换成开漏输出呢? VCC和GND多了个电阻, 这样电路就是安全的.所以总线一般会使用开漏输出。

063170a8-cca3-11ed-bfe3-dac502259ad0.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会自动配置为开漏输出。

审核编辑:汤梓红

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

    关注

    28

    文章

    856

    浏览量

    40253
  • IIC
    IIC
    +关注

    关注

    11

    文章

    300

    浏览量

    38271
  • MOS
    MOS
    +关注

    关注

    32

    文章

    1245

    浏览量

    93460
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51905
  • 开漏输出
    +关注

    关注

    0

    文章

    34

    浏览量

    7311

原文标题:IIC为什么要配置GPIO为开漏输出?

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一文详解单片机的GPIO模式

    3.3V供电单片机,模式GPIO内部示意图如下所示,当内部MOS管关断时,上拉电阻的作用下,GPIO可以正常输出5V。
    发表于 11-15 15:23 5389次阅读
    一文详解单片机的<b class='flag-5'>GPIO</b><b class='flag-5'>开</b><b class='flag-5'>漏</b>模式

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

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

    GPIO实现推挽输出输出的关键是什么

    以STM32参考手册中的GPIO输出配置图为例:看到输出驱动器虚线框中的内容,输出驱动器中的P-MOS和N-MOS两个MOS管就是实现推挽
    发表于 02-28 06:48

    STM32的GPIO知识点:输出和推挽输出

    “推挽输出”和“输出”的模式。这里的电路会在下面很详细地分析到。 TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当
    发表于 12-22 18:10

    输出_什么是输出

    什么是输出,输出:OC门的输出就是
    发表于 03-31 15:31 7334次阅读

    输出与推挽输出比较

    stm32 gpio 输出与推挽输出的区别。
    发表于 05-19 15:32 16次下载

    GPIO的推挽输出输出以及其优缺点分析

    GPIO的功能,简单说就是可以根据自己的需要去配置输入或输出。但是在配置GPIO管脚的时候,常
    的头像 发表于 01-05 15:31 3.4w次阅读
    <b class='flag-5'>GPIO</b>的推挽<b class='flag-5'>输出</b>和<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>以及其优缺点分析

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

    最近在调ICM20602模块(一个六轴陀螺仪和加速度计), 使用IIC通信协议, 这个过程中遇到一个困扰我很长时间的问题。 IIC协议正确, 但是一直读取失败.最后发现因为没配置GPIO
    的头像 发表于 03-09 13:57 1.8w次阅读
    <b class='flag-5'>IIC</b>为什么要用<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>和上拉电阻?

    IIC 输出相关分析资料下载

    电子发烧友网你提供IIC 输出相关分析资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用
    发表于 03-28 08:44 16次下载
    <b class='flag-5'>IIC</b> <b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>相关分析资料下载

    STM32-GPIO端口模式配置--推挽、

    上拉输入、下拉输入、浮空输入、模拟输入、推挽输出输出的分析
    发表于 11-30 21:06 8次下载
    STM32-<b class='flag-5'>GPIO</b>端口模式<b class='flag-5'>配置</b>--推挽、<b class='flag-5'>开</b><b class='flag-5'>漏</b>等

    GPIO配置

    有关推挽输出输出、复用输出、复用推挽
    发表于 12-01 10:36 13次下载
    <b class='flag-5'>GPIO</b><b class='flag-5'>配置</b>

    GPIO推挽输出输出模式区别详解

    以STM32参考手册中的GPIO输出配置图为例:看到输出驱动器虚线框中的内容,输出驱动器中的P-MOS和N-MOS两个MOS管就是实现推挽
    发表于 01-13 16:24 19次下载
    <b class='flag-5'>GPIO</b>推挽<b class='flag-5'>输出</b>和<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>模式区别详解

    STM32的GPIO的输入,输出,推挽,上拉,下拉的关系

    STM32的GPIO的输入,输出,推挽,上拉,下拉的关系
    发表于 01-14 14:45 25次下载
    STM32的<b class='flag-5'>GPIO</b>的输入,<b class='flag-5'>输出</b>与<b class='flag-5'>开</b><b class='flag-5'>漏</b>,推挽,上拉,下拉的关系

    输出和推挽输出

    在STM32或者GD32中,普通的输出GPIO输出方式主要是输出和推挽
    的头像 发表于 11-24 10:23 1.3w次阅读
    <b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>和推挽<b class='flag-5'>输出</b>

    什么是浮动输入和输出

    一些微控制器输出可以设置(或者只能设置
    的头像 发表于 11-27 15:45 1124次阅读
    什么是浮动输入和<b class='flag-5'>开</b><b class='flag-5'>漏</b><b class='flag-5'>输出</b>