Danke dir! Ja das habe ich leider übersehen!
Die Einstellung "Cell Number Setting" funktioniert nur bedingt: Dannach wird zwar die Gesamtspannung wieder richtig angezeigt, aber die Zell-Spannungen 14-16 werden dennoch nicht angezeigt. Ebenso wird nach einem Neustart wieder die falsche Spannung angezeigt...
Firmwares mit "P1247" gibt es auch in der Archiv von @Pedaaa, aber die werden ebenso nicht akzeptiert.
Also: Falls Jemmand weitere Informationen bzw. Firmwares hat/kennt bitte mit-sharen. danke!
Da der Supplier aus China mir nicht helfen will (obwohl er das könnte, da bin ich mir sicher), hat mich das ambitioniert ein Reverse Engineering über diese 2 Firmwares anzupacken...:
- P1247V110-12290-2.50.bin ( die Firmware die bei mir funktioniert hat)
- P1247V100-14220-2.14.bin ( eine FW von BSLBATT aus der Archiv von Pedaaa, die auch das Prefix P1247 hat).
- Herauszufinden, wieso bei mir nur die BIN P1247V110-12290-2.50.bin akzeptiert wird. Also was ist da anders wie bei den anderen?
- Was ist in P1247V110-12290 anders, sodass nur 13 Zellen ausgelesen werden?
- Auf der Platine habe ich die Beschriftung SST21-247-REV1.0 stehen (Daher der Grund warum nur eine Firmware mit dem Prefix "P1247" funktioniert hat, denke ich)
- Die PACE BMS verwendet als Microcontroller den STM32F446VET6 (ARM Cortex-M4, V7, little endian), 100 Pin
- Ich habe Mithilfe von Ghidra versucht die flat Binaries zu decompilieren.
- Bin teils erfolgreich geworden. Nach dem Mapping und der auto-Analyse in Ghidra, bin ich gerade dabei die relevanten Funktionen zu identifizieren.
- Aus einem mir nicht bekannten Grund, liegen die Addressen für eingie in Ghidra vordefinierten Funtionen wie Reset, außerhalb des in Binary vorhandenen Addressbereich. Vermutlich würde hier ein kompleter MCU Dump mehr helfen.
- Bis jetzt habe ich die MAIN-, Init/Setup- und einige String Manipulations-Funktionen festgelegt.
- Die Periphärie konnte ich mittels den Ghidra SVD-Loader gut identifizieren. Ich kann also in Code leichter finden, wo mit den CAN/UARTs und GPIOs interagiert wird, da die Periphärie-Addressen bekannt sind.
- Ich habe ein paar for loops entdeckt, die anscheinend für alle 16 Zellen etwas machen, aber das scheint nicht auf 13 limitiert zu sein. Es gibt irgendwo eine Variable/Loop wo nur die 13 Zellen ausgewertet werden. Den sweet spot habe ich also noch nicht aufgedeckt...
- Ebenso konnte ich paar Variablen identifizieren, aber da tue mir noch schwer mit den Datentypen und Pointer; scheint noch ein langer weg zu sein. Hat schon wer sowas gemacht und kennt Tips & Tricks um die Variablen und ihre Datentypen schneller/automatisiert zu identifizieren, ohne langwierige Code Analyze?
- Ein Differential zwischen den zwei Binaries hilft nicht ganz, da die FW 2.5 größer ist und mehrere Funktionen hat, wie die Version 2.14 (somit sind die Adressen der Funktionen unterschiedlich). Also es scheint, dass die Version 2.5 weitere Features hat, die haupt Struktur (wie zb MAIN Loop) ist jedoch gleich.
- Auf der PCB gibt es ein nicht belegtes Port zum MCU. Ich vermute, ich könnte darüber einen Dump von MCU machen und die MCU direkt flaschen. Ich muss vorerst die PIN Belegung festlegen. Hoffentlich hilft da das Datenblatt von STM32F446 oder die community weiter.