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"

关键配置

配置

说明

CONFIG_LISA_PM=y

AP/CP 两侧都启用 lisa_pm 框架,并自动选择 HAL PM/VRTC 模块

CONFIG_LISA_PM_CORE_PRIMARY=y

CP 侧作为 PM primary,lisa_pm CMake 自动导出 PM_CORE_PRIMARY=1CFG_VRTC=1

CONFIG_LISA_PM_CORE_PRIMARY=n

AP 侧作为 PM peer/proxy,lisa_pm CMake 自动导出 PM_CORE_PRIMARY=0CFG_VRTC_PROXY=1

CONFIG_LISA_PM_DUAL_CORE=y

CP 侧声明 AP/CP runtime 双核 PM 模式,避免走 PM_CLOSE_AP 单核路径

CONFIG_ARCS_HAL_IPC=y

AP/CP 都启用 IPC,使 PM 底层进入 CONFIG_CORE_NUM=2 路径;IPC master/slave 角色由 Kconfig choice 自动选择,本示例不再显式配置

CONFIG_ARCS_HAL_PM_CLOSE_AP=n

双核模式 AP 是运行中对端核心,不能睡眠前关闭 AP 子系统

内存布局

Flash:

固件

Flash base

烧录 offset

AP

0x30000000

0x0

CP

0x30100000

0x100000

PSRAM:

范围

大小

AP

0x28000000 - 0x28400000

4MB

CP

0x28400000 - 0x28800000

4MB

编译

重要提示:编译前需要先确认当前示例支持的目标板型,然后将板型标识传给 -DBOARD。请按以下方式选择:

  1. 确认示例限制:查看当前示例 README 中的硬件连接和注意事项,确认是否限定板型。

  2. 参考示例配置:查看相关示例目录下的 sample.yaml,确认支持的板型。

  3. 填写板型标识: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 固件

build/remote/ap.bin

0x0

CP 固件

build/arcs.bin

0x100000

./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

说明

lisa_pm_init()

AP/CP 两侧初始化 LISA PM 框架,内部完成 HAL PM 和 VRTC 初始化

lisa_pm_wifi_set_listen_interval(10)

连接前下发 WiFi LISTEN 监听周期

lisa_pm_wifi_set_ps_mode(LISA_PM_WIFI_PS_LISTEN)

连接成功并取得 IP 后启用 WiFi LISTEN 省电

net_enable_keep_alive()

进入 WiFi light sleep 前打开网络 keep-alive

lisa_pm_set_system_policy(LISA_PM_SYSTEM_POLICY_AUTO_LIGHT_SLEEP)

允许系统空闲时自动进入 light sleep

lisa_pm_wifi_wakeup_match_register()

注册 CP 侧 WiFi 唤醒首包 matcher

lisa_pm_sleep_callback_register()

注册 CP 侧 after_wake 回调,用于打印唤醒原因

注意事项

  1. 本示例演示的是 PM 双核模式,不是 WiFi 协议栈/LWIP 异核拆分;CP 侧仍使用 CONFIG_WIFI_LWIP_SAME_CORE=y

  2. 双核 PM 依赖 AP/CP 都启用 IPC;若 CP 侧构建结果出现 CONFIG_PM_CLOSE_AP=1,说明误走了单核 PM 路径。

  3. 本工程调用了 lisa_wifi_init(),因此进入 AUTO_LIGHT_SLEEP 前必须调用 lisa_pm_wifi_set_ps_mode();LISTEN interval 在连接 AP 前配置,LISTEN PS mode 在连接成功后启用。

  4. 两份固件必须一起烧录;只烧 CP 或只烧 AP 都不能完整验证 PM 双核协同。

  5. 本示例依赖外部 WiFi AP,sample.yaml 只做 build_only