第4篇:《面试题:推挽输出和开漏输出有什么区别?为什么两个推挽接一起会烧IO?》

第4篇:《面试题:推挽输出和开漏输出有什么区别?为什么两个推挽接一起会烧IO?》 大家好我是老张。上一篇文章讲了I2C的上拉电阻里面反复提到一个概念I2C用开漏输出不能用推挽。有兄弟曾经这么问我“开漏和推挽到底有什么区别为什么推挽接一起会烧”这个问题问得好。面试中这几乎是必考题而且大部分人只答得出皮毛——推挽能推能拉开漏只能拉低——再往下追问就卡住了。今天老张就把这两种输出模式从内部电路讲到实战应用让你面试时有底气一口气说到面试官喊停。目录一、面试官问这道题到底在考什么二、第一层基本定义——两种输出模式到底差在哪2.1 推挽输出——能推能拉力大砖飞2.2 开漏输出——只能拉低不能拉高2.3 一张表记住核心区别三、第二层从内部电路结构理解——为什么推挽能拉高开漏不行3.1 推挽输出的内部结构3.2 开漏输出的内部结构3.3 追问“为什么开漏输出不能直接改成推挽加个P管不就行了”四、第三层为什么推挽不能并接开漏可以——总线冲突的原理4.1 两个推挽输出接在一起会怎样4.2 开漏输出为什么可以并接4.3 追问“如果我把两个推挽输出设为开漏模式是不是也能并接了”五、实战应用——哪些场景用推挽哪些用开漏5.1 必须用推挽的场景5.2 必须用开漏的场景5.3 电平转换——开漏输出的独特优势六、翻车实录——我亲历的推挽并接事故七、满分回答模板八、总结一、面试官问这道题到底在考什么表面上是考两个名词解释实际上有三个考察层次第一层知不知道两种模式的基本定义和区别能说出“推挽高低都能驱动开漏只能拉低需要上拉”。60分。第二层能不能从内部电路结构解释为什么能画出PMOS和NMOS的组合方式说清楚电流流向。80分。第三层知不知道为什么推挽不能并接、开漏可以能不能举出实际应用场景从总线冲突的原理讲到I2C和SPI的选型理由。95分。到第三层还能主动说出“开漏能实现电平转换”和“线与逻辑”那面试官基本就没什么好追问的了。二、第一层基本定义——两种输出模式到底差在哪2.1 推挽输出——能推能拉力大砖飞推挽输出的内部结构是一对互补的MOS管上面一个P沟道MOS管接VDD下面一个N沟道MOS管接GND。输出高电平P管导通N管截止。输出通过P管直接连到VDD驱动电流从VDD经P管流向负载。驱动能力强能把电压拉到接近VDD。输出低电平N管导通P管截止。输出通过N管直接连到GND电流从负载经N管流向地。同样驱动能力强能把电压拉到接近0V。一句话推挽输出自己就能输出强高电平和强低电平不需要外部帮助。2.2 开漏输出——只能拉低不能拉高开漏输出的内部结构只有下面那个N沟道MOS管上面那个P管不存在。输出低电平N管导通输出接地电流从外部上拉电阻经N管流向地。低电平驱动能力取决于N管的导通电阻。输出“高电平”N管截止输出端什么都不接处于高阻状态。高电平从哪来只能靠外部上拉电阻把输出拉到VDD。一句话开漏输出只能主动输出低电平高电平靠外部电阻“拽”上去。2.3 一张表记住核心区别维度推挽输出开漏输出内部结构PMOSNOMS一对互补管只有NOMS上面悬空输出高P管导通主动拉高到VDD外部上拉电阻拉到VDD输出低N管导通主动拉低到GNDN管导通拉低到GND驱动能力高低电平都强低电平强高电平取决于上拉电阻速度快边沿陡受上拉电阻和寄生电容限制多路并联不行会烧可以线与逻辑电平转换不支持支持上拉电阻接目标电压即可三、第二层从内部电路结构理解——为什么推挽能拉高开漏不行这一层是面试时的分水岭。能背定义的人很多能画出内部电路解释原理的人很少。3.1 推挽输出的内部结构推挽输出的输出级有两个MOS管串联在VDD和GND之间VDD │ ├── P-MOS上管 │ ├── 输出引脚 │ ├── N-MOS下管 │ GND输出高电平时P-MOS导通N-MOS截止。电流从VDD→P管→输出引脚→负载→地。P管导通电阻很小几Ω到几十Ω能提供几十mA的驱动电流引脚电压接近VDD。输出低电平时N-MOS导通P-MOS截止。电流从负载→输出引脚→N管→GND。N管导通电阻同样很小能把引脚电压拉到接近0V。关键点两个MOS管永远不会同时导通芯片内部有死区控制否则VDD和GND之间直接短路芯片瞬间烧毁。3.2 开漏输出的内部结构开漏输出只有下面那个N-MOS上面的P-MOS不存在输出引脚 │ ├── N-MOS下管 │ GND 上管位置是空的输出引脚对外呈现高阻输出低电平N-MOS导通引脚拉到GND。输出高电平N-MOS截止引脚什么都不接对外呈现高阻态。如果没有外部上拉电阻引脚就悬空。关键点开漏输出的“高电平”不是芯片主动输出的是靠外部上拉电阻从VDD“借”来的。3.3 追问“为什么开漏输出不能直接改成推挽加个P管不就行了”这个问题考的是“为什么要发明两种输出模式”能答出来说明你理解了设计意图。加个P管技术上当然能做到但加了之后多个设备的输出就不能并接在一起了原因下一节详细说不能通过外接不同电压的上拉电阻实现电平转换不能实现“线与”逻辑所以开漏输出不是推挽输出的“低配版”而是一种有独特应用场景的独立设计。I2C、1-Wire这些总线必须用开漏。四、第三层为什么推挽不能并接开漏可以——总线冲突的原理4.1 两个推挽输出接在一起会怎样假设两个MCU的推挽输出都接到同一根信号线上MCU_A输出高电平上管P-MOS导通输出连到VDDMCU_B输出低电平下管N-MOS导通输出连到GND此时VDD经过MCU_A的P管→信号线→MCU_B的N管→GND形成直接短路。两个MOS管的导通电阻都很小几Ω到十几Ω短路电流可能达到几百mA甚至更高。结果就是轻则IO口烧毁重则整个芯片报废。这就是总线冲突。4.2 开漏输出为什么可以并接多个开漏输出并接在同一根线上所有设备都输出高所有N管都截止总线上只有上拉电阻提供的高电平任意一个设备输出低该设备的N管导通总线被拉到低电平多个设备同时输出低各自N管导通都拉低没有冲突开漏输出只能拉低不能拉高所以永远不会出现“一个拉高、一个拉低”的打架场景。这种特性叫“线与”逻辑——只要有一个设备拉低总线就是低所有设备都释放总线才是高。4.3 追问“如果我把两个推挽输出设为开漏模式是不是也能并接了”这个问题非常刁钻很少有人能答上来。部分MCU的GPIO支持在开漏模式下同时关闭上下两个MOS管此时的确定全等效于纯开漏输出可以并接。但有一个容易被忽视的坑上电复位期间和程序初始化完成之前所有IO默认都是高阻输入或推挽输出。如果复位期间两个IO短暂进入推挽模式哪怕只有几微秒也可能产生一次瞬间短路。单次瞬间短路可能不会立刻烧毁引脚但长期累积会加速氧化甚至热损坏。所以如果真要多个MCU共享一根线最稳妥的方案是用硬件固定为开漏的I2C引脚不是所有MCU都有或者每个MCU输出串一个几百Ω的保护电阻限制万一冲突时的短路电流或者用真正的开漏输出器件如I2C专用的电平转换芯片能答到这一层面试官会觉得你是一个真的在工程细节上较真的人。五、实战应用——哪些场景用推挽哪些用开漏5.1 必须用推挽的场景SPI的SCK、MOSI单主多从单向高速需要强驱动和陡峭边沿UART的TX点对点单向输出需要快速边沿普通GPIO驱动LED、蜂鸣器、继电器需要强驱动能力5.2 必须用开漏的场景I2C的SCL和SDA多设备共享总线需要线与逻辑1-Wire单总线单线双向通信多个设备挂在同一根线上多设备共享中断线任一设备拉低都能触发中断需要电平转换MCU是3.3V供电通过开漏外部上拉到5V实现5V电平输出5.3 电平转换——开漏输出的独特优势这是面试中能让你脱颖而出的知识点。MCU是3.3V供电但我需要输出5V的电平给某个外设。如果用推挽输出高电平最大就是3.3V够不着5V。但用开漏输出外部上拉电阻接到5V当N管截止时总线上就是5V。开漏输出的高电平不由芯片供电电压决定而由外部上拉电阻接的电压决定。当然前提是引脚的耐压必须支持5V比如STM32的FT引脚。能说出这个应用场景说明你不仅懂原理还会用。六、翻车实录——我亲历的推挽并接事故早年画一块板子用STM32的两个SPI外设各挂一个从设备。为了省引脚我把两个SPI的MISO都接到同一个GPIO上——两个从设备通过不同的CS片选控制我心想“不同时选中就行了”。但我忘了MISO在空闲时也是推挽输出部分SPI从设备在CS未选中时MISO为高阻态但不是全部。有一次代码Bug导致两个CS同时拉低两个从设备的MISO同时输出——一个输出高一个输出低瞬间短路。幸好只是轻微发热被我闻到了焦味及时断电。后来查数据手册才发现这款从设备的MISO在CS未选中时不是高阻态。教训不确定器件输出行为的时候MISO线上各串一个100Ω保护电阻或者用模拟开关隔离。七、满分回答模板面试官问“推挽和开漏有什么区别”按这个逻辑答第一段基本定义推挽输出内部有一对互补MOS管P管负责拉高、N管负责拉低高低电平都能主动驱动速度快驱动强。开漏输出只有N管只能主动拉低高电平必须靠外部上拉电阻提供。第二段深入原理从电路角度看推挽是两个管子在VDD和GND之间通过交替导通输出高低电平两个管子永远不会同时导通。开漏只有一个管子接地截止时输出高阻必须有外接上拉电阻才能产生高电平。第三段总线冲突推挽输出不能并接——如果一个输出高一个输出低VDD经过两个导通管直接短路到GND瞬间大电流烧IO。开漏可以并接——因为任何设备只能拉低不能拉高永远不会出现一个拉高一个拉低的冲突这就是“线与”逻辑。I2C用开漏就是这个原因。第四段实战应用推挽适用于SPI、UART、GPIO驱动等单向高速场景。开漏适用于I2C、1-Wire、共享中断线等多设备共享总线的场景。另外开漏还有一个独特优势——通过接不同电压的上拉电阻可以实现电平转换。部分MCU的推挽IO在开漏模式下也能并接但要注意上电复位期间IO默认状态的风险建议串保护电阻。四个层次全覆盖面试官会认为你对GPIO输出结构的理解已经超过大多数候选人。八、总结要点说明推挽结构PMOSNOMS高低都能主动驱动开漏结构只有NMOS只能拉低高电平靠外部上拉推挽优点速度快驱动强外围简单开漏优点可并接线与可电平转换推挽并接一个拉高一个拉低→短路烧IO开漏并接大家只能拉低→安全典型应用SPI用推挽I2C用开漏下篇预告《面试题3.3V和5V器件怎么互连说出三种方案》——我会把电平转换的四种方案从原理到成本到适用场景逐一拆解还会说到为什么电阻分压不能用在I2C上。有用的话收藏一下。下次面试被问到推挽和开漏你就按这个结构从头到尾讲一遍。评论区说说你在输出模式上踩过什么坑老张帮你分析。