SNVS模式是i.MX RT10XX和i.MX RT11XX系列MCU中功耗最低的状态,其标志性特点是除SNVS电源域保持供电,其余的电源域均处于断电状态。与此同时,SNVS的电流通常是uA这个数量级,对于i.MX RT10XX系列,通常是20uA左右,对于i.MX RT11XX系列,电流通常是10uA以下。正因为如此,SNVS模式在电池应用或者功耗敏感的应用场景得到了较为广泛的应用。
1无法进入SNVS状态
长按ONOFF button 5秒以上
在SNVS的LPCR寄存器位6写1
使用以上两种方法,芯片将会触发进入SNVS模式的状态机(纯硬件),在正常情况下会将PMIC_ON_REQ引脚的电平从高电平变为低电平,进而关闭除SNVS电源域以外部分的供电。
当使用上面两种方法无法使PMIC_ON_REQ引脚变为低电平时,则说明系统存在异常,进入SNVS模式的状态机流程被打断强制退出了。
A)未处理的中断
未处理的中断会影响系统进入SNVS模式。
其具体的案例是,用户使用RTC作为SNVS模式下的唤醒源,进行定时唤醒,在第一次运行时可以顺利的进入SNVS模式,接着RTC定时时间到,系统唤醒,再次使用写LPCR寄存器的方法让系统进入SNVS模式。
在此时我们就需要查看NVIC寄存器,看看是否有一些中断没有处理,比如说pending寄存器,active寄存器等。
如果发现有相关的中断没有处理,则需要先把中断进行处理后,才能顺利的进入SNVS模式。
在发现有中断没有处理后,应该检查在中断处理函数中,是否没有正确的清除标志位。比如说RTC有HP和LP两部分,定时器用的是LP部分,而用户清除的是HP部分。
B)LPCR寄存器位5
LPCR寄存器位5的作用可以理解为是权限设置,写1的时候允许用户使用软件的方法——在LPCR寄存器位6写1——关闭系统的电源。如果这个位默认是1,实际使用中,有可能因为软件的原因,比如说驱动程序,或者寄存器赋值将其清0,则会导致系统无法通过使用软件的方法让系统进入SNVS模式。
负面典型案例:用户使用RTC时需要使能校准功能,具体的校准数值也存放在LPCR寄存器中,此时查看驱动程序:
base->LPCR= SNVS_LPCR_LPCALB_VAL_MASK & (config->srtcCalValue <<SNVS_LPCR_LPCALB_VAL_SHIFT);
我们将具体的参数代入代码:
base->LPCR= 0x7C00U& (1<<10);
最后写入LPCR寄存器的数值是:0x0400
那么问题来了,位5被清0了,系统无法通过软件的方法进入SNVS模式。这个具体的函数是:
void SNVS_LP_SRTC_Init(SNVS_Type *base, const snvs_lp_srtc_config_t *config)
这行代码设想的功能,是将校准的数值放到指定寄存器位置,但是实际的功能是,将校准数值放到指定的寄存器位置,其余的寄存器清0。
正确的操作方法应该是先将相关的寄存器位清0(与非的方法清0),然后再将校准的数值写入(或的方法写入)即:
base->LPCR&= ~SNVS_LPCR_LPCALB_VAL_MASK;
base->LPCR|= (config->srtcCalValue <<SNVS_LPCR_LPCALB_VAL_SHIFT);
2进入SNVS模式后无法唤醒
常见的SNVS模式下的唤醒方法有:
使用RTC定时器唤醒
短按ON/OFF按钮
使用WakeUP引脚
对于前两种方式来说,所有的i.MX RT10XX和i.MX RT11XX芯片都可以实现,但是对于第三种方法,并不是所有的芯片都可以实现。因为有些芯片没有wakeup引脚, 例如RT1010。
对于第一种和第三种方法,首先需要排除的是中断是否配置正常,可以在运行(RUN)模式下触发中断,检查中断是否被触发。
对于第二种方法,短按ON/OFF按钮, 不需要任何配置,在进入SNVS模式后短按即可唤醒芯片。
当系统顺利进入SNVS模式后,使用ON/OFF按钮也无法唤醒时,可以按照下面的步骤进行检查
短按ON/OFF后,PMIC_ON_REQ是否拉高
PMIC_ON_REQ拉高后,其所控制的DCDC是否输出了预期的输出电压
DCDC输出预期电压后,检查VDD_SOC_IN的电压是否输出正常,i.MX RT10XX和i.MX RT11XX系列在默认情况下应该都是1.1V左右。
若VDD_SOC_IN电压没有正常输出,需要检测DCDC_PSWITCH引脚在唤醒过程中的状态,是否有从低电平拉高到高电平的过程。
如果没有从低电平拉到高电平的状态,一直都是在高电平或者较高电压的状态,则需要考虑系统电源存在漏电情况。
对于漏电的这种情况我们需要避免,在数据手册上有所描述:
举个栗子,啊不,例子。例如我们某个GPIO使用了上拉电阻到3.3V,当系统进入SNVS模式后,外部上拉电阻的电源没有关闭,此时将会产生leakage(漏电)。因此在做系统整体电源设计的时候,需要考虑到这一点。
暂无评论哦,快来评论一下吧!