当前位置:网站首页>I2C【2】-IIC为什么需要用开漏输出和上拉电阻bug
I2C【2】-IIC为什么需要用开漏输出和上拉电阻bug
2022-06-21 20:14:00 【大城市的小蜗牛】
项目场景:
最近在调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多了个电阻, 这样电路就是安全的.所以总线一般会使用开漏输出.
线与: 开漏输出还能实现 线与 (自行百度), 减少一个与门, 简化电路.
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读取RTC没有问题,这个因为上拉电阻的阻值不同,RTC的上拉电阻即使推挽输出也可以正常拉高拉低电平。这个根据上文讲述的,可以查MCU的datasheet,确认IO的PMOS和NMOS的阻抗,计算一下电压。
还有一个简单粗暴的办法,直接使用示波器看波形也可以发现问题
边栏推荐
- Leetcode508- the most frequent subtree elements and - deep search
- How to Polish English papers?
- Do you really know binary tree? (Part I)
- Data types in JS (basic)
- Summary of intelligence problems
- 央企国电集团上海翔伟机电和中外海达成战略合作,捐赠2亿
- P6758 [BalticOI2013] Vim
- What are the authoritative websites that search English documents like CNKI?
- Worthington木瓜蛋白酶特异性和应用
- ADT Spec RI AF CheckRep Safety from Rep Exposure
猜你喜欢

央企国电集团上海翔伟机电和中外海达成战略合作,捐赠2亿

InteliJ-IDEA-高效技巧(二)
![P6758 [BalticOI2013] Vim](/img/07/b16c8d329b33424e931d9eaedae73a.png)
P6758 [BalticOI2013] Vim

JS object operation (much simpler than C object)

杰理之做蓝牙发射时,将立体声修改成单声道差分输出时,接收端出现卡音【篇】

LeetCode508-出现次数最多的子树元素和-深搜

2022 Foshan Tanzhou ceramics exhibition held a press conference to launch ten key points of the exhibition

Do you really know binary tree? (Part I)

龙蜥社区成立云原生SIG,引入3大核心技术

What websites or software are available to translate English literature into Chinese?
随机推荐
Wechat applet JS converts numbers into letters
六个拿来就能用的有趣网页特效
Supplier management system of digital commerce cloud Paper Group: promote enterprise information construction and comprehensively improve supplier management efficiency
C#的DataGridView中字体大小
Jerry's problem of playing songs after opening four channel EQ [chapter]
Do you really know binary tree? (Part I)
Spark 离线开发框架设计与实现
British teddy bear joins the pubg mobile game
三维度八视图
prototype扩展:实现对象继承
InteliJ-IDEA-高效技巧(一)
3D octave view
Prototype extension: implementing object inheritance
杰理之配对成对耳后,想保持两个耳机都输出立体声【篇】
From casual to boring to sick
B2B mall website helps enterprises speed up distribution and build an efficient and intelligent B2B online distribution platform
同样是做自媒体,为什么有的人能月入过万,你只能月入几块?
#15迭代器
15 iterator
Enzo高灵敏度检测——Arg8-Vasopressin ELISA kit