一、介绍

开漏指的是场效应管的“漏极”,开漏输出(Open-Drain Output)就是把场效应管的漏极直接引出来作为输出引脚,然后通过一个上拉电阻与高电平相连的输出模式。如下图:

晶体管的结构如下:

当GPIO输出低电平时,通过一个晶体管(通常是NMOS晶体管)使得外部电路接地,从而实现低电平的输出;当GPIO输出高电平时,通过上拉电阻使得外部电路连接到高电平。

上面是大致结构,而单片机的GPIO内部详细设计结构如下:

二、核心硬件结构

开漏输出模式下(上拉电阻+N-MOS管),通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。如下图1,2,3,4所示:

核心原理是仅通过单一路MOS管控制引脚电平,仅能主动拉低引脚电压,无法主动输出高电平,高电平需依赖外部电路(如上拉电阻)实现,本质是一种“半主动”的输出驱动方式。

单N-MOS管的“拉低”逻辑:
开漏输出的GPIO引脚内部,仅集成了一个N-MOS管,其结构和工作逻辑如下:

 结构上:
- MOS管的连接方式:N-MOS的一端接GPIO引脚,另一端直接连接GND,而引脚与单片机内部电源(如3.3V)之间无主动导通路径(这是与推挽输出的核心区别)。

逻辑上:
1. 输出低电平时:单片机通过寄存器,控制N-MOS管导通,此时GPIO引脚与导通的N-MOS直接连接到GND,引脚电压被拉低至接近0V(低电平)。


2. 输出高电平时:单片机控制N-MOS管“截止”,此时GPIO引脚与GND的通路被断开,但引脚也未连接到任何内部电源,所以引脚处于“悬空”(高阻)状态,无法主动输出高电平,此时需外部电路提供高电平通路。

为了实现完整的高电平输出功能,开漏输出通常需要一个外部上拉电阻。当输出端口处于高阻态时,外部上拉电阻将输出端口拉高至所需的高电平。

上拉电阻的阻值需合理选择:阻值太小会导致低电平时N-MOS导通电流过大(可能烧毁器件),阻值太大则会导致高电平驱动能力弱、电平上升速度慢(影响信号时序),常见取值为1kΩ~10kΩ。
 
3. 关键特性:

“线与”逻辑与电平兼容性

基于上述原理,开漏输出衍生出两个核心特性,也是其广泛应用的原因:
 
- 支持“线与”逻辑:多个开漏输出引脚可并联在同一条总线上(共用一个上拉电阻)。只要其中任意一个引脚控制N-MOS导通(输出低电平),整个总线就会被拉低;只有所有引脚的N-MOS都截止时,总线才会被上拉电阻拉为高电平——这就是“线与”(即多个信号中只要有一个低,结果就为低),典型应用如I2C总线的SDA、SCL引脚,实现多设备共享总线。


- 灵活的电平兼容性:通过选择不同电压的外部电源作为上拉电源,可实现跨电压域输出。例如,3.3V的MCU使用开漏输出时,若上拉电阻接5V电源,引脚就能输出5V高电平,轻松兼容5V电平的外设(无需额外电平转换芯片)。

三、总结

开漏输出的原理可简化为“内部N-MOS拉低,外部电阻拉高”:它放弃了主动输出高电平的能力,换来了多设备并联的“线与”功能和灵活的电平兼容性,是总线通信(如I2C)、跨电压域控制等场景的核心输出模式,使用时需牢记“必须外接上拉电阻”这一前提。

参考:

GPIO常见名词——推挽、开漏、浮空、上拉、下拉、高阻态-腾讯云开发者社区-腾讯云

GPIO输入输出模式原理(八种工作方式附电路图详解)_gpio四种输入输出模式-CSDN博客

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐