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
 
Kannst ja gerne mal den entsprechenden Assembler Auszug posten den du verändert hast um vmax zu erhöhen.
 
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: (https://robocoffee.de/wp-content/uploads/2023/03/explainer_escooter3-1.png)

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.
 
Beim Versionsstring 2.5.0_0007.0015 ist 0015 die ESC version. Die Konstante ist im Code und wird auf Anfrage ans Dashboard gesendet. Vielleicht ist ja 0007 dann die Version vom BMS.
 
  • Hilfreich!
Reaktionen: VooDooShamane
Habe meinen Xiaomi 4 Ultra (D) heute per GEL-Spedition geliefert bekommen. Hatte den auf der Xiaomi-Homepage bestellt, eine elektrische Luftpumpe und eine Smartwatch gab es als "Extra". Ein Firmware-Update gibt es noch keins. Auf der Homepage nicht beschrieben ist, das der E-Scooter Blinker hat. Im Gegensatz zum Ninebot G2D MAX hat der Xiaomi leider kein Bremslicht und fährt auch nur 20km/h statt der Ninebot-standardmäßigen 22km/h. Bei mir habe ich an der Fronschwinge auf der rechten Seite bereits Flugrost, die Lackierung scheint weniger gut wie beim Ninebot zu sein. Dafür scheppert das Fahrwerk anscheinend weniger bei Unebenheiten / harten Schlaglöchern.
 
Seltsam, dass die Russen eine neuere Firmware haben und wir aber hier kein Update angezeigt bekommen. Ich wäre an der esc Version 16 interessiert falls die jemand in die Finger bekommt. Ansonsten bin ich aus Zeitmangel noch nicht viel weiter gekommen. Ist aber im Grunde nur Fleißarbeit.
 
Habe meinen Xiaomi 4 Ultra (D) heute per GEL-Spedition geliefert bekommen. Hatte den auf der Xiaomi-Homepage bestellt, eine elektrische Luftpumpe und eine Smartwatch gab es als "Extra". Ein Firmware-Update gibt es noch keins. Auf der Homepage nicht beschrieben ist, das der E-Scooter Blinker hat. Im Gegensatz zum Ninebot G2D MAX hat der Xiaomi leider kein Bremslicht und fährt auch nur 20km/h statt der Ninebot-standardmäßigen 22km/h. Bei mir habe ich an der Fronschwinge auf der rechten Seite bereits Flugrost, die Lackierung scheint weniger gut wie beim Ninebot zu sein. Dafür scheppert das Fahrwerk anscheinend weniger bei Unebenheiten / harten Schlaglöchern.
Also ein Mod auf 22 km/h oder einen anderen Wert <= 25 mh/h könnte ich dir bereits anbieten. Musst halt nur nen Debugadapter am Start haben, um das dann drauf zu laden.
 
  • Hilfreich!
Reaktionen: Olli_69
Was genau braucht man dafür ? Wärst du bereit nen kleinen Guide zu verfassen? :)
Klar, könnte ich machen würde aber (noch) nicht viel helfen denke ich. Hier die Gründe:
Da die Seriennummer des Controllerboards sowie die Seriennummer des Scooters selbst im Flash gespeichert sind, kann man nicht einfach so ein modifiziertes Image irgendwo hoch laden (was vermutlich eh ein Urheberrechtsverstoß wäre) sondern jeder muss sein eigenes auslesen, ein Backup irgendwo hin legen, modifizieren und dann wieder rein laden.
Da braucht es dann ein handliches Tool / Skript, was das ein einem Rutsch erledigt. Am besten so, dass man verschiedene Wunschmodifikationen angeben kann.
Ich bin dabei, ein solchen Tool zu bauen (in python), das dann auch direkt den Controller ausliest und die entsprechenden Stellen modifiziert, jedoch dauert das noch etwas aufgrund begrenzter Freizeit.

Mein Skript soll am Ende folgendes können:
  • direkte Kommunikation per J-Link oder ST-Link mit dem Controller
  • Backup / Restore der Originalfirmware
  • Validieren der Firmwareversion, so dass verschiedene Versionen supportet werden können
  • Festlegen Max Geschwindigkeiten für jeden Modus nach Benutzerangabe
  • Festlegen Mindestgeschwindigkeit
  • Freischaltfunktion bis Neustart mit benutzerdefinierter Abfolge (sowas wie: gas, gas, bremse, gas, bremse, bremse) <-- das ist challenging
  • später evtl. support anderer Brightway-Modelle
 
Beim Versionsstring 2.5.0_0007.0015 ist 0015 die ESC version. Die Konstante ist im Code und wird auf Anfrage ans Dashboard gesendet. Vielleicht ist ja 0007 dann die Version vom BMS.
Ergänzung: 0007 ist NICHT die Version vom BMS. Diese wird in der App separat angezeigt.
Post automatically merged:

Hat wenig bis gar nichts mit Elektronik zu tun, sondern mit programmieren.
Wenn ich die Stellen zum Patchen angebe hat das auch nichts mit Programmieren zu tun.
 
Hallo,

großartig dein Hack! Mach weiter so! (die Frage nach dem Sicherheitschip habe ich mir dann auch gestellt :D)

Kurz zum Ultra:
Mein Ultra wurde vom Xiaomi-Server auch noch auf keine andere Firmware gehievt - der ist einfach so (lasch :()

Warum lasch nach meinem Empfinden?: Die Power kommt gleichmäßig bis 20 km/h (im "Sport+" Programm) - richtig "losballern" wie ein P65D :love: oder G2 Max tut er (bei mir noch) nicht (aber da gehen die Meinungen von ein paar Fahren jetzt schon auseinander (y)(n)).

Durch das Gelände kommt er mit der Federung (Luftdruck auf 55PSI) hingegen viel viel besser (IMHO) als der G2 Max (nur Hydraulik vorne, kleinen Huckel narda)!

Steigerungen meistert er sehr gut (dank der 54V?!) aber dank fehlender langen Bergstrecken hier bei mir kann ich dazu auch nicht mehr sagen. Nur so viel, dass er dem Soflow Pro 4 Gen2 diesbezüglich ernsthaft nahekommt (imho).

Positiv ist die Laufruhe! Angenehm, total leise kaum/null surren vom Motor, kein Knarzen.

Zum Design und Lackierung, sage es mal so: auf den Pressefotos: Igitt wie hässlich! Was soll das? In natura: Wow :love: so stell ich mir ein durchdesignten eScooter dann doch vor. Ich muss zugeben schöner wie der G2 Max und dann mit besserer Federung und 54V.

Ärgernis:
24/25 Kilo :rolleyes: nagut.
Klingel? Geht ja mal garnicht. Dann doch lieber Hupe mit Alarmanlage wie im P65/G2Max...und findit ist auch nicht drin...

Grüße :)
 
Mein 4U ist nun auch seit einer Woche bei mir.
Bin begeistert vom Fahrverhalten und vom Design, wobei ich nur den Vergleich zu Mietscootern und den Pro2 habe, der sich hier ebenfalls im Haushalt befindet.
Noch begeisterter bin ich von dem, was hier in diesem Forum dazu abgeht, da die 19,8 Km/h (auf dem Display werden 20 angezeigt) einfach nur unbefriedigend sind.
Ich verstehe nicht, weshalb XIAOMI die Toleranzgrenze bei der gesetzlich vorgeschriebenen Geschwindigkeit für D nicht strapaziert!
Hier hoffe ich auf ein baldiges Firmwareupdate oder eine Möglichkeit, den irgendwie anders auf 22 Km/h zu bringen.
Mein KnowHow und meine Möglichkeiten erstrecken sich leider nicht auf die von so manchen hier.

Ansonsten:
- Der Seitenständer ist ja mal ein Witz. Den werde ich vom Metallbauer kürzen lassen müssen.
- Gepäckhaken habe ich bereits als 3D-Druck in Auftrag gegeben.
 
  • Hilfreich!
Reaktionen: sebastian111