wifi_ps + GPIO 唤醒示例
源码位置: samples/subsys/lisa_pm/wifi_ps/gpio_wakeup 查看源码
功能说明
在 basic 子工程 的 WiFi 自动轻睡眠基础上,把 PB6(板载 KEY1)注册为 PMU 唤醒源,演示按键唤醒 SoC + 唤醒原因读取。
仅 GPIOB_00..GPIOB_09 可作 PMU 唤醒源。
与 basic 的差异
项 |
basic |
gpio_wakeup |
|---|---|---|
WiFi + AUTO_LIGHT_SLEEP |
✓ |
✓ |
GPIO 唤醒 (PB6) |
✗ |
✓ |
额外 Kconfig |
—— |
|
额外代码 |
—— |
|
硬件连接
PB6 / GPIOB_06:板载 KEY1,pull-up,按下拉低
使用前修改
src/main.c 顶部:
#define TARGET_WIFI_SSID "YOUR_WIFI_SSID"
#define TARGET_WIFI_PWD "YOUR_WIFI_PASSWORD"
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在 SDK 根目录执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
两份固件必须同时烧到 flash:
固件 |
路径 |
烧录地址 |
|---|---|---|
AP 固件 |
|
|
CP 固件 |
|
|
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 \
0x0 build/remote/ap.bin \
0x100000 build/arcs.bin \
-C arcs
预期输出
=== lisa_pm wifi_ps + GPIO wakeup ===
PB6 configured as wakeup source (LEVEL_LOW)
Waiting for WiFi + IP...
WiFi connected
DHCP success: 192.168.x.x
AUTO_LIGHT_SLEEP enabled, press PB6 to wake
tick: last wakeup cause = WIFI
PB6 IRQ (runtime press) ← 按键时打印
tick: last wakeup cause = GPIO ← 按键唤醒后下一次 tick
...
cause = WIFI/TIMER是空闲态自然 wakecause = GPIO说明 PMU 由 PB6 唤醒 SoC
关键 API
/* 配置 GPIO 为 PMU 唤醒源 */
lisa_gpio_configure(gpiob, 6, LISA_GPIO_INPUT | LISA_GPIO_PULL_UP);
lisa_gpio_configure_wakeup(gpiob, 6, LISA_GPIO_WAKEUP_LEVEL_LOW);
lisa_device_wakeup_enable(gpiob, true);
/* 可选:运行态按键中断 */
lisa_gpio_configure_irq(gpiob, 6, LISA_GPIO_IRQ_EDGE_FALLING, cb, NULL);
lisa_gpio_enable_irq(gpiob, 6);
注意事项
唤醒电平方向:进 sleep 前 pin 必须处于与触发电平相反的状态。pull-up 按钮 +
LEVEL_LOW→ 未按下=高电平,按下=低电平 → 满足条件。IRQ 与 wakeup 独立:两者走不同硬件路径,同一 pin 触发条件相互独立:IRQ 用
EDGE_FALLING、wakeup 用LEVEL_LOW。GPIO 范围:只能用
GPIOB_00..GPIOB_09。依然依赖 WiFi 起来:与 basic 一样,
AUTO_LIGHT_SLEEP在 SDK 当前实现下要求 WiFi 已连接。