在配置GPIO(General Purpose Input Output)管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:spa
1、Push-Pull推挽输出.net
一、原理blog
输出的器件是指输出脚内部集成有一对互补的MOSFET:ci
当Q1导通、Q2截止时输出高电平;get
而当Q1截止导通、Q2导通时输出低电平。it
Push-Pull输出,实际上内部是用了两个晶体管(transistor):原理
此处分别称为Top-Transistor和Bottom-Transistor。配置
经过开关对应的晶体管,输出对应的电平:硬件
Top-Transistor打开,Bottom-Transistor关闭,输出为高电平;im
Bottom-Transistor打开,Top-Transistor关闭,输出低电平。
Push-pull即可以漏电流(sink current),又能够集电流(source current)。
其也许有,也许没有另一个状态:高阻抗(high impedance)状态。
除非Push-pull须要支持额外的高阻抗状态,不然不须要额外的上拉电阻。
二、优势
(1)能够吸电流,也能够贯电流;
(2)push-pull输出的优点是速度快,由于线路是以两种方式驱动的;
(3)和开漏输出相比,push-pull的高低电平由IC的电源决定,不能简单的作逻辑操做等。
三、缺点
(1)一条总线上只能有一个push-pull输出的器件;
(2)push-pull每每须要消耗更多的电流,即功耗相对大。
2、Open-Drain开漏输出
一、原理
开漏电路是指以MOSFET的漏极为输出的电路,
在内部输出和地之间有个N沟道的MOSFET(Q1),这些器件能够用于电平转换的应用。输出电压由Vcc决定。
Vcc能够大于输入高电平电压VCC (call UP-Translate),
也能够低于输入高电平电压VCC(call Down-Translate),
Open-Drain比push-pull少了个top transistor,只有bottom transistor。
就像push-pull中那样,当bottom transistor关闭,则输出为高电平,但此处无法输出高电平。
想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。
Open-drain只可以漏电流(sink current),若是想要集电流(source current),则须要加一个上拉电阻。
二、优势
(1)对于各类电压节点间的电平转换很是有用,能够用于各类电压节点的Up-translate和Down-translate转换
(2)能够将多个开漏输出的Pin脚,链接到一条线上,造成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。
(3)利用外部电路的驱动能力,减小IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经pull-up resistor,MOSFET到GND。IC内部仅需很小的栅极驱动电流。
(4)能够改变上拉电源的电压,改变传输电平,如图所示,IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样咱们就能够用低电平逻辑控制输出高电平逻辑了。
OD输出电平的原理
三、缺点
(1)开漏Pin不链接外部的上拉电阻,则只能输出低电平,若是要输出高电平,必需加上拉电阻。
(2)带了上拉电阻的线路,即便以最快的速度去提高电压,最快也要一个常量的R×C的时间。其中R是电阻,C是寄生电容(parasitic capacitance),包括了pin脚的电容和板子的电容。
(3)当输出电平为低时,N沟道三极管是导通的,这样在Vcc和GND之间有一个持续的电流流过上拉电阻R和三极管Q1,这会影响整个系统的功耗。采用较大值的上拉电阻能够减少电流。可是大的阻值会使输出信号的上升时间变慢,即上拉电阻的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小,反之亦然。但上拉电阻不能过小,由于当输出为低电平的时候,须要sink更低的transistor,这意味着更高的功耗。
3、open-drain和push-pull的总结
对于GPIO的模式的设置,在不考虑是否须要额外的上拉电阻的状况下,是设置为open-drain仍是push-pull?
说到底,仍是个权衡的问题:
若是你想要电平转换速度快的话,那么就选push-pull,可是缺点是功耗相对会大些。
若是你想要功耗低,且同时具备“线与”的功能,那么就用open-drain的模式。
(同时注意GPIO硬件模块内部是否有上拉电阻,若是没有,须要硬件电路上添加额外的上拉电阻)
正所谓,转换速度与功耗,是鱼与熊掌,二则不可兼得焉。