某工程师反馈:他们的板子当初始化串口后,进入低功耗模式时,电流会有几百个uA;如果不初始化串口进入低功耗,电流则正常为几个uA。
此现象自然是不正常的,为此我用开发板搭建了测试环境,板子飞线外接了一个USB转串口(芯片是CH340,连接了TX、RX、GND)
当进入低功耗模式后,实测电流确实是几百uA。
但是当把USB转串口插到电脑上时,电流就一下子小了很多。
上述现象是什么原因呢?
当MCU串口初始化后,在串口不发送数据时TX引脚是高电平,当USB转串口没有供电时,此时MCU TX引脚会给这一部分电路供电,从而消耗能量,产生了几百uA的电流,从上图它的指示灯亮也能验证这一点。
上述其实现象叫倒灌,即USB转串口RX引脚上的电压倒灌到其VCC上。同理反方向,如果USB转串口一直接着电脑,MCU主电源断了,USB转串口也会通过它的TX引脚电压使MCU产生倒灌。虽然倒灌有时看起来也能工作,但是实际使用中要避免这种情况的产生,因为它是工作在非正常状态的。不仅串口引脚,GPIO引脚也会经常引起倒灌的产生。
倒灌可通过外部加保护电路避免,举个栗子,比如为了防止MCU通过串口RX引脚产生倒灌,可以加一个逻辑器件,当3.3V断开时就不会产生倒灌。
另外很多芯片内部也会做防倒灌的设计。
当USB转串口正常供电时,它所需能量由外部电源提供,RX引脚阻抗大,此时虽然MCU TX引脚为高电平,也不会额外增加多少电流。
后来和该工程师沟通得知,他就是因为在进入低功耗前把串口相连接的通讯模块断了电,导致TX引脚漏电引脚的上述电流大的问题。
要解决他的问题也很简单,在进入低功耗模式前,重新配置MCU TX引脚(配置为输入或者模拟模式),不让其输出高电平即可。
最后总结一下,MCU进入低功耗前要确保各IO引脚处于合适的引脚状态,避免漏电引起功耗的增加,避免倒灌现象的产生。