功耗测量
本章节基于默认 SDK,通过 Wi-Fi 唤醒 和 GPIO 唤醒 两个低功耗示例,帮助用户快速熟悉并验证低功耗方案。
GPIO 唤醒测试
测试环境和工具准备
硬件设备:待测试开发板、USB Type C 连接线、测试电脑和杜邦线(用于连接测试 Pin 和 VCC/GND)
串口调试工具:用于观察开发板运行状态,以及发送测试指令
测量设备:电流源(或电压源)或数字万用表,以及配套上位机软件
测试代码
以 PA3 引脚作为唤醒源的测试代码如下,将其添加到 project_km4tz/src/main.c 或 project_km4/src/main.c,在 main 函数靠近末尾的地方调用测试函数:
void gpio_irq_handler(void *id, u32 event)
{
UNUSED(id);
u32 GPIO_Pin = (event >> 16);
u8 port_num = PORT_NUM(GPIO_Pin);
GPIO_TypeDef *GPIO = (GPIO_TypeDef *)(GPIO_REG_BASE + port_num * 0x400);
/* 0:AP; 1:NP */
RTK_LOGI(TAG, "Core %d GPIO_IRQ_HANDLED %x!\n", SYS_CPUID(), GPIO_Pin);
RTK_LOGI(TAG, "GPIO_INT_STATUS = 0x%x\n", GPIO->GPIO_INT_STATUS);
GPIO_INTConfig(GPIO_Pin, DISABLE);
}
void gpio_test(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {
.GPIO_Pin = _PA_3,
.GPIO_PuPd = GPIO_PuPd_UP,
.GPIO_Mode = GPIO_Mode_INT,
.GPIO_ITTrigger = GPIO_INT_Trigger_EDGE,
.GPIO_ITPolarity = GPIO_INT_POLARITY_ACTIVE_LOW,
};
GPIO_INTConfig(_PA_3, DISABLE);
GPIO_Init(&GPIO_InitStruct);
InterruptRegister(GPIO_INTHandler, GPIOA_IRQ, (u32)GPIOA_BASE, 3);
InterruptEn(GPIOA_IRQ, 3);
GPIO_UserRegIrq(_PA_3, gpio_irq_handler, &GPIO_InitStruct);
SOCPS_SetAPWakeEvent(WAKE_SRC_GPIOA, ENABLE);
GPIO_INTConfig(_PA_3, ENABLE);
}
测试流程
以下测试流程建立在官方开发板的基础上:
参考原理图,移除开发板 VDD33 和 VDD33_S 引脚之间的 0 欧姆电阻;
将电压源(必须输出 3.3v)的正极接到 VDD33_S 引脚,将负极接到 GND 引脚,然后打开电压源上位机软件,设置电压源输出 3.3v;
使用 USB TypeC 线连接开发板和电脑;
配置 GPIO 测试代码;
编译并下载包含 GPIO 唤醒配置的固件到目标开发板;
打开串口工具软件,选择开发板对应的串口,短按
CHIP_EN按钮;打开电压源上位机软件,查看电流波形;
待日志输出结束后,输入测试指令
AT+TICKPS=R进入休眠,观察此时电压源上位机的电流波形;杜邦线一端连接 PA3,另一端短暂接 GND,即可唤醒 CPU。此时串口将打印中断日志,电压源上位机可以观察到此时电流值的变化。
备注
如果使用万用表,可以将其设置为电流档,然后把正极接 VDD33,负极接 VDD33_S。
输入 AT+TICKPS=R 指令后 CPU 进入休眠,待检测到 GPIO 的下降沿之后,CPU 被唤醒并执行中断,然后再次休眠。休眠时被 GPIO 唤醒的日志如下:
15:06:14.019 AT+TICKPS=R
15:06:14.019
15:06:14.019 [MEM] After do cmd, available heap 4450176
15:06:14.019
15:06:14.019
15:06:14.019 #
15:06:14.019 APPG
15:06:14.019 NPPG
15:06:18.035 NPPW
15:06:18.035 APPW
15:06:18.035 [MAIN-I] Core 0 GPIO_IRQ_HANDLED 3!
15:06:18.035 [MAIN-I] GPIO_INT_STÄTUS = 0x0
15:06:18.035 APPG
休眠时的平均电流为 428.3uA,唤醒后的峰值电流超过 20mA。休眠时被 GPIO 唤醒的最终电流波形如下图所示:
Wi-Fi 唤醒测试
测试环境和工具准备
硬件设备:待测试开发板、USB Type C 连接线、测试电脑
串口调试工具:用于观察开发板运行状态,以及发送测试指令
测量设备:电流源(或电压源)和配套上位机软件,也可以使用数字万用表
测试流程
在
amebaxxx_project目录下,输入./menuconfig.py,打开菜单,使能 Wi-Fi 选项;将电压源(必须输出 3.3V)的正极接到 VDD33_S 引脚,将负极接到 GND 引脚,然后打开电压源上位机软件,设置电压源输出 3.3V;
使用 USB Type C 线连接开发板和电脑;
编译并下载包含 Wi-Fi 功能的的固件到目标开发板;
打开串口工具软件,选择开发板对应的串口,短按
CHIP_EN按钮;打开电压源上位机软件,查看电流波形;
待日志输出结束后,输入指令
AT+WLCONN=ssid,<WiFi ssid>,pw,<password>连接 Wi-Fi,其中 WiFi ssid 和 password 需要替换成可用的 Wi-Fi 及其密码(不加尖括号);如果连接成功,串口会打印 assoc success;然后输入
AT+TICKPS=R,观察电流波形;若连线失败,需要检查热点是否存在、开发板天线是否正确设置等。
输入 AT+TICKPS=R 指令后 CPU 进入休眠,每隔 102ms 左右,系统被唤醒处理 Beancon,处理完成后再次休眠。因收发 Beancon 周期性唤醒的日志如下:
15:54:13.711 [WLAN-A] start auth to 50:2b:73:c3:6f:71
15:54:13.737 [WLAN-A] auth success, start assoc
15:54:13.761 [WLAN-A] assoc success (2)
15:54:13.801 [WLAN-A] set pairwise key 4 (WEP40-1 WEP104-5 TKIP-2 AES-4 GCMP-15)
15:54:14.797 [WLAN-A] set group key 4 1
15:54:14.798 [WLAN-I] set cam: gtk alg 4 0
15:54:14.813 [$]wifi connected
15:54:16.574 [$]wifi got ip:"192.168.0.103"
15:54:16.574 [WLAN-I] AP consume heap 11896
15:54:16.574 [WLAN-I] Available heap after wifi init 4409120
15:55:10.086 AT+TICKPS=R
15:55:10.086
15:55:10.086 [MEM] After do cmd, available heap 4409632
15:55:10.086
15:55:10.086
15:55:10.086 #
15:55:10.086 APPG
15:55:10.086 NPPG
15:55:10.114 NPPW
15:55:10.114 NPPG
15:55:10.210 NPPW
15:55:10.223 NPPG
15:55:10.238 NPPW
Wi-Fi 在休眠时,因收发 Beancon 周期性唤醒 CPU 的电流波形如下图所示。左侧均值电流超过 20mA,此时 CPU 仍处于 Active 状态;右侧休眠时的平均电流为 178.5uA,收发 beacon 时的电流接近 20mA。