GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。(General Purpose Input Output,简称为GPIO或总线扩展器,利用工业标准I2C、SMBus?或SPI?接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,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需要支持额外的高阻抗状态,否则不需要额外的上拉电阻。

特点:在CMOS电路里面应该叫CMOS输出更合适,因为在CMOS里面的push-pull输出能力不可能做得双极那么大。输出能力看IC内部输出极N管P管的面积。push-pull是现在CMOS电路里面用得最多的输出级设计方式。

优点:(1)可以吸电流,也可以贯电流;(2)和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。

缺点:一条总线上只能有一个push-pull输出的器件;

【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流经R pull-up ,MOSFET到GND。IC内部仅需很小的栅极驱动电流。

(4)可以利用改变上拉电源的电压,改变传输电平,如图, IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。

OD输出电平的原理

缺点:开漏Pin不连接外部的上拉电阻,则只能输出低电平。当输出电平为低时,N沟道三极管是导通的,这样在Vcc'和GND之间有一个持续的电流流过上拉电阻R和三极管Q1。这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是,但是大的阻值会使输出信号的上升时间变慢。即上拉电阻R pull-up的阻值 决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然。

drain open 线与_Open-Drain与Push-Pull相关推荐

  1. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?

    参考: http://www.cnblogs.com/jnslove/p/5430481.html & https://blog.csdn.net/hly_coder/article/deta ...

  2. git push/pull时总需要输入用户名密码的解决方案

    在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab) 执行git config --global credential.helper store命令 然 ...

  3. Android adb “push pull”中文支持解决方案

    Android adb "push pull"中文支持解决方案 在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的 ...

  4. MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB - 4

    MongoDB中类似这样的关键字有很多, $lt $gt $lte $gte 等等,这么多我们也不方便记,这里我们说说几个比较常见的 一.查询中常见的 等于 大于 小于 大于等于 小于等于 等于 : ...

  5. Android设备在PC端上通过adb push/pull时需要验证的方案解决(push/pull之前需要先通过某些方式验证,之后才能push/pull)

    前几天领导吩咐我做个功能,就是用户Android设备连接到PC端后,PC端进行adb  push/pull的时候需要先认证操作,认证通过后才能push/pull,这个功能我特么一听,当场就-不会,但是 ...

  6. [转]微博后台架构浅析——读扩散pull、写扩散push、混合模式(push+pull)——相关cache(redis,memcache)...

    原文地址:http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552013430114959121/ 之前在网上看到关于Twitter.Si ...

  7. 用adb push/pull init.rc的方法

    通常情况下,我们用常规的adb remount,然后adb push/pull,提示init.rc是Read Only的,我们chmod 777 ./init.rc文件也不行. 如果我们adb rem ...

  8. RocketMQ 消息订阅Subscribe—— Push Pull 模式

    2019独角兽企业重金招聘Python工程师标准>>> RocketMQ 消息订阅Subscribe-- Push & Pull 模式 RocketMQ消息订阅的两种模式 R ...

  9. drain open 线与_再转一个:push-pull and open-drain,开漏(open drain)和开集(open collector...

    在电路设计时我们常常遇到开漏(open drain)和开集(open collector)的概念. 所谓开漏电路概念中提到的"漏"就是指MOS FET的漏极.同理,开集电路中的&q ...

  10. mac git命令行操作 git push pull 逻辑

    安装git 想push到线上的完整流程是 情况1,本地开发好了,想上传到线上的分支,或master 1.在空文件夹git init 2.配置相关参数 name email origin 3.pull ...

最新文章

  1. LINUX系统常用操作
  2. 川农计算机网络题库,川农网院20秋《计算机网络》期末机考
  3. SAP创建新的项目类型
  4. [zz]母牛生牛问题解析
  5. 减少php,如何减少PHP代码?
  6. linux ps流程,Linux下PS命令详解 (转)
  7. GE HYDRAN M2 IS200VCRCH1B IS200VRTDH1D IS200VTCCH1CBB IS200VTURH2BAC IS215VPROH1BD IS220PAICH2A
  8. 一套PumpLinx泵阀仿真分析攻略
  9. 用Java实现24点游戏
  10. java ssh框架 运行_SSH框架的简单示例(执行流程)
  11. ThinkPad键盘失灵解决办法
  12. NOD32升级账号更新器 [ C# | NOD32 | Eset ]
  13. 计算机应用物联网应用技术论文,物联网的关键技术及计算机物联网的应用研究...
  14. EMW3031下模拟I2C实现
  15. 【飞桨/百度领航团/零基础Python】学习心得
  16. 虚拟主机到底哪家比较好呢?
  17. python求偏度系数
  18. 成功的背后(csdn第一名博主文章)
  19. 计算机基础教案文档,计算机基础知识教案
  20. xhr是什么缩写_微博上xhr和fsr是什么意思 饭圈里指黄新淳毕雯珺

热门文章

  1. Oracle内置函数-字符/数值/日期/转换/NVL/分析函数与窗口函数/case_decode
  2. 《少有人走的路——心智成熟的旅程》读书笔记
  3. xcode run跑项目或者Archive打包项目的时候显示Build Succeeded一闪而过但是程序无反应问题解决
  4. Best定理和MatrixTree定理 学习笔记
  5. Python——OCR识别
  6. JavaScript/js 转 Python 代码转换神器 jiphy
  7. postgresql 导出单张表
  8. C++实现简单数独游戏
  9. Kafka工具--雅虎CMAK
  10. 三维地图前端arcgis_WebGIS简单实现一个区域炫酷的3D立体地图效果