IOHawk Legend Lite Serielles Protokoll

19 September 2020
280
417
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 , 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:

 
  • Hilfreich!
Reaktionen: S1m0n