电脑闲置两个月后电量 0% 充不进电:读取 BQ40Z50 状态并尝试解锁
这块 NH50BAT-4 笔记本电池闲置约两个月后,电脑显示电量 0%,接上充电器也充不进去。拆包逐节测量,其中一颗电芯是 0 V。
电芯坏掉只是其中一层,保护板有没有跟着锁死才决定这个包还值不值得修。下面按实际排查顺序记录:从电池接口飞线接 STM32L496 读 BQ40Z50,尝试解锁,最后按解锁结果和电芯成本决定换芯还是买整包。
闲置后的电池包故障现象
开机后电量一直显示 0%,插充电器也没有反应。拆包逐节测量,其中一颗电芯 0 V;单独拆出来再量还是 0 V,用可调电源设 2.7 V、200 mA 试着激活,没有充电电流,这颗按失效处理。
电芯失效之外还有一层要单独验证:保护板有没有因为故障或保护状态拒绝工作。这就是后面要直接读 BQ40Z50 的原因。
超声波焊接与四颗电芯更换边界
这个电池包的外壳使用了超声波焊接,无法像螺丝固定的外壳那样无损打开。要看到内部电池和保护板,需要先对外壳进行破坏性拆解,再重新处理外壳的固定和密封。
四串电池包也不适合只换一颗。新电芯和剩下三颗旧电芯的容量、内阻、电压状态都不一样,混装会带来不均衡风险,正式更换必须四颗一起换,装配前查一致性。后面为了先验证保护板,我只临时换了一颗,这组混装电芯不能当成能正常充放电的成品,全程没有对它充电或大电流放电。
保护板上的 BQ40Z50 电池管理芯片

保护板上的主控是 BQ40Z50,负责采集电芯信息、保存电池状态,并参与充放电保护控制。电脑显示 0% 又充不进电,光看电芯电压判断不了保护板还能不能工作,所以得直接读这颗芯片。
电池接口飞线接入 STM32L496
不用焊 BQ40Z50 的引脚,直接从电池接口飞线到 STM32L496,就能通过 SMBus/I²C 访问保护板。电源、地和通信线按接口丝印和实物走线确认。

I²C 地址扫描与电池数据读取
先做地址扫描确认保护板在线,扫到 BQ40Z50 的标准 7 位地址 0x0B,接着读标准电池数据,串口输出如下:
Manufacturer: SMP-LGC-2750
Device: C41
Chemistry: LION
Pack Voltage: 13247 mV
Relative SOC: 0 %四节电芯的读数:
Cell1: 3025 mV
Cell2: 3435 mV
Cell3: 3802 mV
Cell4: 2986 mV
Cell Sum: 13248 mV
Pack Voltage Difference: -1 mV四节之和与总压只差 1 mV,采样和通信链路是可信的。816 mV 的最大压差来自刚换上的那颗新电芯和三颗旧电芯混装,不代表四颗新电芯配组后的结果。
BQ40Z50 状态读取结果
能读通不代表允许充放电,状态寄存器才是关键:
SafetyStatus: 0x00000000
PFStatus: 0x00000801
OperationStatus: 0x00007381
SEC: 3
XCHG: SETSEC=3 是 Sealed 状态,PFStatus 置了故障位,XCHG 表示充电被禁。芯片在线和电池不能用,这两件事同时成立。
常见 Unseal Key 的发送结果
先试 BQ40Z50 常见的两组默认 Unseal Key:
0x0414
0x3672按 ManufacturerBlockAccess 0x44 编码后发出去:
[44 02 14 04]
[44 02 72 36]发完回读 OperationStatus,没有变化:
Post-unseal OperationStatus: 0x00007381, SEC=3
Unseal result: still Sealed (SEC=3); key pair was not accepted两组 key 都没被接受,说明这块的量产配置换过密钥。没有正确的 key,标准解锁流程走不下去,这也证明不了芯片本身坏了。
暴力搜 key 这条路走不通
两组 16 位 key 合起来是约 2^32(42.9 亿)种组合。只按两次 4 字节写入加地址应答的理想传输时间算,100 kHz 传完一轮是 45 天量级,1 MHz 也要 4.5 天,还没算芯片处理时间、状态回读和失败等待;我当前程序在两组 key 之间留了 10 ms 间隔,按这个节奏是 1.4 年往上。何况芯片一般会限制连续失败次数,搜到一半就会停。
所以提 I²C 频率没有意义,要么拿到这块电池对应的 Unseal Key,要么换一块已经配置好的保护板。
换芯还是买整包
继续修要同时处理三件事:四颗电芯重新采购、保护板已经记了 PF、BQ40Z50 还锁在 Sealed。
四颗 3400 mAh 电芯单价 16.5 元,合计 66 元;同型号完整电池包 77 元。材料价差只有 11 元,芯片、焊接、时间和解锁工具的钱都还没算进去。解锁已经失败,再买保护板芯片也没有明确收益,总成本很容易接近或超过整包。
结论
这块电池包的问题定位到两层:一颗电芯 0 V 失效,2.7 V/200 mA 外部激活没有充电电流;保护板侧 BQ40Z50 能通信,但处于 Sealed 且记了 PF,常见 Unseal Key 无效。芯片是好的还是坏的没法下结论,只能说标准解锁流程走不通。
材料上四颗电芯 66 元对整包 77 元,加上解锁失败和 PF 未清除,继续修不划算,最后买了完整电池包。
调试代码与实测工程
本次 STM32L496 诊断代码位于公开仓库:STM32L496_BQ40Z50_DIAG。
相关文件包括:
Core/Src/bq40z50_diag.c:地址扫描、标准电池数据、单节电压和 BQ40Z50 状态读取。Core/Src/bq40z50_protocol.c:Unseal 数据帧编码和 SEC 字段解析。Core/Src/i2c.c:STM32L496 的 I²C1 初始化。tests/test_bq40z50_protocol.c:验证 key 字节顺序和数据帧格式。