0
收藏
微博
微信
复制链接

I²C总线没人主动输出高电平, 为什么还能回到1? 答案在开漏和上拉

2026-07-20 11:12
14

嵌入式 · I²C · 开漏输出

I²C总线没人主动输出高电平,
为什么还能回到1?
答案在开漏和上拉

开漏节点只负责拉低或释放,高电平由上拉网络建立

开漏输出的下拉晶体管导通时主动拉低总线,关断时进入高阻;只有当所有节点都释放,总线才由上拉电阻回到高电平。这种结构允许多个器件共享一根线,但上拉电阻、总线电容、低电平电流和掉电节点必须共同评估。

示波器上,I²C 的下降沿很快,高电平却像斜坡一样慢慢爬升。更奇怪的是,原理图里没有任何器件主动把 SDA 推到高电平。

答案在开漏输出:器件只会把线拉低,或把输出关断。高电平不是“输出”出来的,而是上拉电阻给总线电容充电形成的。

一、开漏与推挽最大的区别是什么

推挽输出既能主动拉高,也能主动拉低;开漏输出只保留下拉晶体管。晶体管导通时输出低电平,关断时节点呈高阻,无法独立产生高电平。

3.png 

1  开漏输出关断时进入高阻,需要外部上拉

因此,开漏引脚没有合适上拉时,释放后的电平可能不确定。上拉可以来自外部电阻,也可能由器件内部结构提供,必须查看目标器件说明。

二、为什么多个器件可以安全共享一根线

任何一个节点导通下拉,总线就是低;只有所有节点都关断释放,总线才回到高。各节点不会出现一个强推高、另一个强拉低的直接争用。

2.png 

2  开漏输出只有主动拉低与高阻释放两种状态(原理示意,非实测结果)

这形成了“线与”关系,并支持多主仲裁等总线机制。但前提是所有共享节点确实使用兼容的开漏/开集结构,不能混入普通推挽输出。

三、上升沿为什么比下降沿慢

下降沿由晶体管主动放电,通常较快;上升沿则由上拉电阻给总线上的器件输入、走线和连接器电容充电,形成 RC 过程。总线越长、节点越多、电容越大,上升越慢。

这也是为什么 I²C 速度问题不能只看软件时钟设置。若电平还没达到接收阈值,下一个采样时刻就到来,通信可能在边界条件下失败。

四、上拉电阻越小,为什么也不是越好

1.png 

3  上拉电阻需要在上升时间和低电平电流之间折中(原理示意,非实测结果)

减小上拉电阻可以加快充电,但低电平时下拉器件需要吸收更大电流,功耗和低电平压降也会增加。电阻过大则上升时间变慢,并降低对漏电和干扰的裕量。

具体范围必须根据总线规范、上拉电压、器件低电平能力、总线电容和目标速率计算,本文不提供脱离系统的固定阻值。

五、跨电压域和掉电节点为什么要特别小心

上拉电源决定总线高电平。连接不同电压域时,必须确认每个器件引脚是否能承受该电平;需要电平转换时,应使用适合双向开漏总线的结构。

某个节点掉电后,其保护结构或漏电路径也可能把总线拉住或反向供电。排查“整条总线一直低”时,要逐个隔离节点,而不是只换主控。

六、I²C总线按这5步排查

0.png 

4  开漏总线的排查顺序(原理示意,非实测结果)

1. 确认所有共享节点的引脚模式,排除误配置为推挽输出。

2. 核对上拉电源域与每个器件的电平耐受范围。

3. 估算总线电容,并在目标速率下实测上升时间。

4. 同时检查低电平电压和下拉电流,避免只追求更快上升沿。

5. 覆盖节点掉电、热插拔和长线条件,检查反向供电与总线被拉死。

工程判断:I²C 高电平由上拉网络建立,低电平由任一节点主动拉下。上拉电阻、总线电容、下拉能力和电压域共同决定波形,软件频率只是其中一个条件。

写在最后

下一次看到 SDA 上升沿缓慢,别先怀疑代码延时。量一下上拉电源、上拉电阻和总线电容,看看这条线是谁在充电。

理解“拉低或释放”之后,多设备共享、仲裁、上升时间和掉电拉死,就不再是四个互不相关的故障。


登录后查看更多
0
评论 0
收藏
侵权举报
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。

热门评论0

相关文章

凡亿教育

凡亿教育打通了“人才培养+人才输送”的闭环,致力于做电子工程师的梦工厂,打造“真正有就业保障的电子工程师职业教育平台”。帮助电子人快速成长,实现升职加薪。 为了满足学员多样化学习需求,凡亿教育课程开设了硬件、PCB、仿真、电源、EMC、FPGA、电机、嵌入式、单片机、物联网、人工智能等多门主流学科。

开班信息