S32K3学习笔记_电源管理
1、缩略词
PMC:Power Management Controller,电源管理控制器
FPM:Full Performance mode,全性能模式
LPM:Low Performance mode,低性能模式
LPCMP:低功耗比较器
SIRC:slow internal reference clock,慢速内部参考时钟
FIRC:fast internal reference clock,快速内部参考时钟
SXOSC:slow external oscillator,慢速外部晶振
FXOSC:fast external oscillator,快速内部晶振
RGM:Reset Generation Module
MC_RGM:Ensures a clean state and Run domain sanity by controlling the reset sequence
WKPU:Wake Up Unit,唤醒单元
PCU:Power Control Unit,电源控制单元
MC_PCU:Controls entry into and exit from Low-Power mode,控制进入和退出低功率模式
PIT:Periodic Interrupt Timer (PIT),周期性中断定时器
RTI:Real Time Interrupt,时时中断
RTC:real Time Clock (RTC),实时时钟
DCM:设备配置模块(DCM)
2、前言
芯片在某些对电源功耗要求严苛的条件下或者以较长时间周期工作时,需要使用电源管理,使芯片进入低功耗的模式以达到节能的效果。想要学习S32K312的电源管理,首先需要思考以下几个问题
1.S32K312有几种工作模式? 2
2.S32K312各工作模式下允许运行哪些外设? adc等
3.S32K312在低功耗的模式下唤醒后程序从哪里运行? 从main开始
4.S32K312降低功耗有哪些思路方法? 降低时钟频率,进入低功耗模式
3、S32K312的电源模式
S32K1xx有Run、Sleep、Deep Sleep三种电源状态,是因为S32k1xx使用的ARM Cortex M4的内核,其内核就规定了这三种电源模式:
Run:正常工作模式,允许PLL 倍频,内核、系统、总线频率运行在芯片的最高频率,功耗可达数十mA–上百mA
Sleep:普通睡眠模式,大部分外设停止工作,内核、系统和总线部分关闭或降频工作,功耗可降至几个mA
Deep Sleep:深度睡眠,几乎所有外设停止工作、NVIC停止工作,内核、系统和总线关闭,CPU内核停止工作,仅AWIC(异步唤醒中断控制器)这个用于唤醒的外设保持功能,功耗仅几十个uA。
ARM cortex M系列内核进入低功耗模式是通过CPU执行汇编指令WFI(Wait for Interrupt)或者WFE(Wait for Event)完成。
S32K312不同于S32K1xx,它只有两种工作模式:RUN和Standby模式。
RUN模式(FPM):与待机模式相比,主运行模式具有全性能和更高的电流消耗。
Standby模式(LPM):关闭Run域的芯片的低性能模式。大多数核心和外围设备在此模式下关闭。
4、S32K312两种模式下允许运行哪些外设
由上图Power management system可以看出:
RUN模式中所有外设都可以运行,时钟是能够以160MKz运行的;而Standby模式下锁相环PLLDIG是关闭了的,因此需要再开一组时钟源为FIRC的时钟作为Standby模式下的时钟。如下图:
在Standby中允许的外设包括定:PIT_0、RTC等模块以及SIRC、FIRC、SXOSC时钟。
RUN模式:
Standby模式:
5、S32K312从Standby模式唤醒后程序从哪里开始
由上图‘Power management system’可以看出,在Standby模式中Flash memory是挂掉了的,因此在Standby模式唤醒之后程序是从启动代码开始运行,相当于进行了一次Reset,程序重新从main()开始运行。
6、S32K312降低功耗两种思路方法
S32K312只有两种工作模式,RUN模式和Standby模式,因此降低功耗可以有以下两种方式
6.1、降低时钟频率
在RUN模式下,降低时钟继续运行,以此来降低功耗
优点:还可以继续运行外设,例如ADC等
缺点:功耗降低效果不明显
6.2、进入Standby模式
进入Standby模式,以此来降低功耗
优点:功耗降低效果明显
缺点:Standby模式中允许运行的外设少;唤醒基本等价于复位,会丢失历史数据,可以将数据写入flash中解决
7、电源管理的配置
软件平台:S32 Design Studio for S32 Platform
Version:3.4
SDK Version:PlatformSDK_S32K3_2022_03
1.配置两种工作模式
1.1为Standby模式增加一个以FIRC为时钟源的时钟
1.2根据需要的外设在Standby组时钟中选择开启哪些功能的时钟(注:WKPU外设时钟一定要开启)
1.3在Drivers的POWER模块中增加STANDBY模式(注:STANDBY模式就是待机模式,涵盖了上面几个xxx_STANDBY)
Drivers层是POWER模块配置芯片的工作模式,MCAL层是在MCU模块中配置芯片工作模式。需要注意的是MCAL层的MCU还能配置时钟组等功能,开启MCU模块后也要在MCU中对应配置出刚刚添加的Standby时钟组才能生成时钟的源码。
1.4选择开启需要外设的时钟(注:同样必须开启WKPU外设)
1.5RUN模式的配置也是一样的
2.进入各工作模式
进入各工作模式步骤主要为两步:先初始化时钟,然后进入对应模式。用到的只有两条函数。
在进入Standby模式之前需要先初始化Wkpu模块和Standby时钟,然后进入Standby模式
在Standby模式中可以使某些IO电平继续工作
例如需要使PTC6在Standby模式中保持高电平
只需在进入Standby模式之前进行如下配置
3.低功耗唤醒配置
根据数据手册可知,退出Standby Mode的条件有三个:
MC_RGM functional reset event
MC_RGM destructive reset event
WKPU wake-up events, WKPU[0]–WKPU[63]
我们使用event进行唤醒。S32K3xx总共有60个外部引脚中断唤醒源,以及内部的SWT ,RTC ,LPCMP以及RTI四个唤醒源
3.1唤醒事件设置-RTI
3.1.1在Drivers的Rit模块中选择PIT_0的CH_RTI通道
3.1.2勾选’GPT Stanbdy Wakeup Support’选项
3.2唤醒事件设置-RTC
3.2.1在Drivers的Rtc模块中选择RTC时钟源,时钟源为32KHz SIRC
3.2.2勾选’GPT Stanbdy Wakeup Support’选项
3.3唤醒事件设置-SWT
3.3.1在Drivers的Swt模块中使能Standby模式下的运行,设定超时时间
3.4WKPU模块设置
3.4.1在Drivers的Wkpu模块中增加对应的唤醒通道,并使能中断
3.4.2选择对应唤醒通道
3.4.3绑定唤醒通道,设置触发边沿
电源管理的配置项就只有上述这些,接下来自己实现一个小功能:
将MCU串口1与电脑连接,MCU上电进入RUN模式空循环,一旦MCU串口1接收到数据就进入低功耗模式。同时串口1的rx引脚作为唤醒源,当MCU在Standby模式中一旦检测到串口1rx引脚电平有上升沿变化就执行唤醒工作,重新进入RUN模式