首先GPIO得内部输出电路如图,MOS管的导通情况决定了GPIO的输出类型,只有一二两种情况就是推挽输出,二三两种就是开漏输出,使用开漏输出只能输出低电平,这时候就要配合上拉电阻输出高电平,同时减少最大输出电压,防止烧坏芯片,展开来说
1. 开漏输出的原因
-
防止短路:I²C总线允许多个设备共享同一根数据线(SDA)和时钟线(SCL)。如果采用推挽输出,当一个设备输出高电平而另一个设备输出低电平时,会导致短路,损坏设备。而开漏输出只能将信号拉低或置于高阻态,无法直接输出高电平,从而避免了这种短路问题。
-
实现“线与”逻辑:在开漏输出模式下,只要有一个设备将总线拉低,总线电平就会变为低电平。这种特性允许多个设备共享总线,而不会相互冲突。
2. 上拉电阻的作用
-
提供高电平:由于开漏输出无法直接输出高电平,因此需要通过外部上拉电阻将总线拉至高电平。当设备的输出管关闭时,上拉电阻会将总线电平拉高。
-
保持总线空闲状态:在I²C总线空闲时,SDA和SCL线需要保持高电平。上拉电阻确保了总线在没有设备拉低时处于高电平状态。
-
优化信号完整性:上拉电阻的值会影响信号的上升时间和通信速率。合适的上拉电阻值可以确保信号快速上升,同时避免过大的电流消耗。