请问官方技术关于CH579在设置了GPIO中断唤醒进入下电模式后,欠压下存在死机的问题

最近在用CH579M开发一款蓝牙产品,带有可充电的锂电池进行供电。


在配置完某个gpio管脚中断作为唤醒源后,进入下电模式LowPower_Shutdown( NULL );                   

如果是电池电压在2.3V-3.3V,这个时候可以实现正常的按键GPIO唤醒,随后进行蓝牙数据传输等。


现在的问题是:随着电池电压的消耗,在芯片处于下电模式的期间,电池的电压如果小于2.1V之后(比如在1.7V-2.1V),此时如果进行GPIO唤醒,是无法唤醒开机的(欠压下无法开机,可以理解),但这个时候哪怕给锂电池充满电至3.3V,也还是不能正常复位开机,处于死机状态,除非拔掉已经满电的锂电池再重新插回去供电就可以开机了,不过就破坏了产品。


意思是在欠压情况下如果进行了GPIO唤醒后,就进入了一种死机的状态。这个情况复现很多次了,请问一下官方要怎么避免这种情况,比如说在配置进入下电模式的之前,要进行这么的操作?亦或者提前监测到低电压时候是否取消唤醒功能?

还是说CH579芯片本身会有这个问题?


使用579的芯片需要加上410K电源状态监控芯片,用于解决外部电源上电和下电缓慢的问题。具体可以看一下我们的原理图。


配置GPIO以及进入睡眠的程序如下:

void My_LOWER_SLEEP(void)

{

R16_PA_INT_EN = 0;

R16_PA_INT_EN |= GPIO_Pin_4;

GPIOA_ITModeCfg( GPIO_Pin_4, GPIO_ITMode_FallEdge );     //配置管脚的GPIO中断,作为按键唤醒

R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;

R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;

R8_SLP_WAKE_CTRL  |= RB_SLP_GPIO_WAKE; 

R8_SAFE_ACCESS_SIG = 0;     

NVIC_EnableIRQ( GPIO_IRQn );  //配置GPIO为唤醒源并使能


LowPower_Shutdown( NULL );//进入下电模式的睡眠

}


总结一下就是:

就是进入睡眠后,如果此时电池处于欠压状态(达不到芯片的供电电压),此时再按下按键进行唤醒的话,将会有出现死机的情况,即使给电池充电至3v也不能复位跑起来,需要断电重启。

同时想问一下,在LowPower_Shutdown睡眠中发生欠压,不可屏蔽中断服务函数NMI_Handler是不会进入的是吧?


@TECH_Lpc 谢谢官方的技术解答,想问一下如果在不改变硬件电路的情况下,程序上需要怎么做,才可以避免这种睡眠中发生欠压而导致可能出现程序跑飞的情况?代码我放在上面了


蓝牙开启睡眠需要HAL_SLEEP宏定义置1,不建议手动去开启睡眠。上面情况必须加410K,无法从程序层面做修改解决。



行吧,谢谢啦@TECH_Lpc


@TECH_Lpc 你好,请问一下,你说的用于解决上电和下降缓慢的410k电源状态监控芯片是什么?

能否发一下具体的410k电源状态监控芯片相关链接,以及你说的原理图?我只有CH579F的原理图,麻烦你了


在579的原理图有相关的接法,可以看一下EVT包下面的原理图。

image.png


@TECH_Lpc 看到了,多谢!


只有登录才能回复,可以选择微信账号登录