RK3588系统待机:从DTS配置到低功耗设计全攻略

汇聚之精 2026-04-18 4369人围观

RK3588作为瑞芯微当前旗舰级通用SoC,其系统待机功能完全由Trust固件(BL31)全权处理,配置逻辑与其他平台(包括瑞芯微其他芯片)无任何关联性。本文,从基础原理、核心配置、日志解读到5大典型场景落地,全面拆解RK3588待机开发的所有要点,帮你快速实现最优低功耗设计。

一、RK3588系统待机基础认知

1.1核心实现原理

RK3588所有带Trust的平台,系统待机的核心逻辑都运行在BL31固件中,内核仅通过DTS节点将配置参数传递给Trust。标准待机流程会执行以下操作:

关闭非必要电源域、模块IP时钟PLL

DDR进入自刷新模式

系统总线切换到32K低速时钟

按需断电vdd_armvdd_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断电

最低功耗模式

PMUGPIO0域工作

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

关键注意:USBSDIO等外设唤醒时,不能配置RKPM_SLP_ARMOFF_LOGOFFRKPM_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_log24M晶振供电

专用唤醒源

配置宏

功能

限制条件

RKPM_UART0_WKUP_EN

UART0串口唤醒

UART0支持,需保留24M晶振

RKPM_USB_WKUP_EN

USB设备唤醒

需保留vdd_log24M晶振

RKPM_VAD_WKUP_EN

语音唤醒

需保留VAD模块供电

RKPM_SDMMC/SDIO_WKUP_EN

SD/SDIO设备唤醒

需保留对应模块供电

调试专用唤醒源

RKPM_TIME_OUT_WKUP_ENPMU内部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_LOGOFF RKPM_SLP_PMU_PMUALIVE_32K RKPM_SLP_PMU_DIS_OSC RKPM_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_EN RKPM_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_EN RKPM_GPIO_WKUP_EN >;};

注意:PWM唤醒不能关闭vdd_log24M晶振。

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_EN RKPM_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_EN RKPM_CPU0_WKUP_EN >;};

注意:GPIO1~4唤醒必须配置RKPM_CPU0_WKUP_EN,且不能关闭vdd_log24M晶振。

五、避坑指南与常见问题

1.硬件设计第一原则:所有唤醒源优先布局在GPIO0组,这是实现最低功耗的唯一途径

2.跨平台配置无效RK3588的待机配置与其他瑞芯微芯片(如RK3568RK3399)完全不兼容,切勿直接复制

3.意外唤醒排查:优先关闭RKPM_CPU0_WKUP_EN,仅保留RKPM_GPIO_WKUP_EN,逐步添加唤醒源定位问题

4.休眠失败排查:先开启RKPM_SLP_TIME_OUT_WKUP测试基础休眠流程,排除电源域硬件问题

5.IO保持无效:检查对应IO域的电源是否在休眠时被关闭,必须确保电源持续供电

六、总结

RK3588的系统待机配置核心是根据产品的功耗需求和唤醒源需求,选择最优的断电等级和唤醒源组合。硬件设计时优先将唤醒源放在GPIO0组,可实现最低功耗的待机效果;软件调试时先打开休眠日志,使用PMU内部1秒自动唤醒功能验证基础流程,再逐步添加实际唤醒源,能大幅提升开发效率。

本文所有配置均基于官方最新指南验证,可直接用于项目开发。如有疑问,可参考瑞芯微官方文档或联系技术支持。

附:RK3588系统待机配置脑图

wKgZO2nZg0qASPybAANSb1mAMX4168.png

Powered By Z-BlogPHP