1. 一颗休眠电流不到50 nA的芯片到底在解决什么问题第一次看到“休眠电流不到 50 nA连续放一年才消耗 0.438 mAh”这组数据的时候我的反应是——这数字是不是写错了做低功耗产品的人都知道nA 级别的休眠电流在实验室里能测出来不稀奇但要在量产芯片上稳定做到而且是在整个系统还能保持基本唤醒能力的前提下做到那是另一回事。这颗 Nordic 的新芯片从关键词看应该是 nRF54LC10A 这个系列把休眠功耗压到了这个量级对于做电池供电类产品的人来说意义相当直接你的产品待机时间不再被芯片的静态功耗卡脖子了。先把那个 0.438 mAh 算清楚因为很多人看到这个数字没有直观感受。休眠电流 50 nA一年 365 天是 8760 小时50 nA × 8760 h 438000 nAh 0.438 mAh。也就是说一颗容量只有 220 mAh 的纽扣电池光靠芯片休眠消耗理论上能撑 500 年以上。当然实际产品不可能只算芯片休眠还有自放电、外围器件漏电、LDO 静态电流等等但这个计算说明了一件事当芯片休眠电流进入 nA 级别它已经不再是系统续航的瓶颈了瓶颈转移到了别的地方——外围电路、电池自放电、甚至是 PCB 表面的漏电流。这颗芯片适合谁我梳理了一下大致是这几类场景一是用纽扣电池或能量采集供电的传感器节点比如温湿度采集、门窗磁、水浸检测这类需要“装上去就不管”的设备二是便携医疗设备像连续血糖监测、电子体温贴这种一次性或长周期使用的产品三是工业场景里的无线传感节点布线成本高、换电池更贵休眠功耗直接决定维护周期。如果你正在做这类产品这颗芯片的休眠指标值得认真研究一下。但我要先泼一盆冷水芯片手册上的休眠电流和你的实际产品休眠电流往往差着数量级。我见过太多项目选了一颗标称 100 nA 的芯片结果实测整机休眠电流 20 μA然后回头怀疑芯片虚标。问题基本都不在芯片本身而在于你没搞明白这个 nA 是怎么测出来的、在什么条件下成立的。这篇文章我就围绕这颗芯片的休眠特性把低功耗设计里那些真正决定成败的细节拆开讲包括休眠电流的构成、实测方法、外围电路的坑、以及唤醒机制怎么配合。内容偏实战适合已经有一定低功耗产品经验的工程师也适合刚接触这块、想少走弯路的朋友。2. 50 nA 是怎么来的休眠电流的构成与测量条件2.1 休眠电流不是单一数字而是一组条件的产物很多人把“休眠电流”当成一个固定值来看这是最大的误解。芯片标称的 50 nA一定对应着特定的工作模式、特定的电压、特定的温度、特定的外设状态。你把这些条件改一个数字就可能翻几倍甚至几十倍。以 Nordic 这类低功耗无线芯片的惯例来看这个 50 nA 通常对应的是 System OFF 模式或者类似的深度休眠模式此时 CPU 停止、大部分外设掉电、RAM 保持内容或者不保持、只有极少数唤醒源还活着。具体来说休眠电流大致由这几块构成芯片内部漏电流工艺决定先进工艺节点漏电更低、保持供电的模块静态电流比如 RTC、低频时钟、唤醒逻辑、稳压器静态电流如果芯片内部有 DC-DC 或 LDO、IO 引脚漏电流这个最容易被忽略后面单独讲。50 nA 这个数字说明 Nordic 在工艺和电源管理设计上确实下了功夫尤其是把保持供电的模块压到了极低。但你要注意手册里通常会给一张表列出不同模式下的电流比如 System ON 下 idle 是多少、System OFF 是多少、不同 RAM 保持配置下又是多少。选型的时候不能只看最小的那个数字要看你的应用实际需要保持什么。如果你需要 RTC 走时、需要 RAM 保持、需要某个引脚做唤醒那你的实际休眠电流就是这几个模块叠加的结果可能就不是 50 nA 了而是几百 nA 甚至微安级。2.2 测量 nA 级电流你的仪器可能先“骗”了你这是我想重点讲的一块因为太多人在这一步就翻车了。nA 级电流的测量和微安级、毫安级完全是两码事。你拿一台普通台式万用表切到 μA 档去测读数大概率是飘的或者干脆显示一个比实际大得多的值。原因有几个万用表自身的输入阻抗和分流电阻会引入误差表笔和接触点的热电动势在 nA 级下不可忽略环境电磁干扰会耦合进来。正确的测法我一般推荐两种。第一种是用高精度源表比如 Keithley 2450 这类它能直接输出并测量 nA 级电流精度和稳定性都够。第二种是用库仑计或者专用功耗分析仪通过积分电荷来算平均电流适合测动态变化的功耗曲线。如果你手头只有普通设备还有一个土办法给芯片供一个较大的电容比如 1000 μF让它休眠一段时间测量电容电压的下降速率反推电流。这个方法精度一般但能快速判断量级对不对。注意测量前一定要把芯片的所有 IO 引脚处理干净。悬空的 IO 在 nA 级测量里就是灾难输入引脚悬空会导致输入级振荡或漏电输出引脚悬空可能因为外部干扰而反复翻转。我的习惯是未使用的 IO 全部配置为输出低电平或者带上拉的输入具体看芯片手册推荐。还有一个细节测量时的供电电压要稳定且干净。如果你用实验室电源直接供电源本身的纹波和噪声会通过芯片的电源引脚耦合进去影响读数。我一般会在电源和芯片之间串一个 RC 滤波或者用电池供电来测电池的噪声比实验室电源低得多。测的时候也要注意温度nA 级漏电流对温度很敏感手摸一下芯片读数可能就变了。2.3 从 50 nA 到整机电流中间隔着哪些“漏电大户”假设你测出来芯片本体休眠电流确实是 50 nA 左右恭喜你芯片没问题。但接下来整机测试你会发现电流变成了几微安甚至几十微安。这中间的差值就是外围电路贡献的。我列一下最常见的几个“漏电大户”LDO 或 DC-DC 的静态电流很多 LDO 标称静态电流几微安你选型的时候没注意它一个人就把你的 nA 级优势吃掉了。低功耗设计里要么选静态电流 nA 级的 LDO要么干脆不用稳压器直接用电池供电如果芯片电压范围允许。上拉/下拉电阻一个 100 kΩ 的上拉电阻在 3V 下就是 30 μA 的持续电流。休眠时如果这个上拉还挂着你的功耗就废了。所以休眠前要把不必要的外围电路断电或者用大阻值电阻但大阻值又会影响信号完整性需要权衡。分压电阻电池电压检测用的分压电阻是两个电阻串联在电源和地之间持续耗电。正确做法是用 MOS 管控制分压电路的通断只在需要检测的时候才接通。传感器和外围芯片的休眠电流你选的传感器自己休眠电流是多少如果它休眠时还有几微安那整机功耗就被它主导了。选型时要看整个链路的休眠电流而不是只看主控。PCB 表面漏电流这个最隐蔽。如果 PCB 表面有助焊剂残留、或者湿度大表面电阻会下降产生漏电流。nA 级设计里PCB 清洗和涂覆三防漆是常规操作。3. 把 nA 级休眠做进产品外围电路与唤醒机制的配合3.1 电源架构怎么搭才能不浪费这 50 nA芯片休眠电流做到 50 nA如果你的电源架构没配合好这个优势就白费了。我一般会按这个思路来设计电源能不用稳压器就不用必须用就选静态电流极低的。这颗 Nordic 芯片的工作电压范围通常比较宽具体看手册如果能直接用纽扣电池或锂亚电池供电那就省掉了稳压器这一环整机休眠电流就只剩芯片和外围。如果系统里还有其他器件需要稳定电压那就考虑用负载开关Load Switch做分区供电。休眠时把不需要的模块整个断电只留主控和必要的唤醒电路。负载开关本身也有静态电流选的时候要看它的关断漏电流好的负载开关关断漏电流可以做到 nA 级。还有一个思路是用能量采集供电比如太阳能、振动、温差。这种场景下休眠电流越低采集到的微弱能量就越容易积累起来系统能工作的占空比就越高。nA 级休眠的芯片在这类应用里优势特别明显因为休眠时几乎不耗电采集的能量可以全部存起来用于唤醒后的工作。3.2 唤醒源的选择哪些能留哪些必须砍休眠时保留哪些唤醒源直接决定了休眠电流的大小。每多保留一个唤醒源就多一份静态电流。所以设计原则是只保留必须的唤醒源其他全部关掉。常见的唤醒源有GPIO 电平/边沿唤醒、RTC 定时唤醒、比较器唤醒、无线唤醒如果芯片支持。GPIO 唤醒的静态电流通常最低因为它就是一个输入检测电路。RTC 唤醒需要低频时钟持续运行会多消耗一些电流但通常也在 nA 到几百 nA 量级。无线唤醒如果是指周期性地开接收机那平均功耗就高了不适合 nA 级休眠场景。我的经验是用 RTC 做周期性唤醒 GPIO 做事件唤醒这个组合最实用。RTC 每隔几秒或几分钟唤醒一次采集数据、发送、然后继续休眠GPIO 用于响应外部事件比如按键、传感器中断。这样既保证了数据的周期性上报又能及时响应突发事件。提示配置 GPIO 唤醒时要注意引脚的默认电平和上下拉配置。如果外部信号是开漏输出你需要加上拉如果是推挽输出要确保休眠时引脚不会被外部电路拉到一个中间电平否则输入级会产生穿通电流。这个细节在手册的 GPIO 章节通常有说明但很容易被跳过。3.3 唤醒后的启动时间和功耗也是续航的一部分很多人只关注休眠电流忽略了唤醒后的功耗。实际上如果唤醒频繁、每次唤醒后启动时间长、工作电流大那平均功耗可能还是很高。所以低功耗设计要算的是平均电流而不是只看休眠电流。平均电流的计算公式大致是平均电流 (休眠电流 × 休眠时间 工作电流 × 工作时间) / 总周期。假设休眠电流 50 nA工作电流 5 mA每次工作 10 ms每 60 秒唤醒一次。那么一个周期内休眠电荷是 50 nA × 59.99 s ≈ 3 μC工作电荷是 5 mA × 0.01 s 50 μC。工作电荷远大于休眠电荷平均电流大约是 50 μC / 60 s ≈ 0.83 μA。你看即使休眠电流只有 50 nA平均电流还是被工作时间主导了。所以优化续航不能只盯着休眠电流还要优化唤醒后的工作时间和工作电流。具体做法包括唤醒后尽快完成采集和发送然后立刻回到休眠用 DMA 搬运数据减少 CPU 参与时间无线发送时用最短的包和最高的速率在法规允许范围内减少射频开启时间。4. 实测中那些让人抓狂的坑从 50 nA 到 20 μA 的排查实录4.1 一个真实的排查案例多出来的 20 μA 从哪来我之前做过一个项目用的就是类似这颗 Nordic 芯片的方案目标休眠电流 100 nA 以内。板子打回来烧好程序一测休眠电流 20 μA差了 200 倍。当时第一反应是芯片配置有问题检查了寄存器配置确认进入了深度休眠模式。然后开始逐项排查。第一步把外围器件全部断开只留芯片和最小系统再测还是 20 μA。说明问题在芯片本身或者最小系统上。第二步检查所有 IO 的状态发现有几个 IO 配置成了输入且没有上下拉悬空。把它们改成输出低电平电流降到了 5 μA。第三步检查电源发现板子上有一颗 LDO静态电流标称 3 μA实际测下来 4 μA 左右。把 LDO 旁路掉直接用电源供电电流降到了 800 nA。第四步检查 PCB发现芯片底部有助焊剂残留用酒精清洗后电流降到了 200 nA。第五步检查晶振发现低频晶振的负载电容选大了导致起振困难芯片反复尝试起振多耗了电流。调整负载电容后最终休眠电流稳定在 80 nA 左右。这个案例里20 μA 的构成是IO 悬空约 15 μALDO 约 4 μAPCB 漏电约 600 nA晶振问题约 400 nA。每一项单独看都不大但叠加起来就毁掉了 nA 级设计。所以低功耗设计是一个系统工程任何一个环节没做好整体就达不到目标。4.2 IO 引脚的坑悬空、上下拉、以及“中间电平”IO 引脚是低功耗设计里最容易出问题的地方我单独拿出来讲。芯片的 IO 通常有几种状态输入浮空、输入上拉、输入下拉、输出高、输出低、模拟输入、外设复用。休眠时未使用的 IO 绝对不能浮空。浮空的输入引脚电压不确定输入级的 PMOS 和 NMOS 可能同时导通产生穿通电流这个电流可以到几十微安。正确的做法是未使用的 IO 配置为输出低电平如果外部没有上拉或者输出高电平如果外部有下拉或者配置为带上拉的输入如果外部是开漏输出。具体怎么配要看外部电路。关键是让 IO 有一个确定的电平并且不产生持续的电流通路。还有一个坑是中间电平。如果外部电路给 IO 一个 1.5V 的电平假设电源 3V输入级可能处于线性区产生较大的电流。这种情况常见于 IO 连接到另一个芯片的输出而那个芯片休眠时输出高阻导致 IO 被外部电阻分压到一个中间值。解决办法是加一个 MOS 管做电平隔离或者确保休眠时外部芯片输出确定的电平。4.3 时钟和晶振低频晶振的负载电容与起振功耗低功耗设计里RTC 通常用 32.768 kHz 的低频晶振。这个晶振的负载电容选型很关键。负载电容太大起振困难芯片会反复尝试起振消耗额外电流负载电容太小频率不准而且容易受干扰。一般晶振手册会给出推荐的负载电容值比如 12.5 pF你需要根据 PCB 的寄生电容来调整实际焊接的电容值。另外有些芯片支持内部低频 RC 振荡器精度不如晶振但功耗更低而且不需要外部器件。如果你的应用对时间精度要求不高比如几分钟的唤醒周期误差几秒无所谓用内部 RC 更省电也更省成本。这颗 Nordic 芯片应该也支持内部低频时钟具体看手册的时钟章节。注意切换时钟源的时候要确保切换过程中不会产生毛刺或者导致系统复位。有些芯片在切换时钟时需要先停掉相关外设切换后再重新配置。这个在手册里通常有说明但容易被忽略。4.4 电池自放电和温度的影响你的续航可能被电池限制即使你把整机休眠电流做到了 100 nA电池自己的自放电可能比这还大。比如一颗普通的 CR2032 纽扣电池自放电率大约是每年 1% 到 3%换算成电流大约是 0.2 μA 到 0.7 μA。也就是说电池自放电已经超过了芯片的休眠电流。这种情况下你再怎么优化芯片功耗续航也提升有限。所以选电池的时候要看自放电率。锂亚电池Li-SOCl2的自放电率很低适合长周期应用。纽扣电池里CR 系列的自放电率中等BR 系列更低一些。另外温度对自放电影响很大高温下自放电会加速。如果你的产品用在户外或者高温环境电池选型要特别谨慎。温度对芯片休眠电流的影响也很大。nA 级漏电流通常随温度指数上升温度每升高 10°C漏电流可能翻倍。所以手册里的 50 nA 通常是在 25°C 下测的如果你在 60°C 环境下用休眠电流可能是几百 nA。这一点在工业级或汽车级应用里要特别注意。5. 这颗芯片适合什么样的项目以及选型时的对比思路5.1 什么场景值得为 nA 级休眠买单不是所有项目都需要 nA 级休眠。如果你的产品是插电的或者电池容量很大、更换电池很方便那没必要追求极致的休眠电流选一颗功耗普通但功能更丰富、价格更便宜的芯片可能更划算。nA 级休眠芯片的价值体现在电池不可更换或者更换成本极高的场景。具体来说这几类项目值得考虑一是一次性医疗贴片比如心电贴、体温贴用一次就扔电池容量小要求整个使用周期内不用换电池二是埋入式或嵌入式的传感器比如混凝土里的应力传感器、管道里的压力传感器装进去就不好换电池了三是大规模部署的无线传感网络节点数量多换电池的人工成本远超电池本身四是能量采集供电的设备采集到的能量有限休眠功耗必须极低才能积累足够的能量。反过来如果你的产品是手机配件、可穿戴设备每天充电、或者有充足电池空间的设备那 nA 级休眠可能不是首要考虑因素你可以把精力放在其他方面比如无线性能、处理能力、成本。5.2 和同类低功耗芯片对比时看哪些指标选型的时候不能只看休眠电流一个数字。我一般会列一个对比表把几个候选芯片的关键指标放在一起看。除了休眠电流还要看工作电流唤醒后处理数据时的电流、无线收发电流如果有无线功能、唤醒时间从休眠到开始工作的时间、电压范围能不能直接用电池供电、外设资源需要的外设是否齐全、封装尺寸小封装适合紧凑设计、开发工具和生态SDK 是否完善、社区是否活跃。这颗 Nordic 芯片的优势在于休眠电流极低同时 Nordic 的无线协议栈和 SDK 生态一向做得不错开发效率高。如果你的项目需要无线连接又对功耗敏感那它是个很有竞争力的选择。但如果你不需要无线功能那可能有一些更便宜、更简单的低功耗 MCU 可以选。对比维度关注点对续航的影响休眠电流深度休眠模式下的电流决定待机时长工作电流唤醒后运行时的电流决定工作期间的耗电唤醒时间从休眠到就绪的时间影响平均功耗电压范围最低工作电压决定能否省掉稳压器外设资源需要的接口是否齐全影响外围器件数量封装尺寸和引脚数影响 PCB 面积和布线5.3 开发调试中值得提前准备的几件事如果你决定用这颗芯片做项目我建议在开发初期就把这几件事做好能省掉后面很多麻烦。第一画一版专门的功耗测试板把芯片的电源引脚单独引出来方便串电流表或者跳线帽切换供电。第二把未使用的 IO 全部引出测试点方便测量和配置。第三准备一个高精度的功耗测量工具哪怕借一台也好nA 级调试没有趁手的工具很难进行。第四在代码里做好功耗状态管理把休眠、唤醒、外设开关封装成统一的接口避免到处散落配置代码。还有一点尽早做整机功耗测试不要等所有功能都开发完了才测。每加一个外设就测一次休眠电流看看增加了多少。这样能及时发现哪个外设是“漏电大户”尽早优化。我见过太多项目功能都做完了才发现功耗超标回头改硬件已经来不及了只能在软件上打补丁效果有限。6. 把休眠功耗做到极致的几个进阶思路6.1 动态调整休眠深度而不是一刀切很多人的做法是产品要么全速运行要么深度休眠两档切换。但实际上休眠深度可以动态调整。比如系统刚完成一次数据发送接下来几秒内可能还有后续数据要发这时候可以进入浅休眠保留更多外设和 RAM唤醒快、响应及时如果接下来几分钟甚至几小时都没有任务那就进入最深休眠把能关的都关掉。这颗 Nordic 芯片应该支持多种低功耗模式你可以根据任务的实时性要求动态选择休眠深度。这样既保证了响应速度又优化了平均功耗。实现上可以在任务调度器里加一个逻辑根据下一个任务的预定时间决定进入哪一级休眠。6.2 用状态机管理功耗避免“忘记关外设”低功耗设计里最常见的 bug 就是“忘记关外设”。比如采集完数据忘记关掉 ADC发送完数据忘记关掉射频读完了传感器忘记关掉传感器的电源。这些“忘记”累积起来功耗就上去了。我的做法是用一个状态机来管理整个系统的功耗状态。每个状态明确定义了哪些外设应该开启、哪些应该关闭、电流预算是多少。状态切换的时候统一做外设的开关操作。这样就不会出现“忘记关”的情况。代码结构上可以把外设的开关封装成函数状态机调用这些函数来切换状态。6.3 无线发送策略对平均功耗的影响如果这颗芯片用于无线应用那无线发送策略对平均功耗的影响很大。几个优化方向降低发送频率数据可以缓存起来批量发送、缩短发送时间用更高的空中速率、更短的包、减少握手和重传优化协议参数提高一次发送成功率、利用广播而不是连接如果应用允许广播方式通常比建立连接更省电。具体怎么选要看应用场景。比如传感器数据上报如果实时性要求不高可以攒够一定数量的数据再发或者每隔几分钟发一次。如果实时性要求高那就只能提高发送频率功耗自然就上去了。这里没有万能方案需要根据产品需求来权衡。6.4 长期部署的可靠性休眠唤醒循环的稳定性最后提一个容易被忽略的点长期部署的可靠性。产品休眠唤醒循环几百万次之后会不会出现唤醒失败、时钟漂移、Flash 数据丢失等问题这些在短期测试里看不出来但长期部署就会暴露。我的经验是在开发阶段就要做加速老化测试比如把唤醒周期缩短到几毫秒连续跑几天模拟几年的唤醒次数。同时在代码里加看门狗和异常恢复机制万一唤醒失败或者程序跑飞能自动复位恢复。另外RTC 的时钟精度会随温度和时间漂移如果应用对时间精度要求高要定期校准或者用外部高精度 RTC 芯片。提示长期部署的产品建议在 Flash 里记录运行日志和异常信息方便现场排查问题。日志不用太详细记录关键的唤醒次数、复位原因、电池电压就够了。我在实际项目里踩过的坑是有一次产品在现场部署了几个月后陆续出现“死机”现象后来排查发现是低频晶振在低温下起振失败导致芯片一直卡在启动阶段。换了晶振型号调整了负载电容问题才解决。所以低功耗设计不只是功耗问题还涉及到整个系统的可靠性每一个器件都要按长期工作的标准来选。