4. LowPower 低功耗评估

4.1. 简介

博流系列芯片拥有丰富的低功耗特性,以适配不同的低功耗应用场合。为了方便用户快速的评测使用 bl 系列 MCU 低功耗性能 bl_mcu_sdk 提供了一套抽象的低功耗接口,将低功耗等级分为四个等级,分别为

  1. Running : Running 为 CPU 正常运行时的功耗,由客户应用代码执行的功能决定功耗。

  2. WFI :WFI 模式,CPU 的 clock 处于被 Gating 状态,CPU 停止运行,当用户退出WFI模式的时候程序将会继续运行。

  3. PDS : PDS 模式,关闭了芯片上大多数电源域,同时关闭了 CPU,和 CPU 处于同一个电源域的 ITCM,DTCM 等 RAM 不可使用,只有 64K 的 OCTAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用 GPIO 引脚(在 GPIO 电源域没有关闭的情况下)唤醒。

  4. HBN : HBN 模式,关闭了芯片上绝大多数电源域,关闭了 CPU 以及 64K OCRAM,只有位于 AON 域的 4K RAM 可以保存数据,可以通过内部 RTC 进行唤醒,或者使用特定的唤醒引脚(位于 AON 域的引脚)唤醒。

bl_mcu_sdk 提供了一个简单的低功耗参考示例(bl_mcu_sdk examples/power/lowpower_test/),旨在帮助用户快速评估低功耗功能,如果需要进一步适配自身的低功耗场景,采取不同的低功耗策略,请查阅相关 datasheet 或者寻找 Boufflao Lab 的技术支持。 在该示例中,外设及 CPU 的时钟选择均是晶振 32M。基于该示例的功耗测量结果如下表所示:

模式

参考电流

对应基础模式

唤醒源

备注

Running

5.68 mA

Run

所有外设时钟都打开

WFI

3.14 mA

WFI

任意中断

除串口外,其它外设时钟关闭

PDS

10 uA

PDS 31

内部RTC/引脚中断

64K OCRAM保存数据

HBN

1 uA

HBN 1

内部RTC/引脚中断

4K AON RAM保存数据

上表中的参考电流是通过示例固件测试得出的。符合 bl70x 系列 MCU 的 spec 的描述,run wfi pds hbn 四种等级的定义简化了原先的 hbn level 以及 pds level 的设定。

见 bl702_bl704_bl706_DS_EN_Combo_1.9.pdf page 28

../../_images/powerTable.png

4.2. 低功耗示例测试方法

4.2.1. 编译低功耗示例代码

在工程目录下键入 make APP=lowpower_test  SUPPORT_SHELL=y BOARD=bl706_lp 完成低功耗示例 bl706 的编译。或者直接使用 CDK 工程,完成编译下载 您可以参考本文档《快速开发指南》来获取更多编译烧写的信息。

当编译并烧写成功后,连接串口到电脑端,并复位芯片,Xshell 会出现如下图所示的页面。

../../_images/xShell_lowpower.png

4.2.2. 准备低功耗测试所需的硬件环境

  • 可以串联电流表到电源端的电路板

  • 电流表

  • 一台 PC 主机(运行 Windows 或者 Linux 系统)

  • TTL 转 USB

如下图所示,将电流表串联进入 bl706 模组的供电线路,通过 PC 端的串口调试助手软件,下发不同的低功耗指令,使得 bl706 进入对应的低功耗模式 观察电流表示值,完成评估。

../../_images/lowpower_arch.png

4.2.3. 使用 Xshell 开始评估低功耗性能

用户可以通过在 Xshell 输入下述指令,进入对应的低功耗模式。

run

  • 复位芯片之后,默认进入 run 模式,没有进入任何低功耗模式,芯片实际在运行 while(1); 语句。

wfi

  • 进入 wfi 模式,后面不加任何参数,进入之后,CPU 处于 clock gating 状态,降低功耗

  • 进入 wfi 模式后,任何中断会唤醒,例如 uart 中断。在 Xshell 中敲击回车会触发 BL706 UART RX 中断,因此可以通过此方法唤醒 wfi 低功耗模式。

pds sleeptime

  • pds 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。

  • 如果指令包含 sleeptime 参数,pds 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。

  • 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。

hbn sleeptime

  • hbn 可以选择带一个 sleeptime 的参数,决定其内部 RTC 唤醒时间。如果指令不带此参数,那么默认不使用 RTC 内部唤醒,目前的固件仅支持上电复位唤醒。

  • 如果指令包含 sleeptime 参数,hbn 将会在``sleeptime * clock_period`` 的时刻被唤醒,表现为复位芯片,重新打印起始报文。

  • 进入低功耗模式后,RTC 的时钟是 32K,因此 sleeptime 为 32768 时,表现为睡眠 1S 后唤醒。