2. nRF芯片电源架构与工作模式

nRF 系列 SoC(以 nRF52832、nRF52840 为例)的功耗表现,本质上由两件事决定:芯片当前处于哪个电源/工作模式,以及在该模式下哪些外设、时钟和电源域仍然开启。很多“续航不达标”的问题,并不是射频参数没调好,而是芯片长期停留在了一个本可以更省电的模式里,或者唤醒源配置不当导致频繁被唤醒。理解电源架构与模式切换,是后续所有功耗优化的基础。

一、电源域与模式总览

nRF SoC 内部大致可分为几个关键电源/时钟域:CPU 核心与高速时钟域、外设总线与低速时钟域、RAM 保持域、以及射频域。芯片通过“模式”来统一管理这些域的开关状态。Nordic 官方把工作状态划分为几个层次,最常用的是:System ON(系统开启,包含 Run、Idle、Sleep 等子状态)与 System OFF(系统关闭)。此外还有 System OFF + RAM retention 这类折中状态。

需要先明确一个容易混淆的概念:System ON 并不等于“全速运行”。System ON 是一个大状态,只要芯片没有进入 System OFF,它就处于 System ON。在 System ON 内部,CPU 可以处于 Run(运行)、Idle(空闲,CPU 停止但外设可运行)、Sleep(睡眠,等待事件)等子模式。真正决定电流大小的,是这些子模式以及外设的开关组合。

二、各模式电流消耗的典型量级

下面给出的是 nRF52832 在典型条件下的示例量级(3V 供电、25℃、DC/DC 开启、无外部负载),用于建立数量级概念,实际值请以数据手册和实测为准:

模式典型电流(示例量级)关键条件
System OFF约 0.3 µA无 RAM 保持,仅少数唤醒源有效
System OFF + RAM 保持约 1~2 µA按保持的 RAM 区块数量增加
System ON Sleep(Idle)约 1.5~3 µARTC 运行、RAM 全保持、无外设
System ON Run(CPU 运行)约 3~6 mA64MHz 主频,取决于代码与外设
射频发射/接收约 5~15 mA取决于发射功率与射频活动

从这张表可以看出一个关键结论:Sleep 与 Run 之间相差约三个数量级。因此,续航优化的核心思路不是“把 Run 模式电流压低一点”,而是“让芯片尽可能长时间待在 Sleep 或 System OFF,并减少被唤醒的次数与时长”。

三、唤醒源配置

不同模式支持的唤醒源不同,这是配置时最容易出错的地方。System ON 的 Sleep 模式几乎支持所有中断源唤醒:GPIO(DETECT 信号)、RTC、定时器、比较器、射频事件、串口事件等。而 System OFF 只支持极少数唤醒源:GPIO DETECT 信号和 NFC 场检测(部分型号),并且唤醒后芯片会复位重启,程序从 main 重新执行。

配置 GPIO 唤醒时,需要设置引脚为输入,并使能 DETECT 信号,同时指定触发沿(高电平、低电平、上升沿、下降沿或任意变化)。例如让一个按键在按下时把芯片从 System OFF 唤醒:

// 配置 P0.13 为输入,并使能 DETECT
nrf_gpio_cfg_sense_input(13,
    NRF_GPIO_PIN_PULLUP,
    NRF_GPIO_PIN_SENSE_LOW);

// 进入 System OFF,等待按键拉低唤醒
nrf_power_system_off();

这里有一个常见陷阱:如果引脚配置了上拉,而按键另一端接 GND,那么按下时引脚被拉低,应使用 NRF_GPIO_PIN_SENSE_LOW;如果配置错误,芯片可能永远无法唤醒,或者被持续唤醒。另一个陷阱是:System OFF 唤醒后是复位,所有外设和变量都会重新初始化,不能依赖唤醒前的 RAM 内容(除非使用了 RAM 保持并正确读取)。

四、模式切换的实测方法

要验证模式切换是否符合预期,最直接的方法是用电流表或功耗分析仪观察电流波形。推荐使用 Nordic 的 Power Profiler Kit II(PPK2),它可以动态测量 µA 到 mA 范围的电流,并配合 nRF Connect SDK 的采样工具使用。

一个典型的实测流程是:让芯片先运行一段代码(Run),然后进入 Sleep 等待 RTC 事件,事件触发后短暂唤醒处理,再回到 Sleep,最后进入 System OFF。在 PPK2 的波形上,你应该能看到:一段较高的 Run 电流平台、一段极低的 Sleep 电流平台、周期性的窄脉冲唤醒尖峰,以及最后降到接近零的 System OFF 电流。如果 Sleep 电流明显高于预期(例如达到几十 µA),通常说明有外设未关闭、GPIO 悬空漏电、或高频时钟仍在运行。

nRF 电源模式与唤醒源关系图 System ON(系统开启) Run CPU 运行 · 3~6 mA 64MHz 主时钟 Idle / Sleep CPU 停止 · 1.5~3 µA RTC 运行 · RAM 保持 事件/中断 System ON 可用唤醒源 • GPIO DETECT(任意沿/电平) • RTC / 定时器比较事件 • 射频事件、串口事件 • 比较器 / 模拟事件 System OFF 深度关闭 约 0.3 µA 唤醒后复位重启 可用唤醒源 • GPIO DETECT • NFC 场检测 (仅少数型号) 不支持 RTC 唤醒 system_off() 电流值为 nRF52832 典型示例量级,实际以数据手册与实测为准

五、模式选择与切换的实践建议

在实际项目中,模式选择应遵循“够用即省”的原则。如果设备需要保持连接、周期性采集数据,通常使用 System ON + Sleep,让 RTC 周期性唤醒,唤醒后快速处理再回到 Sleep。如果设备是电池供电、长时间不需要工作、只靠按键或外部事件触发,则应使用 System OFF,把电流压到亚微安级。

切换时要注意几个细节。第一,进入 System OFF 前应关闭所有不需要的外设,尤其是高频时钟和射频,否则电流可能降不到预期值。第二,如果使用了 RAM 保持,要明确哪些变量需要在唤醒后保留,并正确配置保持区块,否则唤醒后数据丢失。第三,GPIO 在进入低功耗模式前应配置为确定状态,悬空引脚会因输入级漏电而增加电流。第四,唤醒后的初始化代码要尽量短,减少 Run 模式停留时间。

判断模式切换是否成功的实用方法:用 PPK2 观察电流波形,确认 Sleep 平台是否落在 µA 量级、System OFF 是否落在亚 µA 量级;如果偏高,优先检查 GPIO 状态、外设时钟和 RAM 保持配置。