开漏输出:只拉低不推高,靠上拉电阻“借”高电平

📅 2026/7/8 2:32:07
开漏输出:只拉低不推高,靠上拉电阻“借”高电平
短文标题开漏输出只拉低不推高靠上拉电阻“借”高电平你有没有想过一个问题I2C总线上多个设备的SDA引脚连在一起为什么不会短路因为它们用的是开漏输出不是推挽。谁都能拉低但谁也不主动推高。大家都“放手”时总线被上拉电阻拉到高电平。开漏输出的内部结构,开漏输出内部只有一个接地的NMOS管输出低电平0MOS管导通引脚拉到0V输出高电平1MOS管关断引脚悬空——必须靠外部上拉电阻提供高电平开漏的“漏”是指MOS管的漏极开路Open-Drain。线与逻辑,多个开漏输出接在同一条线上任何一个设备拉低总线就是低电平。全部“放手”总线才被上拉至高电平。——这就是“线与”逻辑。上拉电阻阻值怎么选上拉电阻是三要素的平衡上升时间、功耗、总线电容。I2C规范400kHz用1.5~2kΩ100kHz用4.7~10kΩ。开漏的三个应用场景1. 线与逻辑多设备共享总线I2C总线、1-Wire总线基于此原理。多个设备共享同一条数据线不会短路。2. 电平转换3.3V↔ 5V上拉电阻接5V3.3V单片机开漏输出即可驱动5V设备。电平由上拉电压决定。3. 双向通信开漏引脚既可作为输出MOS管拉低或放手也可作为输入读取引脚电平。同一条线实现双向传输。STM32内部上拉内部上拉电阻约40kΩ通过GPIOx_ODR寄存器控制GPIOA-CRL | (0x08 0); // 上拉/下拉输入模式GPIOA-ODR | (1 0); // 使能内部上拉内部上拉驱动弱上升沿慢适合几百kHz内I2C高速仍需外部上拉。这个故事的启示开漏输出不强但“合群”不主动推高才能协作共享。上拉电阻是开漏的灵魂没它就“飘”了。写在最后I2C总线用开漏不是因为它强是因为它“合群”。选好上拉电阻速度和功耗兼得。开漏上拉共享总线的黄金搭档。本文灵感源于于振南《新概念ARM32单片机》教程第3.4节、第3.6节。觉得有用点赞、转发让更多人看懂开漏输出的总线共享智慧。