I2C为什么要接上拉电阻?

2021-06-21 17:50 来源:电子说

为什么I2C连接上拉电阻?因为是开漏输出!

4f661fb8-d12c-11eb-9e57-12bb97331649.jpg

为什么是开漏输出?

I2C协议支持同一总线上的多个主设备和多个从设备。如果使用推挽输出而不是开漏输出,主器件之间会发生短路。因此,总线通常使用开漏输出。

为什么要连接拉电阻?

连接上拉电阻是因为I2C通信需要输出高电平的能力。开漏输出一般不能输出高电平,如果漏极接上拉电阻,可以进行电平转换。

I2C由两辆公交车组成,分别是民主行动党和SCL。连接到总线的器件输出级必须有开漏,并且全部通过上拉电阻连接到电源,这样就可以实现“线与”的功能。当总线空闲时,两条线路都是高电平。

如何确定上拉电阻的阻值?

一般来说,IO端口的驱动能力在2mA~4mA的数量级。阻力不要太小。

耗电问题。如果上拉电阻太小,VDD注入端口的电流会很大,功耗也会很大,导致端口输出的低电平值增加(I2C协议规定端口低电平输出的最大允许值为0.4V)。因此,一般上拉电阻应不小于1K(vdd=3v时,注入电流不应超过3mA)。

阻力不要太大。速度问题。它取决于上拉电阻和在线电容形成的RC延迟。RC延迟越大,波形越偏离方波,趋于正弦波,数据读写正确的概率越低,所以上拉电阻不宜过大。I2C总线上的负载电容不能超过400pF。当I2C总线上有更多设备时,总线负载电容会相应增加。当总负载电容大于400pF时,不能可靠工作。这也是I2C的局限。

建议使用1.5K、2.2K和4.7K上拉电阻。

I2C公共汽车基本运营

根据I2C总线规范,当总线空闲时,两条线路都必须为高电平。假设A大师需要启动I2C,当SCL为高电平时,他需要将SDA从高电平变为低电平作为启动信号。

主机a需要在将SDA拉高后再次检查SDA的电平。

为什么?由于线“与”,如果主设备A将SDA拉高,则其他主设备已经将SDA拉低。因为1 0=0,当主A检查SDA电平时,会发现不是高,而是低。说明其他主设备比它更早占用总线,主设备A只能放弃占用总线。如果SDA为高,则表示主机A可以占用总线,然后主机A将SDA拉低,开始通信。

因此,模拟I2C必须将GPIO端口设置为开漏输出,并添加上拉电阻。

负责编辑:lq6

延伸 · 阅读