IIC为什么需要用开漏输出和上拉电阻

loading 分享 2026-8-21 下载文档

IIC为什么需要用开漏输出和上拉电阻

IIC通信协议

IIC协议正确,?但是一直读取失败

推挽输出和开漏输出推挽输出:?

输出逻辑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为什么需要用开漏输出和上拉电阻.doc 将本文的Word文档下载到电脑
搜索更多关于: IIC为什么需要用开漏输出和上拉电阻 的文档
相关推荐
相关阅读