RP ✔️ XiaoDeaDia - Unbrick (1s & pro2) ⛑️ ( Wiederherstellung ESC mit ST Link/V2 - Linux )

Status
Für weitere Antworten geschlossen.
26 Dezember 2021
357
449
E-Scooter
Xiaomi 1s / Pro 2
!! ACHTUNG !!

AUS GEGEBENEN ANLASS DIESE VERSION BITTE NICHT AUSFÜHREN!


Hallo zusammen,

ich möchte euch heute mein kleines Projekt „XiaoDeaDia - unbrick & recover“ vorstellen.
Warum ich das Projekt XiaoDeaDia genannt habe ist schnell erklärt; „Xiao“ dürfte jedem ein Begriff sein und „Dea Dia“ steht für Wachstum, benannt nach einer römischen Göttin.

Was kann XiaoDeaDia - unbrick & recover; mit dieser Anleitung könnt ihr von einem funktionierenden ESC (1s und pro2) eine recover_ESC.bin oder eine recover_DRV.bin erstellen und natürlich auch wieder auf das ESC flashen.

WICHTIG;
Die recover_ESC/DRV ist nur zum persönlichen Gebrauch. Jede Firmware ist Eigentum der Herstellers.
Bitte auch das lesen; Nutzungsbedingungen, 8. Haftungsausschluss - Benutzeranleitungen / Guides / Tutorials & sonstige Rollerplausch Dienste

Die recover_ESC.bin enthält den gesamten Spreicher des ESC während die recover_DRV.bin nur die tatsächliche DRV Version darstellt. Solltet ihr mal irrtümlich eine falsche DRV auf das ESC geflasht haben, empfehle ich zum unbrick die recover_ESC.bin zu flashen.

Was ihr braucht ist einen ST-Link (Amazon/ST-Link) und einen PC oder Laptop.

Zum Betriebssystem; die aktuelle Anleitung ist für Linux, von mir an meinem pro2 getestet. Da überwiegend Windows verwendet wird, bekommt ihr noch hierfür nachträglich einen Anleitung.

Selbstverständlich darf jeder von euch mich unterstützen, es ist ein Projekt und für jeden/jede offen.

Für Linux müsste ihr nur OpenOCD installieren;
~$ sudo apt install openocd -y

Einen Treiber für den ST-Link wird in der Regel nicht benötigt, da die meisten Disto‘s diesen erkennen. Nachdem ihr den ST-Link angeschlossen habt, könnt ihr mit ‚~$ lsusb‘ die Port‘s abfragen. Für diesen Vorgang muss der ST-Link noch nicht an das ESC angelötet sein.

wiring_pro2.png

IMG_20220315_144654.jpg

Es gibt noch andere Beiträge bezüglich verlöten und unbrick aber halt ohne recover (hier).

Wenn alles soweit läuft, müsst ihr den ST-Link mit dem ESC verlöten. Sicherlich gibt es auch die Möglichkeit mit Klebeband die Kabel zu befestigen aber davon rate ich ab (aber möglich).

Dann öffnet ihr zwei Terminal und platziert diese nebeneinander, so das sie sich nicht gegenseitig verdecken und los geht es;


Um eine recover_ESC.bin oder recover_DRV.bin zu erstellen, geht ihr wie folgt vor;

# Terminal 1 ~/
~$ sudo openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

# Terminal 2 ~/
# Terminal im ~/ öffen, da dort dann auch die recover_ESC.bin oder recover_DRV.bin gespeichert wird

# Terminal 2 ~/ telnet starten, damit kommt ihr dann auf die Befehlszeile für den stm32f1x (>>)
~$ telnet localhost 4444

# stm32f1x anhalten
>> reset halt

# stm32f1x schreibschutz deaktivieren
>> stm32f1x unlock 0

# Wenn ihr wollt, könnt ihr jetzt eine Speicherabfrage durchführen, raus kommt Offset und Größe oder ihr überspringt diesen Schritt
>> flash banks

# als erstes die recover_ESC.bin erstellen
>> dump_image recover_ESC.bin.bin 0x08000000 0x00020000

# als zweites die recover_DRV.bin erstellen, kann natürlich auch eine VLT sein
>> dump_image recover_DRV.bin 0x08001000 0x00006FFF

# beenden
>> reset

FERTIG!

Um die recover_ESC oder recover_DRV zu flashen, geht ihr wie folgt vor;

# Terminal 1 ~/
~$ sudo openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

# Terminal 2 ~/
# Terminal im ~/ öffen, da dort dann auch die recover_ESC.bin oder recover_DRV.bin gespeichert wird


# Terminal 2 ~/ telnet starten, damit kommt ihr dann auf die Befehlszeile für den stm32f1x (>>)
~$ telnet localhost 4444

# stm32f1x anhalten
>> reset halt

# stm32f1x schreibschutz deaktivieren
>> stm32f1x unlock 0

# recover_ESC.bin schreiben
>> flash write_image erase unlock recover_ESC.bin 0x08000000 bin

ODER

# recover_DRV.bin schreiben (ihr könnt hier auch eine ander DRV/VLT flashen, diese muss aber im ~/ liegen)
>> flash write_image erase unlock recover_DRV.bin 0x08001000 bin

# beenden
reset

FERTIG!

Bitte immer als erstes eine recover_ESC/DRV erstellen und diese bitte mit einem HexEditor, unter Linux verwende ich gerne Ghex (~$ sudo apt install ghex -y), unbedingt PRÜFEN.

Ein herzlichen Dankeschön geht an nandtek nandtek, Mentor und Unterstützer wie auch an VooDooShamane VooDooShamane.

Gruß, Daniel
 
Zuletzt bearbeitet:
Absolut genialer Guide Daniel_Gee Daniel_Gee!! Danke dir vielmals für deine Mühe!

Meines Wissens gibt es in diesem Forum bisher keinen Guide für die Sicherung der eigenen DRV! Dabei sollte es in meinen Augen zum Handwerkzeug eines jeden Tuners gehören, ein eigenes Backup von seinem Controller / DRV erstellen zu können, um dieses dann im Notfall wieder einspielen zu können. Damit muss man dann auch nicht mehr auf zweilichtige Tools zurückgreifen, um den Originalzustand wiederherzustellen. Und wenn ich es richtig verstanden habe, ist es auch viel unkomplizierter (kein Fehler, kein gepiepe, keine Aktivierung notwendig).
 
Zuletzt bearbeitet:
Update;

Zum Theam "Größe der DRV" möchte ich noch etwas hinzufügen. Ich hatte das auf dem Radar aber zwecks der Einfachheit nicht erwähnt.
Ich habe die Größe der recover_DRV.bin etwas großzügig angegeben und das hatte einen Grund;

# als zweites die recover_DRV.bin erstellen, kann natürlich auch eine VLT sein
>> dump_image recover_DRV.bin 0x08001000 0x00006FFF


Ich habe die DRV 223/236/247, was die Größe angeht, verglichen und festgestellt, dass es Unterschiede gibt.
Um mein Projet so einfach wie möglich zu halten, habe ich als Referenz die DRV247 genommen und habe noch ein paar Byte's drauf gepackt;

0x00006FFF

Wenn ihr die DRV als recover_DRV.bin abgespeichert habt, dann prüft bitte diese mit dem HexEditor. Am Ende der Datei dürften dann ein paar 'FF' kommen, welche ihr dann natürlich löschen könnt.

VooDooShamane VooDooShamane hat mir hierfür folgendes mit auf den Weg gegeben;

DRV236
28660 Bytes = 6FF4 Hexadezimal
Befehl zum dumpen : dump_image recover_DRV.bin 0x08001000 0x00006FF4

DRV247
28276 Bytes = 6E74 Hexadezimal
Befehl zum dumpen : dump_image recover_DRV.bin 0x08001000 0x00006E74

Grund für eine genaue Größe ist die md5 Summe, welcher der VLT_Zipper von VooDooShamane VooDooShamane prüft und auch wichtig ist. Viele Wege führen nach Rom. Ich verwende von nandtek nandtek das Script zip.py um mir meine .bin zu zippen und daher hatte ich das mit der md5 Summe nicht auf dem Schirm, sorry.

Das Projet ist Open Source und absolut individuell; weshalb ja auch „Dea Dia“, Wachstum!
 
Zuletzt bearbeitet:
Update;

Zum Theam "Größe der DRV" möchte ich noch etwas hinzufügen. Ich hatte das auf dem Radar aber zwecks der Einfachheit nicht erwähnt.
Ich habe die Größe der recover_DRV.bin etwas großzügig angegeben und das hatte einen Grund;

# als zweites die recover_DRV.bin erstellen, kann natürlich auch eine VLT sein
>> dump_image recover_DRV.bin 0x08001000 0x00006FFF


Ich habe die DRV 223/236/247, was die Größe angeht, verglichen und festgestellt, dass es Unterschiede gibt.
Um mein Projet so einfach wie möglich zu halten, habe ich als Referenz die DRV247 genommen und habe noch ein paar Byte's drauf gepackt;

0x00006FFF

Wenn ihr die DRV als recover_DRV.bin abgespeichert habt, dann prüft bitte diese mit dem HexEditor. Am Ende der Datei dürften dann ein paar 'FF' kommen, welche ihr dann natürlich löschen könnt.

VooDooShamane VooDooShamane hat mir hierfür folgendes mit auf den Weg gegeben;

DRV236
28660 Bytes = 6FF4 Hexadezimal
Befehl zum dumpen : dump_image recover_DRV.bin 0x08001000 0x00006FF4

DRV247
28276 Bytes = 6E74 Hexadezimal
Befehl zum dumpen : dump_image recover_DRV.bin 0x08001000 0x00006E74

Grund für eine genaue Größe ist die md5 Summe, welcher der VLT_Zipper von VooDooShamane VooDooShamane prüft und auch wichtig ist. Viele Wege führen nach Rom. Ich verwende von nandtek nandtek das Script zip.py um mir meine .bin zu zippen und daher hatte ich das mit der md5 Summe nicht auf dem Schirm, sorry.

Das Projet ist Open Source und absolut individuell; weshalb ja auch „Dea Dia“, Wachstum!
Was ich ganz vergessen habe, sorry, mein Projekt funktioniert natürlich auch mit dem 1s auch wenn ich die dafür notwendigen DRV's nicht erwähnt habe.
Es funktioniert mit alles Controller welche den STM32 Chip verwenden, nur muss hier natürlich die Adressen noch zusätzlich angepasst und geprüft werden. ✌️👍
Post automatically merged:

Genau deshalb hätte ich das nie so genannt weil ein Großteil da auch eher negativ drüber denkt ansonsten natürlich top das du dir die Mühe machst sehr gut geworden 👍
Danke für deinen Hinweis;

Es geht hier primär um den Inhalt und nicht um die von mir gewählte Namensgebung, dass zum ersten.
Zum zweiten darf dies jeder in seiner persönlichen Wahrnehmung so verstehen wie er es nun möchte.

Danke auch für deinen Zuspruch für meine Arbeit. 👍
 
  • Hilfreich!
Reaktionen: mhdot
Hallo zusammen,

hat es schon jemand von euch auf die von mir vorgeschlagenen Weise durchgeführt?
 
Status
Für weitere Antworten geschlossen.