功耗测量

本章节基于默认 SDK,通过 WiFi 唤醒GPIO 唤醒 两个低功耗示例,帮助用户快速熟悉并验证低功耗方案。

GPIO 唤醒测试

测试环境和工具准备

  1. 硬件设备:待测试开发板、USB Type C 连接线、测试电脑和杜邦线(用于连接测试 Pin 和 VCC/GND)

  2. 串口调试工具:用于观察开发板运行状态,以及发送测试指令

  3. 测量设备:电流源(或电压源)或数字万用表,以及配套上位机软件

测试代码

以 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);
}

测试流程

以下测试流程建立在官方开发板的基础上:

  1. 参考原理图,移除开发板 VDD33 和 VDD33_S 引脚之间的 0 欧姆电阻;

  2. 将电压源(必须输出 3.3v)的正极接到 VDD33_S 引脚,将负极接到 GND 引脚,然后打开电压源上位机软件,设置电压源输出 3.3v;

  3. 使用 USB TypeC 线连接开发板和电脑;

  4. 配置 GPIO 测试代码;

  5. 编译并下载包含 GPIO 唤醒配置的固件到目标开发板;

  6. 打开串口工具软件,选择开发板对应的串口,短按 chip en;

  7. 打开电压源上位机软件,查看电流波形;

  8. 待 log 输出结束后,输入测试指令 AT+TICKPS=R 进入休眠,观察此时电压源上位机的电流波形。

  9. 然后,杜邦线一端连接 PA3,另一端短暂接 GND,即可唤醒 CPU。此时串口将打印中断 LOG,电压源上位机可以观察到此时电流值的变化。

备注

如果使用万用表,可以将其设置为电流档,然后把正极接 VDD33,负极接 VDD33_S。

LOG 如图 休眠时被 GPIO 唤醒 所示。输入 AT+TICKPS=R 指令后 CPU 进入休眠,待检测到 GPIO 的下降沿之后,CPU 被唤醒并执行中断,然后再次休眠。

../../_images/gpio_wakeup_log.png

休眠时被 GPIO 唤醒的 LOG

最终电流波形如 休眠时被 GPIO 唤醒 所示,休眠时的平均电流为 428.3uA,唤醒后的峰值电流超过 20mA。

../../_images/gpio_wakeup_current.png

休眠时被 GPIO 唤醒

WiFi 唤醒测试

测试环境和工具准备

  1. 硬件设备:待测试开发板、USB Type C 连接线、测试电脑

  2. 串口调试工具:用于观察开发板运行状态,以及发送测试指令

  3. 测量设备:电流源(或电压源)和配套上位机软件,也可以使用数字万用表

测试流程

  1. 在 amebaxxx_project 目录下,输入 ./menuconfig.py,打开菜单,使能 WiFi 选项

  2. 将电压源(必须输出 3.3v)的正极接到 VDD33_S 引脚,将负极接到 GND 引脚,然后打开电压源上位机软件,设置电压源输出 3.3v;

  3. 使用 USB TypeC 线连接开发板和电脑;

  4. 编译并下载包含 WiFi 功能的的固件到目标开发板;

  5. 打开串口工具软件,选择开发板对应的串口,短按 chip en;

  6. 打开电压源上位机软件,查看电流波形;

  7. 待 log 输出结束后,输入指令 AT+WLCONN=ssid,<WiFi ssid>,pw,<password> 连接 WiFi,其中 WiFi ssid 和 password 需要替换成可用的 WiFi 及其密码(不加尖括号)。

  8. 如果连接成功,串口会打印 assoc success;然后输入 AT+TICKPS=R,观察电流波形;若连线失败,需要检查热点是否存在、开发板天线是否正确设置等。

LOG 如图 因收发 Beancon 周期性唤醒 所示。输入 AT+TICKPS=R 指令后 CPU 进入休眠,每隔 102ms 左右,系统被唤醒处理 Beancon,处理完成后再次休眠。

../../_images/wifi_wakeup_log.png

因收发 Beancon 周期性唤醒

WiFi 在休眠时定期唤醒 CPU 的电流波形如图 因收发 Beancon 周期性唤醒 所示,左侧均值电流超过 20mA,此时 CPU 仍处于 Active 状态;右侧休眠时的平均电流为 178.5uA,收发 beacon 时的电流接近 20mA。

../../_images/wifi_wakeup_current.png

因收发 Beancon 周期性唤醒