GPIO模拟IIC时,应设置为开漏输出

文章介绍了推挽输出和开漏输出的工作原理,强调了开漏输出在防止短路和实现线与功能上的优势。在IIC协议中,开漏输出配合上拉电阻用于多设备通信和总线仲裁,确保了通信的安全和有效性。
摘要由CSDN通过智能技术生成

 

推挽输出和开漏输出

推挽输出:

白话翻译:(其实就是靠一推和一拉进行的,比较费劲,两路可能都要进行单独进行特殊操作才能控制, 定制性特殊性高,局部较为灵活,但是不利于总线线与拓展)

输出逻辑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会自动配置为开漏输出。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值