☰
休眠电流50nA的芯片是如何炼成的?从计算到实测与低功耗BLE落地
2026/10/2 23:38:59 网站建设 项目流程

做低功耗硬件这些年,我拿到一颗芯片,第一件事就是翻休眠电流。原因很简单,纽扣电池设备能不能撑一两年,往往不取决于芯片跑起来有多强,而取决于它睡下去之后有多省。最近Nordic这颗新芯片的公开数据就很抓人眼球:休眠电流不到50nA,按这个底电流连续放一年,一整年才消耗0.438mAh。对做电池供电产品的工程师来说,这已经接近“物理关断状态的极限漏电”了。这篇内容我会把数据怎么算、为什么难做到、怎么实测、怎么在真实电路里守住这个量级,一层层拆开讲,最后还会结合低功耗蓝牙场景里的NimBLE移植聊聊落地细节。如果你也正被“智能标签待机几个月就没电”“温湿度计换电池换到手麻”这类问题困扰,那这里的思路可以直接拿去做参考。

1. 数据背后的算术题:50nA和0.438mAh到底意味着什么

1.1 先来建立对nA这个单位的直觉

50nA到底有多小,很多人其实没有概念。这里先理一下电流单位:1mA等于1000µA,1µA又等于1000nA,所以50nA就是0.05µA,也就是0.00005mA。单看数字还是抽象,我习惯拿实际设备做参照。传统低功耗MCU的深度睡眠电流普遍在几µA级别,能做到几百nA已经算相当优秀。而50nA相当于把上一代“优秀”的数字再往下压一到两个数量级,这个跨度不是靠软件省出来的,而是芯片硬件架构本身的进步。

另一个参照物是电池自放电。一颗常见的CR2032纽扣电池容量大约220mAh,内阻、自放电率决定了它即便完全不接负载,放两三年也可能自然耗尽。当芯片的睡眠电流低到几十nA以后,它反而不再成为决定电池寿命的主要因素,真正的限制变成了电池本身的化学衰减和外部电路漏电。这给产品设计带来的含义是:你别光盯着芯片标称值,得把整板的漏电路径全部控制好,否则芯片省下来的nA级功耗,轻易就会被外围电路吃掉。

1.2 0.438mAh是这么算出来的

标题里那个0.438mAh,底层其实就是一个很直接的乘法:50nA等于0.00005mA,乘上一天24小时,再乘上一年365天,结果就是0.438mAh。也可以用nAh来算:50nA乘以8760小时,等于438000nAh,再除以1000就是0.438mAh。这个计算过程没什么高深的,但它背后的工程含义值得展开。

拿一个典型的低功耗蓝牙温湿度标签举例。CR2032容量按220mAh算,芯片如果整年都处于休眠,消耗的0.438mAh只占电池容量的约0.2%。也就是说,就算再加上偶尔的唤醒、蓝牙连接、传感器采样,只要活动频次控制得当,一颗纽扣电池撑一两年是非常现实的目标。很多“每15分钟上报一次数据”的小产品,之前做不长续航,核心瓶颈往往就卡在待机底电流太高。现在底电流被压到这种程度,整个功耗预算结构就变了:省电的重点不再是怎么压芯片,而是怎么设计好唤醒调度和外围电路。

1.3 休眠电流低,不等于整板待机功耗就低

这里必须提醒一句:芯片标称的“休眠电流低于50nA”,是在特定电压、特定温度、特定配置下测出的极限值,它不等于你成品整板的待机功耗。我见过不少开发者看到芯片低功耗参数漂亮,默认自己做出来的板子也会一样省电,结果实测偏高几十上百倍,然后回头质疑芯片参数造假。真相往往很简单:板上有一颗静态电流几µA的LDO、两个GPIO外接了10kΩ上拉电阻、一颗传感器睡眠电流800nA,任何一项都比芯片的50nA大得多。

所以,把“芯片休眠电流低”直接等同于“整机待机功耗低”,是新手最容易踩的误判。正确的态度是:认可这颗芯片的潜力,同时把系统级睡眠电流当成一个独立的设计目标来抓。芯片提供了好的下限,但它不会替你把外围电路的漏电也省掉。

2. 为什么nA级休眠电流这么难做到

2.1 芯片内部那些偷偷耗电的地方

要理解50nA为什么值得关注,得先弄明白芯片内部有哪些东西天生就在漏电。第一个是时钟源,一颗32.768kHz低速晶振的起振和维持电路功耗虽然不高,但跟nA级目标比起来仍然是大数目。芯片用内部低频RC振荡器能省电,但精度差,很多协议栈对定时精度有要求,必须依赖外部晶振,于是晶振电路一直在跑,休眠电流就很难压下来。

第二个是电压调节器。芯片内部逻辑供电通常要靠LDO或者DC-DC,这些电源电路即使空载也有静态电流。新一代低功耗芯片普遍引入低压差模式,或者支持让部分模块在睡眠时直接断开稳压器供电,就是为了省掉这部分成本。第三个是数字逻辑的漏电。晶体管在关断状态并不是绝对绝缘,亚阈值漏电每一颗都很微小,但一颗SoC里有数以亿计的晶体管,加总起来就非常可观。这也是先进工艺制程能显著改善休眠电流的关键原因,工艺越老,漏电越难压。

第四个是RAM保持。要保留数据就得持续给存储阵列供电,RAM容量越大,保持电流越高。所以现代低功耗芯片会把RAM切成多个bank,深度睡眠时只保留必要的部分,不用的全部断电。第五个是GPIO和外设偏置。引脚悬空、模拟比较器、内部上拉电阻、温度传感器偏置,这些平时不起眼的功能在nA级测量里全都可能变成漏电来源。把这五类漏电叠加起来,传统芯片能压到几百nA已经是极限。想做到50nA,意味着所有漏电项都要同步压到极低,这不是单纯优化某一模块能做到的。

2.2 从nRF52到新一代,这代芯片靠什么把漏电压到极限

以Nordic为参照,印象中nRF52系列在System OFF模式下的典型电流也就0.3µA左右,也就是300nA上下,这在BLE市场里已经算相当能打。到了nRF54这一代,公开资料和开发套件的实测反馈都把System OFF电流推进到了50nA这个量级。这背后不只是工艺节点进步的功劳,更关键的是芯片内部电源域管理做得更细了:RAM可以按bank独立断电,射频前端可以完全下电,通信协议栈在睡眠时能关掉所有不必要的外设时钟,甚至部分必须常供电的功能被单独放进了超低功耗域。

你可能觉得这些靠软件也能实现,其实不完全对。上一代很多MCU即使在软件里关掉了所有外设,芯片内部仍有一些模拟电路固定上电,用来实现快速唤醒、电平监测等功能。新一代芯片把这些电路也纳入了可关断范围,等于从硬件层面给了软件更大的操作空间。这类优化属于芯片架构级别的改动,不是刷一个SDK补丁就能追上的。所以看到50nA这个数字时,我的第一反应是这台芯片内部确实做了不少狠功夫。

2.3 温度、电压、工艺:nA级别的漏电十分“娇贵”

这里还要解释一个很多人对nA级数字的误解:半导体漏电和温度是指数关系。PN结的漏电流会随温度升高快速增长,工程上有个粗略经验,温度每升高大约10℃,漏电流可能翻一倍。假设芯片在25℃下测出50nA,把环境温度拉到45℃,漏电可能会涨到200~300nA甚至更高;反过来在低温环境,漏电流又可能比标称更低。

工作电压也有类似影响,VDD越高,漏电路径上的压差越大,整体漏电越明显。所以芯片datasheet里的低功耗数字通常会标注测试条件和电源电压。做产品设计时,不能用25℃、额定电压下的标称值直接代替全温区指标。如果设备可能放在户外暴晒的场合,或者电池电压在寿命末期偏高,必须用实测数据反推续航,而不是拿实验室里最好看的数字做宣传。这个差异在µA级时代大家还不太在意,到了nA级就会被明显放大。

3. 测量50nA这件事本身就是技术活

3.1 为什么普通万用表测不了nA级电流

很多人拿到板子,第一步会掏出万用表去测功耗,这是个很自然的动作,但结果通常不靠谱。拿常见的Fluke 87V来说,它电流档的最高分辨率大概在0.1µA,也就是100nA,测50nA时读数基本就是0,或者被噪声带得乱跳。更麻烦的是,万用表电流档串进电路时是有内阻的,µA档的内阻可能高达几kΩ甚至几十kΩ,这个内阻会在供电回路上产生额外压降。对一颗工作电流只有几mA的芯片来说,这点压降可能触发欠压复位,也可能让内部电源管理电路误判状态,最终测出来的数据既不准又不可复现。

专业低功耗验证要用更高精度的设备。常见的方案有Keysight B2985A这类静电计,能测到pA甚至fA级,但价格和使用门槛都比较高;更接地气的是Nordic的Power Profiler Kit 2,也就是PPK2,它自带可编程电源和高速电流采样,专门为这类型嵌入式调试场景设计,能覆盖nA到几百mA的动态范围。用这类设备测出来的曲线,才有资格拿去和datasheet上的标称值做对比。

3.2 用PPK2一类专用设备实测的正确姿势

我自己用PPK2做过不少低功耗验证,流程大致是这样:先规划测试边界,把开发板上跟功耗测试无关的部分全部隔离。开发板上的USB转串口芯片、电源指示灯、电平转换电路,每一个都在持续耗电,哪怕只多出几百µA,都会毁掉整个测量。如果必须在完整产品板上测,至少要把这些模块的跳线或者使能引脚断开。第二步是设置PPK2的输出电压,尽量贴合真实供电场景。目标用3V纽扣电池就设3.0V,别为了偷懒用5V供电,电压不同,漏电数据完全不一样。

第三步是把目标固件刷好,让设备进入设计的睡眠模式,然后观察电流曲线。观察时间不能太短,至少要覆盖几个完整的唤醒周期。有的设备进入睡眠后需要一段稳定时间,只看一两秒很容易错过真实的底电流。第四步是记录睡眠段的最小电流、平均电流,以及每次唤醒尖峰的幅值和持续时间,这些数据要填进功耗预算表才有意义。最后,对同一状态多测几次取稳定值,nA级测量受温湿度、电源噪声影响很大,一次读数没有代表性。

3.3 抓电流曲线时最容易被忽略的三个环境干扰

实际测试里,我碰到最多的不是设备问题,而是环境干扰导致的数据“漂移”。第一个干扰源是测试线缆和探头电容。睡眠唤醒瞬间电流变化本身就快,线缆的寄生电容会把尖峰抹圆,波形失真后你就看不清楚设备到底醒了多久、尖峰多大。解决办法是尽量缩短连线,或者使用同轴探针。第二个干扰源是环境中的射频信号。芯片即使处于睡眠,射频前端如果没有彻底关闭,旁边突然来一个强BLE广播,也可能把它唤醒,电流曲线上就会多出一段不应该出现的活动毛刺。第三个干扰源是温度。手摸一下芯片、灯光直射、空调风口对着板子吹,都能让nA级读数产生明显漂移。低功耗测量讲究环境稳定,我会固定在一个室温、无风、无强电磁干扰的角落做对比测试,数据才谈得上可复现。

4. 把整板漏电压到nA级:硬件和软件共同协作

4.1 硬件侧按优先级排查的外部漏电路径

芯片做到了50nA,但外围电路分分钟贡献出几个µA。我把容易漏电的外部路径按优先级列了一遍,基本就是一套排查顺序。首先是电源路径上的线性稳压器和DC-DC。很多LDO的静态电流高达几十到几百µA,睡眠时如果没法关断,整板的功耗指标直接报废。解决办法是选用静态电流更低或者带shutdown引脚的型号,必要时用负载开关把供电彻底切断。

其次是外部上下拉电阻。一颗10kΩ电阻在3V电压下持续耗电300µA,就算换成一颗1MΩ电阻,也还有3µA,这跟50nA相比依然差了两个数量级。低功耗设计里,能用芯片内部弱上拉/弱下拉就别用外部电阻,能用代码配置引脚状态就别依赖硬件固定电平。第三是分压电阻网络,做电池电压检测时常用两颗电阻串联分压,总阻值哪怕做到1MΩ,在3V下也有3µA持续消耗,睡眠时必须用MOS管或者模拟开关把这串分压电阻断开。第四是传感器和外围IC的sleep电流,很多MEMS传感器睡眠电流在0.5µA到5µA之间,比芯片高一到两个数量级,如果睡眠时不需要它工作,就用GPIO控制它整个电源域。第五是PCB表面漏电。助焊剂残留加上潮湿空气,在高阻抗节点之间会形成微弱电流通道,这对nA级系统来说是很隐蔽的坑,产品量产后要考虑清洗和三防涂覆。

4.2 软件侧睡眠模式配置最容易犯的错

硬件堵完,软件如果没配对,一样白搭。日常调试中,我见过的软件问题集中在这么几个地方。第一个是睡眠模式选错。很多芯片有普通浅睡和深度睡眠之分,浅睡模式下CPU停了,但RAM、外设时钟、电源域还在工作,待机电流自然高。追求极致低功耗,就要进System OFF这类深层睡眠,虽然唤醒代价是重新初始化,但漏电最低。开发阶段经常发现设备根本没进入预期深度睡眠,而是停在了默认的浅睡状态。

第二个问题是GPIO没处理。睡眠前如果不把所有未使用的GPIO设置成确定电平,这些悬空引脚就会成为漏电来源。正确做法是逐个检查引脚配置,拉到输出低电平,或者启用内部弱下拉,让它有一个稳定的状态。第三个问题是不用的外设时钟没有全部关闭,包括定时器、ADC、通信外设,甚至调试接口。SWD、ITM这类调试功能如果保持使能,会持续产生电流。量产固件里记得把调试接口关掉。第四个问题是唤醒源配置不合理。比如不小心开了一个周期唤醒的RTC,结果设备每秒醒一次,电流曲线上就会出现连续的台阶而不是平直线,平均功耗被拉高好几倍。

4.3 从原理图阶段就做一张睡眠电流预算表

这件事是我做低功耗项目以来觉得最有效的一步。原理图评审阶段,把每一个电源域、每一个IC、每一组上下拉电阻的睡眠电流逐项列出来,加总得到理论上的整板睡眠电流。举个例子:芯片50nA,传感器sleep电流1µA,外部上拉电阻3µA,LDO静态电流5µA,加起来大约是9.05µA。这个数字在画板之前就能算出来,够不够支撑电池年续航一目了然。

等板子拿回来实测,再拿这张预算表去对照,哪一项对不上就重点排查哪一项。我踩过最典型的坑是板子的休眠电流实测比预算高了整整20倍,从表里逐项排查才发现,是一颗LED的偏置电阻在睡眠状态下还被误接在电源上。设计阶段如果提前做了这张表,这个问题在原理图评审时就能发现,能省下一轮改板时间。

5. 低功耗蓝牙场景的实战配合:NimBLE移植到Nordic芯片

5.1 为什么移植NimBLE会直接影响睡眠底电流

BLE产品里,睡眠电流好不好,很大程度取决于协议栈在连接事件和广播事件之间是否真的“睡到底”。官方SoftDevice的兼容性和稳定性都不错,但有些场景下你想裁剪、想看源码、想精细控制睡眠流程,就会考虑用NimBLE。NimBLE的问题是它在不同硬件平台上的移植需要自己接底层。移植得不好,最容易出现的现象就是连接事件结束后,应该关闭的射频和外设时钟没有关干净,或者RTC仍然高频触发,导致设备根本睡不进去。

把NimBLE移植到Nordic芯片上,本质就是在做“让上层BLE协议逻辑和Nordic底层硬件资源对齐”这件事,绕不开厂商驱动。如果你发现移植之后设备功耗比预期高,先别怀疑NimBLE本身,多半是底层硬件回调没有正确处理,射频该关没关,时钟该停没停。

5.2 移植时要对接的Nordic厂商函数

我这些年做NimBLE移植到Nordic芯片,经常要打交道的底层函数主要分布在五个方向。第一个是时钟和RTC,NimBLE的事件调度依赖系统时钟,尤其需要低频时钟作为协议定时基准,涉及nrf_clock_lfclk_start、nrf_rtc_enable、nrf_rtc_cc_set这一类的接口。第二个是射频收发,BLE链路层最终要落到Radio硬件上,会涉及nrf_radio或者协议栈封装好的LL层接口,不同SDK版本函数名会有差别,但核心职责不变:设定收发的频率、功率,以及开启和关闭射频。

第三个是电源管理。睡眠前关闭射频、关闭高频时钟、进入低功耗模式,通常涉及nrf_power相关接口。要注意的是PPI模块也很关键,它能让外设事件直接触发任务而不经过CPU,这是低功耗睡眠唤醒路径中的重要一环。第四个是GPIO和唤醒源。按键、传感器中断这类唤醒引脚要通过nrf_gpio配置,同时要留意睡眠期间这些引脚是否有确定电平。第五个是非易失存储。蓝牙地址、配对信息需要掉电保存,会用到nrf_nvmc或者Nordic的Flash访问接口。需要说明的是,具体函数名会随nrfx版本、NimBLE版本和移植方式变化,近年还有Mynewt HAL层做了封装。真正的重点是记住映射关系:NimBLE负责协议逻辑,所有硬件动作最终都要落到Nordic的Radio、时钟与RTC、PPI、Power、GPIO、Flash这几个模块上。

5.3 一种可复用的低功耗BLE唤醒策略

做传感器节点,我很推荐“平时深度睡眠,定期或者按需唤醒上报”的架构。比如每15分钟醒来一次,起来之后连接网关、发送数据、然后继续睡。这种模式对BLE协议栈的要求是:睡觉之前协议栈必须干净退出,不能留着后台任务持续占用RTC和射频。

结合NimBLE的具体做法,是在睡眠前停止广播或者断开连接,把射频相关外设全部关闭,再进入深度睡眠;唤醒之后重新初始化协议栈,发起广播或者重建连接。这里有个产品层面的取舍需要想清楚:深度睡眠意味着无法保持连接,所以“在线实时可控”和“超低功耗”天然冲突。如果你要求设备随时能被服务器连上,就得拉长广播窗口或者缩短连接间隔,牺牲一部分睡眠时间换取实时性。这个权衡没有标准答案,完全取决于产品形态。但如果你做的正好是周期上报类设备,那这套策略基本可以直接照搬。

5.4 用一组数据算出电池寿命的真实边界

我觉得最有说服力的还是实际算一笔电池账。假设一个BLE温湿度传感器每小时醒一次,每次醒来连接网关并发数据,射频平均工作电流5mA,持续时间3ms。那么射频活动折算到整个小时里的平均电流贡献,是5mA乘以3ms再除以3600秒,大约是4nA。再加上50nA的睡眠底电流,整机平均电流大约54nA。每次活动时间就算放宽松到10ms,折算下来也不过14nA,加上底电流仍然不到70nA。

这样一颗220mAh的CR2032,理论上放电时间会非常长,实际最终限制续航的反而是电池自放电、高温下的漏电增长以及外围电路的微小泄漏,而不是BLE通信本身。这个结论对做无线传感器的人挺有启发:产品续航不够时,别急着怀疑射频消耗太大,先确认睡眠期间到底有没有真正省下电。

6. 实测与产品化阶段的排障实录

6.1 一测休眠电流就比标称高,先查这五个地方

我收到过很多类似的反馈:“芯片标称50nA,我实测100µA”。每次遇到这种问题,排查路径基本就是这五个点。第一,有没有真的进入System OFF模式。很多demo默认的睡眠只是浅睡,寄存器状态一查便知。第二,板上有没有外围IC没有睡,尤其是LDO、运放、传感器,用逐级断电法很容易定位。第三,GPIO有没有悬空或者被错误电平拉住,睡眠前把所有引脚状态固定一遍再说。第四,调试器有没有还连着,SWD、ITM持续工作会额外耗电。第五,测量设备本身的内阻或者量程是否合适。每排查完一项就重测一次,基本都能找到大头。

这里多说一句,如果你用的是带扩展板的高级开发板,上面通常还挂着电平转换、LED、USB接口芯片,这些都会让整板待机电流居高不下。低功耗验证一定要在一块干净的、最小系统的板子上做,否则测量结果会被外围电路彻底淹没。

6.2 电流曲线里的周期性尖峰意味着什么

用PPK2抓出来的电流曲线,如果每隔一段时间就有一个小尖峰,先不用慌。这通常不代表设备坏了,而是说明有东西还在周期性地工作。常见的来源包括RTC周期唤醒、传感器自动采样、内部稳压器的周期性补偿,甚至是不小心开启的看门狗。处理思路是先看尖峰的频率和宽度。如果尖峰很窄、频率很低,摊到整个睡眠周期的平均电流贡献可以接受,那就不动它;如果尖峰很宽、频率又高,平均功耗就会被显著拉高,这时候需要用示波器或者逻辑分析仪配合确认尖峰对应的中断源,再决定是把唤醒周期拉长还是直接关闭对应功能。

还有一类尖峰来自电池电压波动。当设备睡眠底电流极低而外部电源又有纹波时,芯片的电源检测电路可能周期性触发,产生看起来像唤醒的尖峰。这种问题在纯电池供电下通常不会出现,但用桌面电源调试时很容易碰到,排查时要先把电源的纹波指标确认清楚。

6.3 电池寿命为什么总比算出来的短

睡眠电流明明很低,产品实际续航却总是达不到理论估算,这个问题被问过很多次。原因通常是叠加的。第一个是电池自放电。纽扣电池和小型锂电池的月自放电率看着不高,累计到一年可能就是百分之几到百分之十几。第二个是温度。半导体漏电随温度上升呈指数增长,夏天户外产品的高温环境会让整板漏电明显增加,这在设计阶段经常被忽略。

第三个是电池容量标称值的测试条件跟实际放电条件不同。低电流放电下电池的有效容量并非严格等于标称容量,倍率、温度、截止电压都会影响实际可用能量。第四个是电源转换效率。系统里如果有LDO,电池电压和LDO输出之间的压差会产生额外损耗,压差越大损耗越高。我的习惯是用实测平均电流乘以客户要求的寿命年数,算出总容量需求,再预留至少1.5到2倍的裕量选型,最后根据高低温环境做系数修正。对外宣传的续航数要保守,低功耗产品最怕的就是实测打脸。

6.4 团队协作里最好用的低功耗检查清单

最后分享一张我用了几年的检查清单,每次低功耗项目评审都会过一遍:芯片是否进入了目标睡眠模式,RAM需要保持哪些bank;所有GPIO是否有确定的电平,是否有外部上下拉还在工作;传感器、LDO、DC-DC、运放等外围IC的睡眠功耗是否已经计入预算;分压电阻、电压检测电路在睡眠时是否断开;调试接口和编程器连接是否移除;测量环境是否稳定,温湿度、电磁干扰是否可控;电流曲线是否覆盖了完整唤醒周期,平均电流是否由“睡眠底电流+周期活动”组成;电池自放电和温度影响是否已经算进最终续航预估。

这张清单看着简单,但它真的让我少踩了很多坑。有一次项目因为一个看似无关紧要的电源指示灯漏电,导致整机平均电流高了三倍,如果不在评审阶段逐项过一遍,这种问题等到样机测试阶段才暴露,会浪费好几天时间。

我个人的体会是,低功耗设计没有魔法。标称值再漂亮,最后也必须一块一块地实测、一项一项地抠。50nA这种数字最大的价值,不是拿出去给PPT充门面,而是它给系统设计提供了一个足够好的下限,逼着你把注意力放到外围电路、软件睡眠流程和产品真实使用场景上。如果你也打算用这类芯片做电池设备,建议从第一次上电就开始记录电流曲线,把每一次改动后的数据留档。做了几个低功耗项目之后你会发现,决定产品续航的往往不是芯片多强,而是你愿不愿意把每一个nA都当回事。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询