Удалось восстановить работоспособность контроллера:
Спойлер
SMBusb Firmware Version: 1.0.1
-------------------------------------------------
Manufacturer Name: Panasonic
Device Name: IBM-42T5264
Device Chemistry: LION
Serial Number: 3660
Manufacture Date: 2020.09.20
Manufacturer Access: 0018
Remaining Capacity Alarm: 561 mAh(/10mWh)
Remaining Time Alarm: 10 min
Battery Mode: 8000
At Rate: 0 mAh(/10mWh)
At Rate Time To Full: 65535 min
At Rate Time To Empty: 65535 min
At Rate OK: 1
Temperature: 22.65 degC
Voltage: 11196 mV
Current: 0 mA
Average Current: 0 mA
Max Error: 0 %
Relative State Of Charge 25 %
Absolute State Of Charge 25 %
Remaining Capacity: 1379 mAh(/10mWh)
Full Charge Capacity: 5616 mAh(/10mWh)
Run Time To Empty: 65535 min
Average Time To Empty: 65535 min
Average Time To Full: 65535 min
Charging Current: 3500 mA
Charging Voltage: 12600 mV
Battery Status: 00c0
Cycle Count: 0
Cell 0 voltage: 3744 mV
Cell 1 voltage: 3732 mV
Cell 2 voltage: 3720 mV
Cell 3 voltage: 0 mV
и откалибровать:
Спойлер
SMBusb Firmware Version: 1.0.1
-------------------------------------------------
Manufacturer Name: Panasonic
Device Name: IBM-42T5264
Device Chemistry: LION
Serial Number: 3660
Manufacture Date: 2020.09.20
Manufacturer Access: 0018
Remaining Capacity Alarm: 561 mAh(/10mWh)
Remaining Time Alarm: 10 min
Battery Mode: 8000
At Rate: 0 mAh(/10mWh)
At Rate Time To Full: 65535 min
At Rate Time To Empty: 65535 min
At Rate OK: 1
Temperature: 26.85 degC
Voltage: 12467 mV
Current: 0 mA
Average Current: 0 mA
Max Error: 0 %
Relative State Of Charge 100 %
Absolute State Of Charge 99 %
Remaining Capacity: 5587 mAh(/10mWh)
Full Charge Capacity: 5611 mAh(/10mWh)
Run Time To Empty: 65535 min
Average Time To Empty: 65535 min
Average Time To Full: 65535 min
Charging Current: 0 mA
Charging Voltage: 0 mV
Battery Status: 00e0
Cycle Count: 2
Cell 0 voltage: 4158 mV
Cell 1 voltage: 4170 mV
Cell 2 voltage: 4139 mV
Cell 3 voltage: 0 mV
Единственное, смущает что флаг INITIALIZED (Battery Status 0x0080) не сбросился после калибровки. Может для этого потребуется несколько циклов заряда-разряда, время покажет.
Напомню, аккумулятор для ноутбука IBM ThinkPad T61 построенный на базе контроллера M37512 FC200 и драйвера M61048FP.
Для считывания данных с контроллера и обмена данными с ним использовался инструмент smbusb от Karosium.
Для того чтобы определить назначение областей памяти DataFlash (ba, bb) пришлось дизассемблировать прошивку. Для этого использовал ida pro 6.1 (см. приложение ida_m37512.zip). Удалось определить следующее:
Спойлер
Код: Выделить всё
offset: size: default: note:
0x0000 2 0x3CC3 marker1
0x0002 2 0x0000 counter of erase/write cycles to data flash
0x0004 2 0x0000 must be 0xFFFF otherwise battery locks
0x0006 2 0x0000 counter of failed attempts to write
0x0010 2 0xC300 32KOSCC1,32KOSCC0 (use original values)
0x001A 1 0x00 0x00 -> charge; 0xF0 -> discharge (must be 0xF0 otherwise controller does not recognize charging current)
0x001F 3 0x000E05 always used (0x0124==0x00 -> charge value; 0x0124==0xF0 -> discharge value)
0x002E 3 0x009910 used if 0x0124==0xF0 (0x00,DCHARGEL,DCHARGEH)
0x003D 3 0x003226 used if 0x0124==0xF0 (0x00,DCHARGEL,DCHARGEH)
0x004C 3 0x005319 used if 0x0124==0x00 (0x00,CHARGEL,CHARGEH)
0x005B 3 0x00102D used if 0x0124==0x00 (0x00,CHARGEL,CHARGEH)
0x006A 3 0x005A33 used if 0x0124==0xF0 (discharge calibration value)
0x0079 3 0x005339 used if 0x0124==0x00 (charge calibration value)
0x0088 2 0x8A02 converted BAT1 voltage
0x0092 2 0x6601 converted BAT1 voltage
0x009C 2 0x8402 converted BAT2 voltage
0x00A6 2 0x6201 converted BAT2 voltage
0x00B0 2 0x8902 converted BAT3 voltage
0x00BA 2 0x6601 converted BAT3 voltage
0x00C4 2 0x0000 converted BAT4 voltage
0x00CE 2 0x6B01 converted BAT4 voltage
0x00D8 1 0xFC crc of data in RAM 0x122...0x149; default crc is WRONG! must be 0x46
0x011E 2 0x1234 marker2
0x0120 1 0x44
0x0123 1 0xF3
0x0126 1 0x42
0x0129 1 0x43
0x012C 2 0x7712 full charge capacity ???
0x014C 1 0x6C
0x0151 2 0x0000 charge/discharge cycle counter
0x015B 2 0x0000 manufacture date
0x0161 2 0x0000 battery serial number
0x0167 16 0x0B49424D2D34325435323634FFFFFFFF IBM-42T5264
0x0197 2 0x0000 not used ???
0x019D 16 0x0B315A445646303030303030FFFFFFFF 1ZDVF
0x01ED 2 0xFE00 0xFE -> (0x050A,0x0509 == 0 || 0x052F != 0x5A)
0x5A -> OK
0x01F7 2 0x0000 always 0 ???
0x0201 2 0x0100 init_over_current
0x0221 2 0x0000
0x022B 2 0x0000 init_over_current
0x024B 2 0x6400
0x026B 2 0x0000
0x028B 2 0x0000
0x02AB 2 0x0000 something related to INT0,INT1,INT2
0x02CB 2 0x0000
0x02EB 2 0x0000
0x030B 2 0x0000
0x032B 4 0x00000000
0x036B 2 0x0000
0x0373 2 0x5678 marker3
0x0375 2 0x0000
0x0383 2 0x0000
0x0391 2 0x0000
0x039F 2 0x0000
0x03AD 2 0x0000
0x03BB 2 0x0000
0x03C9 2 0x0000
0x03D7 2 0x0000
0x03E5 2 0x0000
0x03F3 2 0x0000
0x0401 2 0x0000
0x040F 2 0x0000
0x041D 2 0x0000
0x042B 2 0x0000
0x0439 2 0x0000
0x0447 2 0x0000
0x0455 2 0x0000
0x045F 2 0x0000
0x0469 2 0x0000
0x0473 2 0x0000
0x047D 2 0x0000
0x0487 2 0x0000
0x04A7 2 0x0000
0x04C7 2 0x0000
0x04E7 2 0x0000
0x0507 2 0x0000
0x0527 2 0x0000
0x0547 2 0x0000
0x054D 2 0x0000
0x0553 2 0x0000
0x0559 2 0x0000
0x055F 2 0x0000
0x0565 2 0x0000
0x056B 2 0x0000
0x0571 2 0x0000
0x0577 2 0x0000
0x057D 2 0x0000
0x0583 2 0x0000
0x058D 2 0x0000
0x0597 2 0x0000
0x05A1 2 0x0000
0x05AB 2 0x0000
0x05B5 2 0x0000
0x05BF 2 0x0000
0x05C9 2 0x0000
0x05D3 2 0x0000
0x05D9 2 0x0000
0x05DF 2 0x0000
0x05E5 2 0x0000
0x05EB 2 0x0000
0x05F1 2 0x0000
0x05F7 2 0x0000
0x05FD 2 0x0000
0x0603 2 0x0000
0x0609 2 0x0000
0x060F 2 0x0000
0x0615 2 0x0000
0x061B 2 0x0000
0x0621 2 0x0000
0x0627 2 0x0000
0x062D 2 0x0000
0x0633 2 0x0000
0x0639 2 0x0000
0x063F 2 0x0000
0x06FD 2 0x5AA5 marker4
0x07FE 2 0x6996 marker5
Для восстановления dataflash за основу были взяты значения, которыми она инициализируется после стирания.
Переменная 0x0002 должна быть равна 0xFFFF, иначе контроллер блокируется.
Для переменных 0x0010, 0x002E, 0x003D, 0x004C, 0x005B, 0x006A, 0x0079 нужно использовать оригинальные значения, иначе не будет работать измерение тока.
Значения переменных 0x0088, 0x0092, 0x009C, 0x00A6, 0x00B0, 0x00BA, 0x00C4, 0x00CE не критичны, но не должны быть равны 0x0000 или 0xFFFF.
Переменная 0x001A должна быть равна 0xF0 (разряд) иначе не определяется ток заряда (всегда 0).
Значения переменных 0x0010...0x00CE защищены контрольной суммой (0x00D8). Для её вычисления написал скрипт на питоне (см. приложение m37512_fc200.zip; также имеется скрипт для преобразования даты, она не должна быть нулевой).
Переменная 0x01ED должна быть равна 0x5a, иначе контроллер блокируется.
Остальные значения оставил как есть (кроме, разумеется, количества циклов, даты, серийного номера).
Для сброса нужно:
- подтянуть 9 и 12 выводы контроллера к плюсу питания (43 вывод) с помощью резисторов ~100 Ом;
- подпаять аккумуляторы (если разблокировать с резисторами, вместо аккумуляторов, то контроллер блокируется позже при подпайке аккумуляторов, даже в сброшенном состоянии, когда вывод /RESET (15) подключён к минусу);
- сбросить контроллер (кратковременно соединить /RESET с минусом);
- записать ba_reset.bin в область ba;
- записать bb.bin (заполненную 0xFF) в область bb;
- отпаять всё от выводов 9, 12, 43;
- сбросить контроллер (кратковременно соединить /RESET с минусом);
- через 1-2 секунды контроллер подаёт напряжение на выход.