这阵子做个电池供电的便携采集项目,电源管理部分让我把 PCA9422 和 PIC18F47K42 搭在了一起,算是把整套电源链路从“凑合能跑”做到“心里有底”。之前用分立方案做了两版,充电、升压、LDO、负载开关各管一摊,板子面积大不说,待机电流一直降不下来。换到 PMIC + MCU 的架构之后,情况明显改善:PCA9422 把充电管理、电源路径切换和多路输出集成到一颗芯片里,PIC18F47K42 负责配置寄存器、读状态、做系统级电源策略,两者通过 I2C 配合,逻辑上干净了很多。这篇文章把我从选型、硬件设计、驱动实现到低功耗实测的完整过程整理一遍,给正在做类似电池供电方案的工程师一个参考。
1. 方案选型:为什么是 PMIC + MCU 而不是老一套分立元件
1.1 需求拆解:先搞清楚项目到底要管什么电
做任何电源方案,第一步必须把需求列清楚。我这个项目是户外用的便携数据采集设备,锂电池供电,需要长时间待机,具体电源需求如下:
- 锂电池充电,电压 4.2V,充电电流最大 500mA,需要充电状态指示
- 系统主电源 3.3V,给 MCU 和传感器供电,峰值电流约 150mA
- 一路 1.8V,给存储卡和部分外设供电,电流约 50mA
- 待机时整机电流必须压到 100uA 以下,否则电池撑不了几天
- 需要监控电池电压、充电电流、系统电流和温度,异常时能主动保护
这些需求单独看都不难,每一路都可以用一颗专用的分立芯片解决。但麻烦在于:多颗芯片之间的上下电时序要自己搭,充电状态要自己检测,路径切换要用负载开关或 PMOS 管组合,每一颗芯片的静态电流都得逐个查数据手册去核算,系统级联调的时候问题特别多。
1.2 PCA9422 的核心优势在哪里
PCA9422 是面向低功耗场景的电源管理芯片,集成度很高。它把充电管理、升降压输出和电源路径管理合在一起,通过 I2C 接口配置和监控。对我这个项目来说,最有价值的几点:
充电管理不再用外部电路去判断恒流、恒压、截止这些状态了。PCA9422 内部有完整的充电状态机,充电电压和电流阈值通过寄存器设置,状态寄存器的标志位直接反映当前处于什么充电阶段,省掉了一堆比较器电路。
电源路径管理这个功能在电池供电设备里太重要了。系统可以不经过电池直接由外部电源供电,同时给电池充电,MCU 只靠设置寄存器就能切换供电模式,再也不用担心电池充满后还要挂在系统上持续放电的问题。
多路输出转换器集成在内部,3.3V 和 1.8V 两路输出都覆盖了,外部只需要配几个电感和电容。对比之前用一颗 Buck 加一颗 LDO 的方案,BOM 数量明显减少,板上面积也紧凑了很多。
1.3 PIC18F47K42 为什么够用
主控选 PIC18F47K42,核心原因有几个。首先它有 12 位 ADC,而且是多通道的,可以直接采样电池电压、充电电流、系统电流等多路模拟信号,不用外挂 ADC。其次它支持多档低功耗模式,Sleep 模式下电流可以做到非常低。
另外一个重要因素是有充足的核心独立外设(CIP)。比如我可以把比较器、定时器组合起来做电池欠压硬件级保护,即使 MCU 的 CPU 在 Sleep 状态,外设仍然在监控电压,一旦触发就自动产生中断唤醒或者其他硬件动作。这比纯靠软件轮询可靠得多。
在项目里,PCA9422 的充电完成状态输出会接到 PIC18F47K42 的 I/O 中断引脚上,充电状态变化可以直接唤醒 MCU 去读取原因,而不是靠周期性轮询消耗电流。这种硬件事件驱动的方式,对降低平均功耗帮助非常大。
1.4 分立方案和集成方案的对比清单
为了说服团队里的同事,我做过一个对比表格,这里也贴出来供参考:
| 对比项 | 分立方案 | PCA9422 + MCU 集成方案 |
|---|---|---|
| 核心器件数量 | 6-8 颗(充电 IC、Buck、LDO、负载开关、比较器等) | 2 颗(PMIC + MCU) |
| 静态电流 | 各芯片静态电流叠加,通常在几十到几百 uA | 由 PMIC 低功耗模式统一管控,可压到很低 |
| 上下电时序 | 需要外部 RC 延时或专门的时序芯片 | 通过寄存器配置,软件可控 |
| 状态监控 | 各芯片独立状态,需要多路 GPIO 采集 | I2C 统一读取寄存器,简洁明了 |
| 面积占用 | 较大,约占据 1/3 板面 | 紧凑,节省 40% 以上空间 |
| 调试复杂度 | 多芯片协同问题难定位 | 单一 PMIC 寄存器配置,交互清晰 |
| 扩展灵活性 | 调整参数需要改硬件 | 改寄存器即可,兼容不同电池规格 |
当然,集成方案也有代价,比如 PMIC 的某些参数不如专用芯片灵活,采购成本可能略高,前期软件工作量更大。但在这个项目里,集成方案的收益远大于成本。
2. 硬件连接设计:从电源拓扑到 PCB 布局
2.1 电源拓扑设计思路
整个系统的电源拓扑我画了不止一版。核心问题是:电池是唯一供电源,但是存在两个供电方向——电池给系统供电,外部 USB/适配器给电池充电。如果这两条路径没有管理好,就会出现外部电源接入后系统反而由电池供电的尴尬情况。
PCA9422 的电源路径管理解决了这个问题。外部电源接入时,系统优先由外部电源供电,多余的能量去充电池;外部电源断开时,自动切换到电池路径。MCU 只需要读寄存器就能知道当前是哪条路径在供电,不需要额外硬件检测。
输出电压方面,我规划了两路主输出:一路 3.3V 用来给 MCU、传感器和多数数字电路供电;另一路 1.8V 给存储器件和接口电平转换供电。两路都从电池取电,转换效率比直接用 LDO 从 4.2V 降到 3.3V 高不少,发热也小。
2.2 PCA9422 与 PIC18F47K42 的引脚级连接
因为这是 I2C 控制的 PMIC,所以和 MCU 之间的连接主要是 I2C 总线和中断线,外加几个电源引脚。
I2C 接口部分,PCA9422 的 SCL 和 SDA 分别接到 PIC18F47K42 的 I2C 外设引脚上。I2C 总线需要两个上拉电阻,我选了 4.7kΩ,如果总线长度短、设备少,这个值是稳妥的。如果加多个 I2C 设备,可能要根据实际负载调整。
中断输出引脚很重要。PCA9422 的 INT 引脚接到 PIC18F47K42 的一个可外部中断的引脚上,配置为下降沿触发。这样充电开始、完成、故障这类事件发生时,MCU 可以在 Sleep 状态下通过中断被唤醒,不用定时醒来去轮询,对功耗优化非常关键。
还有一个关键点是电池电压检测。PCA9422 内部有电池电压监测功能,但我在系统端还是留了一个电阻分压网络接到 PIC18F47K42 的 ADC 引脚上,用两路独立方式交叉验证,目的是防止 PMIC 寄存器读出来的电压和实际有偏差。
2.3 PCB 布局的关键细节
电源类 PCB 布局实在太重要了,几个容易踩坑的地方说一下:
第一,PCA9422 的电感要尽量靠近芯片的开关引脚,而且反馈走线不能从电感下方穿过。我之前有一版布局,把反馈线从电感正下方走了,结果输出纹波增大近一倍,后来改走线从电感侧面绕过去才恢复。开关电源的反馈节点是高阻抗节点,特别容易受开关噪讯耦合。
第二,输入输出电容要按数据手册要求放。大容量电容和高频去耦电容配合使用,高频 0.1uF 电容要靠近芯片电源引脚,大容量的可以稍微远一点。顺序是先小后大,从芯片引脚往外排。
第三,热焊盘和过孔。PCA9422 充电模式下功率管散热集中在芯片底部焊盘,PCB 上必须打足过孔到背面散热铜皮。我做第一版样机时热过孔打少了,充电到 400mA 时芯片表面直接到六十多度。后来增加了九个 0.3mm 过孔,温度降了十来度。
第四,PCB 的电源分层要干脆。电池、系统电源、模拟地尽量分区,不要让大电流走线穿过敏感信号区域。PIC18F47K42 的 ADC 参考电压引脚旁边要有足够质量的去耦电容,否则采样值会飘。
注意:PMIC 的输出电容容值不能随意加大,特别是 Buck 转换器的输出电容,会直接影响环路稳定性。我见过有人为了让纹波更小,把输出电容加到了数据手册推荐值的三倍,结果系统在动态负载下出现振荡。
2.4 补充说明:关于器件选型的细节
除了两颗核心芯片,周围的被动器件选择也要用心。电感选型考虑的是 DC 电阻和饱和电流,DC 电阻直接影响轻载效率,饱和电流必须大于最大负载电流的 1.3 倍。我选了 2.2uH 的电感,DCR 大约 100mΩ 左右,体积合适。
电容方面,充电路径的输入电容要能承受外部电源的电压尖峰,至少 16V 耐压。输出电容我用的是 X5R/X7R 材质,温度和直流偏压特性好,不推荐用 Y5V,那个容量随电压掉得凶,滤波效果名存实亡。
电池接口部分,我加了一个 0.1Ω 的采样电阻用于校准充电电流的测量,PIC18F47K42 的差分 ADC 通道直接跨接在采样电阻两端。注意这个电阻要用低温度系数的合金电阻,普通贴片电阻温漂影响比较大。
3. 软件驱动实现:I2C 读写、配置流程和状态机
3.1 I2C 底层驱动怎么写
PCA9422 的接口是标准的 I2C,地址取决于 ADDR 引脚的电平配置。PIC18F47K42 的 MSSP 模块工作在 I2C 主机模式,初始化要点如下:
// I2C1 初始化(主机模式,400kHz) void I2C1_Init(void) { // 设置波特率,假设 Fosc = 64MHz,I2C 时钟 = 400kHz // I2CxADD = (Fosc / (4 * Fclk)) - 1 = (64M / (4 * 400k)) - 1 = 39 I2C1CON0 = 0x80; // I2C 使能,主机模式 I2C1CON1 = 0x80; // 自动应答,溢出中断使能 I2C1ADD = 39; // 波特率配置 I2C1CON2 = 0x00; }基本的 I2C 读写操作可以直接复用标准函数,但我建议最好封装一层带超时保护的总线读写函数。I2C 总线在极端环境下有几率被从设备拉死,如果没有超时机制,MCU 就会永远卡在等待应答的循环里,看门狗都救不回来。
写操作时要注意,PCA9422 的寄存器地址是单字节,写入一个字节数据需要发送:起始位 + 器件地址(写) + 寄存器地址 + 数据字节 + 停止位。读操作则需要先发目标寄存器地址,然后重新发送器件地址(读),再读取数据。
// PCA9422 写寄存器 uint8_t PCA9422_WriteReg(uint8_t reg, uint8_t val) { // 超时计数器 uint16_t timeout = 1000; I2C1_Start(); // 等待硬件响应,内部应设置超时 if (I2C1_Write(PCA9422_ADDR << 1 | 0) == I2C_ACK) { I2C1_Write(reg); I2C1_Write(val); I2C1_Stop(); return 0; // 成功 } I2C1_Stop(); return 1; // 失败 }我在实际代码里还加了 FIFO 缓冲区,所有 I2C 访问通过缓冲区串行化执行。原因是在调试过程中发现,多个模块(充电管理、显示刷新、传感器采样)可能同时有 I2C 访问需求,不加锁的话会出现总线冲突。
提示:调试 I2C 通信时,逻辑分析仪是最有效的工具,比示波器好用得多。直接把 SCL、SDA 两根线挂上去,抓启动时序、ACK/NACK 和寄存器访问序列,一眼就能看出问题在哪。
3.2 PCA9422 的初始化配置流程
初始化流程要做的事情很明确:复位 PMIC,配置充电参数和输出,使能中断。具体的寄存器地址和位定义要以最新的数据手册为准,我以我当时用的版本为例说明配置思路。
第一步是确认通信正常。我写了PCA9422_GetChipID()函数,读 ID 寄存器,匹配预期值。如果读出来不对,I2C 通信、地址配置、器件上电状态逐个排查。
第二步是配置充电参数。根据电池规格,把充电电压设置到 4.2V,充电电流设置到 500mA,配置充电截止电流(一般是充电电流的 10%)。此外还需要设置充电安全定时器,比如总充电时间超过 8 小时强制停止,防止电池异常时长时间过充。
// 充电参数配置核心流程 PCA9422_WriteReg(REG_CHARGE_VOLTAGE, 0xXX); // 4.2V PCA9422_WriteReg(REG_CHARGE_CURRENT, 0xXX); // 500mA PCA9422_WriteReg(REG_CHARGE_TERM, 0xXX); // 截止电流 50mA PCA9422_WriteReg(REG_CHARGE_TIMER, 0xXX); // 8小时安全定时器第三步是配置输出通道。3.3V 和 1.8V 两路输出在 PMIC 里面都有对应的使能位和电压选择位。如果不需要动态调压,建议直接硬编码,减少寄存器访问次数。
第四步是配置中断。把充电状态变化、输入电源插拔、故障保护触发的相关中断全部使能。这些中断统一通过 INT 引脚上报给 PIC18F47K42,MCU 端配置对应的 IO 中断即可。
3.3 充电管理状态机
充电管理逻辑我最终用一个状态机来实现,比一堆 if-else 清爽太多。核心状态包括:
- 待机态(Standby):没有外部电源,系统靠电池供电,充电功能关闭
- 预充态(Precharge):电池电压低于阈值,以小电流预充
- 恒流充电态(CC):以设定电流恒流充电
- 恒压充电态(CV):电压达到 4.2V,电流逐步下降
- 充电完成态(Done):电流低于截止阈值,充电完成
- 故障态(Fault):电池过温、充电超时、电池异常等
状态转换的触发源有两个:一个是 PCA9422 的中断事件,另一个是定时器超时或查询结果。比如,收到输入电源插入中断后,状态从 Standby 切换到 Precharge/CC;充电完成中断触发后,从 CV 切换到 Done。
在软件设计上,我还加了一个“状态变化回调”机制。每次状态机跳转,会调用一个注册好的回调函数,通知上层应用更新 UI 指示或记录事件。这比上层应用自己轮询状态要省电得多。
// 充电状态机主循环(在定时中断里调) void Charge_StateMachine(void) { ChargeEvent_t evt = Charge_GetEvent(); // 从事件队列取事件 // 根据当前状态和事件做状态跳转 switch (charge_state) { case CHG_STANDBY: if (evt == EVT_INPUT_PLUGIN) Charge_SetState(CHG_PRECHARGE); break; case CHG_PRECHARGE: if (evt == EVT_PRECHARGE_DONE) Charge_SetState(CHG_CC); break; // 其他状态同理 } }3.4 系统级电源模式切换
除了充电状态机,系统本身的电源模式管理也需要一套逻辑。我设计了三个系统模式:
Active 模式是正常工作态,所有外设电源打开,MCU 全速运行。Sleep 模式是浅睡眠,关闭传感器和显示电源,MCU 进入低功耗模式,但保留 RTC 和中断唤醒能力。Shutdown 模式是深度待机,除了 PMIC 的低功耗监测电路和 MCU 的极少数外设之外,全部断电,电流目标是 50uA 以下。
模式切换的关键是:切换前要把 PCA9422 的输出状态处理好,不能直接一刀切。比如从 Active 切到 Sleep,先把 1.8V 外设电源关掉,延时 10ms 等负载放电完成,再把 3.3V 的传感器负载关了,最后 MCU 自己进入低功耗模式。这个顺序跑偏了,轻则电流数据不对,重则损坏器件。
模式切入用 PIC18F47K42 的 CIP 配合实现。比如 Sleep 模式下,通过 CLC(可配置逻辑单元)把 PMIC 的中断信号直接映射到唤醒源上,硬件路线简洁可靠,不用 CPU 参与。
4. 低功耗优化与实测数据
4.1 待机电流到底被谁吃掉了
低功耗优化的第一件事是搞清楚电流去哪了。我直接用功耗分析仪测整机待机电流,发现初始设计有 340uA,严重超标。拆解下来主要有三块:
PMIC 自身待机损耗、MCU 睡眠漏电、板上其他器件的静态电流(分压电阻、LDO 空载电流、去耦电容漏电等)。这其中最容易被忽视的是分压电阻。电池电压检测用的两个 100kΩ 电阻,在 4.2V 下就有 42uA 的持续电流。放大到整个系统,这些看起来不起眼的几 uA 就攒成了大头。
MCU 的端钮漏电也可能有问题,尤其是 GPIO 配置成输入但悬空的情况下,漏电可以从几 uA 飙到几十 uA。所以低功耗设计里,每一个 GPIO 都必须明确配置为输入/输出,并确定电平状态,不允许悬空。
4.2 从 340uA 到 55uA 的调整过程
第一板样机待机电流 340uA,我设了一个目标:先砍到 100uA 以内,如果能到 50uA 就算理想。
第一步,调整分压电阻的阻值。把电池检测的分压组合从 100kΩ/100kΩ 换成 1MΩ/1MΩ,在保证 ADC 输入阻抗能够接受的前提下,这条支路的电流从 42uA 降到 4.2uA。注意 ADC 采样时要考虑信号源阻抗的问题,PIC18F47K42 的 ADC 采样电容会从信号源抽取电流,信号源阻抗太大会导致采样值偏低。解决方法是降低 ADC 采样速度,给采样电容更长的充电时间,或者只在需要测量时把分压网络上电,测完就关。
第二步,调整 MCU 的睡眠模式。PIC18F47K42 有多种低功耗模式,我选了可以保留 RAM 和关键外设、关闭所有时钟的深度睡眠模式。这个模式下 MCU 自带电流只有不到 1uA。但代价是唤醒时间变长,从指令执行到稳定运行可能需要几十 us,对大多数场景可以接受。
第三步,把 PMIC 切到低静态电流模式。PCA9422 在轻载/无负载时可以把开关频率降到很低,来降低开关损耗。实测在无负载时,PMIC 自身可以把静态电流从几十 uA 压到 10uA 以下。
第四步,处理 IO 口漏电。把没用的 GPIO 全部配置为输出低,有用的输入引脚加上确定电平状态。这一项又省掉了十几 uA。
表格汇总调整过程:
| 调整项 | 初始值 | 优化值 | 节省电流 |
|---|---|---|---|
| 电池分压电阻 | 100kΩ/100kΩ | 1MΩ/1MΩ | ~38uA |
| MCU 睡眠模式 | 普通睡眠(~30uA) | 深度睡眠(<1uA) | ~29uA |
| PMIC 静态模式 | 正常模式(~35uA) | 低静态模式(~5uA) | ~30uA |
| GPIO 漏电 | 悬空(~45uA) | 强制电平(~15uA) | ~30uA |
| 其他(LDO 空载、电容漏电) | ~40uA | ~30uA | ~10uA |
最终系统待机电流降到了 55uA 左右,这个数据在我项目的应用场景里已经足够让电池撑过整个工作周期了。
4.3 唤醒时序与动态切换实测
待机电流解决后,更复杂的问题是唤醒过程中的动态电流。设备需要周期性唤醒工作,然后回到待机。唤醒后,电路板要先建立稳定电源、等时钟稳定、初始化传感器、采数、存储、再睡回去。这一整个过程中的平均电流才是续航的关键。
我实测了完整的唤醒周期。从 PMIC 收到唤醒信号开始,到 MCU 完全跑起来,大约需要 4ms。这期间 3.3V 输出电压会有一个小幅度跌落,但不超过 100mV,PCA9422 的负载瞬态响应还算让人满意。
等系统进入稳态工作,MCU 开启传感器,总电流在 60mA 左右(传感器瞬时电流比较猛),持续约 50ms。然后进入存储和通信阶段约 20ms,电流 20mA。全部做完,系统回到待机 55uA。
按每分钟唤醒一次计算,平均电流大概是:
平均电流 = (55uA × 59s + 20mA × 0.07s + 60mA × 0.02s) / 60s ≈ 55uA + 23uA + 20uA ≈ 98uA
这个结果能接受,因为真正的待机只占三分之一权重,余下是唤醒工作周期。如果你需要更低平均电流,压缩工作时间比压缩待机电流更有效。
4.4 数据处理和闭环校准
低功耗之外,我还在系统里加了闭环校准逻辑。ADC 采样到的电池电压和电流,和 PCA9422 寄存器读出来的数值不一定完全一致,因为两者用的是不同的采样通道和参考源。我用外部万用表测量基准点的真实电压,然后软件里做两点校准,把 ADC 增益误差和偏置误差都消掉。
校准系数保存在数据存储区里,每次开机加载。实测校准后电池电压精度从 ±3% 提高到 ±0.5%,这个精度足够支撑准确的电池容量估算和低电量保护逻辑。
5. 常见问题与排查技巧实录
5.1 I2C 总线被从设备拉死
现象是运行一段时间后,MCU 读到 I2C 总线 SCL 一直为低,主设备怎么发时钟都拉不起来。排查过程比较折腾,最开始怀疑代码有 bug,后来用示波器抓波形才发现是从设备在某个异常状态下把 SCL 拉低了。
这种问题的根源通常是从设备内部状态机的异常,某些寄存器访问时序不对或者电源电压不稳导致进入了错误状态。解决办法是给 I2C 线加上总线恢复机制:检测到 SCL 被拉低时,先发 9 个时钟脉冲尝试释放总线,然后发 STOP 条件,最后重新初始化 I2C 外设。
// I2C 总线恢复 void I2C_RecoverBus(void) { // 配置 SCL 和 SDA 为 GPIO 输出 TRIS_SCL = 0; TRIS_SDA = 0; // 发送 9 个时钟脉冲 for (int i = 0; i < 9; i++) { SCL = 1; __delay_us(5); SCL = 0; __delay_us(5); } // 发送 STOP 条件 SCL = 1; __delay_us(5); SDA = 1; __delay_us(5); // 恢复 I2C 外设模式 I2C1_Init(); }加了这段恢复逻辑后,总线被拉死的问题基本没有再出现过。
5.2 寄存器配置过后被重置
一次调试中,我配置好充电电流和电压,过了一段时间发现充电参数回到默认值,但其他寄存器正常。排查了很久,才怀疑到看门狗复位。原来看门狗超时触发 MCU 复位,复位代码里只做了 MCU 外设重初始化,没有重配 PCA9422,PMIC 那边还保持着上次的状态不完整。
解决方法是把 PCA9422 的初始化代码放到系统初始化的公共入口处,无论复位源是上电、看门狗还是外部复位,都会重新配置 PMIC。同时在上电时序里加一段 PMIC 的软复位操作,确保配置前 PMIC 处于已知状态。
5.3 充电电流实测值偏小
充电电流设置为 500mA,但用万用表串在电池负极实测只有 430mA。排查了采样电阻、连接损耗、接触电阻,最后发现问题是外部电源输入端的电压偏低。USB 口经二极管、过流保护电路后电压只有 4.8V,而 PCA9422 的充电系统需要一定压降,输入电压掉到阈值以下就限制了充电功率。
这种情况下不是芯片的问题,而是输入路径的压降预算没做够。对策是换用低导通压降的 MOS 管替代二极管做输入隔离,并尽量加粗电源走线。之后充电电流恢复到 490mA,接近预设值。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查思路 |
|---|---|---|
| I2C 通信失败 | 地址错误、上拉电阻缺失、总线被拉死 | 示波器抓时序,先读 ID 寄存器验证通信 |
| 输出电压偏低 | 反馈电阻配错、电感饱和、电容不足 | 核对负载电流,测开关节点波形 |
| 充电电流偏小 | 输入压降大、采样电阻偏差、恒压限制 | 串表测量充电电流,检查输入电压 |
| 待机电流超标 | 分压电阻、GPIO 悬空、PMIC 未切低功耗模式 | 逐个模块断开测电流,排除法定位 |
| 唤醒后系统异常 | 电源建立时间不够、MCU 时钟未稳定 | 调整唤醒时序,延长输出电压建立等待时间 |
| 芯片发热严重 | 布局散热差、开关频率配置不当 | 检查热过孔,确认 PWM 频率参数 |
6. 一点个人体会
整个项目做下来,最大的感受是电源管理这个活,本质上是跟细节过不去。任何一个看起来不起眼的 10uA 漏电、任何一段没处理好的走线、任何一次寄存器配置顺序不对,都会在上电的那一刻暴露出来。PCA9422 和 PIC18F47K42 的组合让我可以把系统电源策略集中到一个可控的软件层面来调,而不是在众多分立芯片之间反复横跳,这个体验是之前分立方案给不了的。
最后再分享一个小建议:做这类低功耗电源设计,一定把数据手册里每一个电流参数都当回事,亲测实测才算数。我的习惯是每次打样回来先做一遍全电流扫描——把电压、电流、状态全部记录下来,对照设计预期做逐项核验。这个习惯帮我抓住了前面提到的分压电阻漏电和 GPIO 悬空漏电之类的隐形功耗问题,省掉了后期在续航上的被动局面。