采样电阻,取样电阻欢迎您!

为什么IIC需要使用漏极开路输出和上拉电阻?

首页 > 资讯

最近,我正在使用IIC通信协议来调整ICM20602模块(六轴陀螺仪和加速度计),并且遇到了困扰我很长时间的问题。

IIC协议是正确的,但读取始终失败。

最后,发现GPIO未配置为漏极开路输出。

推挽输出和漏极开路输出推挽输出:输出逻辑0,然后激活N-MOS;输出逻辑1,然后激活P-MOS。

开漏输出:当未连接上拉电阻时,输出逻辑0,然后激活N-MOS;输出逻辑1,P-MOS不会激活,也不会输出高电平。

连接上拉电阻后,输出逻辑为0,N-MOS被激活;反之,则为0。

输出逻辑1,P-MOS被激活,并且可以输出高电平。

也就是说,如果漏极开路输出未连接至上拉电阻,则无法输出高电平。

如果需要漏极开路输出以具有输出高电平的能力,则需要连接一个上拉电阻。

目前,许多单芯片GPIO可以通过软件配置上拉电阻。

左图是开漏输出(连接到上拉电阻),右图是推挽输出开漏输出的功能可以防止短路:在某些情况下(例如总线),多个GPIO端口可能连接到同一条线上,并且存在一个GPIO输出高电平而另一个GPIO输出低电平的情况。

如果使用推挽输出,您会发现此GPIO的VCC和另一个GPIO的GND连接在一起,这是短路的(冷却器)。

如果切换到漏极开路输出怎么办? VCC和GND有一个额外的电阻,因此电路是安全的。

因此,总线通常使用漏极开路输出。

连线和:漏极开路输出还可以实现连线和(自百度),减少“与”门,简化电路。

为什么IIC使用开漏输出并在其上?上拉电阻IIC协议在同一总线上支持多个主设备和多个从设备。

如果使用推挽输出而不是漏极开路输出,则主设备之间将发生短路。

至于为什么需要上拉电阻,这是因为IIC通信需要具有输出高电平的能力。

为了在多个主机占用总线时实现仲裁。

IIC只有两条线(SCL和SDA),如何确定哪个主设备占用总线(当然,先到先得)。

假设主设备A需要启动IIC。

当SCL为高电平时,它需要将SDA从高电平转换为低电平作为起始信号。

主机A将SDA拉高后,需要再次检查SDA电平。

为什么?因为行和。

如果主设备A将SDA拉高,则其他主设备将SDA拉低。

自1& amp; 0 = 0,当检查SDA级别时,主设备A将发现SDA级别不高。

这是低水平。

这意味着其他主设备要比总线设备抢占先机,而主设备A只能放弃占用总线。

如果级别较高,则可以将其占用。

这是IIC通信中漏极开路输出的另一功能。

SDA为高电平,表明主设备A可以占用总线,然后主设备A将SDA拉低以开始通信。

SDA为低,表明有人已经先登录,并且主设备A无法占用总线并结束通信。

因此,要模拟IIC,必须将GPIO端口设置为漏极开路输出,并添加一个上拉电阻。

(硬件IIC将自动配置为漏极开路输出)。

来源:CSDN,链接:梅学尚免责声明:本文内容经21ic授权后发表,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如有任何疑问,请与我们联系,谢谢!

cache