RV1106低功耗休眠与唤醒如何实现?
-
RV1106低功耗休眠与唤醒如何实现?有没有相关资料和帮助文档?
您好,休眠唤醒的实现方式如下
1 板级支持文件中的 RK_KERNEL_DEFCONFIG_FRAGMENT 属性添加 rv1106-pm.config
2 开启休眠唤醒打印(此步骤可省略)
3 进入休眠
4 添加唤醒源
设备树添加
5 触发唤醒源
短接触发引脚和GND
打印日志如下
注意:该方法目前还存在问题休眠时会概率性出现EMMC错误只能通过重启唤醒,请谨慎使用
1 板级支持文件中的 RK_KERNEL_DEFCONFIG_FRAGMENT 属性添加 rv1106-pm.config
2 开启休眠唤醒打印(此步骤可省略)
Code: Select all
echo 1 > /sys/power/pm_print_times
Code: Select all
echo mem > /sys/power/state
设备树添加
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>;
};
};
};
短接触发引脚和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
你好,请问一下(luckfox-pico-ultra-w)这个开发板,第一步应该在那个文件中做出对应的添加,第四步:是不是在下面的在下面的文件中添加对应的代码
~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-ultra-w.dts
还有就是这种唤醒方式有办法设置成定时唤醒的方式吗,每隔多长时间从休眠中唤醒一下那种,我现在需要两种唤醒方式一个是使用引脚中断进行唤醒,第二种就是系统每隔多长时间自动唤醒一次。
~/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 添加
目前RV1106 AOV的实现方案是有使用到定时器唤醒的,我们没有实际测试过,有需要可以参考文档
设备树文件对应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
我尝试了上面的步骤,现在可以成功的将当前的设备进入休眠模式,然后尝试对设备树进行修改,尝试在设备树中添加下面的代码作为休眠唤醒的触发源,想要使用gpio1—B0引脚作为唤醒触发源,但是使用下面的代码,经过测试之后并没有办法成功的编译
下面是编译时出现的报错情况
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>;
};
};
};
您好,建议另开新主题贴上修改后完整的dts 文件,目前从日志来看应该是dts配置出错了
已经发布了,其实就是在dts文件中添加了上面的休眠唤醒引脚的设置代码,就导致报错出现的情况。
还有就是上面的帖子中提到了有时候会在休眠的时候会出现emmc的报错情况,导致休眠出现问题,这时候除了重新上电才能唤醒开发板,还有其他办法去唤醒开发板吗。
还有就是上面的帖子中提到了有时候会在休眠的时候会出现emmc的报错情况,导致休眠出现问题,这时候除了重新上电才能唤醒开发板,还有其他办法去唤醒开发板吗。
Last edited by fengyulingyu on 2025-02-18 9:36, edited 1 time in total.
emmc报错属于内核奔溃只能重新上电或按reset按键重启开发板
我没有深入研究过RV1106的休眠唤醒方案,只是在实际测试中小概率遇到,猜测进入休眠时设置的PMUIO外都掉电了,唤醒时EMMC的引脚重新上电初始化进入系统,有可能是上电时序异常导致没有成功初始化eMMC,而内核和文件系统都存放在eMMC中导致的奔溃,有需要可以自行测试了解