前言
STM32MP13x 系列是一款单核 A7 的 MPU,同时在低功耗模式下有出色的低能耗,官方网站已经提供了一个关于低功耗的文档 AN5565(STM32MP13 lines using low-powermodes),但是实际应用中会遇见各种问题,所以针对低功耗应用场景整理这篇文档,主要介绍概念和如何调试一些常见问题。
概括
STM32MP13x 有 PMIC 和分立电源的低功耗参考设计方案(硬件参考设计,请参考AN5565 这个文档的 Figure 1 和 Figure 2)MPU 的 PWR 电源和 RCC 时钟控制是实现低功耗的两个关键模块,RCC 保证不同功耗状态下的时钟状态,PWR 根据当前 MPU 是进入低功耗或者退出低功耗的状态来驱动和外部电源相关的管脚(PWR_ON, PWR_CPU_ON, PWR_LP),然后通过这几个管脚来对外部供电电源的控制可以让 MPU 进入低功耗状态或者退出,分立电源低功耗系统框图。
不同的低功耗
在 Linux 系统下进入低功耗主要命令有两个:
进入Cstop模式,或者CStandby同时需要保持DDR处于自刷新状态:
echo 'mem' > /sys/power/state
进入CStandby模式同时关闭DDR:
'shutdown -h 0' (注意:这个指令是针对 Yocto 编译的 systemd 文件系统,如果是使用 busybox,请使用 poweroff 指令)
常见问题和注意事情
CStandby 有两种模式,一种是 DDR 保持自刷新模式,另外一种 DDR 电源关闭。
在 Optee的设备树配置中,pwr_regulators 中的待机模式最后一个状态设定为STM32_PM_CSTOP_ALLOW_STANDBY_DDR_SR,这个时候 DDR 电源是保持的,最好选用带自刷新的 DDR(例如:DDR3L 型号的),此时功耗低而且唤醒速度也快。