IOHawk Legend Lite Serielles Protokoll

19 September 2020
280
418
E-Scooter
Legend "Lite"
Reverse-Engineering-Ergebnisse an meinem Legend Lite.

Das Protokoll funktioniert wie github.com/teixeluis/escooter-lcd-esc-decode aber mit folgenden Unterschieden in der Nachricht:

Code:
LCD -> ESC
==========

serial protocol
   1200 baud, 5V level (idle high), 1 stopbit, 1 startbit (the usual "Arduino" style)

1/400ms frame frequency
LCD frames always 15bytes long

Offsets in frame and meaning:

00
   always 0x01 (frame begin marker 1/2)
01
   always 0x03 (frame begin marker 2/2)
   the inter frame gap of over 200ms can be used to sync as well

02
   packet counter/sequence number (used for cipher as key index)
   +1 with every new frame, rolls over after 255

03
   always 00 ?
04
   always 0x0F = 15 ?

05
   encrypted gear, 1 or 2 or 3 after decryption
   TODO are higher gears supported? If yes => traceless gm

06
   0x12 == 0b00010010 right now (only kick2start active)

   0b----x--- enable strong acceleration
   0b-----x-- enable cruise control
   0b------x- require kick to start

07
   always 00 ?

08
   P9 setting, speed limit percentage (100 == full speed, 5 is minimum but motor doesnt turn at all then)

09
   0b10000000 high beams off
   0b10001000 high beams on

   0b----x--- high beams

10
   idle:
      0x2A = 42
      0x2B = 43
      0x2C = 44
      observed values seem randomly distributed
      throttle pos? current?
   full throttle:
      0xAA = 170
      0xB2 = 178
      0xB3 = 179
   half throttle:
      0x62 = 98
      0x63 = 99
      0x4D = 77
   throttle+brake:
      turns the motor off ;-)
   constant:
      43  * x = 0.91V_thr  =>  x=0.021
      178 * x = 3.55V_thr  =>  x=0.020
   conclusion:
      throttle pos sent again digitally

11
   0b00000001 regen brake enabled
   0b00001001 regen brake disabled

   0b----x--- regen brake enable

12
   always 0x58 ?

13
   always 0x0A ?

14
   XOR checksum

Ein bisschen echte Kommunikation:

Code:
#194
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c2 00 0f 50 06 00 32 80 b3 00 58 0a ca
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:179


#195
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c3 00 0f 75 06 00 32 80 b2 00 58 0a ef
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:178


#196
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c4 00 0f 7e 06 00 32 80 b2 00 58 0a e3
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:178


#197
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c5 00 0f 73 06 00 32 80 73 00 58 0a 2e
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:115


#198
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c6 00 0f 74 06 00 32 80 2a 00 58 0a 73
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:42


#199
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c7 00 0f 79 06 00 32 80 2b 00 58 0a 7e
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:43


#200
             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14
Raw frame:  01 03 c8 00 0f 72 06 00 32 80 2b 00 58 0a 7a
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:43

Kennt jemand ein kompatibles LCD mit mehr offenen Einstellungsmöglichkeiten? Dann könnte man mehr Bedeutungen herausfinden.
 
Mit welchem Controller testet du das eigentlich ? Mit dem IO Hawk oder dem von Kaabo?
 
Mit dem originalen von IOHawk. Ich glaube dass alle Anpassungen an DE im Controller stattfinden und nicht im Display. Der Tempomat kann nämlich eingestellt werden, hat dann aber keinen Effekt. Genau 8 Parameter habe ich herausgefunden.
 
So langsam wünscht man sich ein universelles offenes Display mit extra Daumengas und E-Bremshebelanschluß, Bremsenkontakten. Und dazu einen ebenso universellen offenen Controller der außer sämtlichen Fahreinstellungen auch solche profanen Sachen wie Licht an/aus, 500w+ bei 36v und ordentlich Peak sowie frei einstellbare Abschaltspannung ermöglicht.
Und ne Wegfahrsperre bzw Startsperre per Schlüssel, Funk, NFC oder Code
Sowie von wirklich direktproportionaler Beschleunigungs und Geschwindigkeitsregelung über das Daumengas und (fast) deren gesamten Betätigungsweg. seufts
 
So langsam wünscht man sich ein universelles offenes Display mit extra Daumengas und E-Bremshebelanschluß, Bremsenkontakten. Und dazu einen ebenso universellen offenen Controller der außer sämtlichen Fahreinstellungen auch solche profanen Sachen wie Licht an/aus, 500w+ bei 36v und ordentlich Peak sowie frei einstellbare Abschaltspannung ermöglicht.
Und ne Wegfahrsperre bzw Startsperre per Schlüssel, Funk, NFC oder Code
Sowie von wirklich direktproportionaler Beschleunigungs und Geschwindigkeitsregelung über das Daumengas und (fast) deren gesamten Betätigungsweg. seufts
Gibts doch 😉
 
Mit dem originalen von IOHawk. Ich glaube dass alle Anpassungen an DE im Controller stattfinden und nicht im Display.
Da hast du Recht. Mit dem Kaabo Controller funktioniert z.b der Tempomat. Macht im Lite aber keinen Sinn, da für die Bremsen (+) gesplittet wurde (wegen dem Bremslicht) und beim Legend (-) und der Controller auch (-) erwartet.
Das bedeutet: wenn du bremst, nimmt der Motor trotzdem Gas an - genauso lässt sich der Tempomat NICHT per Bremse deaktivieren, sondern nur durch erneutes Gas geben (offtopic)
 
Zuletzt bearbeitet:
  • Hilfreich!
Reaktionen: Dr.One
Wo bekommt man gute Tut's, oder nach was muss man googlen, um sich auch so n Chip basteln zu können, wie du Rollermops Rollermops

In erster Linie geht es mir darum, Daten von einem anderen Controller verständlich für das LT-01 Display zu machen
 
Ein gutes Buch zum Arduino oder der ganzen Maker-Thematik, insbesondere eines, dass den ursprünglichem Arduino Uno mit herausnehmbarem ATmega328 behandelt, wäre sicher ein guter Start. Da habe ich kein Tutorial zu Hand. Elektronik-Grundlagen gibt's in den Folgen von Collin's Lab (en) auf Youtube um 2010 rum.

Der Controller sendet im Ggs. zum LCD sehr viel verschlüsseltes, da müsstest du in die absoluten Grundlagen der Kryptographie reinschauen, Stichwort Vigenère-Verschlüsselung. Die Richtung Controller->LCD hab ich mir nicht angeschaut, weil ich sie nicht gebraucht habe. Dann noch C-Programmierung lernen...
Es ist machbar. Evtl. beschäftige ich mich wieder mit, wenn/falls ich mir einen Single-LCD/Dual-Motor-Mod mache.

Das da oben im OP habe ich aus dem genannten Projekt und gefälschten Seriell/USB-Wandlern hingebastelt.
Hier die Wandler: https://s.click.aliexpress.com/e/_DltEker

Ein Oszi hilft sehr um das Signal vorab zu sehen, ist aber nicht zwingend nötig.

An die Signale physisch bin ich gekommen, indem ich ein solches Verlängerungskabel
durchschnitten habe mit gebastelten Abgriffen dazwischen für jede Ader. Das Schnüffelstück dann zwischen LCD und ESC angeschlossen und beide Seriell-Leitungen je mit einem Seriell/USB-Wandler abgehört.
(Der Legend hat keine Julet-Kabel, denn diese passen zwar, aber viel zu eng.)

Die Software HTerm ist wunderbar geeignet, um die Daten live anzuschauen.

Leider kann ich den Code nicht zeigen, da ich ein urheberrechtlich geschütztes Ausgangsprogramm modifiziert habe. Es waren aber nicht viele Zeilen Python.
 
  • Liebe zum Detail! (2 Punkte)
Reaktionen: S1m0n
Ich hänge mich mal hier mit rein.
Habe mir eben einen Bus Pirate bestellt (nettes, kleines und vielseitiges Interface) und schaue mir die Geschichte mal an.
Ist zwar schon ein bisserl her, dass ich mich mit der Thematik beschäftigt habe, aber das wird bestimmt interessant :cool:

Bus Pirate
 
  • Hilfreich!
Reaktionen: S1m0n
Kennt jemand ein kompatibles LCD mit mehr offenen Einstellungsmöglichkeiten
Das QS-S4 von GitHub (Zero Display)
Das Vsett Display

Ich gehe aber davon aus, das es noch viel mehr Einstellungen gibt. Unter anderem könnte es eine Einstellung für die Erkennung der Hallsensoren geben (60°/120°/Auto). Einen v2 Limiter Speed (man denke an die Booster Box), sowie Einstellungen wann der Tempomat gestartet wird (Timer) und wieviel Kmh der erste, zweite und dritte Gang dürfen. Außerdem Einstellungen für den Cut-Off wert und sogar des Shunts, also eine schnellere Beschleunigung ohne dran löten zu müssen.

Leider antwortet der Controller wohl immer nur..also er sendet von sich keine Daten, sondern antwortet nur auf Fragen, weshalb man über die Displays wohl kaum an die Informationen kommt :/

Wenn man sich die Vsett/Zero P-Settings anguckt (auf "Papier"), wird man sehen, das viele Einstellungen als unbenutzt gelabelt sind.
Ich schätze das sind die von mir oben erwähnten "geheimen" Einstellungen und noch n paar mehr 🤷🏽‍♂️
 
Zuletzt bearbeitet:
  • Hilfreich!
Reaktionen: Gerhard
Ein bisschen echte Kommunikation:

Code:
#194
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c2 00 0f 50 06 00 32 80 b3 00 58 0a ca
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:179


#195
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c3 00 0f 75 06 00 32 80 b2 00 58 0a ef
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:178


#196
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c4 00 0f 7e 06 00 32 80 b2 00 58 0a e3
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:178


#197
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c5 00 0f 73 06 00 32 80 73 00 58 0a 2e
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:115


#198
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c6 00 0f 74 06 00 32 80 2a 00 58 0a 73
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:42


#199
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c7 00 0f 79 06 00 32 80 2b 00 58 0a 7e
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:43


#200
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Raw frame: 01 03 c8 00 0f 72 06 00 32 80 2b 00 58 0a 7a
Gear:3; Ludicrous:0; Cruz:1; Kickstart:1; HiBeams:0; Regen:0
Limiter:50; Throttle:43
Wie genau hast du diese Auszüge bekommen?
Bzw wie wurde die übersetzung aus den RAW Daten geparst ?

Leider kann ich den Code nicht zeigen, da ich ein urheberrechtlich geschütztes Ausgangsprogramm modifiziert habe. Es waren aber nicht viele Zeilen Python.
Oder bezog sich genau das auf die Übersetzung? Wie heißt denn das originale Programm, bitte ?
 
Wie heißt denn das originale Programm, bitte ?
Direkt im zweiten Satz vom OP (#1) erwähnt. Es sind zwei winzige Python-CLI-Skripte in einem Github Projekt.
Bzw wie wurde die übersetzung aus den RAW Daten geparst ?
Wenn ich im Display irgendwas umstelle, schaue ich wo sich die Daten ändern. Bis auf den Gang (Gear) ist das alles unverschlüsselt und der Gang ist schon geknackt worden. Das hab ich mit HTerm gemacht: https://www.heise.de/download/product/hterm-53283

Dann habe ich das eine Programm vom OP so angepasst, dass es mir automatisch die Kommunikation interpretiert.

Du erhälst eine Privatkopie als PN ;)
Post automatically merged:

Leider antwortet der Controller wohl immer nur..also er sendet von sich keine Daten, sondern antwortet nur auf Fragen, weshalb man über die Displays wohl kaum an die Informationen kommt :/
Naja er sendet jedes mal ALLES an Infos die er hat als "Antwort", genau so wie das LCD ALLE Einstellungen jedes mal als "Frage" sendet. Man muss echt nur ein einziges Frage/Antwort-Paar aufzeichnen und hat dann den gesamten Zustand des Scooters erfasst: Alle P-Settings, aktuelle Geschwindigkeit, sogar die Gaspedalposition.
 
Zuletzt bearbeitet:
Naja er sendet jedes mal ALLES an Infos die er hat als "Antwort", genau so wie das LCD ALLE Einstellungen jedes mal als "Frage" sendet
Nein da ist ganz sicher noch mehr. Denk an die Booster Box von IO Hawk. Anschließen, Knopf drücken fertig. Die Box nimmt sich den Strom vom GND und P+ Pin im Rundstecker. Gleichzeitig legt sie P+ auf VCC (VK+) damit wird der Controller aktiviert (mehr macht die Schaltung im Display auch nicht) und dann sendet die Box da irgend ein flag.
Momentan ist das bei mir noch alles ein bisschen wie Kaffeesatz lesen, weil mir einfach der Kopf raucht, vor lauter Informationen die ich erst noch sortieren muss. Dadurch das die Vsett/Zero/Kaabo/JP Displays untereinander kompatibel sind, kann man davon ausgehen, das auch die Controller mehr oder weniger gleich sind (QS-S4 hat z.b 5 Stufen für die beschleunigung, LT-01 wiederum nur an oder aus. Dafür hat das LT-01 diese Signal P-Settingeinstellung, die man für den Getriebemotor braucht, was auch der Grund ist, warum man das QS-S4/Vsett Display nicht mit dem Getriebemotor / IO Hawk Controller benutzen kann). Irgendwann bin ich dann zu den BaFang, Infineon, BST, Lishui und KT abgedriftet. Bermerksenwert ist, das alle Controller die selben Bezeichnungen auf den Lötpunkten benutzen .. auch wenn man in die pinouts der Chips reinguckt wird man etliche Gemeinsamkeiten entdecken. ZLK steht zum Beispiel für den PAS Sensor aus der Padelecszene. Zufälligerweiss bietet der Chips jeweils ein Pin für PAS und Throttel (das Eye3 Display von Minimotors zeigt sogar PAS im Display an). SL is eigentlich immer die Bremse und SP oder SD immer Speed.
Duzende von Protokolle, wo immer wieder p settings auftauchen. Ähnlichen oder sogar gleichen Beschreibungen. Und KenTeng scheint einer der ältesten zu sein.. KenTeng hat viele Displays und keins davon sieht unserem ähnlich, aber es geht ja auch nur ums Protokoll.. von den KenTeng Displays stecken besonderen 3 heraus. Das KT-LCD3 ,5 und 6, den diese bieten am meisten Einstellungen + eine besonderheit: man kann zwischen dem alten und neuen Protokoll umschalten. Diese Einstellungen werden allerdings nicht mehr mehr als (p)arameter settings bezeichnet, sondern als (c)onfig settings.. auch lässt sich ein Steuersiganl einstellen (Getriebemotor?), die Leistung des Gashebels reduzieren (Booster Box?), den shunt wert (Tuning ohne löten?) Und viel mehr einstellen. ein weitere Punkt der mich dazu führte war folgender: die Displays/Controller von Zero/Vsett/JP und Kaabo sind zwar kompatibel, aber die Motoren nicht ... Warum? Weil Vsett/Zero/JP auf Motorn mit 60° Hallsensoren setzt und Kaabo Mantis auf 120°... Aber wer hätte das gedacht? Zufälligerweise gibt's bei KenTeng ebenfalls die Möglichkeit die Hallsensoren auf 60°/120°/Auto umzustellen.
.
 

Anhänge

  • Screenshot_2022-10-21-13-33-37-089_com.facebook.katana.webp
    Screenshot_2022-10-21-13-33-37-089_com.facebook.katana.webp
    64,3 KB · Aufrufe: 73
  • IMG_20221019_210252.webp
    IMG_20221019_210252.webp
    76,1 KB · Aufrufe: 57
Die BTN Software kann sogar die Daten auslesen. Gibt zwar völlig unsinnige Werte aus (falsche Parameter), aber ein Zeichen dafür, das ich auf dem richtigen Weg bin.
Das auslesen den Controllers funktioniert nur über 3,3V .. mit 5V hat er mir jedes Mal gesagt, das kein serial Port geöffnet werden kann
 

Anhänge

  • IMG_20221022_145044.webp
    IMG_20221022_145044.webp
    86,7 KB · Aufrufe: 68
  • IMG_20221022_145348.webp
    IMG_20221022_145348.webp
    103,4 KB · Aufrufe: 52
  • IMG_20221022_145354.webp
    IMG_20221022_145354.webp
    86,9 KB · Aufrufe: 57
  • IMG_20221022_152205.webp
    IMG_20221022_152205.webp
    141,1 KB · Aufrufe: 58
Wenn ich mir ein zweiten ttl Adapter hole, kann ich den praktisch an die ausgänge vom ersten setzten und mit htrem mitlesen, was die PC-Software an den Controller sendet, richtig Rollermops Rollermops ?
 
Ja. ich hab immer nur abgehört: 2 Adapter und immer nur jeweils Rx und GND auf denen beschaltet. Somit am Scooter beide Datenleitungen bidirektional empfangen.
 
  • Hilfreich!
Reaktionen: S1m0n
Ja das Problem ist, wenn ich mit hterm auf den ttl Adapter zugreifen, verliert die PC Software die Verbindung und anders Rum genauso. Ich kann also nur mit einem von den beiden Programmen auf den ttl Adapter zugreifen. Deshalb 2 damit der zweite sehen kann, was der erste schickt Rollermops Rollermops

Auch ist mir folgendes aufgefallen:
Kaabo Stm Chip
Zero/Vsett NEC
Mit dem BTN Tool kann ich irgendwas vom Kaabo Chip auslesen, beim Zero/Vsett läuft das Tool ins leere, ohne aber eine Fehlermeldung zu liefern.. hab fast eine Stunde gewartet, dann einfach ein RX/TX Kabel abgezogen: "Failed to open serial Port" ← hatte sich also nicht aufgehangen, lief aber aus irgendeinem Grund, an irgendeiner Stelle nicht mehr weiter.
Am Kaabo Controller mit Stm Chip konnte ich keinen Testpoints finden, wodrüber man einen st-Link (stm programmer) anschließen könnte
Am Zero/Vsett Controller mit Nec Chip konnte ich Testpoints finden - lustigerweise ist dafür kein teuere NEC programmer nötig, sondern es reicht ein stc Programmer (ähnlich günstig wie st-Link)
 
Zuletzt bearbeitet:
Am Kaabo Controller mit Stm Chip konnte ich keinen Testpoints finden, wodrüber man einen st-Link (stm programmer) anschließen könnte
Hab dir mal das pinout vom stm32f103 hier eingezeichnet.
20221023_141241.webp


Wie groß ist die Datei die du mit dem BTN Tool da gezogen hast?
Bezweifle das es ein full dump ist.
Deswegen die Frage nach der Größe.
Eine Warnung noch, es ist sehr wahrscheinlich das der Ausleseschutz bei dem stm32 gesetzt wurde.
Wenn du versuchst ihn zu beschreiben, wird er sich intern komplett selbst löschen.
Inklusive Bootloader, welcher möglicherweise in deinem Dump fehlt, weil es kein fulldump ist.
 
  • Hilfreich!
Reaktionen: S1m0n und Gerhard