3. nRF53电源管理与双核低功耗策略

nRF5340的电源管理不是“把芯片设成低功耗模式”这么简单。它由三套彼此独立又相互配合的机制组成:系统电源模式(System ON/OFF、System OFF、休眠)、外设功耗域(Peripheral Power Domain)的按需开关,以及应用核(CPU App)与网络核(CPU Net)各自独立的休眠与唤醒。理解这三层关系,才能解释为什么同一块板子在不同固件下静态电流能相差几十倍。

系统模式:先分清“谁在供电”

nRF5340的电源状态可粗分为三类。第一类是System ON,此时稳压器工作,CPU、RAM、外设按各自配置运行或休眠,是绝大多数工作场景。第二类是System OFF,芯片进入最低功耗状态,仅保留极少数唤醒源(如GPIO DETECT、NFC场检测、VBUS检测),RAM内容丢失,唤醒等同于复位。第三类是System ON下的休眠,即CPU停止、时钟门控,但RAM保持、部分外设仍可运行,唤醒后从断点继续执行。

关键区别在于:System OFF是“关机”,唤醒后程序从头开始;System ON休眠是“暂停”,唤醒后继续。很多初学者把两者混用,导致唤醒后外设状态丢失、通信中断。判断依据很简单——如果唤醒后需要恢复上下文,就必须用System ON休眠,而不是System OFF。

外设功耗域:不是所有外设都一直耗电

nRF5340把外设划分到不同的功耗域。应用核侧有独立的Peripheral Power Domain,可通过寄存器按组关闭。典型可关闭的包括:

  • 串行接口组:UARTE、SPIM、TWIM、I2C等,空闲时关闭可省去时钟与引脚漏电;
  • 模拟组:SAADC、COMP、TEMP,模拟模块静态电流较大,不用时应彻底断电;
  • 定时器与PWM组:TIMER、PWM、RTC,RTC通常保留用于唤醒,其余可关;
  • 无线相关:由网络核管理,应用核不应直接干预。

关闭功耗域不是简单写一个寄存器,而是要先确认该外设没有正在进行的DMA或中断,否则会出现总线错误或数据丢失。推荐顺序是:停止外设 → 等待状态位空闲 → 关闭时钟 → 断电。

双核独立休眠:应用核与网络核各管各的

nRF5340的双核架构中,应用核和网络核有各自的电源管理单元。应用核可以进入休眠,而网络核继续维持蓝牙连接;反之,网络核也可以在空闲时休眠,由应用核处理传感器数据。两者通过IPC(核间通信)和共享内存协调。

实际策略通常是:网络核负责协议栈和射频时序,保持低占空比的连接事件;应用核按业务周期唤醒,处理数据后立即回到休眠。这样做的收益是——射频必须按连接间隔醒来,但应用核不必跟着射频节奏走,从而把平均电流压到最低。

nRF5340 双核电源域与唤醒路径 应用核 CPU App CPU / RAM 保持 外设功耗域 RTC 唤醒 GPIO DETECT 网络核 CPU Net 协议栈 / 射频 连接事件 RTC 唤醒 射频中断 IPC / 共享内存 唤醒源配置要点 • RTC 比较/溢出:周期唤醒,精度高,功耗低 • GPIO DETECT:外部事件唤醒,需配置上下拉与去抖 • 射频中断:网络核连接事件,由协议栈自动管理

唤醒源配置:让正确的信号叫醒正确的核

唤醒源配置的核心原则是“就近唤醒”。应用核的唤醒源应尽量来自应用核侧的外设,例如RTC、GPIO、SAADC限值检测;网络核的唤醒源来自射频事件和协议栈定时器。如果让网络核去唤醒应用核,中间要经过IPC,延迟和功耗都会增加。

以RTC为例,配置步骤大致如下:

// 示例:应用核使用RTC0周期唤醒
nrf_rtc_prescaler_set(NRF_RTC0, 32767);   // 1秒计数
nrf_rtc_cc_set(NRF_RTC0, 0, 5);           // 5秒比较
nrf_rtc_int_enable(NRF_RTC0, RTC_INT_COMPARE0_MASK);
nrf_rtc_task_trigger(NRF_RTC0, NRF_RTC_TASK_START);
// 进入System ON休眠,等待RTC中断唤醒

这里prescaler=32767对应1Hz,CC=5表示5秒后触发比较中断。唤醒后清除事件、重新设置比较值,再回到休眠。注意RTC在System OFF下不工作,所以这种方案必须配合System ON休眠使用。

实测电流分析:把“平均电流”拆开看

低功耗调试不能只看万用表读数,因为平均电流掩盖了峰值和占空比。推荐用示波器配合电流探头或Nordic Power Profiler Kit II,观察电流波形。典型BLE连接场景的波形是:周期性尖峰(射频收发)+ 平台期(CPU处理)+ 低谷(休眠)。

分析时按以下顺序拆解:

  1. 测休眠底电流:关闭所有外设、停止射频,只留RTC,记录电流值。nRF5340在System ON休眠下典型值约1~3µA(示例值,实际以数据手册和板级漏电为准)。
  2. 测射频峰值与持续时间:连接间隔内射频开启时间越短,平均电流越低。
  3. 测CPU唤醒时间:从唤醒到再次休眠的时间,乘以唤醒频率,就是CPU贡献的平均电流。
  4. 算平均电流:平均电流 ≈ (休眠电流×休眠时间 + 射频电流×射频时间 + CPU电流×CPU时间) / 总周期。
如果实测底电流远高于预期,优先检查:未使用的GPIO是否悬空、外设功耗域是否真正关闭、调试接口(SWD)是否仍使能、以及板级上拉电阻是否在休眠时仍形成漏电通路。

双核低功耗策略的落地要点

把上述机制组合成可执行策略,可以归纳为几条经验:应用核按业务周期用RTC唤醒,处理完立即关闭外设功耗域并回到System ON休眠;网络核保持连接事件所需的低占空比射频活动,不额外唤醒应用核;核间通信尽量用共享内存加IPC中断,避免轮询;所有未使用引脚配置为输入并接固定电平,防止浮空漏电。

最后要强调,nRF5340的低功耗不是某一个寄存器决定的,而是系统模式、功耗域、双核休眠和唤醒源四者协同的结果。实测电流分析的价值在于把“平均电流”还原成时间轴上的真实波形,从而定位到底是休眠底电流偏高、射频时间过长,还是CPU唤醒过于频繁。只有看到波形,才能做出有针对性的优化。