GPIO的推挽输出和开漏输出以及其优缺点分析
GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。
但是在配置GPIO管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。
Push-Pull推挽输出
输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平。
Push-pull输出,实际上内部是用了两个晶体管(transistor),此处分别称为top transistor 和bottom transistor。
通过开关对应的晶体管,输出对应的电平。
top transistor打开(bottom transistor关闭),输出为高电平;bottom transistor打开(top transistor关闭),输出低电平。
Push-pull即能够漏电流(sink current),又可以集电流(source current)。
其也许有,也许没有另外一个状态:高阻抗(high impedance)状态。
除非Push-pull需要支持额外的高阻抗状态,否则不需要额外的上拉电阻。
Open-Drain开漏输出
开漏电路就是指以MOSFET的漏极为输出的电路。
指内部输出和地之间有个N沟道的MOSFET(Q1),这些器件可以用于电平转换的应用。
输出电压由Vcc决定。
Vcc可以大于输入高电平电压VCC(up-translate)也可以低于输入高电平电压VCC(down-translate)。
Open-drain输出,则是比push-pull少了个top transistor,只有那个bottom transistor。
(就像push-pull中的那样)当bottom transistor关闭,则输出为高电平。
此处没法输出高电平,想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。
Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。
老外的理解
常见的GPIO的模式可以配置为open-drain或push-pull,具体实现上,常为通过配置对应的寄存器的某些位来配置为open-drain或是push-pull。
当我们通过CPU去设置那些GPIO 的配置寄存器的某位(bit)的时候,其GPIO硬件IC内部的实现是,会去打开或关闭对。