LISA PM WiFi PS 与 AON Timer 周期唤醒示例
源码位置: samples/subsys/lisa_pm/wifi_ps_aon_timer 查看源码
功能说明
本示例运行在 ARCS 双核 PM 模式下,演示 WiFi PS 与 AON Timer 同时启用时,系统进入自动轻睡眠,并由 AON Timer 每 5 秒周期唤醒。示例分别记录 AON Timer 业务回调和 LISA PM after_wake 唤醒源事件,用于验证两条通知链路均正常工作。
新特性
WiFi PS 共存:WiFi 连接并获得 IP 后启用 LISTEN 省电模式
5 秒周期唤醒:AON Timer 以周期模式每 5000 ms 唤醒系统
回调计数:AON Timer callback 递增计数,验证业务回调持续触发
唤醒源事件:PM
after_wake打印TIMER、WIFI或WIFI_DATA
硬件连接
本示例使用芯片内部 WiFi 和 AON Timer,无需额外接线。
串口日志使用 ARCS-EVB 默认调试串口,波特率为 921600。
测试环境准备
准备一个可连接的 2.4 GHz WiFi AP,并在 src/main.c 中修改:
#define TARGET_WIFI_SSID "YOUR_WIFI_SSID"
#define TARGET_WIFI_PWD "YOUR_WIFI_PASSWORD"
示例步骤
AP 核从 flash 启动 CP,并在两核分别初始化
lisa_pmCP 初始化 WiFi、连接目标 AP 并获取 DHCP 地址
配置 AON Timer 为系统唤醒源并启动 5000 ms 周期定时器
启用 WiFi LISTEN PS 和
AUTO_LIGHT_SLEEP每次唤醒后打印唤醒源、AON Timer callback 累计次数和本轮增量
编译
重要提示:编译前需要先确认当前示例支持的目标板型,然后将板型标识传给 -DBOARD。请按以下方式选择:
确认示例限制:查看当前示例
README中的硬件连接和注意事项,确认是否限定板型。参考示例配置:查看相关示例目录下的
sample.yaml,确认支持的板型。填写板型标识:SDK 内置板型的标识为
boards/下的目录名。例如实际使用的板型目录为boards/<板型名称>/,则编译参数填写为-DBOARD=<板型名称>。
在 SDK 根目录执行编译,并将命令中的 <示例路径> 和 <板型名称> 替换为实际值。
Linux 使用 build.sh:
# 通用命令
./build.sh -C -S samples/<示例路径> -DBOARD=<板型名称>
# 示例:使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
Windows PowerShell 使用 build.ps1:
# 通用命令
.\build.ps1 -C -S samples/<示例路径> -DBOARD=<板型名称>
# 示例:使用 arcs_evb 开发板
.\build.ps1 -C -S samples/<示例路径> -DBOARD=arcs_evb
Note
确保已安装对应平台的工具链和 ListenAI 开发工具包。Windows 环境请先执行 .\env.ps1 或直接使用 .\build.ps1 自动加载环境。
注意事项:-DBOARD 填写的是板型标识,不是芯片系列名称。如果示例有板型专用配置或额外编译参数,以示例 README 中的说明为准。
也可在 SDK 根目录执行:
./build.sh -C -S samples/subsys/lisa_pm/wifi_ps_aon_timer -DBOARD=arcs_evb
烧录
本工程生成 AP、CP 两份固件,必须同时烧录:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 \
0x0 build/remote/ap.bin \
0x100000 build/arcs.bin \
-C arcs
预期输出
启动和联网阶段:
=== LISA PM dual core WiFi PS + 5s AON timer CP ===
lisa_wifi init done
WiFi connected
DHCP success on VIF-0: 192.168.x.x
WiFi connected and IP obtained
AON timer started: period=5000 ms count=... freq=... Hz
AUTO_LIGHT_SLEEP enabled (WiFi LISTEN interval=10)
AON Timer 周期唤醒时,callback 计数和 TIMER 唤醒源同时可见:
after_wake cause=TIMER aon_timer_cb=1 cb_delta=1
after_wake cause=TIMER aon_timer_cb=2 cb_delta=1
after_wake cause=TIMER aon_timer_cb=3 cb_delta=1
WiFi 提前唤醒时,可能先看到 WiFi 唤醒源;此时定时器 callback 不应错误增加:
after_wake cause=WIFI aon_timer_cb=3 cb_delta=0
after_wake cause=WIFI_DATA aon_timer_cb=3 cb_delta=0
核心 API
API |
说明 |
|---|---|
|
初始化双核 LISA PM 与 HAL VRTC |
|
在连接前设置 WiFi LISTEN 周期 |
|
注册 AON Timer 业务回调 |
|
将 AON Timer 通道配置为系统唤醒源 |
|
使能 AON Timer 唤醒能力 |
|
以周期模式启动 5 秒 AON Timer |
|
注册 PM 唤醒源事件回调 |
|
启用自动轻睡眠策略 |
关键代码
static void aon_timer_callback(void *user_data)
{
volatile uint32_t *count = user_data;
/* 回调可能运行在 PM 恢复关键路径,不执行日志或阻塞操作。 */
(*count)++;
}
static void cp_after_wake(void *user_data, lisa_pm_wakeup_cause_t cause)
{
uint32_t callback_count = g_aon_timer_callback_count;
uint32_t callback_delta = callback_count - g_last_reported_callback_count;
g_last_reported_callback_count = callback_count;
LOGI("after_wake cause=%s aon_timer_cb=%lu cb_delta=%lu",
wakeup_cause_str(cause), callback_count, callback_delta);
}
配置说明
配置 |
说明 |
|---|---|
|
启用 LISA PM 框架和 HAL PM/VRTC |
|
CP 作为 PM primary 和 VRTC owner |
|
AP/CP 以双核运行模式协同休眠 |
|
启用 LISA AON Timer 设备 |
|
WiFi 与 LWIP 在 CP 侧运行 |
注意事项
回调上下文:AON Timer callback 只更新计数,不直接打印日志;日志统一在 PM
after_wake任务上下文输出。周期验证:连续 TIMER 唤醒时应看到
cb_delta=1;WiFi 提前唤醒时通常为cb_delta=0。WiFi 配置:LISTEN interval 必须在连接前设置,LISTEN PS 模式应在获得 IP 后启用。
双固件烧录:AP 和 CP 固件必须一起烧录,否则无法完成双核 PM 协同。
实板验证:示例依赖外部 WiFi AP,CI 仅执行构建;周期、callback 和唤醒源事件必须通过实板串口日志确认。