Общение с батареями от ноутбука на чипах bq20z

Выслал в ЛС …

1 лайк

Ух, наконец, пустили на форум )))
Продублирую, что уже писал не здесь…

Во-первых, громадное спасибо Андрею (@Komandir) за суперский открытый инструмент! Реальная помощь многим людям.

Во-вторых, Андрей (@Komandir), в Вашем коде, как и во всех форках, в том числе и Arduino-bq20zXX-Reader уважаемого Александра (@shura7105) присутствует так сказать “бомба”, срабатывающая на Mega2560, заставляющая IDE зависать при загрузке откомпилированного скетча в Ардуину. Дело в том, что Mega2560 почему-то подвисает при загрузке, если в коде используется 3 подряд идущих восклицательных знака. 2 знака (!!) - норм, а вот 3 (!!!) - зависон )). Я целый день бился с загрузчиком, пробовал перепрошивать bootloader через адаптер USBASP, ставил Ардуино на другой комп, ставил старую версию IDE и т.д., ничего не помогало… пока не наткнулся на реальный баг IDE, известный, кстати, достаточно давно, но до сих пор не исправленный. Если Вы хотите сделать код универсальным, пожалуйста, поменяйте все вхождения “!!!” на “!!”. Также зарегистрировал Issue в Вашем GitHub: avrdude: stk500v2_ReceiveMessage(): timeout · Issue #2 · dsa-a/Arduino-Smart-Battery · GitHub

В третьих, из-за чего всё и началось… )))
Запустил скетч на своей батарее (чип bq20z45), он мне выдал:

Pack Info...
DesignCapacity: 2730 mAh
FullChargeCapacity: 1308 mAh
CycleCount: 19
Date: 2009.5.23
DesignVoltage: 10960 mV
ManufName: AS085Q833B
DeviceName: 1008-29
SerialNumber: 0080 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 0 mV
DeviceChemistry: OTS0
Temperature: 25.50 C
Voltage: 10637 mV
Current: 0 mA
RelativeSOC: 0 %
AbsoluteSOC: 0 %
RemainingCapacity: 0 mAh
VCELL4: 0 mV
VCELL3: 3573 mV
VCELL2: 3526 mV
VCELL1: 3538 mV
SpecificationInfo: 0031 Hex
Battery Status: 4AC0 Hex
TCA|TDA|RCA|INIT|DSG|
Operation Status: 6441 Hex
FAS|SS|LDMD|DSG|QEN|
Sealed
Device Type: 0450 Hex
Firmware Version: 0104 Hex
Hardware Version: 00A6 Hex

Не могли бы поделиться ключиками?
Пробовал с ключами в скетче, п.2 (Unsealing + Full Access mode), пишет “DONE !”, но при повторном считывании п.1 (Read Battery info) статус всё равно “Device ---------- Sealed”. ЧЯДНТ?

К сожалению, не понял, как на форуме редактировать сообщения, поэтому поправлю в своём же ответе.

Эти пункты в скетче Александра, в текущем скетче они называются:
п.1 (Read pack info)
п.3 (Unsealing a pack)
Вот после п.3 пишет просто “Unsealing…”, а повторное считывание по п.1 выводит “Sealed”

В личке …

Приветствую Командир!!! Можно ключики попробовать Яблоко батарея
Pack Info…
DesignCapacity: 7150 mAh
FullChargeCapacity: 6548 mAh
CycleCount: 754
Date: 2014.3.5
DesignVoltage: 7600 mV
ManufName: SMP
DeviceName: bq20z451
SerialNumber: 0001 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 0 mV
DeviceChemistry: LION
Temperature: 28.70 C
Voltage: 6923 mV
Current: 0 mA
RelativeSOC: 0 %
AbsoluteSOC: 0 %
RemainingCapacity: 0 mAh
VCELL4: 0 mV
VCELL3: 0 mV
VCELL2: 3483 mV
VCELL1: 3441 mV
SpecificationInfo: 0031 Hex
Battery Status: 4AD0 Hex
TCA|TDA|RCA|INIT|DSG|FD|
Operation Status: 6445 Hex
FAS|SS|LDMD|DSG|R_DIS|QEN|
Sealed
Device Type: 0451 Hex
Firmware Version: 0511 Hex
Hardware Version: 00A6 Hex

Отправил в личку. С Apple скорее всего не поможет …

Спасибо Командир, толку ноль :grinning:

когда-то @Komandir приводил статистику, что для твоего случая успех тысячные доли процента )))

Да это все понятно, просто есть две батареи A1405 от эйра 12 года которые разлочились паролями из скетча, попробовал A1496 от эйра 15 года толку ноль, поменяю плату😁

вот интересно, если вообще плату от другого ноута поставить, что скажет?

Добрый день, макаковская батарея (точнее контроллер только от нее), сможете скинуть ключи?

11:13:17.648 → Pack Info…
11:13:17.648 → DesignCapacity: 4381 mAh
11:13:17.695 → FullChargeCapacity: 3370 mAh
11:13:17.742 → CycleCount: 0
11:13:17.742 → Date: 2020.8.21
11:13:17.742 → DesignVoltage: 11490 mV
11:13:17.742 → ManufName: SMP
11:13:17.788 → DeviceName: bq20z451
11:13:17.835 → SerialNumber: 0001 Hex
11:13:17.835 → ChargingCurrent: 0 mA
11:13:17.835 → ChargingVoltage: 0 mV
11:13:17.882 → DeviceChemistry: LION
11:13:17.929 → Temperature: -39.20 C
11:13:17.929 → Voltage: 9060 mV
11:13:17.976 → Current: 0 mA
11:13:17.976 → RelativeSOC: 0 %
11:13:17.976 → AbsoluteSOC: 0 %
11:13:17.976 → RemainingCapacity: 0 mAh
11:13:18.022 → VCELL4: 0 mV
11:13:18.070 → VCELL3: 3469 mV
11:13:18.070 → VCELL2: 2774 mV
11:13:18.070 → VCELL1: 2817 mV
11:13:18.070 → SpecificationInfo: 0031 Hex
11:13:18.116 → Battery Status: 4AD0 Hex
11:13:18.164 → TCA|TDA|RCA|INIT|DSG|FD|
11:13:18.210 → Operation Status: E46D Hex
11:13:18.210 → PRES|FAS|SS|LDMD|DSG|XDSG|R_DIS|QEN|
11:13:18.257 → Sealed
11:13:18.257 → Device Type: 0451 Hex
11:13:18.304 → Firmware Version: 1002 Hex
11:13:18.304 → Hardware Version: 00A6 Hex

Be2Works не разсейлила

Метод одинаковый. С Apple не прокатывет …

ну попробовать все таки ключи можно

еще вопрос, все BQ контроллеры по I2C висят на одном адресе 0х0В ? или возможно как то изменить этот адрес (чтобы подключить к ардуино несколько BQ на одном I2C)?

все батареи ноутбука обязаны отвечать на адресе 0x0B

нет

через I2C коммутатор

или может реализовать дополнительно софтовый I2C, на цифровых пинах ардуины?

Как вариант …

Громаднейшее спасибо за ключи.
Свои ключи из батареи получил!

Делюсь своим опытом…
Батарея ASUS AP31-1008HA (bq20z45), unsealing не работает, несмотря на параметр “RemainingCapacity: 0 mAh” (хотя напряжения на всех 3х ячейках ≈ 3.5В). Ранее батарея пролежала долго в ноуте, которым не пользовались, одна ячейка полностью села (< 1В), зарядил её напрямую лабораторным БП, также подтянул к 3.5В и остальные ячейки. RemainingCapacity так и остался = 0 mAh, но батарея не unseal-илась.
Дождался с АлиЭкспресса CP2112, защитил её перепрошивкой VID/PID, установил на ноут с Windows XP нежадную be2works, - всё то же самое - не unseal-ится.

Магии не бывает, поэтому разрядил все ячейки 5Вт-ым резистором на 10 Ом (хотел до 2.5В, но пропустил момент, получилось ниже, что не есть хорошо, но, как вышло, так вышло… позже напряжение на ячейках само поднялось почти до 2.9В). И сразу попробовал UnSeal, и, о чудо, это свершилось!

Вывод: не всегда, видимо, достаточно “RemainingCapacity: 0 mAh”, желательно разрядить каждую ячейку/банку ниже 3В. (Разумеется, после UnSealing и получения информации с батареи, сохранить оригинальные пароли контроллера!)

Хотелось бы в итоге: восстановить работоспособность батареи (сбросить ошибки), сбросить общую ёмкость, откалибровать батарею и сохранить дамп на всякий случай до и после восстановления батареи.

Сделать дамп смогу через адаптер CP2112 и be2works.
Возможно ли выполнить все остальные действия Ардуинкой? Чесслово, знаю, что всё можно сделать и be2works, но тут уже чисто спортивный интерес - хочу именно Ардуинкой! ))
Какая последовательность действий должна быть после указания оригинальных unseal ключей в скрипте?
На всякий случай вот уже unsealed battery info with full access mode:

Pack Info...
DesignCapacity: 2730 mAh
FullChargeCapacity: 1237 mAh
CycleCount: 19
Date: 2009.5.23
DesignVoltage: 10960 mV
ManufName: AS085Q833B
DeviceName: 1008-29
SerialNumber: 0080 Hex
ChargingCurrent: 0 mA
ChargingVoltage: 0 mV
DeviceChemistry: OTS0
Temperature: 25.90 C
Voltage: 7014 mV
Current: 0 mA
RelativeSOC: 0 %
AbsoluteSOC: 0 %
RemainingCapacity: 0 mAh
VCELL4: 0 mV
VCELL3: 1326 mV
VCELL2: 2908 mV
VCELL1: 2780 mV
SpecificationInfo: 0031 Hex
Battery Status: 4AD0 Hex
TCA|TDA|RCA|INIT|DSG|FD|
Operation Status: 0473 Hex
LDMD|DSG|XDSG|XDSGI|VOK|QEN|
Unsealed
Pack in Full Access mode
UnSealKeys: 0x2006, 0x0607 Hex
FullAccessKeys: 0xFFFF, 0xFFFF Hex
PFKeys: 0x2673, 0x1712 Hex
MaxError: 1 %
SafetyStatus: 00A0 Hex
CUV|PF|
PFStatus: 6040 Hex
DFETF|
Charging Status: 2000 Hex
PCHG|
FETControl: OK
Update Status: 6
Qmax Cell0: 3071
Qmax Cell1: 3075
Qmax Cell2: 3060
Qmax Cell3: 2730
Qmax Pack : 3060
Cell0 R_a flag: 0055
Cell1 R_a flag: 0000
Cell2 R_a flag: 0000
Cell3 R_a flag: FF55
Device Type: 0450 Hex
Firmware Version: 0104 Hex
Hardware Version: 00A6 Hex
Manufacturer Status: B90A Hex
FET1|PF1|PF0|STATE3|STATE0|
Chemistry ID: 0217 Hex
BatteryMode: 6001 Hex
ChgM|AM|ICC|

Видимо, слишком много написал, никто читать не хочет ))
Вот короче:
Правильно ли в моём случае после получения оригинальных паролей из контроллера и замены их в скрипте выполнить следующие действия: 5 (сброс ошибок) → 8 (обновление ёмкости, статусов и т.д.)? Надо ли ещё что делать?
Например, для чего нужен “Impedance Track algorithm”?
А калибровку производить когда? и нужна ли для этого Ардуино?