Xiaomi 4 Ultra

So, erstes Update: Habe den Roller am Freitag bekommen und heute endlich Zeit gehabt, ihn auszupacken, aeh auf zu machen:
1.webp2.webp3.webp4.webp5.webp6.webp7.webp8.webp9.webp

Also im Grunde recht einfach:
  • Boden vom Scooter abschrauben
  • Alle Stecker ab machen
  • Akkustecker mit Klebeband sichern
  • Controller abschrauben
  • Plastikdeckel auf machen
  • Kondensator aus dem Weg biegen
  • SWD Interface mit Zahnstocher frei legen
  • Stiftleiste auflöten
  • Seriennummernaufkleber versetzen
  • Schlitz in Deckel fräsen
  • Alles wieder zusammen bauen
Nun kann man einen SWD Adapter anschließen und das Flash auslesen. Es handelt sich um einen ARM cortex M0 chip.
Mit einem Disassembler die Firmware reversen, dann patchen und wieder rein laden.
Mein erster Versuch hat nur VMAX frei gegeben und auf Anhieb funktioniert. Jetzt muss ich noch warten, dass der Akku geladen ist, um volle Spannung und somit vollen Speed zu testen. Vom Anzug her schon ein cooles Teil. Mein Xiaomi Pro 2 ist da in einer anderen Liga.

Falls noch jemand Lust hat, sich auf diesen Weg zu begeben und an der Firmware zu reversen, freue ich mich auf regen Austausch.

VG
 
Ja ich hatte auch ein Controller und Dashboard des neuen Mi3 lite zur Reparatur da welcher den gleichen Mikrocontroller auf dem Steuergerät hat.
Dort habe ich auch ein Dump des Controller und Dashboard Firmware gemacht.
Aber konnte nichts großartig testen weil ich eben nur die Teile, aber nicht den kompletten Scooter da hatte.
Also kann man sagen wenn 185 für 20Kmh steht, man das einfach auf 203 oder 204 setzen könnte, um die in DE erlauben 22kmh zu ermöglichen.
Sind ja schonmal gute Nachrichten.

Aber das:
movs r3,#14 in RAM nach 20000436
Und
movs r3,#f in RAM nach 20000437
Ist auch sehr interessant. 🤔

Aus welcher DRV Version stammt der Auszug?
 
Zuletzt bearbeitet:
Der Wert ist km/h * 30.
Wird als immediate 0xb9 geladen und dann um zwei bits nach links geshifted (vermutlich compiler optimierung). 0x2e4 == 740. 740 / 30 == 24,666 km/h.
1000 wird später an anderer Stelle nochmal als Limit erzwungen, daher habe ich das dann mal hier gesetzt, also 1000 in hex is 0x3e8, um zwei nach rechts geshiftet dann halt 0xfa.

Ich kann heute Abend noch etwas mehr dazu schreiben. Es funktioniert allerdings nur so halb. Da müssen noch mehr Stellen im Code sein, wo das limit von 25 km/h enforced wird. Ist nicht so trivial wie bei der Firmware vom Pro 2.
Ich würde ja mit den russischen Kollegen mal in Kontakt treten, alleredings scheitere ich am Captcha für die Registrierung mangels Russisch-Skills...

Was mich noch stört ist das flash-tool vom Chiphersteller. Das ist wirklich reudig und es nervt mich, dafür eine Windows-VM hoch zu fahren. Ich werde wohl erst mal ein Python-Skript schreiben, was den J-Link benutzt und ordentlich funktioniert.

Die Version habe ich im image noch nicht gefunden (aber auch noch nicht wirklich gesucht). Laut App ist es die "2.5.0_0007.0015".
 
Da musst du doch nicht mit dem Russen in Kontakt treten.
Hast doch alles vor dir.
Einfach mal die Referenzen von max_speed_s (welche RAM Adresse das ist sehe ich nicht) prüfen.

Was mich noch stört ist das flash-tool vom Chiphersteller.
Das Tool von Linkosemi musst du nicht nutzen.
Habe ich auch nicht.
Brauchst nichtmal den j-link.
Geht auch mit openocd und stink normalem st-link.

Laut App ist es die "2.5.0_0007.0015".
Da die Xiaomi App die DRV Version immer zuerst zeigt, Gehe ich davon aus das es die 2.5.0 sein wird.
Kannst dir die ESC Version aber in der Xiaomi App auch einzeln anzeigen lassen.
Unter "Basis-Info" sollte sowohl die Seriennummer als auch momentane Controller Version angezeigt werden.
 
Zuletzt bearbeitet:
Da die Xiaomi App die DRV Version immer zuerst zeigt, Gehe ich davon aus das es die 2.5.0 sein wird.
Kannst dir die ESC Version aber in der Xiaomi App auch einzeln anzeigen lassen.
Unter "Basis-Info" sollte sowohl die Seriennummer als auch momentane Controller Version angezeigt werden.
In der App gibt es nur "Roller-Info", da steht die Seriennummer, Temperatur und die besagte Firmware-Version.

Ist der Aufbau bei den Brightway-Modellen nicht anders? Ich verstehe das so, dass da das Bluetooth-Modul im Display ist und dann nur noch ein Controller, der auch gleichzeitig als ESC dient. So wie hier: ( )

explainer_escooter3-1.png

Post automatically merged:

Das Tool von Linkosemi musst du nicht nutzen.
Habe ich auch nicht.
Brauchst nichtmal den j-link.
Geht auch mit openocd und stink normalem st-link.
Ich hatte das in Erwägung gezogen aber mir noch nicht die Mühe gemacht, zu prüfen ob das Flash-IP von Linkosemi mit irgendwas kompatibel ist, was in OpenOCD schon implementiert ist. Ist dir da was bekannt? Dann muss ich nicht suchen / probieren ;)
Post automatically merged:

Hat schon mal jemand das Protokoll zwischen dem Dashboard und dem Controller reversed und dokumentiert? Da gibts nen Haufen Befehle.
 
Das Bild ist etwas irreführend.
Auch die neuen Scooter von Xiaomi (4 ultra, mi3 lite) bestehen aus 3 verschiedenen firmwares.
BMS - Battery Management System
ESC - Electronic speed Controller
BLE - Bluetooth low energy

Wobei das Dashboard (BLE) oben im Lenker und ESC/BMS unten im Trittbrett sitzen.
 
Ab 0xfc00 im Flash steht die Seriennummer des ESC und des Scooters, ab 0xfa00 sieht für mich so aus, als würden da Daten persistiert werden. Gibt Kommandos, die da rein schreiben. Weisst du, ob die Firmwareversion irgendwo steht?
Die ersten 0xffff sind scheinbar der Bootloader.
 
Bin momentan nicht zu Hause aber ich meine ich habe den persistent Speicher schon gesehen in meinem Dump.
Dort müsste auch die Version stehen.
Einfacher ist es aber wenn du via Xiaomi App schaust.
Kannst dir die ESC Version aber in der Xiaomi App auch einzeln anzeigen lassen.
Unter "Basis-Info" sollte sowohl die Seriennummer als auch momentane Controller Version angezeigt werden.