CAN-Komunikation zwischen Skreem und Motorsteuergerät
Verfasst: Sonntag 22. Dezember 2019, 17:06
Als CAN-Adapter benutze ich einen USBtin Adapter von Thomas Fischl
Mein Testaufbau sieht so aus: Beim Breakboard ist oben CAN High und unten CAN.Low und an beiden Enden ein Widerstand von 120 Ohm zwischen CAN High und CAN.Low.
Hier sieht man die CAN-Signale auf meinem Oziloskop, oben CAN-High und unten CAN-Low
Die erste Hürde war den Adapter zum laufen zu bekommen. Der USBtin unterstützt verschiedene Betriebssysteme und Programme.
Da ich unter Linux arbeite habe ich es erst einmal mit einem Terminal Programm versucht. Der CAN-Adapter richtet eine Serielle Schnittstelle unter dem Port /dev/ttyAMC0 ein, so sehen die Einstellungen unter CuteCom aus: Dann musste ich die Datenübertragungsrate von dem Crossfire CAN-Bus raus bekommen... Nach einigen Test hatte ich es geschafft, diese ist 500 kBaud oder S6 in den meisten Programmen.
Als nächstes habe ich erst mal die Grundlegende Software installiert:
Danach die Schnittstelle /dev/ttyACM0 an slcan0 binden
Nun kann man mit dem Befehl
sehen was auf dem CAN-Bus los ist.
Das Skreem Modul sendet von sich aus keine Daten, es wartet auf folgenden Befehl vom Motorsteuergerät:
Und Antwortet dann wenn es einen passenden Transponder erkannt hat mit z.B.
Leider sind diese Antworten immer unterschiedlich, z.B.
(Anders Formatiert geloggt)
Bis jetzt konnte ich noch nicht verstehen wie das Sreem die beiden Werte bildet.
Mit folgenden Befehl kann man eine Antwort vom Skreem Modul trigeern:
Diesen Befehl schickt das Motorsteuergerät auch immer wenn man den Zündschlüssel auf Stellung 2 dreht bis es eine Antwort vom Skreem bekommt.
Ich habe dann mal einfach im Auto folgende Befehle gesendet als ich das Skreem abgeklemmt hatte:
Daraufhin hat das Motorsteuergerät auch nicht mehr den Befehl "101#4144000000000000" auf den CAN-Bus gesendet aber starten konnte ich den Crossfire leider nicht.
Jetzt gilt es zu entschlüsseln wie das Skreem auf die beiden Antworten kommt.
Mein Testaufbau sieht so aus: Beim Breakboard ist oben CAN High und unten CAN.Low und an beiden Enden ein Widerstand von 120 Ohm zwischen CAN High und CAN.Low.
Hier sieht man die CAN-Signale auf meinem Oziloskop, oben CAN-High und unten CAN-Low
Die erste Hürde war den Adapter zum laufen zu bekommen. Der USBtin unterstützt verschiedene Betriebssysteme und Programme.
Da ich unter Linux arbeite habe ich es erst einmal mit einem Terminal Programm versucht. Der CAN-Adapter richtet eine Serielle Schnittstelle unter dem Port /dev/ttyAMC0 ein, so sehen die Einstellungen unter CuteCom aus: Dann musste ich die Datenübertragungsrate von dem Crossfire CAN-Bus raus bekommen... Nach einigen Test hatte ich es geschafft, diese ist 500 kBaud oder S6 in den meisten Programmen.
Als nächstes habe ich erst mal die Grundlegende Software installiert:
Code: Alles auswählen
$ git clone https://github.com/linux-can/can-utils.git
$ cd can-utils
$ make
Code: Alles auswählen
$ sudo ./slcan_attach -f -s6 -o /dev/ttyACM0
$ sudo ./slcand ttyACM0 slcan0
$ sudo ifconfig slcan0 up
Code: Alles auswählen
$ candump slcan0
Das Skreem Modul sendet von sich aus keine Daten, es wartet auf folgenden Befehl vom Motorsteuergerät:
Code: Alles auswählen
101#4144000000000000
Code: Alles auswählen
111#03A0CFB400000000
111#4A3000729B7BC8D6
Code: Alles auswählen
slcan0 111 [8] 4A 30 00 CF F7 7E F9 D8
slcan0 111 [8] 03 05 09 88 00 00 00 00
slcan0 111 [8] 4A 30 00 EF B5 0A 2D CF
slcan0 111 [8] 03 F9 CD D7 00 00 00 00
slcan0 111 [8] 4A 30 00 8B 52 1A DA 79
slcan0 111 [8] 03 FD 9F 0B 00 00 00 00
slcan0 111 [8] 4A 30 00 40 CB AA BA EA
slcan0 111 [8] 03 D6 BC 4C 00 00 00 00
slcan0 111 [8] 4A 30 00 C8 13 DA 9F 78
slcan0 111 [8] 03 8A D2 8F 00 00 00 00
slcan0 111 [8] 4A 30 00 49 5E 8A AA 8F
slcan0 111 [8] 03 AC A7 2B 00 00 00 00
slcan0 111 [8] 4A 30 00 0E D5 BD 49 03
slcan0 111 [8] 03 B6 F1 7D 00 00 00 00
slcan0 111 [8] 4A 30 00 9D C7 29 5E 3B
slcan0 111 [8] 03 95 20 77 00 00 00 00
slcan0 111 [8] 4A 30 00 15 1B DB AD 09
slcan0 111 [8] 03 04 3B 0B 00 00 00 00
slcan0 111 [8] 4A 30 00 08 FA 88 4C 0D
slcan0 111 [8] 03 A2 E7 0B 00 00 00 00
slcan0 111 [8] 4A 30 00 98 9A 06 AA 12
slcan0 111 [8] 03 D6 A8 CF 00 00 00 00
slcan0 111 [8] 4A 30 00 7C F0 A6 05 CE
slcan0 111 [8] 03 DA 4A C2 00 00 00 00
slcan0 111 [8] 4A 30 00 2F A9 60 61 AE
slcan0 111 [8] 03 E3 ED 58 00 00 00 00
slcan0 111 [8] 4A 30 00 8C F7 F8 15 49
slcan0 111 [8] 03 5C 73 3E 00 00 00 00
slcan0 111 [8] 4A 30 00 C8 01 25 6D CE
slcan0 111 [8] 03 6D A7 F9 00 00 00 00
slcan0 111 [8] 4A 30 00 E8 15 0C 2F E3
slcan0 111 [8] 03 EC 62 CC 00 00 00 00
slcan0 111 [8] 4A 30 00 48 62 B1 ED 9C
slcan0 111 [8] 03 6A 59 9D 00 00 00 00
Bis jetzt konnte ich noch nicht verstehen wie das Sreem die beiden Werte bildet.
Mit folgenden Befehl kann man eine Antwort vom Skreem Modul trigeern:
Code: Alles auswählen
cansend slcan0 101#4144000000000000
Ich habe dann mal einfach im Auto folgende Befehle gesendet als ich das Skreem abgeklemmt hatte:
Code: Alles auswählen
cansend slcan0 111#4A3000729B7BC8D6
cansend slcan0 111#03A0CFB400000000
Jetzt gilt es zu entschlüsseln wie das Skreem auf die beiden Antworten kommt.