LISA PM 双核 WiFi PS 示例
源码位置: samples/subsys/lisa_pm/wifi_ps 查看源码
功能说明
本示例是 samples/drivers/hal/wifi_pm_dual_core 的 LISA PM 框架版本,用于演示双核模式下的 WiFi PS 场景:
AP 核 (
remote/):作为运行中的 PM 对端核心,冷启动时把 CP 从 flash 拉起,随后通过lisa_pm_init()初始化 PM 框架。CP 核 (
src/):运行lisa_pm、WiFi、LWIP 和应用逻辑;WiFi 获得 IP 后进入AUTO_LIGHT_SLEEP。
本示例不使用 wifi_ps/basic 那种单核 PM boot-shim 流程,remote/ 中没有 arcs_early_startup_hook() / ap_startup_dispatch()。
本示例不包含 GPIO 唤醒和 MQTT;如需验证 GPIO PMU 唤醒,请参考同级的 gpio_wakeup/ 子工程。
使用前修改
src/main.c 顶部:
#define TARGET_WIFI_SSID "YOUR_WIFI_SSID"
#define TARGET_WIFI_PWD "YOUR_WIFI_PASSWORD"
关键配置
配置 |
说明 |
|---|---|
|
AP/CP 两侧都启用 lisa_pm 框架,并自动选择 HAL PM/VRTC 模块 |
|
CP 侧作为 PM primary,lisa_pm CMake 自动导出 |
|
AP 侧作为 PM peer/proxy,lisa_pm CMake 自动导出 |
|
CP 侧声明 AP/CP runtime 双核 PM 模式,避免走 |
|
AP/CP 都启用 IPC,使 PM 底层进入 |
|
双核模式 AP 是运行中对端核心,不能睡眠前关闭 AP 子系统 |
内存布局
Flash:
固件 |
Flash base |
烧录 offset |
|---|---|---|
AP |
|
|
CP |
|
|
PSRAM:
核 |
范围 |
大小 |
|---|---|---|
AP |
|
4MB |
CP |
|
4MB |
编译
重要提示:编译前需要先确认当前示例支持的目标板型,然后将板型标识传给 -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 -DBOARD=arcs_evb
烧录
本工程产出两份固件,必须同时烧到 flash:
固件 |
路径 |
烧录地址 |
|---|---|---|
AP 固件 |
|
|
CP 固件 |
|
|
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 \
0x0 build/remote/ap.bin \
0x100000 build/arcs.bin \
-C arcs
预期输出
AP 侧关键日志:
=== LISA PM dual core WiFi PS AP ===
boot cp from flash: 0x30100000
AP lisa_pm init ok
CP 侧关键日志:
=== LISA PM dual core WiFi PS CP ===
lisa_wifi init done
WiFi connecting to YOUR_WIFI_SSID
WiFi connected
DHCP success on VIF-0: 192.168.x.x
WiFi connected and IP obtained
AUTO_LIGHT_SLEEP enabled (WiFi LISTEN interval=10)
CP after_wake cause=WIFI_DATA
如果首包未命中 lisa_pm_wifi_wakeup_match_*() 注册的规则,日志仍保持 CP after_wake cause=WIFI。
失败判据:
WiFi/IP wait timeout
assert
backtrace
exception
fault
核心 API
API |
说明 |
|---|---|
|
AP/CP 两侧初始化 LISA PM 框架,内部完成 HAL PM 和 VRTC 初始化 |
|
连接前下发 WiFi LISTEN 监听周期 |
|
连接成功并取得 IP 后启用 WiFi LISTEN 省电 |
|
进入 WiFi light sleep 前打开网络 keep-alive |
|
允许系统空闲时自动进入 light sleep |
|
注册 CP 侧 WiFi 唤醒首包 matcher |
|
注册 CP 侧 |
注意事项
本示例演示的是 PM 双核模式,不是 WiFi 协议栈/LWIP 异核拆分;CP 侧仍使用
CONFIG_WIFI_LWIP_SAME_CORE=y。双核 PM 依赖 AP/CP 都启用 IPC;若 CP 侧构建结果出现
CONFIG_PM_CLOSE_AP=1,说明误走了单核 PM 路径。本工程调用了
lisa_wifi_init(),因此进入AUTO_LIGHT_SLEEP前必须调用lisa_pm_wifi_set_ps_mode();LISTEN interval 在连接 AP 前配置,LISTEN PS mode 在连接成功后启用。两份固件必须一起烧录;只烧 CP 或只烧 AP 都不能完整验证 PM 双核协同。
本示例依赖外部 WiFi AP,
sample.yaml只做build_only。