2690173248 发表于 2025-10-26 15:59

【原创】日志 - 全网首篇 hack LGC 固件 瑞萨M37512-FC035电池芯片的资料

本帖最后由 2690173248 于 2025-10-26 16:04 编辑

这篇文章主要为折腾电池板,换芯本身我会在另一个帖子里面细讲
我手上有个X200 六芯电池的空壳,LG的,42T4648,之前为了偷摸带几个三星18650电芯上飞机用过的

拆开发现,芯片为三菱/瑞萨 M37512 FC035。FC035为LG固件版,FC200是松下固件
我本来板子没锁的,所以我直接上了六个特价21年库存LG MH1。上了发现,LG固件太笨,满电容量不会自己改!
只好再次拆开电池,拆下电池板来研究,结果拆下电池板的时候,正极焊锡藕断丝连没有完全断开,中间有个镍条焊锡扑了,当场烧毁芯片!

我发现,M37512的内容现在本来就很少,而且市场上没有几个一键重置软件能搞定(BE2Works亲测不行)!而LG固件和松下固件里面内容差的非常大!直接从一个电池回收的铺子,咬牙60买了7个X200的电池板做实验,三个为同款M37512 FC035!

其实,LG版本FC035的完全没有任何资源!!!所以,我下面这些硬件操作,只能从普通M37512标准下手(karosium.com/2016/08/adding-m37512-with-panasonicibm-firmware.html),软件方面编程的事,只能参考51F51的帖子和油管视频(https://www.ibmnb.com/thread-2069453-1-1.html 这个里面有)!

跟R2J240/51F51一样,需要进入Boot Mode(相当于下载模式/刷机模式)才能开始编程。这个步骤什么M37512都是一样的。BE2Works 4.52破解有自动进入Boot Mode的功能,但是我亲自测试完全无效!
所以,只好手动拉飞线,pin9 - 12 - 43(我这里42-43-44是连起来的,都是芯片Vcc供电)
直接从针脚上面拉飞线有点危险,搞不好会跟临近的针脚短路。所以,我用万用表和放大镜,手动找到了我这款板子那三个针脚去了哪里(你的板子肯定跟我的不一样)


在这些地方连飞线就好了
然后,因为需要翻来覆去的接电断电,为了省事,我在某宝上面买了一包470欧的水泥电阻,这样子只用接电池正负极就行了,弄好了再接真正的电芯
另外,如果保险烧了的话,需要现在修复好。如果保险没有烧的话,不用担心,在Boot Mode下面无法烧保险


接上了后,用Cypress FX2LP开发板,接好GND、SCL、SDA针脚,准备好Linux上面的smbusb(Karosium原生版,不是那个迁移到CP2112版,那个有重大bug,会莫名其妙删你固件!)
因为M37512进入了Boot Mode以后十分的脆弱,随便一个命令弄错了就会导致莫名其妙的擦除内容,所以从此开始,软件上面每一步都需要额外的小心!!!
正因为如此,我们使用Karosium建议使用的测试,扫描前10个register的读写特性,不能多了,多了会碰到擦写用的register导致数据丢失!

先使用这个库里面的 sudo smbusb_scan -w 0x16 -e 10检查返回出来的结果


看这些00-10的规律,一般由以下四个场景:

Case 1:
Case 2:
Case 3:
Case 4:无输出(打印 None)

详解:
场景1为正常成功进入Boot Mode了,可以进行下面编译环节了

场景2为一般松下电池进入Boot Mode,这个是个骗人的输出,其实是等着要密码!松下一般密码为CDAB 3412,输入如下:

sudo smbusb_comm -a 16 -c FF -w CDAB -b
sudo smbusb_comm -a 16 -c CF -w 3412 -b
输入完了再次扫描就应该是场景1了



场景3为正常运行状态的结果,这个意思是你芯片根本没有进入Boot Mode。

场景4为芯片完全没有响应。检查连接,检查输入电压是否严重亏电,而且可以尝试短暂飞线电芯正极和电池插座正极

开始编程之前需要备份。这里M37512有六个数据分区:Block A, B, 0, 1, 2, 3。其中Block A和B为动态数据(写入寿命1000次),A一般都是空白。Block 1一般为静态数据,如电池FRU、序列号、设计容量、设计电压、充电电压等;其余一般为固件本身。注意Block 0、1、2、3写入寿命只有100次!!
按照以下命令逐个分区备份:
sudo smbusb_m37512flasher -d bb.bin -p bb

然后把bb变成ba、bb、b0、b1、b2、b3,重复运行
成功后检查一下备份,应该里面除了ba以外都有地方有数据。这备份就成功了。


以上内容亲自测试松下M37512 FC200和LG M37512 FC035都可适用。下面帖子讲编程部分,这个就是专门为LG M37512 FC035的了!

imdx 发表于 2025-10-26 16:55

不错,终于有看到用smbusb电池的帖子了,T60p的电池也是m37512。
我更新了smbusb的几个模块,帖子在这里:
https://zhuanlan.zhihu.com/p/1962220392698577281

anjue 发表于 2025-10-26 17:14

本帖最后由 anjue 于 2025-10-26 17:22 编辑

不错!51f51进入boot模式,不用飞线,只需按照那个人的教程用电阻拉低tp1,触发tp14重置。
没看清飞线后的图

anjue 发表于 2025-10-26 17:24

我看那个人github有smbusb的windows版本,还要装个驱动,请问用cp2112在win下能操作连接成功吗,我试了,提示找不到适配器

jackmacc 发表于 2025-10-26 19:31

本帖最后由 jackmacc 于 2025-10-26 19:38 编辑



这个帖子我反复看过几遍. 6个数据块.分别读取,
然后就可以随意在 windows 下用cp2112 ,软件进行编程了.但是没有多买几个 瑞萨的板子.就没有去琢磨
LZ 亲力亲为,非常感谢辛勤付出! 说实话,你这个文章. 对我很有启发.收藏了.




2690173248 发表于 2025-10-27 14:00

本帖最后由 2690173248 于 2025-10-27 19:13 编辑

M37512编程

按照之前步骤成功获取六个分区的备份以后,备份文件复制一份,然后直接改
一般情况下,只需要修改bb.bin(Block B)。如果要修改静态信息,像充电电压,也需要修改b1.bin(Block 1)。
这里下面全部讲的是LG固件的结构,松下固件的文件结构跟这个完全不一样!
但是松下固件的别着急,顺便说一下:
- 虽说BE2Works无法正常读取,但BE2Works可以一键重置松下固件(LG不行)。如果是松下固件的话,直接把备份按照B A 3 2 1 0顺序正确组装(打开bb.bin,然后在文件后面粘贴ba,然后b3 b2 b1 b0;总文件应该是从0000到CFFF,或者52KB。
- 插个CP2112(不要插电池!!!),打开BE2Works,选择M37512。直接把这个52KB的文件导入BE2Works,输入目标容量,按重置(还是不要插电池!)。一会儿会报写入错误,这个时候把修改好的EEPROM另存为。
- 最后把前面0-7FF拷贝出来另存,这个就是你的解锁了的bb_new.bin
- 然后 sudo smbusb_m37512flasher -w bb_new.bin -p bb --confirm-delete 确认写入此文件;断电,断飞线,重新接电即可使用!

下面是真正说LG的M37512 FC035的文件结构:
这个大大参考了51F51的资料,文件结构跟51F51很相像(https://www.ibmnb.com/thread-2069453-1-1.html)
用HxD打开bb.bin,初次看起来真的眼花缭乱


但是别急,这个一步一步的来。
第一个发现,是这些貌似也是来回来去的重复,其实,40行、80行、C0行、100行等都是重复!这个跟那个51F51很相似,其实每一个是日志!而且,每一个日志在最前面都有00显示这个日志的存在。而且,据我发现,这里01显示的是有错误的日志(可能带锁的)。这套也跟51F51同理

锁标:
51F51的帖子上面说,锁标是个17标识。我这里有三个M37512 FC035的备份,一个没锁,两个有锁。有锁的两个bb我也是发现有17标识,而且也是在上面标识01的那个对应的log里面有!


图中显示一个,我另一个bb里面有很多个17,而且每一次写17的log上面对应的都是01!你可以下载我的问题bb.bin然后自己观察


只是,这里我们猜测的锁标位置明显不一样,而且这里貌似正常使用标不是03。


而且,我敢非常的肯定,第一个日志是没有问题的,所以不如按照下图,直接把后面所有的log全部FF掉(上面对应的00/01标识也FF掉),只留第一个!


剩下第一个log,应该锁标没了。下面开始改其它参数
51F51的其它参数如下:
(Need update) 51F51 revision has next founded mapping (all little endian):
0x40, 2 bytes - Remain Capacity Alarm, in mAh
0x44, 2 bytes - Remaining Time Alarm, in minutes
0x48, 2 bytes - FCC. TBD: example dump above map this value as-is in mAh, but I need 6000 mAh multiply to 1.78 to gen ~6000mAh in the report output. Need investigate.
0x46, 2 bytes - Battery Mode
0x4C, 2 bytes - Cycle Count, maps as is (TBD)

我还是按照这个作为参考。M37512 FC035的参数具体位置跟这个不一样,但是原理跟这个一样!(而且全部是小端序!)
0x40, 2 bytes - Remain Capacity Alarm, in mAh
0x44, 2 bytes - Remaining Time Alarm, in minutes

这两个还是一样的,但是这两个不要改!
0x48, 2 bytes - FCC

FCC(满电容量)也是同一个地方,但是有两个位置!0x48是一个,0x4a也是!0x48是一个很奇怪的单位,为1.11*mah。我这里改成了6B14,是5227,或者5227*1.11=5.8Ah
0x4a是 10mWh单位,这里我填的7818,是6264 * 10mWh=62.64Wh。这两个不需要完全相同,但是别漏改!!!漏了充电的标尺会很奇怪!
0x4C, 2 bytes - Cycle Count, maps as is (TBD)

这个是一模一样,直接00就行
另外,还有0x4E, 2 bytes。这个是首次使用日期,可改可不改,我改成了4C5B,DOS日期=2025-10-12

所以,以下是我所有修改的地方:



高压电池
有的M37512 FC035主控的是高压电池,我这四个主控里面,其中一个是42T4837,这个就是高压,充电电压13.05V!

我试了试,我LG MH1根本撑不住这个负载!这个需要改。
改充电电压找到了就挺容易了。在Block 1里面,如下:



这里有两个FA 32,这个是小端序的13050mV!还好,亲测这个固件没有checksum保护,我直接下图这样子改后面使用没问题(注意两处都要改!)!



两个文件都存成备份,例如b1_new.bin和bb_new.bin

在这个电池板还处于Boot Mode下,运行以下命令写入:
sudo smbusb_m37512flasher -w bb_new.bin -p bb --confirm-delete

sudo smbusb_m37512flasher -w b1_new.bin -p b1 --confirm-delete

(只有需要修改静态信息,如充电电压,才需要写入b1!不然不要动)
写入成功后,断开电源连接,拆掉飞线,重新连接电源(这里是这个水泥电阻省事的地方!),可能需要电池正极短接一下电池插座正极1秒钟来启动电池板
如果操作正确,可以尝试读取电池信息:
sudo smbusb_sbsreport



这里看出来,充电电压回来了,而且改成12.6V!
现在就可以再次断开电源连接,断开水泥电阻,上真正想用的电芯


结果一切正常!满电电压12.53V!


2690173248 发表于 2025-10-28 09:56

jackmacc 发表于 2025-10-26 19:31
这个帖子我反复看过几遍. 6个数据块.分别读取,
然后就可以随意在 windows 下用cp2112 ,软件进行编程了.但 ...
我其实本来也只想买一个的,但是发现要不然就是买一整个X200电池,要不然就是那个拆电池的铺子一整整一把。。我说算了,整一把,烧坏了几个也没关系
其实其中一个已经让我得毁了。网上说,M37512可以直接擦Block B来重置,然后我拿了两个板子,擦了试试,结果的确重置了 - 但是问题是,貌似校准信息丢了!
那个电池板装上去发现,单个电芯电压读取的数值上下波动非常大!一个好好冲到12.15V的电池,用万用表测基本上每个电芯都是4.05V,读出来一会儿4.12一会儿3.95!
结果会导致这个电池充电的时候时有时停的,总是误判过充保护!
这两个板子里面, 有一个有备份,另一个没有,所以有一个恢复回来了,另一个恐怕就只能继续当实验品了。。
所以,M37512真正重置还是要修改Block B,不能懒人直接擦Block B。。。
EEPROM本身修改我也已经在这个帖了加上了,你可以看看,其实说起来跟51F51挺相似,但不完全一样

Racoon 发表于 2025-10-28 19:43

2690173248 发表于 2025-10-28 09:56
我其实本来也只想买一个的,但是发现要不然就是买一整个X200电池,要不然就是那个拆电池的铺子一整整一把 ...

非常有技术的文章,515那个视频我看了两三遍,前面敲了一堆命令也没记住,只记得最后印度人死按F键一直填充FF,说好像怕直接复制会有错误。

rundog 发表于 2025-10-28 22:05

一次买7块板子,楼主这是下了大本钱啊!先收藏,抽空一定好好学习一下!另外,楼主能不能研究一下实现永不锁板^t^

Hank强 发表于 2025-10-28 22:20

怎么在现在的体积下给九芯扩容?能解决这个就太好了

2690173248 发表于 2025-10-29 12:49

Racoon 发表于 2025-10-28 19:43
非常有技术的文章,515那个视频我看了两三遍,前面敲了一堆命令也没记住,只记得最后印度人死按F键一直填 ...

对他说后面的FF跟我这个一模一样,他只是意思是如果你直接复制粘贴一堆FF进来,如果复制进来的数量不对会改变EEPROM的大小,这个会有很大的问题,所以他直接死按F键
他说的命令其实跟我这个也是大同小异:搜索这些register的读写权限来判定是否在Boot Mode下面,然后备份,最后再写入

2690173248 发表于 2025-10-29 12:58

Hank强 发表于 2025-10-28 22:20
怎么在现在的体积下给九芯扩容?能解决这个就太好了

X201?最好买晚期三洋的电池,45N1170。这个电池拆开里面其实是松下NCR18650,三元锂电芯。这个凭亲自测试,换了9个三星35E可以换出110Wh出来!想扩容再多就有点不现实了

Racoon 发表于 2025-10-29 15:56

2690173248 发表于 2025-10-29 12:49
对他说后面的FF跟我这个一模一样,他只是意思是如果你直接复制粘贴一堆FF进来,如果复制进来的数量不对会 ...

但是他那个视频好像说的是51F读写需要一个脚本文件。我手上有个51F板子刚拆出来。打算试试

Hank强 发表于 2025-10-29 20:57

2690173248 发表于 2025-10-29 12:58
X201?最好买晚期三洋的电池,45N1170。这个电池拆开里面其实是松下NCR18650,三元锂电芯。这个凭亲自测 ...

这个方案等的花儿都谢了

2690173248 发表于 2025-10-30 14:02

Racoon 发表于 2025-10-29 15:56
但是他那个视频好像说的是51F读写需要一个脚本文件。我手上有个51F板子刚拆出来。打算试试 ...

你说的是破解BQ805x用的那个loop的脚本文件吧?那个51F51不用的。跟M37512一样,短路两个针脚马上进Boot Mode(除了松下M37512需要输密码以外)
剩下的脚本都是GitHub上面karosium/smbusb库里面的东西,这个得自己安装
页: [1]
查看完整版本: 【原创】日志 - 全网首篇 hack LGC 固件 瑞萨M37512-FC035电池芯片的资料