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

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

3天内不再提示

开漏输出在IIC通信中的作用

Q4MP_gh_c472c21 来源:玩转嵌入式 作者:玩转嵌入式 2022-03-12 10:48 次阅读

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

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

开漏输出在IIC通信中的作用

推挽输出和开漏输出

推挽输出: 输出逻辑0,则N-MOS激活;输出逻辑1,则P-MOS激活。

开漏输出:在不接上拉电阻时, 输出逻辑0,则N-MOS激活;输出逻辑1,P-MOS不会激活, 不会输出高电平。在接上拉电阻时, 输出逻辑0,则N-MOS激活;输出逻辑1,P-MOS激活, 可以输出高电平。

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

开漏输出在IIC通信中的作用

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

开漏输出的作用

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

开漏输出在IIC通信中的作用

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

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】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

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

    关注

    85

    文章

    5037

    浏览量

    169638
  • IIC
    IIC
    +关注

    关注

    11

    文章

    285

    浏览量

    37806
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50573

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

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

收藏 人收藏

    评论

    相关推荐

    OFDM在短波通信中的应用

    介绍了当前短波(HF)通信中串行、并行两种体制的最新发展现状,着重讨论了正交频分复用(OFDM)技术在HF通信中的实际应用,最后指出在短波通信中采用OFDM体制需要解决的几个关键
    发表于 11-01 16:40 3079次阅读

    推挽输出输出

    推挽输出输出的区别 推挽输出:可以输出高,低电平,连接数字器件;
    发表于 11-18 22:05

    这个输出电路什么用途?

    这是一本单片机书上讲输出的例图,我感觉有问题。 mos管的极电压取决于栅极电压,并不是i/o口在控制栅极,不管栅极高还是低,i/o口并没有在
    发表于 02-29 20:37

    IIC总线的总结与问题(IIC输出输出 硬件IIC要求从设备有应答能力 IC在多字节的读取的时候必须要正确的给出应答)

    本文摘录于本人博客:http://blog.csdn.net/chengdong1314/article/details/51995861IIC输出
    发表于 11-14 00:23

    GPIO推挽模式注意事项

    时需要切换方向,重新配置是输入还是输出模式。 模式时ODR输出高电平时,不用切换为输入模式也可以读取到IO口当前状态。 以上在使用IIC
    发表于 07-04 08:12

    如何使用IO口的和推挽输出

    IO口的和推挽输出如何使用?
    发表于 09-08 23:40

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

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

    单片机IO口输出和推挽输出有什么区别

    1.单片机IO口输出和推挽输出有什么区别?输出
    发表于 12-07 06:13

    串行通信中IIC总线工作原理是什么

    串行通信中IIC总线工作原理51本身不带IIC总线 ,使用程序模拟IIC通信协议常用的串行总线协议UART、1-wire、I2C和SPI总
    发表于 12-08 07:52

    推挽输出输出的区别是什么?

    推挽输出输出的区别是什么?STM32 UART怎么使用?
    发表于 12-10 07:37

    什么是上拉下拉、什么是输出和推挽输出

    1、什么是上拉下拉、什么是输出和推挽输出?其实很简单。推挽输出就是你想输出1就
    发表于 01-17 07:44

    输出和推挽输出的区别

    1.输出和推挽输出的区别开输出只能输出低电平,
    发表于 01-25 06:31

    推挽输出输出有何差异

    1.推挽输出使GPIO口输出高电平或者低电平主要寄存器为端口配置地寄存器和端口配置高寄存器,每四个位控制一个GPIO.2 推挽输出
    发表于 02-24 07:20

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

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

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

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