RK3588作为瑞芯微当前旗舰级通用SoC,其系统待机功能完全由Trust固件(BL31)全权处理,配置逻辑与其他平台(包括瑞芯微其他芯片)无任何关联性。本文,从基础原理、核心配置、日志解读到5大典型场景落地,全面拆解RK3588待机开发的所有要点,帮你快速实现最优低功耗设计。
一、RK3588系统待机基础认知
1.1核心实现原理
RK3588所有带Trust的平台,系统待机的核心逻辑都运行在BL31固件中,内核仅通过DTS节点将配置参数传递给Trust。标准待机流程会执行以下操作:
•关闭非必要电源域、模块IP、时钟和PLL
•DDR进入自刷新模式
•系统总线切换到32K低速时钟
•按需断电vdd_arm、vdd_log等核心电源域
•配置并使能唤醒源
1.2关键驱动与头文件
所有配置宏定义和驱动代码均已集成到内核,无需额外移植:
# 核心驱动./drivers/soc/rockchip/rockchip_pm_config.c./drivers/firmware/rockchip_sip.c# 所有配置宏定义头文件./include/dt-bindings/suspend/rockchip-rk3588.h
1.3基础DTS节点结构
所有待机配置都集中在rockchip-suspend节点下,这是唯一与Trust交互的配置入口:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <1>;//休眠日志开关rockchip,sleep-mode-config = <...>;//常规休眠模式配置rockchip,wakeup-config = <...>;//唤醒源配置// 其他可选配置rockchip,sleep-io-ret-config = <...>;//IO电平保持rockchip,virtual-poweroff = <1>;//假关机模式};
二、核心DTS配置详解(重点)
2.1常规休眠模式配置(功耗分级)
通过rockchip,sleep-mode-config配置不同的断电等级,功耗从高到低排序,所有断电模式均需硬件电路支持对应电源域的独立控制:
| 配置宏 |
断电范围 |
适用场景 |
注意事项 |
| RKPM_SLP_ARMOFF |
仅vdd_arm断电 |
对功耗要求不高,需保留大部分外设 |
基础休眠模式 |
| RKPM_SLP_ARMOFF_DDRPD |
vdd_arm + DDR控制器断电 |
平衡功耗与唤醒速度 |
DDR仍处于自刷新状态 |
| RKPM_SLP_ARMOFF_LOGOFF |
vdd_arm + vdd_log断电 |
最低功耗模式 |
仅PMU和GPIO0域工作 |
| RKPM_SLP_ARMOFF_PMUOFF |
vdd_arm + vdd_log + PMU1断电 |
极致低功耗 |
极少使用,唤醒源受限 |
时钟配套配置:
•RKPM_SLP_PMU_PMUALIVE_32K:休眠时使用32K时钟作为系统时钟(必选)
•RKPM_SLP_PMU_DIS_OSC:关闭24M晶振(最低功耗必选)
•RKPM_SLP_32K_EXT:使用外部32K时钟(默认内部32K)
关键注意:USB、SDIO等外设唤醒时,不能配置RKPM_SLP_ARMOFF_LOGOFF和RKPM_SLP_PMU_DIS_OSC,否则外设电源和时钟会被关闭,无法唤醒。
2.2唤醒源配置(优先级与限制)
通过rockchip,wakeup-config配置唤醒源,不同唤醒源的可用性和功耗差异极大:
首选唤醒源:RKPM_GPIO_WKUP_EN
•仅支持GPIO0组引脚,中断信号直接送往PMU状态机,不经过GIC
•支持vdd_log断电模式,功耗最低
•硬件设计建议:所有唤醒源优先布局在GPIO0组
次选唤醒源:RKPM_CPU0_WKUP_EN
•支持所有通过enable_irq_wake()注册到GIC的可唤醒中断
•适用唤醒源数量最多,但管理权分散到各个内核模块,容易出现意外唤醒
•必须保留vdd_log和24M晶振供电
专用唤醒源
| 配置宏 |
功能 |
限制条件 |
| RKPM_UART0_WKUP_EN |
UART0串口唤醒 |
仅UART0支持,需保留24M晶振 |
| RKPM_USB_WKUP_EN |
USB设备唤醒 |
需保留vdd_log和24M晶振 |
| RKPM_VAD_WKUP_EN |
语音唤醒 |
需保留VAD模块供电 |
| RKPM_SDMMC/SDIO_WKUP_EN |
SD卡/SDIO设备唤醒 |
需保留对应模块供电 |
调试专用唤醒源
•RKPM_TIME_OUT_WKUP_EN:PMU内部1秒自动唤醒,仅用于基础休眠功能测试
2.3 Debug调试配置
rockchip,sleep-mode-config = <RKPM_SLP_TIME_OUT_WKUP// 1秒自动唤醒,测试休眠流程RKPM_SLP_PMU_DBG// PMU状态机波形输出(GPIO0_A5引脚)>;rockchip,sleep-debug-en = <1>;// 打开Trust休眠日志
2.4 IO电平保持配置
在vdd_log断电的场景下,若需维持某个IO的电平状态,可配置对应IO域的保持功能:
rockchip,sleep-io-ret-config = <RKPM_VCCIO1_RET_EN// 保持VCCIO1域所有IO电平RKPM_EMMCIO_RET_EN// 保持EMMC IO域电平>;
注意:必须确保对应IO域的电源在休眠时不断电,否则电平保持无效。
2.5假关机模式配置
部分产品关机时无法物理断电,可使用休眠模拟关机,实现快速开机和低功耗:
rockchip,virtual-poweroff = <1>;// 开启假关机模式rockchip,virtual-poweroff-irqs = <123456>;// 配置关机唤醒中断号
开启后,系统执行关机流程时会自动进入休眠,收到指定中断后恢复开机。
三、休眠唤醒日志解读
打开rockchip,sleep-debug-en = <1>后,Trust会输出详细的休眠唤醒日志,这是调试的核心依据。
3.1休眠日志关键信息
# BL31固件版本INFO: BL31: v2.3():v2.3-264-g378cb8595:derrick.huang# 休眠模式配置与次数INFO: enter: cfg=0x5000604, sleeptimes:1INFO: armoff_ddrpdINFO: pmu_pmualive_32kINFO: pmu_dis_osc# GPIO中断配置状态INFO: GPIO0_INTEN:0xffff0xffff0xff7f0xefff0x00xc81e142d# 关键寄存器状态INFO: PMU1_PWR_CON(0x1) PMU1_CRU_PWR_CON(0x23)
3.2唤醒日志关键信息
# 唤醒流程步骤012376543edcba2# 唤醒源识别INFO: gpio0_a7INFO: wake up status: 0x100INFO: GPIO0 interrupt wakeupINFO: GPIO0: 0x80
通过wake up status和具体的唤醒源信息,可快速定位意外唤醒问题。
四、5大典型场景配置案例
4.1最低功耗:Logic断电模式(GPIO0唤醒)
适用于仅需按键、触摸等GPIO0唤醒的产品,待机功耗最低:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config = <RKPM_SLP_ARMOFF_LOGOFFRKPM_SLP_PMU_PMUALIVE_32KRKPM_SLP_PMU_DIS_OSCRKPM_SLP_32K_EXT>;rockchip,wakeup-config =; };
4.2串口唤醒:UART0唤醒配置
适用于需要串口调试或串口外设唤醒的产品,UART0是唯一支持logic断电的串口:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config =; rockchip,wakeup-config = <RKPM_GPIO_WKUP_ENRKPM_UART0_WKUP_EN>;};
注意:UART0唤醒需要24M晶振保持工作,不能配置RKPM_SLP_PMU_DIS_OSC。
4.3红外唤醒:PWM唤醒配置
适用于带红外遥控的产品:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config =; rockchip,wakeup-config = <RKPM_CPU0_WKUP_ENRKPM_GPIO_WKUP_EN>;};
注意:PWM唤醒不能关闭vdd_log和24M晶振。
4.4智能唤醒:MCU唤醒配置
适用于需要PMU MCU进行中断过滤、按键消抖等预处理的产品:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config =; rockchip,wakeup-config = <RKPM_GPIO_WKUP_ENRKPM_PMUMCU_CEC_WKUP_EN>;};
4.5通用GPIO唤醒:GPIO1~4唤醒配置
适用于唤醒源无法布局在GPIO0组的情况:
rockchip_suspend: rockchip-suspend {compatible ="rockchip,pm-rk3588";status ="okay";rockchip,sleep-debug-en = <0>;rockchip,sleep-mode-config =; rockchip,wakeup-config = <RKPM_GPIO_WKUP_ENRKPM_CPU0_WKUP_EN>;};
注意:GPIO1~4唤醒必须配置RKPM_CPU0_WKUP_EN,且不能关闭vdd_log和24M晶振。
五、避坑指南与常见问题
1.硬件设计第一原则:所有唤醒源优先布局在GPIO0组,这是实现最低功耗的唯一途径
2.跨平台配置无效:RK3588的待机配置与其他瑞芯微芯片(如RK3568、RK3399)完全不兼容,切勿直接复制
3.意外唤醒排查:优先关闭RKPM_CPU0_WKUP_EN,仅保留RKPM_GPIO_WKUP_EN,逐步添加唤醒源定位问题
4.休眠失败排查:先开启RKPM_SLP_TIME_OUT_WKUP测试基础休眠流程,排除电源域硬件问题
5.IO保持无效:检查对应IO域的电源是否在休眠时被关闭,必须确保电源持续供电
六、总结
RK3588的系统待机配置核心是根据产品的功耗需求和唤醒源需求,选择最优的断电等级和唤醒源组合。硬件设计时优先将唤醒源放在GPIO0组,可实现最低功耗的待机效果;软件调试时先打开休眠日志,使用PMU内部1秒自动唤醒功能验证基础流程,再逐步添加实际唤醒源,能大幅提升开发效率。
本文所有配置均基于官方最新指南验证,可直接用于项目开发。如有疑问,可参考瑞芯微官方文档或联系技术支持。
附:RK3588系统待机配置脑图



