4. 系统电源模式与功耗测量方法

nRF 系列 SoC 的功耗表现,很大程度上取决于 CPU、外设、时钟源和电源域当前处于什么状态。Nordic 把系统电源管理划分为若干可切换的模式,从全速运行的 System ON,到几乎只保留唤醒能力的 System OFF。理解这些模式的进入条件、可唤醒源、保留状态和典型电流量级,是低功耗可穿戴设计的第一步。本节围绕模式本身、电源管理 API、PPK2 测量方法和功耗基线建立展开。

一、四种系统电源模式

在 nRF Connect SDK(基于 Zephyr)中,系统电源模式通常分为 System ON、Idle、Sleep 和 Deep Sleep(System OFF)四类,它们的核心差异在于 CPU 是否运行、时钟是否保持、RAM 是否保留以及可用的唤醒源。

System ON 是 CPU 正在执行指令的状态。此时高频时钟(HFCLK)运行,CPU、Flash 访问和外设都可能消耗电流。以 nRF52840 为例,CPU 从 Flash 全速运行约 3.5~6 mA,若同时开启无线电收发,峰值可达十几毫安。System ON 本身不是“坏状态”,问题在于它持续的时间——可穿戴设备大部分时间应避免停留在 System ON。

Idle 是内核无事可做、但系统时钟仍保持运行的状态。CPU 停止取指,但 HFCLK 未关闭,外设可继续工作。它的电流通常比 System ON 低,但仍明显高于 Sleep,因为时钟树仍在耗电。Idle 适合极短的空闲间隙,不适合长时间驻留。

Sleep 是 Zephyr 的默认低功耗状态,对应内核执行 WFI/WFE 后进入的低功耗模式。此时 HFCLK 关闭,CPU 停止,RAM 和外设寄存器内容保留,RTC、GPIO 中断、比较器等低速外设仍可唤醒系统。nRF52840 在 Sleep 下典型电流约 1.5~3 µA(RTC 运行、RAM 保留)。这是可穿戴设备最常驻留的模式。

Deep Sleep / System OFF 是功耗最低的状态,典型电流约 0.3~0.7 µA。此时大部分电源域关闭,RAM 内容丢失,只有极少数唤醒源有效,例如 GPIO 的 DETECT 信号、NFC 场检测或复位。System OFF 适合设备长时间不工作、只等待按键或充电插入的场景。需要注意:进入 System OFF 后程序不会“继续运行”,唤醒等同于复位重启,因此必须在进入前保存必要状态到非易失存储。

nRF 系统电源模式与唤醒路径 System ON CPU 运行 / HFCLK 开 RAM 保留 ≈ 3.5~6 mA Idle CPU 停 / HFCLK 开 外设可运行 ≈ 数百 µA~mA Sleep CPU 停 / HFCLK 关 RAM 保留 ≈ 1.5~3 µA System OFF 电源域关闭 RAM 丢失 ≈ 0.3~0.7 µA 唤醒源 Sleep:RTC 定时、GPIO 中断、比较器、无线电事件 System OFF:GPIO DETECT、NFC 场检测、复位(唤醒后从复位向量重启) 功耗基线建立要点 ① 关闭调试口与未用外设 ② 固定 RTC 周期与广播间隔 ③ 用 PPK2 记录平均电流与峰值 ④ 区分 Sleep 底电流与事件唤醒电流,作为后续优化的对照基准

二、电源管理 API 与进入方式

在 Zephyr 中,让系统进入低功耗状态并不需要手动写寄存器,而是通过内核的空闲机制完成。当所有线程都阻塞时,内核调用 arch_cpu_idle(),最终执行 WFI/WFE 进入 Sleep。开发者要做的是“让系统有机会空闲”,而不是强行休眠。

常用接口包括:k_sleep() 让当前线程睡眠指定时间,期间系统可进入 Sleep;k_msleep() 是其毫秒版本;pm_state_force() 可强制请求某个电源状态;pm_device_action_run() 用于对单个设备执行挂起或恢复。对于 System OFF,Nordic 提供 sys_poweroff(),调用后系统进入最低功耗状态,等待唤醒源触发复位。

/* 让线程睡眠 1 秒,期间系统进入 Sleep */
k_sleep(K_SECONDS(1));

/* 请求进入 System OFF,等待按键唤醒 */
sys_poweroff();

需要强调的是:如果某个外设没有正确挂起,或者有线程持续运行,系统就无法进入 Sleep。因此低功耗调试中,第一步往往是确认“系统到底有没有睡着”。

三、用 PPK2 测量功耗

Nordic Power Profiler Kit II(PPK2)是测量 nRF 设备功耗的标准工具。它串联在供电回路中,可实时记录电流波形,量程覆盖微安到安培,采样率高,能同时看到平均电流和瞬态峰值。

典型连接方式:PPK2 的 VOUT 接开发板 VDD,GND 共地,开发板不再通过 USB 供电,避免测量被旁路。在 nRF Connect for Desktop 中打开 Power Profiler 应用,选择 PPK2 作为源,设置采样率(如 100 kS/s)和量程(Source meter 模式)。

测量时建议分三段观察:设备启动与初始化阶段、稳定运行阶段、事件触发阶段(如广播、传感器采样)。重点记录稳定阶段的平均电流,以及事件发生时的峰值和持续时间。若平均电流远高于预期,通常说明有外设未关闭、GPIO 悬空漏电或调试口仍在工作。

四、建立功耗基线

功耗基线是后续所有优化的参照。建立方法:在固定硬件、固定固件、固定环境温度下,测量设备在典型工作循环中的平均电流。例如一个可穿戴设备每 1 秒广播一次、每 10 秒采样一次传感器,其余时间处于 Sleep。用 PPK2 记录 60 秒波形,读取平均电流,记为基线值。

基线应包含以下信息:模式分布(System ON / Sleep 占比)、平均电流、峰值电流、唤醒频率、供电电压。后续每次修改固件或配置后,用相同条件复测,与基线对比,才能判断优化是否真正有效。没有基线的功耗优化,很容易陷入“感觉变低了”的误区。

建议把基线数据记录成表格:日期、固件版本、平均电流、峰值、测试条件。这样在多人协作或长期迭代中,功耗变化有据可查。

总结来看,System ON、Idle、Sleep、System OFF 构成了 nRF 设备的功耗阶梯,API 决定系统能否顺利下台阶,PPK2 负责看清每一级台阶的真实电流,而功耗基线则让所有优化有了一把可比的尺子。四者配合,才能把可穿戴设备的续航从“大概能用”做到“可预测、可优化”。