IIC为何使用开漏输出和上拉电阻-KIA MOS管
IIC-开漏输出、上拉电阻
推挽输出和开漏输出
推挽输出:输出逻辑0,则N-MOS激活;输出逻辑1,则P-MOS激活。开漏输出:在不接上拉电阻时,输出逻辑0,则N-MOS激活;输出逻辑1,P-MOS不会激活,不会输出高电平。在接上拉电阻时,输出逻辑0,则N-MOS激活;输出逻辑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&0=0那么主设备A在检查SDA电平时,会发现不是高电平,而是低电平.说明其他主设备抢占总线的时间比它早,主设备A只能放弃占用总线.如果是高电平,则可以占用。
这就是开漏输出在IIC通信中的另一个作用。SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信.SDA是低电平,说明有人已经捷足先登了,主设备A不能占用总线,结束通信.因此,模拟IIC一定要将GPIO端口设置为开漏输出并加上上拉电阻.(硬件IIC会自动配置为开漏输出)。
联系方式:邹先生
联系电话:0755-83888366-8022
手机:18123972950
QQ:2880195519
联系地址:深圳市福田区车公庙天安数码城天吉大厦CD座5C1
请搜微信公众号:“KIA半导体”或扫一扫下图“关注”官方微信公众号
请“关注”官方微信公众号:提供 MOS管 技术帮助