这个页面的 最新开发版本 可能比这个发布的 2.3-beta.1 版本新。

低功耗模式

概述

在嵌入式物联网应用场中,待机性能表现十分重要,本章节旨在介绍 WM IoT SDK 的低功耗模式。

低功耗模式

当前一共有四种低功耗模式:

  • 不睡眠

  • 轻度睡眠

  • 深度睡眠

  • 系统待机

对应的代码为:

typedef enum {
    WM_PM_MODE_NO_SLEEP,
    WM_PM_MODE_LIGHT_SLEEP,
    WM_PM_MODE_DEEP_SLEEP,
    WM_PM_MODE_STANDBY,
} wm_pm_mode_t;

模式对比

模式

CPU

外设状态

WiFi

BLE

不睡眠

正常工作

正常工作

正常工作

正常工作

轻度睡眠

睡眠

可按需配置为工作或睡眠

正常工作,可保持连接

正常工作,可保持连接

深度睡眠

睡眠

睡眠

正常工作,可保持连接

正常工作,可保持连接

系统待机

睡眠

睡眠

睡眠,不保持连接

睡眠,不保持连接

这四种低功耗模式的功耗大小由大到小依次为:不睡眠 > 轻度睡眠 > 深度睡眠 > 系统待机。

Tickless 节能模式

当前在低功耗中使用了 FreeRTOS 的 Tickless 节能模式,用户可以根据实际使用情况对进入 Tickless 节能模式的条件进行修改,

可通过 menuconfig 修改 Components configuration FreeRTOS FreeRTOS tickless idle time 达到目的。

在使用 深度睡眠 时,需要将 FreeRTOS tickless idle time 的值修改为 9 及以上,深度睡眠睡眠才能实际生效。

WiFi 节能模式

当实际使用时,如果使用了 WiFi 功能,则也需要配置 WiFi 的节能模式。 WiFi 的节能仅适用于 station 模式,在睡眠状态下会关闭 RF、PHY 和 BBP 以降低功耗。 如果启用,在连接 AP 成功后,station 将周期性地在活动状态和休眠状态之间切换,station 可以与 AP 保持连接。。

WiFi 节能使用接口 wm_wifi_set_ps 来完成配置,其可配的选项为:

  • none: 不节能,可以全功率工作。

  • Minimum modem: 在调制解调器最低休眠模式下,station 会被每个 DTIM 唤醒以接收信标帧,这是默认模式。

    广播数据是在 DTIM 之后传输的,一般不会丢失。

  • Maximum modem: 在最大调制解调器休眠模式下,station 会被每隔 listen_interval 唤醒以接收信标帧。

    由于 station 在 DTIM 时间可能处于休眠状态,可能导致广播数据丢失。

    监听间隔越长,节省的电量越多,但广播数据更容易丢失。

注意事项

  • 轻度睡眠模式下,默认使用 Timer5 作为唤醒源。如果该 Timer 已被其它应用所使用,则轻度节能模式失效。

    如果想修改为其它 Timer,可在 menuconfig 中手动修改。

  • 深度睡眠模式下,CPU 和各外设时钟门控将会关闭,如果外设需要持续保持工作状态(如 PWM),那么不能选择该模式。

  • 深度睡眠模式下,默认使用 PMU 提供的定时器进行自动唤醒,虽然 W80X 也提供专门的 IO 唤醒,

    但是因为 W80X 的硬件限制无法查询实际睡眠的时间,所以当睡眠后使用睡眠 IO 手动唤醒的话,可能会造成 freertos 的 tick 计时不准确,

    为了保证 tick 计时,使用唤醒 IO 唤醒设备时,最好设置回调函数 wm_pm_get_slept_callback 以告知 W80X 实际睡眠时间。

  • 系统待机模式下,进入睡眠后被唤醒,系统会从头开始开始运行,内存中的数据一切归零。

低功耗实例

使用低功耗基本示例请参照:examples/low_power

低功耗 API 参考

查找 低功耗 相关 API 请参考:Low Power API 参考