只能拉低的引脚,怎样输出高电平?|引脚电路 02
封面为 AI 辅助概念插画;电路工作过程以正文动画为准。

推挽输出可以主动推高、拉低。开漏却把“推高”的那部分拿走了:它能主动拉低,另一个状态只是释放线路。既然如此,高电平从哪里来?
GIF 是普通开漏线路的原理示意,非芯片仿真、非硬件实测。器件用理想开关表示,电压变化与时间均作教学简化;上拉电源必须符合实际引脚的电气要求。
写入一,不一定主动送出高电平

在线路与电源之间放一个上拉电阻。开漏器件接通时,把线路拉向 GND;断开时,不再主动拉低,线路才通过电阻趋向上拉电源。
所以理解开漏时,用“拉低”和“释放”比“输出零”和“输出一”更不容易犯错。不同芯片的寄存器、复用外设可能采用不同控制接口,不能把某一段 Arduino 写法当成统一硬件规则。
上拉电阻也不是装饰。线路为低时,它限制从电源流向下拉器件的电流;如果直接用导线代替电阻,拉低就可能变成短路。
为什么多个人能共用

现在把两个开漏输出接到同一根线上,统一使用合适的上拉。只要任一个设备拉低,线路就低;只有全部释放,线路才能变高。这常称为“线与”逻辑,使用的是高电平表示 1 的约定。
这里没有某个设备主动输出高、另一个设备主动输出低的推挽冲突。但“电气上允许共享”不等于“数据不会冲突”:设备何时发送、怎样识别地址、冲突如何处理,仍是协议的责任。
I²C 的普通 SDA/SCL 线路是理解这种机制的典型入口。不过本课只解释电气关系,并未实现完整 I²C 协议,也没有证明某个具体总线设计满足时序。
上升快慢是有代价的

实际导线和输入都有电容。下拉器件释放后,电压不是魔法般瞬间到顶,而是经上拉电阻充电。电阻较大,低电平时电流较小,但在相同电容下上升更慢;电阻较小,上升更快,下拉器件却要承受更大电流。
因此上拉阻值不能只背一个“万能数值”。总线电容、目标速度、低电平保证值和最大灌电流共同约束选择。动画比较的是相同电容下的理想 RC 趋势,不是对具体板子的阻值推荐。
还有一个重要边界:开漏并不自动意味着耐受任意高电压。保护结构、供电状态和绝对最大额定值仍然存在。把上拉接到另一电压域前,必须确认该引脚明确允许这样工作。
看完再猜
设备 A 已释放,设备 B 仍在拉低,A 读到的应该是什么?正常连接和电气条件下是低。释放只代表 A 不再拉低,不代表 A 有能力命令别人松手。
下一次看到开漏信号,可以按顺序找三个东西:谁拉低、谁上拉、上拉电压是否被所有连接的器件允许。
资料:NXP I²C 总线规范 UM10204、ST GPIO 入门与输出速度、TI HCMOS 设计考虑。
发现更多好玩的开源项目
专注 Arduino、开源硬件、端侧 AI 和值得收藏的开发者工具。
长按二维码关注「GitStar」
所有动画为教学原理示意,非芯片仿真、非硬件实测。网页发布:2026-09-22。