open-drain 与 push-pull 】
GPIO 的功能,简单说就是可以根据自己的需要去配置为输入或输岀。
但是在配置
对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:
Push-Pull
推挽输出
Open-Drain
开漏输出
有,也许没有另外一个状态:高阻抗( high impedance )状态。
除非 Push-pull 需要支 持额外的高阻抗状态,否则不需要额外的上拉 电阻。
图表?1 Push-Pull 对比 Open-Drain
输岀的器件是指输岀脚内部集成有一对互补的
MOSFET ,当Q1导通、Q2截止时输出高电
平;而当Q1截止导通、Q2导通时输岀低电 平
Push-pull 输出,实际上内部是用了两个晶体
管(transistor ),此处分别称为
transistor 和 bottom transistor
top。
通过开关
对应的晶体管,输岀对应的电平。
transistor 打开(bottom transistor
闭),输出为高电平; bottom transistor top
关
开漏电路就是指以 MOSFET 的漏极为输出的电路。
指内部输出和地之间有个 N 沟道
的MOSFET (Q1 ),这些器件可以用于电平转换的应用。
输出电压由
Vcc'决定。
Vcc'可以大于输入高电平电压 VCC (up — translate )也可以低于输入高电平电压
VCC (down — translate )。
开(top transistor 关闭),输出低电平。
Open-drain 输出,则是比 push-pull 少了个 top transistor ,只有那个 bottom
transistor 。
(就像 push-pull 中的那样) 平。
此处没法输岀高电平,想要输岀高电平, 当 bottom transistor 关闭,则输出为高电
Push-pull 即能够漏电流(sink current ), 又可
以集电流(source current )。
其也许
resistor )。
Open-drain
只能够漏电流( current ),则需要加一个上拉电阻。
pull-up sink current ),如果想要集电流(source
必须外部再接一个上拉电阻(
GPIO 管脚的时候,常会见到两种模式:开漏( open-drain ,漏极开路)和推挽(
push-pull )
常见的GPIO 的模式可以配置为 open-drain 或push-pull ,具体实现上,常为通过配置对应的寄存器的某些位来配置为
open-drain
或是push-pull 。
当我们通过 CPU 去设置那些GPIO 的配置寄存器的某位(bit )的时候,其 GPIO 硬件IC 内部的实现是,会去打开 或关闭对应的top
transistor。
相应地,如果设置为了 open-d 模式的话,是需要上拉电阻才能实现,也能够输出高电平的。
因此,
如果硬件内部(internal )本身包含了对应的上拉电阻的话,此时会去关闭或打开对应的上拉电阻。
如果 GPIO 硬件IC 内部没有对应
的上拉电阻的话,那么你的硬件电路中,必须自己提供对应的外部(
external )的上拉电阻。
而 push-pull 输出的优势是速度快,因
为线路(line )是以两种方式驱动的。
而带了上拉电阻的线路,即使以最快的速度去提升电压,最快也要一个常量的 R XC 的时间。
其
中R 是电阻,C 是寄生电容(parasitic capacitance ),包括了 pin 脚的电容和板子的电容。
但是, push-pull 相对的缺点是往往需 要消耗更多的电流,即功耗相对大。
而 open-drain
所消耗的电流相对较小,由电阻 R 所限制,而R 不能太小,因为当输出为低电平
的时候,需要 sink 更低的 transistor ,这意味着更高的功耗。
(此段原文: because the lower transistor has to sink that current when the output is
low; that means higher power consumption. ) 而 open-drain 的好处之一是,允许你 cshort () 多个
open-drain
的电路,公用一个上拉电阻,此种做法称为
wired-OR 连接,此时可以通过拉低任何一个
10的pin 脚使得输出为低电 平。
为了输岀高电平,则所有的都输岀高电平。
此种逻辑,就是“线与”的功能,可以不需要额外的门( gate )电路来实现此部分逻
辑。
图表?4 open-drain “线与”功能
V [
X 原
Q1
理
图
RESET
二
Q2
F
图表?2 push-pull 原理图
图表?3 open-drain 原理图
(1)
对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的
Up-translate 和
down — translate 转换
(2)可以将多个开漏输岀的 Pin 脚,连接到一条线上,形成 与逻辑”关系,即 线与”
功能,任意一个变低后,开漏线上的逻辑就为
0 了。
这也是I2C ,SMBus 等总线判断
总线占用状态的原理。
(3)利用外部电路的驱动能力,减少 IC 内部的驱动。
当IC 内部MOSFET 导通时,驱动电流是从外部的
VCC 流经R pull-up ,MOSFET 至U
GND o IC 内部仅需很下的栅极驱动电流。
(4)可以利用改变上拉电源的电压,改变 传输电平:
图表?5 open-drain 输出电平的原理
F ;
pull-^up
优
占
八(1)可以吸电流,也可以贯电流;(2)和开 漏输出相比,push -pull 的高低电平由IC 的 电源低定,不能简单的做逻辑操作等。
的逻辑电平由电源 Vcc1决定,而输出高电平则由 Vcc2决定。
这样我们就可以用低电
平逻辑控制输岀高电平逻辑了。
开漏Pin 不连接外部的上拉电阻,则只能输出低电平。
当输出电平为低时, N 沟道三 极管是导通的,这样在 Vcc'和GND 之间有一个持续的电流流过上拉电阻
R 和三极管
缺一条总线上只能有一个 push-pull 输出的器
Q1。
这会影响整个系统的功耗。
采用较大值的上拉电阻可以减小电流。
但是,但是大 点件; 的阻值会使输出信号的上升时间变慢。
即上拉电阻 R pull-up 的阻值 决定了逻辑电平
转换的沿的速度。
阻值越大,速度越低功耗越小。
反之亦然。
在CMOS 电路里面应该叫CMOS 输出更合 适,因为在CMOS 里面的push — pull 输出能 特力不可能做得双极那么大。
输出能力看
IC 内
点 部输出极N 管P 管的面积。
push — pull 是现
在CMOS 电路里面用得最多的输出级设计方 式。
【 open-drain 和 push-pull 的总结】
Required tai put
le^l 日芒口ends on V l .
IC
对于GPIO 的模式的设置,在不考虑是否需要额外的上拉电阻的情况下,是设置为open-drain 还是push-pull ,说到底,还是个权衡的问题:如果你想要电平转换速度快的话,那么就选push-pull ,但是缺点是功耗相对会大些。
如果你想要功耗低,且同时具有“线与”的功能,那么就用open-drain 的模式。
(同时注意GPIO 硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻)
正所谓,转换速度与功耗,是鱼与熊掌,二则不可兼得焉。