RK3568 休眠与唤醒

基本信息

硬件平台: RK3568
系统: Android 11 
SDK版本:android-11.0-mid  (官方提供)

参考资料:Rockchip_RK3568_Hardware_Design_Guide_V1.2_20211107_CN.pdf

任务背景: 因调试LCD屏需要进入休眠同时需要鼠标唤醒,源码提供的不支持鼠标唤醒。

一、默认休眠与唤醒配置

1、配置关键点

 休眠配置:rockchip_suspend: rockchip-suspend{}

 唤醒配置:rockchip,wakeup-config{}

关键电原 vdd_logic {}

2、关键配置文件:rk3568.dtsi

rockchip_suspend: rockchip-suspend {
        compatible = "rockchip,pm-rk3568";
        status = "disabled";
        rockchip,sleep-debug-en = <1>;
        rockchip,sleep-mode-config = <
            (0
            | RKPM_SLP_ARMOFF_LOGOFF
            | RKPM_SLP_CENTER_OFF
            | RKPM_SLP_HW_PLLS_OFF
            | RKPM_SLP_PMUALIVE_32K
            | RKPM_SLP_OSC_DIS
            | RKPM_SLP_PMIC_LP
            | RKPM_SLP_32K_PVTM
            )
        >;
        rockchip,wakeup-config = <
            (0
            | RKPM_GPIO_WKUP_EN
            )
        >;
    };

三:重点修改:

文件 rk3568.dtsi修改

    rockchip_suspend: rockchip-suspend {
        compatible = "rockchip,pm-rk3568";
        status = "disabled";
        rockchip,sleep-debug-en = <1>;
        rockchip,sleep-mode-config = <
            (0
            | RKPM_SLP_CENTER_OFF
            | RKPM_SLP_HW_PLLS_OFF
            )
        >;
        rockchip,wakeup-config = <
            (0
            | RKPM_CPU0_WKUP_EN
            | RKPM_GPIO_WKUP_EN   /*GPIO唤醒*/
            | RKPM_PWM0_WKUP_EN  /*PWM唤醒*/
            | RKPM_USB_WKUP_EN   /* USB唤醒*/
            )
        >;
    };

文件 rk3568-evb.dtsi

同时 vdd_logic 不能断电,需要修改如下:

regulators {
            vdd_logic: DCDC_REG1 {
                regulator-always-on;
                regulator-boot-on;
                regulator-min-microvolt = <500000>;
                regulator-max-microvolt = <1350000>;
                regulator-init-microvolt = <900000>;
                regulator-ramp-delay = <6001>;
                regulator-initial-mode = <0x2>;
                regulator-name = "vdd_logic";
                regulator-state-mem {
                    //regulator-off-in-suspend;
                    regulator-on-in-suspend;  /*修改为 on ,休眠不断电*/
                };
            };

四、简要说明

休眠唤醒功能宏定义文件:include/dt-bindings/suspend/rockchip-rk3568.h

其中定义唤醒源,休眠电源控制如下:

#define RKPM_SLP_WFI                    BIT(0)
#define RKPM_SLP_ARMOFF                 BIT(1)
#define RKPM_SLP_CENTER_OFF             BIT(2)
#define RKPM_SLP_ARMOFF_LOGOFF          BIT(3)
#define RKPM_SLP_FROM_UBOOT             BIT(4)
#define RKPM_SLP_PMIC_LP                BIT(5)
#define RKPM_SLP_HW_PLLS_OFF            BIT(6)
#define RKPM_SLP_PMUALIVE_32K           BIT(7)
#define RKPM_SLP_OSC_DIS                BIT(8)
#define RKPM_SLP_32K_EXT                BIT(9)
#define RKPM_SLP_32K_PVTM               BIT(10)
/* the wake up source */
#define RKPM_CPU0_WKUP_EN               BIT(0)
#define RKPM_CPU1_WKUP_EN               BIT(1)
#define RKPM_CPU2_WKUP_EN               BIT(2)
#define RKPM_CPU3_WKUP_EN               BIT(3)
#define RKPM_GPIO_WKUP_EN               BIT(4)
#define RKPM_UART0_WKUP_EN              BIT(5)
#define RKPM_SDMMC0_WKUP_EN             BIT(6)
#define RKPM_SDMMC1_WKUP_EN             BIT(7)
#define RKPM_SDMMC2_WKUP_EN             BIT(8)
#define RKPM_USB_WKUP_EN                BIT(9)
#define RKPM_PCIE_WKUP_EN               BIT(10)
#define RKPM_VAD_WKUP_EN                BIT(11)
#define RKPM_TIMER_WKUP_EN              BIT(12)
#define RKPM_PWM0_WKUP_EN               BIT(13)
#define RKPM_TIMEOUT_WKUP_EN            BIT(14)
#define RKPM_SFT_WKUP_EN                BIT(15)
#define RKPM_USB_LINESTATE_WKUP_EN      BIT(16)

#define RKPM_SLP_LDO1_ON                BIT(0)
#define RKPM_SLP_LDO2_ON                BIT(1)
#define RKPM_SLP_LDO3_ON                BIT(2)
#define RKPM_SLP_LDO4_ON                BIT(3)
#define RKPM_SLP_LDO5_ON                BIT(4)
#define RKPM_SLP_LDO6_ON                BIT(5)
#define RKPM_SLP_LDO7_ON                BIT(6)
#define RKPM_SLP_LDO8_ON                BIT(7)
#define RKPM_SLP_LDO9_ON                BIT(8)

因为需要USB唤醒,所以USB相关的电源是必须供电的,同时相关时钟必须供电,根据电路,USB模块是不能掉电的。如图:

所以在休眠配置项中

           | RKPM_SLP_ARMOFF_LOGOFF
            | RKPM_SLP_CENTER_OFF
            | RKPM_SLP_HW_PLLS_OFF
            | RKPM_SLP_PMUALIVE_32K
            | RKPM_SLP_OSC_DIS
            | RKPM_SLP_PMIC_LP
            | RKPM_SLP_32K_PVTM

不能配置RKPM_SLP_ARMOFF_LOGOFF、RKPM_SLP_PMU_DIS_OSC、RKPM_SLP_PMU_PMUALIVE_32K项,否则无法唤醒。

因需要USB唤醒,所以唤醒源中添加

           | RKPM_CPU0_WKUP_EN
            | RKPM_GPIO_WKUP_EN   /*GPIO唤醒*/
            | RKPM_PWM0_WKUP_EN  /*PWM唤醒*/
            | RKPM_USB_WKUP_EN   /* USB唤醒*/

因中断源一般在cpu0上,需要支持唤醒,GPIO支持按键唤醒,当然按键是接在GPIO上,最重要的是USB唤醒源,需要添加。

注手册上一段说明:

  RK3568芯片在待机时,可以选择将工作时钟源切换到PMU_PVTM模块提供的时钟或外部输入的
32.768KHz时钟,关掉OSC振荡电路,可得到更优的芯片待机功耗,此时只支持PMUIO1和PMUIO2电源域里的IO中断唤醒,如果需求的唤醒源和24MHz时钟有关,那么24MHz时钟不能关掉。

PVTM(Process-Voltage-Temperature Monitor)模块集成的时钟振荡环,可产生时钟,这个时钟频
率由时钟振荡环电路的延迟单元决定,产生的时钟可供芯片待机的时钟源;使用外部输入的
32.768KHz时钟当RK3568芯片休眠时钟时,可得到最优的芯片待机功耗,此时PVTM模块也可以关掉

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值