软件模拟IIC-IO口配置推挽输出和开漏输出的区别

本文讨论了推挽输出和开漏输出在电子设计中的特点,特别关注于它们在软件模拟IIC中作为IO口配置时的区别,包括驱动能力、线与功能和电平读取。推挽输出需切换模式以读取外部电平,而开漏输出则无需此操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推挽输出(Push-Pull Output)

推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。所谓的驱动能力,就是指输出电流的能力。

推挽输出的一个缺点是,如果当两个推挽输出结构相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。

开漏输出(Open Drain Output):

开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

开漏输出的一个明显的优势就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻连接的电源电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。

开漏输出的另一个好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行,如果高电平和低电平连在一起,会出现电流倒灌,损坏器件。

软件模拟IIC时IO配置为推挽输出与开漏输出的区别:

但是在我们使用软件模拟IIC时,会发现IIC的IO口既可以配置为推挽输出也可以配置为开漏输出,不同之处在于当IO口配置为推挽输出时,发送和接收数据时需要切换IO口的输入输出模式,发送数据时需要将IO口切换为输出模式,接收数据时需要将IO口切换为输入模式。如果配置开漏输出则不需要切换IO口的输入输出模式。

我们知道推挽输出不具有线与的功能,但是由于我们使用软件IIC时通常不会有多个设备连接到一个总线上的情况,所以只有一个从设备的话,也就不会有线与的情况发生了,可以使用推挽输出。但是我们需要根据发送数据和接收数据来切换IO口的工作模式。

IO口的输入输出模式:

输入模式:只有红色圈出的部分处于工作状态,也就是说下半部分的输出电路,实际上是与端口处于隔离状态,不能工作,这个时候我们读出电平是外部设备输入的电平。

输出模式:除了下半部分的输出电路正常工作之外,上半部绿色部分,施密特触发器处于开启状态,CPU可以在“输入数据寄存器”的另一端,随时监控I/O端口的状态

开漏输出:

开漏输出模式下的P-MOS是截止的,当我们输出逻辑“1”时,N-MOS截止,此时IO口的电平由外部上拉电阻决定。此时我们通过读取输入数据寄存器监视IO口的电平,这个电平完全由外部电路决定,而不是IO自己输出的逻辑“1”。

如果输出的是逻辑“0”,N-MOS导通,此时IO口的电平被Vss拉低。

推挽输出:

推挽输出比开漏输出多了一个P-MOS,当我们输出逻辑“1”时,P-MOS导通,N-MOS截止,IO的电平被VDD拉高,输出高电平。此时我们通过输入数据寄存器监视IO口电平,得到的一定是被VDD拉高的高电平,而不是外部电路的电平。

当我们输出逻辑“0”时,P-MOS截止,N-MOS导通,IO口电平被VSS拉低,输出低电平。

总结:

通过对比开漏输出和推挽输出,我们可以发现当开漏输出输出逻辑“1”时,我们通过读取输入输出寄存器IDR得到电平是外部电路决定的,而不是自己输出的逻辑“1”。当推挽输出输出逻辑“1”时,我们通过读取输入输出寄存器IDR得到电平是自己输出高电平VDD,即逻辑“1”。这也就意味这在推挽输出模式下,我们没法读取到外部电路的电平信号,所以在我们的IIC IO口需要接收数据时,需要把IO口切换为输入模式,这样就可以读取到外部电路的电平信号。而开漏输出输出逻辑“1”时,我们可以读取到外部电路的电平信号,所以就不需要切换IO口输入输出模式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值