发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

MCU的I2C引脚为什么要配置为开漏输出?

[复制链接]
1545|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-6-25 09:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创#
@21小跑堂


I2C(内部集成电路)是一种应用非常广泛的总线协议,MCU和很多芯片之间的数据通信都基于I2C实现,包括非常常见的EEPROM芯片AT24系列等等。I2C总线由串行时钟线SCL和串行数据线SDA组成,在MCU作为I2C主机开发时,SCL和SDA对应的GPIO引脚都需要配置为开漏输出模式(Open Drain Output Mode),否则I2C总线的通信就要出问题。作者随便找了几个不同厂商的MCU芯片关于I2C配置方面的代码:



毫无疑问,全部配置为开漏输出模式。
那有朋友深入研究过为什么MCU的I2C引脚要配置为开漏输出模式吗?有什么讲究吗?
我们先来说说GPIO的开漏输出是什么意思吧!
大家都知道在MCU的多种GPIO配置模式中,有一种是开漏输出模式,在这种配置中,是没有PMOS晶体管的,而NMOS晶体管的漏极保持在浮空状态。因此,这个时候漏极连接的GPIO引脚状态是不稳定的,一般需要在引脚输出上外接一个上拉电阻(4.7KΩ或者10KΩ),即输出高电平时,NMOS管关闭,通过上拉电阻将电平拉到高,输出低电平时,NOMS管导通,引脚拉到GND变为低电平,如下图所示:

因此,开漏输出模式的高电平信号由外部上拉电阻的VDD电源决定,可以适配不同的电压信号,比如3.3V或者5V,而不需要额外的电平转换电路。
综上所述,开漏模式由于其灵活性和对外部电路的依赖性,在需要与其他设备共享通信线或进行电平转换的场合中非常有用。
我们再来说说I2C引脚配置为开漏输出的原因吧!
我们知道,I2C总线是支持多主多从的拓扑结构的,之所以支持,就和这个开漏输出的技术密不可分。由前文知道,开漏电路只能输出逻辑0,无法输出逻辑1,需要外部上拉电阻将电平拉高到供电电压,所以这种设计使得多个设备可以共享这两条总线,然后通过上拉电阻实现电平的稳定。当多个主设备同时尝试发送信号时,总线会通过上拉电阻保持高电平,避免信号冲突;只有当某个主设备将对应的引脚拉低时,才能控制总线,通俗地说,就是通过“线与”的逻辑保证任何一个主设备拉低总线时,总线整体即为低电平。

反过来说,如果配置为推挽输出模式(Push-Poll),则可能会因为同时有多个设备试图访问和控制总线而导致信号冲突,甚至会因为短路原因而导致设备损坏。
另外,在对功耗有一定要求的系统里,这种设计也是非常好的。因为开漏结构使得每个设备在没有数据通信时几乎不消耗电流,只有在需要通信时才通过上拉电阻与总线连接,从而达到了降低系统整体功耗的目的。
此外,采用开漏结构设计的两根信号线,在抗干扰性能方面也不错,使得I2C总线能够被应用于噪声环境当中。
考虑到在GPIO模式当中,普通输出、普通输入和模拟输入这几种模式是大家用的比较多,也是比较熟悉的,而开漏模式相对使用可能较少的原因,作者就以I2C总线为例简单介绍了开漏模式,希望大家以后在使用中可以注意区分和应用。

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 20.00 元 2025-07-29
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论
21小跑堂 2025-7-29 15:00 回复TA
从I2C引脚的开漏模式入手,思考开漏模式的实际意义。 
dffzh 2025-7-10 13:56 回复TA
@21小跑堂 管理员,你好,求原创审核哦! 

相关帖子

发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1102

帖子

20

粉丝