相信做低功耗产品的同行都有这种经历:选型时被 datasheet 上的某个数字打动,结果板子焊好一测,电流比标称值高了几十倍,然后开始怀疑芯片、怀疑人生。我最近翻到 Nordic 一颗新料,看完了详细资料并对照自己做过的几个低功耗项目反复对比后,确实想围绕这个“50 nA”好好聊几句。标题里算的那笔账很直观:休眠电流不到 50 nA,一年下来只消耗 0.438 mAh,也就是拿一颗 CR2032 纽扣电池,光“睡觉”可以撑五百年。这个数字夸张吗?从理论计算上,它真没夸张。
这颗芯片最吸引我的地方,不是某项跑分有多高,而是它把“休眠电流”这个参数从传统 MCU 的微安级别直接拽到了纳安级别。我见过太多传感器节点、门锁、电子价签项目,最后续航上不去,问题都不是出在工作时的功耗,而是出在 99% 时间里那“微不足道”的待机漏电上。这篇文章我想从这颗芯片的技术实现讲起,结合我自己调试低功耗设备的经验,把 nA 级电流背后的设计逻辑、硬件电路的坑、电流测量方法,以及整个低功耗项目的推进节奏都拆开聊一聊。不管你是刚接触低功耗设计的初学者,还是被产品续航问题折磨了很久的工程师,相信都能在这篇里找到一些有用的东西。
1. 50 nA 是怎么实现的:一颗芯片为了省电有多拼
如果把普通 MCU 的深度睡眠电流(通常 1~5 µA)和这颗芯片的 50 nA 放在一起看,差距不是“优化”出来的,而是架构层面换了思路。先说一个最容易被忽略的事实:MCU 所谓“睡眠”,并不是芯片内部全部断电。CPU 核心停了,但稳压器、基准源、上电复位、欠压检测电路都还挂在电源轨上,它们不干活,但一直在“漏”。
传统低功耗 MCU 的普遍做法是让片内 LDO 进入低静态模式,把基准源切换到慢速模式,试图把电流压低。但基准源也好、LDO 分压电阻也好,只要电路还通着电,物理上就有电流路径。Nordic 这代产品做了几个很激进的设计决策:所有非必要模拟模块直接用电源开关切断,而不是“降流运行”;RTC 振荡器使用了一颗独立的超低功耗架构,不再依赖主 LDO 供电;掉电检测电路甚至可以在休眠时完全关闭,等唤醒事件发生后再重新上电初始化。这一套组合拳打下来,休眠电流自然就压到了 nA 级。
另外一个颠覆性设计是多电源域策略。传统芯片顶多分“核心域”“外设域”和“常开域”,但这颗料把 CPU 域、外设域、RTC 域、GPIO 保持域全都独立出来。休眠时 CPU 域和外设域直接断电,只有维持 RTC 计时和引脚唤醒的最小电路还在工作。你可以这样理解:普通芯片睡觉时是整个房间留了一盏走廊灯,耗电自然降不下来;而它是人睡了把所有灯都关了,只留一个夜光时钟面板。
| 电源域 | 传统低功耗 MCU | Nordic 新料 |
|---|---|---|
| CPU 核心域 | 时钟关闭但仍有漏电 | 彻底断电 |
| 外设域 | 部分外设可关 | 完全断电,按需启动 |
| RTC 域 | 保持运行 | 超低功耗独立振荡器 |
| GPIO 保持域 | 通常不单独区分 | 独立维持引脚状态 |
但有个东西是绕不过去的:RAM 的漏电。RAM 存储单元只要还在保持数据,就会有物理漏电流,这跟芯片设计水平无关,是硅片本身的特性。所以厂商标 50 nA 的前提,一定是“最小保留配置”——比如只保留唤醒上下文所在的那一小块 RAM,甚至完全不保持 RAM。如果你休眠期间必须要保留全部 RAM 数据,电流会明显上升。这一点后面实测部分我会再说,厂商放在小字注释里的条件,往往才是真正影响你项目成败的关键。
2. 休眠电流参数之外:细节里的魔鬼
参数表上的 50 nA 看着很美,但你真的能测出来吗?我自己的经验是:能,但必须在电路设计和测量方法上都有足够的敬畏。厂商标的是“芯片自身”的电流,而你板子上只要有一个 100 kΩ 的电阻跨在电源和地之间,3 V 电压下就是 30 µA 的漏电——这已经是 600 倍的差距。
2.1 从引脚上溜走的电流
GPIO 是最容易被忽视的漏电路径。芯片内部做好了隔离,但外部电路和外设芯片可不管这些。最常见的情况是这样的:某个外设芯片在上电时把 GPIO 拉到了高电平,而你的 MCU 此时已经进入休眠,IO 口保护二极管会形成一条从外部电源经由 GPIO 反灌回芯片内部的通路。这种问题在原理图阶段完全看不出来,只有用电流表实测才会发现。
还有一种情况更隐蔽:GPIO 配置成输入但引脚悬空。悬空引脚的电平不确定,输入缓冲器的 MOS 管会处于半开半关状态,形成贯穿电流。我调试时遇到过一次,明明所有外设都关了,休眠电流就是有 2 µA,排查到最后发现是一排没用的 GPIO 保持默认配置,把它们全部设成输出低或者使能内部下拉之后,电流立刻掉下来。所以看芯片的 GPIO 状态寄存器,其实比看电路图更重要。
2.2 外部的固定漏电点
这个坑几乎每个低功耗项目都会踩:分压电阻网络。很多设计为了采样电池电压,在电池正极和地之间放了两个 1 MΩ 电阻构成分压器。两个 1 MΩ 并联等效 500 kΩ,3.6 V 电池下漏电是 7.2 µA。这颗芯片再厉害,也救不回来。我现在的处理方式有三种:
- 分压网络串联一个 NMOS 开关,只在需要采样时打开
- 用 10 MΩ 级别的大电阻把漏电流压到亚微安级,但要注意 ADC 输入阻抗带来的误差
- 干脆把电压采样放到休眠之前完成,采样结果存进寄存器,而不是让分压电阻长期挂网
类似的重灾区还有外部 LDO。很多工程师选 LDO 只看噪声和压差,忽略了静态电流 Iq。一个典型的低功耗 LDO,Iq 大概在 1~3 µA,这已经是芯片自身休眠电流的几十倍了。如果你的产品对功耗敏感,LDO 选型时一定要看 Iq,或者干脆用 DC-DC 并在休眠时关断。
2.3 测量 50 nA 的正确姿势
普通万用表的电流分辨率顶多到 0.1 µA,而且电流档的内阻会带来额外压降,影响被测电路的运行状态。我测 nA 级电流一般用三种方法:
| 方法 | 适用场景 | 注意事项 |
|---|---|---|
| 精密静电计/源表 | 稳态休眠电流 | 仪器昂贵,适合实验室固定台位 |
| 积分法(电容测电压变化率) | 长周期平均电流 | 要选低漏电电容,否则结果被电容自放电淹没 |
| 电流放大器+示波器 | 观察唤醒瞬间的瞬态电流 | 需注意放大器输入偏置电流要远小于被测电流 |
用积分法举个例子:把一个 100 nF 的 C0G 电容串联在电源回路里,记录电容电压在睡眠期间的上升速率。如果 10 分钟内电压上升了 30 mV,那么平均电流就是 C × dV/dt = 100 nF × 0.03 V / 600 s = 5 nA。这个方法精度取决于电容的自放电性能,C0G 材质的好一些,X7R 就不要用在这种场合了。
注意:测休眠电流时,务必等芯片完全进入休眠状态再读数。很多芯片进入睡眠后,片内电容放电和引脚电平稳定还需要几百毫秒,急着读数是读不准的。我一般会等 5~10 秒,看到电流数值稳定后再记录。
3. 低功耗项目实操流程:从选型到量产的经验汇总
之前带过一个项目:无线温湿度标签,要用两颗 CR2032 电池撑三年。当时做功耗预算,全网找了不少芯片,回头看整个项目推进过程很有代表性,我就按这个流程把实操经验写出来。
3.1 第一步永远是写功耗预算表,而不是画原理图
这个习惯我强调了无数次。把系统拆成休眠、采样、通讯三个状态,给每个状态分配时间和电流,然后用加权平均算出平均电流。我们当时的目标是平均电流低于 8 µA,选了 Nordic 这颗料之后,预算表立刻好看很多。
| 状态 | 时间占比 | 状态电流 | 对平均电流的贡献 |
|---|---|---|---|
| 深度休眠 | 99.8% | 0.1 µA | 0.0998 µA |
| 传感器采样+ADC | 0.1% | 500 µA | 0.5 µA |
| 无线发送(RF TX) | 0.1% | 5 mA | 5 µA |
算完你就发现,休眠电流哪怕翻一倍,对平均电流的影响也只有 0.1 µA 级别;但通信电流只要多 1 mA,平均电流就多 1 µA。这提醒我们一个易被带偏的思路:不要在休眠电流上无限追求极致,真正的功耗大头在现代无线芯片发送数据的那几百毫秒里。
3.2 开发板默认状态是个坑
拿到芯片配的开发板,第一件事不是跑 demo,而是查板子上的默认功耗。很多开发板为了调试方便,LED、调试器、电平转换器等一应俱全,全部处于活跃状态。有一次我拿到的开发板,什么代码都没烧,上电电流就有 6 mA——那是因为板载 DAP-Link 调试器一直在工作。断开调试器跳线之后,电流才降到正常范围。
所以警告一句:不要用原厂开发板直接测“芯片功耗”。要测准,得自己画最小系统板,或者至少把调试器部分从供电回路里切出去。这块板只留芯片、晶振、去耦电容和必要的唤醒按键,尽量把变量降到最低。
3.3 用二分法逐模块确认电流消耗
我的做法是代码侧也分层测试:第一步只做空循环进入休眠,测基础电流;第二步打开 RTC,测 RTC 保持的电流增量;第三步使能 GPIO 唤醒;第四步打开 RAM 保持功能。每加一个功能,就记一次数。这样能精确知道哪个模块“贵”,哪里还有优化空间。
实际的测试数据显示:这颗芯片仅保留 RTC 和 GPIO 唤醒时,电流可以稳定到 80~120 nA 的范围,留住了典型值 50 nA 的量级。如果打开 8 KB RAM 保持,电流会跳到 300~400 nA,依然很低,但没有“50 nA 那么美了”。所以设计产品时,要按真实需求确认 RAM 保持的容量,预算表里写的是实际测得的数据,不写理想值。
3.4 把电流数据换算成真正的电池寿命
有了平均电流,电池寿命估算就只是小学数学了。但很多新手会犯一个错误:直接用电池标称容量除以平均电流,得出一个过于乐观的年限。电池容量会随放电率、温度、自放电率变化。CR2032 在 10 µA 负载下实际可用容量往往只有标称的 60~70%。
正确的估算方式:
[ 电池寿命 = \frac{电池可用容量 \times 折算系数}{平均电流} ]
拿一个平均电流 5 µA 的设计为例,一颗标称 220 mAh 的 CR2032,可用容量按 150 mAh 算,寿命就是 150 ÷ 0.005 = 30000 小时,约 3.4 年。如果你想设计一个 5 年寿命的产品,那么平均电流必须压到 150 ÷ (5 × 8760) ≈ 3.4 µA。这个目标在传统 MCU 上要费很大力气,但用上 nA 级休眠芯片后,余量就变得充裕多了。
4. 常见问题与排查技巧实录
做低功耗调试这几年,我踩过的坑能列一长串。这里挑几个出现频次最高的,直接做成速查表,方便你以后遇到类似问题快速定位。
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 休眠电流比规格大 10 倍 | 外部上拉电阻/分压电阻未断开 | 逐个断开外围模块,看电流变化 |
| 电流读数跳动不稳定 | 芯片未完全进入休眠或频繁被唤醒 | 示波器看唤醒引脚电平,检查中断标志 |
| 加上传感器后休眠电流暴增 | 传感器经 GPIO 反灌漏电 | 用 MOSFET 或 IO 口切断传感器电源 |
| 低温下电流正常,高温后翻倍 | 漏电随温度指数上升 | 用温箱测试,重新算功耗预算 |
| 万用表测不出 50 nA | 万用表分辨率不够 | 换用静电计或积分法 |
4.1 “按下唤醒按钮后电流迅速变大”
这个坑和我们常见的边沿触发有关。GPIO 唤醒建议用下降沿或上升沿触发,但外部按键抖动或者强干扰会生成一串脉冲,导致系统反复唤醒,看起来就是电流下不去。解决方法是硬件上加一个小电容到按键两端做去抖,软件上进入休眠前先把唤醒引脚的中断使能和电平触发方式配置好,再关全局中断。顺序反了的话,最后关闭中断的那条指令可能顺便把唤醒事件也错过去了。
4.2 “为什么我把外部电路都拆了,电流还是 2 µA”
这是很多人容易忽略的:芯片的供电引脚旁边有去耦电容,电容本身也有漏电。优质 MLCC 在常温下漏电很小(nA 级别),但便宜的 X5R/X7R 电容漏电可能达到微安级。在 nA 级的世界里,一颗劣质电容就可能毁掉整个功耗设计的努力。我现在的做法是:靠近芯片的电源引脚只用 C0G 材质的小容量电容,大容量的储能电容选择低漏电的钽电容或者高分子电容。成本会高一点,但这是保证休眠电流真实可达的前提。
4.3 唤醒后外设不工作的问题
低功耗唤醒后,外设和时钟的重新初始化顺序非常关键。我见过不少代码,在 main 函数的 while 循环里直接调用了外设函数,结果唤醒后发现 SPI 通信异常,因为 SPI 外设的时钟在休眠时被关闭了,唤醒后没有重新使能。正确做法是在 main 函数开头就把系统时钟和外设时钟配置好,再进休眠之前关闭,唤醒后重新初始化需要的部分。
4.4 示波器表笔测不到动态功耗
很多无线芯片发射时的工作电流变化极快,比如从 1 µA 跳到 20 mA 只用了微秒级别的时间。示波器用电流探头都未必抓得到完整的波形。这个时候我依靠的是逻辑分析仪抓事件时序,再用高采样率的电流检测电阻方案估算峰值功耗。不过,这部分通常不是预算表里的主角——真正决定电池寿命的,永远是那些几乎看不见的基础电流。
5. 这颗芯片带来的行业变化与选型思考
nA 级休眠电流不是一个孤立参数,它标志着一个设计思路的转变:电池供电产品的续航瓶颈,开始从“芯片睡眠电流”转移到“系统外设漏电”和“电池自放电”上。
过去设计传感器节点,我们默认 MCU 的休眠电流至少 1~2 µA,那么一个 10 年寿命的工业表计,必须选择工业级锂亚电池。锂亚电池自放电率低但价格高、内阻大,而且高负载能力差。现在如果芯片能把睡眠电流压到 100 nA 以内,某些场景下就可以用更便宜、更常见的电池方案,连 BOM 成本都能一起降下来。
我判断一颗低功耗芯片是否值得选型,通常看三个维度:
| 评估维度 | 关注点 | 这颗芯片的实际表现 |
|---|---|---|
| 休眠功耗 | 电流量级、唤醒源丰富度 | nA 级,支持多路 GPIO/RTC 唤醒 |
| 唤醒速度 | 从休眠到可执行代码的时间 | 微秒级快速唤醒,适合间歇采样 |
| 外围集成度 | 射频前端、电源管理集成度 | 高集成度,减少外部漏电路径 |
第三个维度往往被人忽视。集成度高不只是省 PCB 面积,更重要的是减少了外部器件之间的漏电路径。外设越少,需要考虑的静态电流越少,系统越容易达到标称功耗。
6. 我的实践经验总结:要做到 nA 级功耗,芯片只是入场券
做了这么多低功耗项目之后,我的一个体会是:芯片选型只是决定了你功耗的下限,系统设计才决定你能不能摸到这个下限。同一颗芯片,有人能做出 100 nA 的整机休眠电流,有人做出来 3 µA,差别就在电路和代码的细节里。
我给自己定了几条设计规则,分享给大家参考:
- 休眠时,所有非必要外设的电源轨必须切掉,包括传感器、放大器、电平转换芯片
- 所有 GPIO 必须明确配置,禁止悬空,优先配置成输出低
- 电源路径上的电阻网络要么加大到 MΩ 级,要么用开关管断开,绝不放任不管
- 选择 LDO 时必须检查 Iq,并且把它的静态电流纳入整机功耗预算
- 每个阶段的功能验证完成后,重复测一遍整机休眠电流,防止后续改动引入新的漏电通路
抛开芯片本身不谈,低功耗设计实际上更像一种“系统思维”的培养。你要对整个硬件的电流路径有清晰的地图感,知道每一纳安是从哪里流出、流向哪里;你也要知道,当你把 MCU 的休眠电流压到极限后,系统的对手已经不是芯片,而是连接器上的灰尘、PCB 的绝缘电阻、电容的自放电、甚至空气中湿度在引脚间形成的微弱导电路径。
我遇到过最夸张的一次,一块板子白天测 200 nA,到了梅雨季节再测,直接跳到 5 µA。查了很久才发现,是 PCB 表面没有做三防漆处理,潮湿环境下相邻引脚之间的水膜形成了微弱的导电桥。这个情况在普通微安级功耗设计里根本看不出来,到了 nA 级就藏不住了。
所以后来我的低功耗测试流程里,增加了一条硬性规定:所有低功耗产品在量产前,必须做高温高湿环境下的休眠电流复测。这也是我想给所有做低功耗设计的同行的一句真心话:datasheet 上的 50 nA 很好看,但真正做出超长待机的产品,靠的从来不只是那颗芯片,而是把每一个细节都抠到极致的系统级功力。