低功耗模式
概述
在嵌入式物联网应用场中,待机性能表现十分重要,本章节旨在介绍 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 参考