基于整车电源管理(VMM)的MCU低功耗配置

stop与deepstop的策略区别

stop的满足条件是,系统没有其他功能在运行。
deepstop是强制性的,在接收到deepstop的执行指令时,会强制关闭其他功能,进入深度睡眠。

VMM配置思路
1.当没有外部程序运行时,且收到CAN上进入低功耗的指令,通过CAN NM关闭CAN网络
2.进入pre-sleep,check wakeup event是否有发生。如果发生,就返回正常模式,如果没有发生,就继续进入sleep模式
3.清除wakeup event
4.关闭DEM模块
5.将关键数据写入Nvm中
6.配置唤醒源IO口模式
7.根据外围硬件,设置IO口的高低电平,保证没有电流漏出
8.清空唤醒源寄存器,配置唤醒源寄存器
9.设置寄存器进入stop模式(deepstop在设置前,需要切换时钟)

MCU的配置过程基本可分为三个部分:

1.sleep check
这部分主要根据CAN信号,确定是否需要进入低功耗模式

2.pre sleep
如果需要进入低功耗,则需要进行以下几个步骤:
关闭CAN网络、保存关键数据至NVM中、关闭中断、清除唤醒源与唤醒事件、配置唤醒源及相应的IO口等

3.sleep
根据芯片手册,配置相关寄存器,进入stop模式,等待唤醒事件发生

简要说一下遇到的问题:

1.进入低功耗模式后,一直reset
检查后发现是误设置了某个IO口作为唤醒中断源,该IO口在进入deepstop后,电平会发生跳变,触发中断唤醒。
检查后发现,没有配置AWO区WDG时钟,使WDG时钟在进入stop模式后关闭。

2.顺利进入deepstop后,MCU的电流一直很大
检查硬件电路后,发现是MCU的某个IO引脚未正确设置电平值,导致电流从IO口流入地或者从上拉电阻流入IO口。

3.上电前,接入CAN信号。板子一上电就一直reset
这个问题与stop模式无关,关键在于ICU在CANIF初始化之前初始化,故接收到CAN信号后,DET判断未初始化完成CANIF,故自检错误,陷入死循环

4.从stop唤醒后,又进入stop模式
由于从stop唤醒后,程序会接着执行,而相关状态值需要相应初始化

5.从stop唤醒后,又概率性的reset
窗口狗应设置100%窗口

后续更新中。。

你可能感兴趣的:(汽车电子)