RV1106低功耗休眠与唤醒如何实现?

  • 您好,休眠唤醒的实现方式如下
    1 板级支持文件中的 RK_KERNEL_DEFCONFIG_FRAGMENT 属性添加 rv1106-pm.config
    2 开启休眠唤醒打印(此步骤可省略)

    Code: Select all

    echo 1 > /sys/power/pm_print_times
    
    3 进入休眠

    Code: Select all

    echo mem > /sys/power/state
    
    4 添加唤醒源
    设备树添加

    Code: Select all

    / {
    	gpio-keys {
    		compatible = "gpio-keys";
    		autorepeat;
    		pinctrl-names = "default";
    		pinctrl-0 = <&pwr_key>;
    		power-key {
    			gpios = <&gpioX RK_PXX GPIO_ACTIVE_HIGH>;
    			linux,code = <KEY_POWER>;
    			label ="GPIO Key Power";
    			debounce-interval = <100>;
    			wakeup-source;
    		};
    	};
    };
    
    &pinctrl {
    	buttons {
    		pwr_key:pwr-key{
    			rockchip,pins = <X RK_PXX RK_FUNC_GPIO &pcfg_pull_none>;
    		};
    	};
    };
    
    5 触发唤醒源
    短接触发引脚和GND

    打印日志如下

    Code: Select all

    [root@luckfox root]# echo mem > /sys/power/state [   18.433027] PM: suspend entry (s2idle)
    
    [   18.581153] Filesystems sync: 0.148 seconds
    [   18.581373] Freezing user space processes ... (elapsed 0.001 seconds) done.
    [   18.582564] OOM killer disabled.
    [   18.582570] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
    [   18.583697] printk: Suspending console(s) (use no_console_suspend to debug)
    [   18.658434] android_work: sent uevent USB_STATE=DISCONNECTED
    [   26.368044] PM: pm_system_irq_wakeup: 66 triggered gpio_keys
    [   26.369426] rk_gmac-dwmac ffa80000.ethernet: init for RMII
    [root@luckfox root]# [   26.441535] rk_gmac-dwmac ffa80000.ethernet eth0: configuring for phy/rmii link mode
    [   26.441722] dwmac4: Master AXI performs any burst length
    [   26.441741] rk_gmac-dwmac ffa80000.ethernet eth0: No Safety Features support found
    [   26.441755] rk_gmac-dwmac ffa80000.ethernet eth0: PTP not supported by HW
    [   26.513537] rockchip-vop ff990000.vop: [drm:vop_crtc_atomic_enable] Update mode to 720x720p49, type: 17
    [   26.616978] dwc3 ffb00000.usb: device reset
    [   26.690168] android_work: sent uevent USB_STATE=CONNECTED
    [   26.699666] android_work: sent uevent USB_STATE=CONFIGURED
    [   26.730790] OOM killer enabled.
    [   26.730792] Restarting tasks ... done.
    [   26.740708] Resume caused by IRQ 66, gpio_keys
    [   26.740713] PM: suspend exit
    
    注意:该方法目前还存在问题休眠时会概率性出现EMMC错误只能通过重启唤醒,请谨慎使用
  • 你好,请问一下(luckfox-pico-ultra-w)这个开发板,第一步应该在那个文件中做出对应的添加,第四步:是不是在下面的在下面的文件中添加对应的代码
    ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-ultra-w.dts
    还有就是这种唤醒方式有办法设置成定时唤醒的方式吗,每隔多长时间从休眠中唤醒一下那种,我现在需要两种唤醒方式一个是使用引脚中断进行唤醒,第二种就是系统每隔多长时间自动唤醒一次。
  • 您好,使用luckfox-pico-ultra-w 对应的板级支持文件地址 为 <SDK>/project/cfg/BoardConfig_IPC/BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra_W-IPC.mk
    设备树文件对应sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-ultra-w.dts,其中gpio-key是新节点需要直接添加到根节点中
    wifi 驱动也需要修改,需要在 <SDK>/sysdrv/drv_ko/wifi/aic8800dc/aic8800_bsp/Makefile 和 <SDK>/sysdrv/drv_ko/wifi/aic8800dc/aic8800_bsp/Makefile 添加

    Code: Select all

    ccflags-y += -DSDIO_REMOVEABLE
    
    目前RV1106 AOV的实现方案是有使用到定时器唤醒的,我们没有实际测试过,有需要可以参考文档
    Downloaded 252 times
  • 我尝试了上面的步骤,现在可以成功的将当前的设备进入休眠模式,然后尝试对设备树进行修改,尝试在设备树中添加下面的代码作为休眠唤醒的触发源,想要使用gpio1—B0引脚作为唤醒触发源,但是使用下面的代码,经过测试之后并没有办法成功的编译
    屏幕截图 2025-02-18 161220.png

    Code: Select all

    {
    	gpio-keys {
    		compatible = "gpio-keys";
    		autorepeat;
    		pinctrl-names = "default";
    		pinctrl-0 = <&pwr_key>;
    		power-key {
    			gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
    			linux,code = <KEY_POWER>;
    			label ="GPIO Key Power";
    			debounce-interval = <100>;
    			wakeup-source;
    		};
    	};
    };
    
    &pinctrl {
    	buttons {
    		pwr_key:pwr-key{
    			rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
    		};
    	};
    };
    下面是编译时出现的报错情况
    屏幕截图 2025-02-18 161425.png
  • 您好,建议另开新主题贴上修改后完整的dts 文件,目前从日志来看应该是dts配置出错了
  • 已经发布了,其实就是在dts文件中添加了上面的休眠唤醒引脚的设置代码,就导致报错出现的情况。
    还有就是上面的帖子中提到了有时候会在休眠的时候会出现emmc的报错情况,导致休眠出现问题,这时候除了重新上电才能唤醒开发板,还有其他办法去唤醒开发板吗。
    Last edited by fengyulingyu on 2025-02-18 9:36, edited 1 time in total.
  • emmc报错属于内核奔溃只能重新上电或按reset按键重启开发板
  • Crocodile wrote: 2025-02-19 1:39 emmc报错属于内核奔溃只能重新上电或按reset按键重启开发板
    请问一下,当前的休眠不是主要是cpu的问题吗,为什么会出现emmc的报错,emmc不是存储设备吗?
  • 我没有深入研究过RV1106的休眠唤醒方案,只是在实际测试中小概率遇到,猜测进入休眠时设置的PMUIO外都掉电了,唤醒时EMMC的引脚重新上电初始化进入系统,有可能是上电时序异常导致没有成功初始化eMMC,而内核和文件系统都存放在eMMC中导致的奔溃,有需要可以自行测试了解