为什么推挽输出在I2C总线上会导致短路?
1. 推挽输出的电路特性
推挽输出由一对互补的MOS管(PMOS和NMOS)组成:
- PMOS:连接电源(VCC),负责拉高电平。
- NMOS:连接地(GND),负责拉低电平。
- 工作方式:
- 输出高电平时,PMOS导通,NMOS关闭 → 引脚直接连接到VCC。
- 输出低电平时,NMOS导通,PMOS关闭 → 引脚直接连接到GND。
2. I2C总线的多主设备场景
I2C总线允许多个主设备(如两个MCU)共享同一组信号线(SDA和SCL)。
理想情况:所有设备应通过“线与”逻辑协调总线访问。
关键规则:任何设备都可以拉低总线,但只有通过仲裁的设备才能控制总线。
3. 推挽输出的致命问题
假设两个主设备(MCU1和MCU2)使用推挽输出连接到I2C总线:
场景:
- MCU1尝试发送高电平(PMOS导通,引脚连接VCC)。
- MCU2尝试发送低电平(NMOS导通,引脚连接GND)。
结果:
- MCU1的PMOS和MCU2的NMOS同时导通。
- 形成VCC → PMOS(MCU1)→ NMOS(MCU2)→ GND的低阻抗路径。
- 产生大电流(短路电流),可能烧毁MOS管或损坏设备。
4. 对比开漏输出的安全性
开漏输出仅包含一个NMOS管:
- 输出低电平:NMOS导通,引脚接地。
- 输出高电平:NMOS关闭,引脚通过外部上拉电阻(如4.7kΩ)拉高。
多主设备场景:
- 所有设备默认输出高电平(NMOS关闭,总线由上拉电阻拉高)。
- 任一设备拉低总线时,其他设备即使输出高电平,也不会导通PMOS,因此不会形成短路。
5. 关键结论
推挽输出的风险:
多个设备同时驱动总线时,可能形成VCC到GND的直接通路,导致短路电流(仅受MOS管导通电阻限制,电流可达安培级)。开漏输出的优势:
所有设备只能拉低总线,高电平由外部上拉电阻提供,从根本上避免了短路风险。
6. 实际案例
错误设计:
某工程师将I2C总线的SDA线配置为推挽输出,两个MCU同时尝试控制总线。
结果:
MCU的IO引脚烧毁,总线电压异常,通信失败。
正确设计:
使用开漏输出+上拉电阻,多个设备可安全共享总线。
7. 总结
- I2C必须使用开漏输出:避免多设备竞争时的短路风险。
- 推挽输出仅适用于独占式信号(如SPI、UART),不能用于共享总线。
本文作者:
ICXNM-ZLin
本文链接: https://talent-tudou.github.io/2025/02/26/外设/IIC的开漏输出/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
本文链接: https://talent-tudou.github.io/2025/02/26/外设/IIC的开漏输出/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!