Der CAN-Bus im Volvo
Um Kabelbäume unter anderem in Fahrzeugen zu vereinfachen entwickelte Bosch im Jahre 1983 das Controller Area Network. Seit dem Jahr 2000 findet dieses System in vielen Fahrzeugen Anwendung (bei Volvo ab V70II S80 S60 XC70 XC90).
Grundprinzip ist, dass der gesamte Datenaustausch auf zwei Leitungen stattfindet. Diese werden um Reflexionen an beiden Enden zu vermeiden jeweils mit einem 120 Ohm Widerstand terminiert. Die Signalübertragung erfolgt differenziell mit einer Spannungsdifferenz von 2V zwischen CAN-H und CAN-L. Da im KFZ die Datenleitung vielen Störfeldern ausgesetzt ist werden beide Kabel miteinander verdrillt ,damit beide Leitungen den Störungen gleichermaßen ausgesetzt sind und eine Spannungsdifferenz von 2V erhalten bleibt.
Link zur Grafik
Bei einem dominanten Zustand (logisch 0) liegen beide Leitung auf einer Spannung von 2,5 volt. Im rezessiven Zustand (logisch 1) wird die Spannung der Leitung CAN-H(igh) um 1V auf 3,5V angehoben und die Spannung auf der Leitung CAN-L(ow) um 1V auf 1,5V abgesenkt.
Link zur Grafik
Alle im Netzwerk befindlichen Geräte können auf dieser Leitung mithören und abwechselnd senden. Damit sichergestellt wird, dass immer nur ein einzelnes Gerät sendet ist das Übertragungsverfahren streng definiert. Eine Darstellung aller Mechanismen würden den Inhalt des Forums jedoch sprengen, somit ist es an dieser Stelle sinnvoll die wesentlichen Spezifikationen zu erläutern.
Ein Gerät muss immer auf eine Lücke warten, bis es anfangen darf, Daten in das Netzwerk zu senden. Gleichzeitig muss das sendende Gerät im Netzwerk mithören und vergleichen ob jeder einzelne Spannungszustand erfolgreich in das Netzwerk übertragen wird. Da bei einer 1 der Pegel als hoch und einer 0 der Pegel als tief definiert ist, kommt es dazu, dass wenn zwei Geräte gleichzeitig senden, das Gerät mit dem dominanten Bit das Netzwerk auf Null zieht und somit den rezessiven Zustand überschreibt. Weil jedes Gerät die zu sendende Meldung mit dem Zustand des Netzwerkes vergleicht, stellt das Gerät, welches zum eigentlichen Zeitpunkt eine 1 gesendet hat einen Fehler fest und stoppt die eigene Sendung. Infolgedessen haben Meldungen mit einer vorausgehenden 0 eine höhere Priorität als Meldungen mit einer vorausgehenden 1.
Zur Identifikation besteht jede gesendete Meldung aus einer ID und einem Datensatz.
Zum Beispiel die Meldung welche vom Lenkradmodul gesendet wird, um den Zustand des Blinker- und Wischerhebels wiederzugeben:
ID: 0111300A Daten: C0 00 00 27 80 8E 00 C0
Da Volvo den erweiterten J1939-CAN-Frame nutzt besteht die ID aus 4 Bytes “01 11 30 0A” welche einerseits die Priorität der Meldung festlegen und andererseits der Identifikation dienen. Jede ID in einem Netzwerk darf nur einmal vergeben sein. Die ID hat den Nutzen für andere Geräte, dass diese dadurch selektieren können, welche Informationen für sie wichtig sein können. Das Radio beispielsweise achtet auf IDs, welche vom CEM kommen und die Geschwindigkeit und Beleuchtungseinstellung enthalten, wie auch auf IDs welche vom Lenkradmodul kommen und eine Änderung der Lenkradtasten enthalten.
Ein Gerät darf auch über mehrere IDs verfügen, da es auch verschiedene Informationen versenden kann.
Die ID bei Volvo wird gefolgt von einem 8 Byte Datensatz “C0 00 00 27 80 8E 00 C0” in diesem sind die Informationen enthalten, welche das Gerät dem Netzwerk mitteilt.
In Beispiel des Lenkradmoduls codiert die 5te Stelle (Byte 4) für:
5te Stelle:
80: Nichts gedrückt
84: Blinkhebel in rechter Stellung
88: Blinkhebel in linker Stellung
C0: Resettaste am Blinkhebel wird betätigt (Boardcomputerversion)
A0: Read Taste am Blinkhebel wird betätigt
Die 6te Stelle "8E" gibt an, dass der Wischerhebel in 0 Stellung ist.
Die Gesamte Meldung wird etwa alle 15ms in das Datennetzwerk gesendet (nach Priorität häufiger oder seltener), damit jegliche Geräte über den Zustand Bescheid wissen und entsprechend reagieren können. Erhält das CCM die Meldung 84 aktiviert es das Relais für den Blinker der rechten Seite.
Link zum Datendiagramm
Im Datendiagramm ist zu erkennen, dass die gesamte Meldung (als Frame bezeichnet) aus mehr als der ID und dem Datensatz besteht. Es sind noch einige Zusätze nötig, damit eine Meldung erfolgreich übertragen werden kann, diese sind aber bei alleiniger Betrachtung der Meldungen hier nicht von Bedeutung und werden in der realen Anwendung von Controllern automatisch errechnet und durchgeführt.
Kommt es trotz aller Mechanismen dazu, dass ein Fehler auftritt, weil beispielsweise eine ID doppelt im Netzwerk auftritt, unterbricht das Gerät mit gleicher ID die Sendung sofortig und versucht zu einem weiteren Zeitpunkt seine Meldung in das Netzwerk zu senden. Kommt es weiterhin hintereinander zum selbigen Fehler, klinkt sich das Gerät für eine vergleichsweise längere Zeit (ca. 10s) aus dem Netzwerk aus und versucht den Datentransfer erneut. Dies kann jedoch gravierend sein, wenn beispielsweise für etwa 10s der Blinker nicht mehr funktioniert.
Im Volvo gibt es zwei verschiedene CAN-Netzwerke:
Link zur Grafik
Das Motor High-Speed CAN mit einer Datenrate von 250kb/s und das Comfort-Low-Speed-CAN mit einer Datenrate von 125kb/s. Beide Netzwerke laufen voneinander unabhängig, das CEM ist das einzige Gerät welches in Kontakt mit beiden Netzwerken steht und somit Daten zwischen diesen austauschen kann wie beispielsweise die Drehzahl.
Volvo hat die Codierung jeglicher Daten in jedem Baujahr geändert, was zur Folge hat, das sich Geräte aus unterschiedlichen Baujahren nicht über den CAN-Bus unterhalten können, das sie ihre Meldungen nicht mehr verstehen.
Dazu ein Beispiel für die Datenwörter, welche unter anderem für die Tasten des Lenkrades zuständig sind:
Fahrzeug aus 2001
ID: 00200066 Daten: C0 00 00 01 1F 40 40 7F
Fahrzeug aus 2002:
ID: 0261300A Daten: 80 00 00 27 80 C2 00 CF
Beide Meldungen erfüllen genau die gleiche Funktion, können aber nicht von Geräten aus anderen Baujahren interpretiert werden.
Durch diese Zusammenhänge lassen sich nicht nur Funktionen im Fahrzeug ergründen sondern auch Erweiterungen wie die eines CAN-Extenders aufbauen. Durch ein einfaches Senden einer Meldung in dieses Netzwerk lässt sich somit etwa eine Coming-Home Funktion mit zusätzlich aktivierten Nebelscheinwerfen realisieren oder es können Tastendrücke oder Fahrzeugdaten jeglicher Art erfasst werden.
Beste Antwort im Thema
Um Kabelbäume unter anderem in Fahrzeugen zu vereinfachen entwickelte Bosch im Jahre 1983 das Controller Area Network. Seit dem Jahr 2000 findet dieses System in vielen Fahrzeugen Anwendung (bei Volvo ab V70II S80 S60 XC70 XC90).
Grundprinzip ist, dass der gesamte Datenaustausch auf zwei Leitungen stattfindet. Diese werden um Reflexionen an beiden Enden zu vermeiden jeweils mit einem 120 Ohm Widerstand terminiert. Die Signalübertragung erfolgt differenziell mit einer Spannungsdifferenz von 2V zwischen CAN-H und CAN-L. Da im KFZ die Datenleitung vielen Störfeldern ausgesetzt ist werden beide Kabel miteinander verdrillt ,damit beide Leitungen den Störungen gleichermaßen ausgesetzt sind und eine Spannungsdifferenz von 2V erhalten bleibt.
Link zur Grafik
Bei einem dominanten Zustand (logisch 0) liegen beide Leitung auf einer Spannung von 2,5 volt. Im rezessiven Zustand (logisch 1) wird die Spannung der Leitung CAN-H(igh) um 1V auf 3,5V angehoben und die Spannung auf der Leitung CAN-L(ow) um 1V auf 1,5V abgesenkt.
Link zur Grafik
Alle im Netzwerk befindlichen Geräte können auf dieser Leitung mithören und abwechselnd senden. Damit sichergestellt wird, dass immer nur ein einzelnes Gerät sendet ist das Übertragungsverfahren streng definiert. Eine Darstellung aller Mechanismen würden den Inhalt des Forums jedoch sprengen, somit ist es an dieser Stelle sinnvoll die wesentlichen Spezifikationen zu erläutern.
Ein Gerät muss immer auf eine Lücke warten, bis es anfangen darf, Daten in das Netzwerk zu senden. Gleichzeitig muss das sendende Gerät im Netzwerk mithören und vergleichen ob jeder einzelne Spannungszustand erfolgreich in das Netzwerk übertragen wird. Da bei einer 1 der Pegel als hoch und einer 0 der Pegel als tief definiert ist, kommt es dazu, dass wenn zwei Geräte gleichzeitig senden, das Gerät mit dem dominanten Bit das Netzwerk auf Null zieht und somit den rezessiven Zustand überschreibt. Weil jedes Gerät die zu sendende Meldung mit dem Zustand des Netzwerkes vergleicht, stellt das Gerät, welches zum eigentlichen Zeitpunkt eine 1 gesendet hat einen Fehler fest und stoppt die eigene Sendung. Infolgedessen haben Meldungen mit einer vorausgehenden 0 eine höhere Priorität als Meldungen mit einer vorausgehenden 1.
Zur Identifikation besteht jede gesendete Meldung aus einer ID und einem Datensatz.
Zum Beispiel die Meldung welche vom Lenkradmodul gesendet wird, um den Zustand des Blinker- und Wischerhebels wiederzugeben:
ID: 0111300A Daten: C0 00 00 27 80 8E 00 C0
Da Volvo den erweiterten J1939-CAN-Frame nutzt besteht die ID aus 4 Bytes “01 11 30 0A” welche einerseits die Priorität der Meldung festlegen und andererseits der Identifikation dienen. Jede ID in einem Netzwerk darf nur einmal vergeben sein. Die ID hat den Nutzen für andere Geräte, dass diese dadurch selektieren können, welche Informationen für sie wichtig sein können. Das Radio beispielsweise achtet auf IDs, welche vom CEM kommen und die Geschwindigkeit und Beleuchtungseinstellung enthalten, wie auch auf IDs welche vom Lenkradmodul kommen und eine Änderung der Lenkradtasten enthalten.
Ein Gerät darf auch über mehrere IDs verfügen, da es auch verschiedene Informationen versenden kann.
Die ID bei Volvo wird gefolgt von einem 8 Byte Datensatz “C0 00 00 27 80 8E 00 C0” in diesem sind die Informationen enthalten, welche das Gerät dem Netzwerk mitteilt.
In Beispiel des Lenkradmoduls codiert die 5te Stelle (Byte 4) für:
5te Stelle:
80: Nichts gedrückt
84: Blinkhebel in rechter Stellung
88: Blinkhebel in linker Stellung
C0: Resettaste am Blinkhebel wird betätigt (Boardcomputerversion)
A0: Read Taste am Blinkhebel wird betätigt
Die 6te Stelle "8E" gibt an, dass der Wischerhebel in 0 Stellung ist.
Die Gesamte Meldung wird etwa alle 15ms in das Datennetzwerk gesendet (nach Priorität häufiger oder seltener), damit jegliche Geräte über den Zustand Bescheid wissen und entsprechend reagieren können. Erhält das CCM die Meldung 84 aktiviert es das Relais für den Blinker der rechten Seite.
Link zum Datendiagramm
Im Datendiagramm ist zu erkennen, dass die gesamte Meldung (als Frame bezeichnet) aus mehr als der ID und dem Datensatz besteht. Es sind noch einige Zusätze nötig, damit eine Meldung erfolgreich übertragen werden kann, diese sind aber bei alleiniger Betrachtung der Meldungen hier nicht von Bedeutung und werden in der realen Anwendung von Controllern automatisch errechnet und durchgeführt.
Kommt es trotz aller Mechanismen dazu, dass ein Fehler auftritt, weil beispielsweise eine ID doppelt im Netzwerk auftritt, unterbricht das Gerät mit gleicher ID die Sendung sofortig und versucht zu einem weiteren Zeitpunkt seine Meldung in das Netzwerk zu senden. Kommt es weiterhin hintereinander zum selbigen Fehler, klinkt sich das Gerät für eine vergleichsweise längere Zeit (ca. 10s) aus dem Netzwerk aus und versucht den Datentransfer erneut. Dies kann jedoch gravierend sein, wenn beispielsweise für etwa 10s der Blinker nicht mehr funktioniert.
Im Volvo gibt es zwei verschiedene CAN-Netzwerke:
Link zur Grafik
Das Motor High-Speed CAN mit einer Datenrate von 250kb/s und das Comfort-Low-Speed-CAN mit einer Datenrate von 125kb/s. Beide Netzwerke laufen voneinander unabhängig, das CEM ist das einzige Gerät welches in Kontakt mit beiden Netzwerken steht und somit Daten zwischen diesen austauschen kann wie beispielsweise die Drehzahl.
Volvo hat die Codierung jeglicher Daten in jedem Baujahr geändert, was zur Folge hat, das sich Geräte aus unterschiedlichen Baujahren nicht über den CAN-Bus unterhalten können, das sie ihre Meldungen nicht mehr verstehen.
Dazu ein Beispiel für die Datenwörter, welche unter anderem für die Tasten des Lenkrades zuständig sind:
Fahrzeug aus 2001
ID: 00200066 Daten: C0 00 00 01 1F 40 40 7F
Fahrzeug aus 2002:
ID: 0261300A Daten: 80 00 00 27 80 C2 00 CF
Beide Meldungen erfüllen genau die gleiche Funktion, können aber nicht von Geräten aus anderen Baujahren interpretiert werden.
Durch diese Zusammenhänge lassen sich nicht nur Funktionen im Fahrzeug ergründen sondern auch Erweiterungen wie die eines CAN-Extenders aufbauen. Durch ein einfaches Senden einer Meldung in dieses Netzwerk lässt sich somit etwa eine Coming-Home Funktion mit zusätzlich aktivierten Nebelscheinwerfen realisieren oder es können Tastendrücke oder Fahrzeugdaten jeglicher Art erfasst werden.
277 Antworten
Erinnert das irgend jemand an irgend etwas?
http://www.youtube.com/watch?v=ZYvaI9z6eu4
Oder liegt der Unterschied in mehr als der aufgespielten Software?
Hey Leute, ich fahre einen 2004er V70R. Im Moment versuche ich mich an einer Bastelei und bräuchte dafür die aktuelle Fahrzeuggeschwindigkeit. Wisst ihr auf welcher ID die liegt, und ob die noch einen Faktor hat um vom HEx-Wert zur tatsächlichen Geschwindigkeit zu kommen?
Hab da gerade nichts passendes zu, außer die 6 IDs, die das CEM alleine ausgebaut sendet, müsste ja dabei sein, fragt sich nur wo 🙂 Ansonsten mein Tip, kurze Fahrt aufzeichnen, die 6 IDs filtern wenn möglich noch mit Vadis Geschwindigkeits log. Ein bisschen mit Excel fummeln, aus ca. 40 Diagrammen dann das passende für die Geschwindigkeit suchen...
Ist wahrscheinlich noch für deinen Boardcomputer von einem anderen Hersteller?
Guten Morgen. Nachdem ich am Wochenende beim Aufräumen einen Arduino Uno mit aufgestecktem CAN Shield gefunden hatte, habe ich mich dunkel an diesen Thread erinnert. Damals ist das Projekt aufgrund der vielen Arbeit in Vergessenheit geraten, aber letzte Nacht hat es mich wieder gefesselt. :-)
Ich habe dank deiner Anleitung sardine erfolgreich uploaden können und CANHacker verbindet sich auch, allerdings ließt er nix. 😕 Die Verbindungsgeschwindigkeiten habe ich so eingestellt, wie auf deinem Screenshot und der Motor lief auch, trotzdem wurden keine Nachrichten angezeigt.
Hast du vielleicht ein paar Ansatzpunkte für mich, was da falsch sein könnte?
Ähnliche Themen
Wenn ich das richtig sehe, hast du das neue Modell, da sollte die CAN-Baudrate auf 250k/bit eingestellt werden.
Zündschlüssel auf Pos 1 sonst geht das Fahrzeug nach ca. 30 Sekunden in den Standby und schaltet den CAN-Bus ab. Das wäre dann normal wenn man dann nichts sieht. Wenn du dich an den anderen Beispielen orientierst, muss die Geschwindigkeit auch dort immer auf 250k/bit eingestellt werden.
Also von
if(Canbus.init(CANSPEED_125))
auf
if(Canbus.init(CANSPEED_250))
Viel Erfolg damit...
Danke für den Tipp.
Ich habe die CAN-Geschwindigkeit in CANHacker auf 250 Kbit/s gestellt, aber es hat sich leider nichts geändert. Wenn ich den Code von sardine richtig verstehe, stellt sich die Baudrate dort nach der abfragenden Software über den "switch (baudrate)". Muss ich die Geschwindigkeit noch woanders einstellen? Ich will ja erstmal nur den Traffic auf dem CAN-Bus mitlesen.
Ich verwende übrigens das "OBD-II to DB9 Cable CAB-10087", dessen Pinout eigentlich passt (CAN-H an Pin 3 und CAN-L an Pin 5). Der Arduino wird mit Spannung versorgt und läuft. Die OBD-II Schnittstelle sollte auch nicht defekt sein, denn ein Bluetooth OBD-II Dongle funktioniert dort wunderbar.
Ich weiß nicht genau wie es jetzt bei dem 2005+ Modell ist, aber bei dem Modell davor liegt der CAN-Bus nicht an der Buchse an, sondern muss erst mit einem periodischen Signal auf K-Line durchgeschaltet werden.
Wahrscheinlich nutzt der OBD Tester den du verwendest nur die K-Line, den dort werden die standardisierten Daten übertragen, der CAN-Bus selbst wird eigentlich nur von DICE genutzt. Somit hat die Funktion keine Bedeutung.
Bei Sardine und CAN-Hacker genügt es in CAN-Hacker die Geschwindigkeit zu wählen.
Ich würde einfach mal versuchen den CAN-Bus irgendwo am REM im Kofferraum abzugreifen. Testweise habe ich mal Kabel an normale Nähnadeln Kabel gelötet und vorsichtig von hinten in die Buchsen gesteckt. CAN-H ist immer weiß und CAN-L immer grün.
Strom bekommt der Arduino über den USB-Port, da muss man sich zunächst keine Gedanken drum machen...
Am Fahrzeug BUS liegt das Signal immer an, am OBD Port wahrscheinlich nur wenn man es Über die K-Line aktiviert...
Ich kann endlich einen (Teil-)Erfolg vermelden. Und dazu ein paar Infos zu meinem S60 MY05 liefern, die vielleicht dem Einen oder Anderen auch weiterhelfen.
Zuerst habe ich meine OBDII-Schnittstelle losgelöst: Dort sind die Pins für K- und L-Line (7 und 15) gar nicht belegt, die Pins für den CAN-Bus (6 und 14) hingegen schon. Allerdings fehlt der verdrillte Fahrzeug-Bus (grüne und weiße Litze).
Daher habe ich mich auf die Suche nach einem anderen Ort gemacht, wo man diesen abgreifen kann. Da ich mich vor einer Weile mal für diverses Zubehör interessiert hatte, bin ich per Zufall darauf gestoßen, dass und wo man das RTI an den CAN Bus hängt. Dazu gibt es im Internet eine bebilderte Anleitung, die zeigt, dass zwei Pins des Connectors D auf der Rückseite des REM dafür vorgesehen sind, das RTI mit dem CAN Bus zu versorgen (Bild 34 im PDF).
Da mein Volvo kein RTI hat, hab ich also das REM freigelegt, den Connector gelöst und die zwei Pins mit Steckhülsen aus dem Elektronikzubehör versehen: Pin 20 (grün) für CAN-L und Pin 21 (weiß) für CAN-H. Die original Steckhülsen haben eine sehr untypische Form, weshalb meine auch nicht perfekt passen und schon gar nicht einrasten. Da aber die Kabel auf der oberen Seite des Steckers um 90 Grad abgewinkelt werden, hält dies die Steckhülsen in Position. Die anderen Enden habe ich dann verdrillt und an den CAN-Shield angeschlossen.
Dann habe ich gleich mal den Schlüssel in Pos I gedreht und den Laptop hochgefahren. Mit einer CAN-Geschwindigkeit von 250 kbit/s wurde genau nichts ausgelesen, ich musste CANHacker erst wieder auf 125 kbit/s einstellen. Und dann habe ich einen kurzen Lachanfall bekommen; das geht ja zu wie in einem Ameisenhaufen. :-) Nun kann ich also endlich auf dem CAN Bus mitlesen, die erste Hürde habe ich genommen.
Was mir das Ganze aber leider eingebracht hat, ist die Fehlermeldung "SRS AIRBAG WARTUNG DRINGEND". Kann das einer der Diagnosecodes ausgelöst haben, oder ist der Elch beleidigt, weil ich irgendwas Falsches angefasst habe?
Bin jetzt ein wenig verwirrt, welche Geschwindigkeit der BUS hat, war eigentlich davon überzeugt, dass der 2005er mit 250kbit im Innenrraum und 500kbit im Motorraum läuft.
Wenn der Controller sich auf falscher Geschwindigkeit initialisiert, werden die anderen Geräte gestoppt (eines der endlosen Kontrollroutinen des CAN-Bus), dann fällt auch die Kommunikation zum SRS aus. Jetzt läuft wieder alles, aber durch die kurz falsch eingestellte Geschwindigkeit ist halt der Fehler gespeichert.
Wenn du kein DICE hast, auf der Seite von Olaf ist noch was von Sardine beschrieben. Diese nutzt den Arduino als DICE. Weiß nur nicht ob es beim neuen Modell noch klappt. Wenns klappt, lassen sich damit die Fehlercodes löschen...
Du hast immer ne Antwort parat. 😉 Ich find's total klasse, dass du dein Wissen hier teilst und mit deinen Anleitungen ist es echt nicht schwer, die Dinge umzusetzen. Mein Finger ist schon ganz wund vom Danke-Button. 😁
Die Sache mit sardineCAN als DICE schaue ich mir mal an, das wäre natürlich was Feines, ist nur die Frage, wo ich die VIDA-Software herbekomme... Und wenn ich den Arduino als DICE verwende, kann ich vermutlich nicht gleichzeitig auch im Netzwerk mitlesen. 🙁
Ich habe heute - wie von dir empfohlen - mit der READ-Taste begonnen, die IDs zu identifizieren. Für den Blinkerhebel konnte ich recht schnell die ID 0131726C ausfindig machen; nur das Fernlicht scheint auf einer anderen ID kodiert zu sein.
Dann wollte ich die Tempomattasten zuordnen, konnte aber keine passende ID finden. Also weiter zu den Radio-Tasten und plötzlich bin ich wieder bei der ID 0131726C gelandet.
Es scheint als sei das die ID für so ziemlich alles an meinem Lenkrad, ist das vielleicht die ID des Steering Wheel Module (SWM)? Vielleicht sind die Tempomattasten da auch kodiert, ich hatte den Schlüssel nur in Pos I, da ich aber CRUISE im Display aktivieren konnte, dachte ich, die anderen Tasten gehen dann auch.
Ich finde den Datensatz recht komplex aufgebaut:
Code:
ID: 0131726C Daten: 00 8C 59 D2 80 07 00 3F
Datenblock 1, 2 und 4 scheinen fix zu sein. Datenblock 3 ist der Counter.
Datenblock 5
00 20 40 60 80 A0 C0 E0: Empfindlichkeit Regensensor (Rad)
10: einmalig Wischen
01: Wischwasser vorne
08: Wischerintervall Puls
04: Wischerintervall langsam
02: Wischerintervall schnell
Für Kombinationen daraus, müssen die Werte addiert werden.
Datenblock 6
00: nichts gedrückt (Regensensor deaktiviert)
00 - 3F, gerade Werte im 2er Schritt runterzählend: Scrollrad runterdrehen
00 - 3F, ungerade Werte im 2er Schritt raufzählend: Scrollrad raufdrehen
80: Regensensor aktiviert
Für Kombinationen daraus, müssen die Werte addiert werden.
Datenblock 7
00: nichts gedrückt
40: Blinker rechts
80: Blinker links
Datenblock 8
37: lauter
3B: leiser
3D: Radio vor
3E: Radio zurück
3F: nichts gedrückt
7F: READ
BF: RESET
Dann habe ich versucht, ein paar der Funktionen über CANHacker ins Netzwerk zu schicken:
- Die READ-Taste hat wunderbar funktioniert.
- Bei "lauter" und "leiser" musste die Nachricht ca. 20 mal gesendet werden, um eine hörbare Änderung der Lautstärke zu bewirken.
- Und das Scrollrad hat immer nur zu einem kurzen Aufflackern des Displays geführt, da ich zwar den Wert an Position 6 verändert geschickt hatte, die Message mit der korrekten Position aber kurz darauf natürlich wieder durch's Netzwerk gesaust ist. 😰
Dann habe ich die Diagnosecodes geschickt, die du auf einer der ersten Seiten gepostet hattest:
- Den Gong konnte ich aktivieren und auch wieder deaktivieren.
- Die Diagnosecodes für die Blinker haben leider nicht funktioniert (Schlüssel war in Pos II). Da hat Volvo bei meinem MY den Diagnosecode wohl geändert. Dabei war der Komfortblinker mein Ansporn gewesen. 🙁
Die Kommunikation in den Modellen 2005 bis 2007 sollte identisch sein.
Bei den Modellen davor gibt es folgende Unterteilung:
2000 und 2001 sind gleich
2002
2003 und 2004 sind gleich
Alle Teile rund um das Lenkrad werden im 2001er V70 vom SWM gesteuert. Das SWM hat 2 IDs.
Code:
Blinkerhebel und Wischerhebel:
ID: 0111300A Datensatz: C0 00 00 27 80 8E 00 C0
Fünfte Stelle:
80 nichts gedrückt
84 Blinker rechts
88 Blinker links
C0 Reset-Button
A0 Read-Button
Sechste Stelle:
Wischerhebel
Letzte Stelle:
Ring vom Boardcomputer start mit C0
Lenkradtasten:
ID: 00200066 Datensatz: C0 00 00 01 1F 40 40 7F
Fünfte Stelle:
1F nichts gedrückt
1E Cruise-Button
Siebte Stelle: RTI Lenkradschalter
40 nichts gedrückt
50 Back
60 ENTER
48 UP
44 DOWN
41 RIGHT
42 LEFT
Achte Stelle:
7F nichts gedrückt
Ansonsten Radio-Buttons
An der Position des CRUISE-Buttons sind soweit ich mich erinnere auch die anderen Tasten des Tempomats.
Gehe davon aus, das es im 2005er ähnlich ist...
Das mit dem Senden der Nachrichten der Steuergeräte selbst ist nicht ganz problemlos.
Einerseits ist es der Counter der jeweiligen Frames. Dieser läuft ja nicht in der richtigen Reihenfolge wenn man die ID einfach sendet. Das Radio erwartet ja immer den nächsten Counter.
Anderseits wird die Meldung ja alle 15ms neu gesendet. Wenn man beispielsweise den Wischerhebel mit einer Meldung aktiviert, kommt ja spätestens 15ms später die echte Meldung, dass der Wischerhebel in Position 0 steht, somit wird der Wischer wieder gestoppt. Hier ist die Lösung wirklich nur die Diagnosemeldung, da diese ja über den Bedienelementen steht und den Wischer für eine bestimmte Zeit aktiviert.
Denke aber das die Diagnosemeldungen für das neuere Modell nicht mehr stimmen. Bei den 2 teiligen ist es aber wichtig, genau den Abstand einzuhalten. Wenn dieser nicht 15ms +- 20% ist kommt es zum Timeout und die meldung wird nicht akzeptiert...
Habe hier ein CEM von 2005+ liegen könnt mal schauen, wie es da mit dem Blinker aussieht, will mich jetzt aber zu nichts verpflichten...
Um Gottes Willen, du bist zu gar nichts verpflichtet! Ich freue mich natürlich über jeden Tipp oder Input. 😁 Danke auch für die Erklärung und das Beispiel.
Ich kann ja nun zumindest schonmal abfragen, ob der Blinker links, rechts oder nicht gesetzt ist. Wenn ich nun die Diagnosecodes für den Blinker noch rausbekomme, kann ich mir schon den gewünschten Komfortblinker basteln. 😎
Auf der Heimfahrt bin ich heute kurz auf einen Autobahnparkplatz und hab den Motor laufen lassen. Wieder konnte ich die Tempomattasten nicht zuordnen. Als ich dann an den Blinkerhebel gestoßen bin, ist mir die ID 00A10408 aufgefallen, deren Anzahl an Messages im Takt des Blinkers hochgezählt hat. Die ID scheint zum DIM zu gehören, zumindest kann ich damit die Indikatorpfeile (links, rechts) schalten. Man hört ein Relais klacken und einer der Pfeile leuchtet auf bzw. erlischt, außen am Fahrzeug blinkt allerdings nichts.
Code:
ID: 00A10408 Daten: 00 00 00 00 00 00 00 0A
Datenblock 8
08: Blinkerindikator ausschalten
0A: Blinkerindikator links
0C: Blinkerindikator rechts
0E: Blinkerindikator beide
Dann konnte ich noch die ID 014034A2 dem DDM zuordnen.
Code:
ID: 014034A2 Daten: 00 5B 00 04 89 13 04 00
Datenblock 3
00: Fenster freigeben
80: Fenster sperren
01: Fenster vl schließen
02: Fenster vl autoschließen
04: Fenster vr öffnen
07: Fenster vr autoöffnen
Datenblock 4
04: nichts gedrückt
14: Fenster hl schließen
24: Fenster hl öffnen
44: Fenster hr schließen
84: Fenster hr öffnen
Für Kombinationen daraus, müssen die Werte addiert werden.
Datenblock 5
89: Fenster vl geschlossen
8A: Fenster vl halb geöffnet
8E: Fenster vl offen
Datenblock 6
03: ZV offen
13: ZV versperrt
0B, 1B: ZV umschalten
Bei der Analyse dieser ID bin ich über den Tracer darauf gestoßen, dass hier die Steuercodes für die ZV so kurz (nämlich einmalig) gesendet werden, dass sie in der Monitor-Ansicht gar nicht aufscheinen. Wenn ich also die Lock-Taste in der Fahrertür drücke, sieht der Trace wie folgt aus:
Code:
014034A2 Daten: 00 5B 00 04 89 03 04 00
014034A2 Daten: 00 5B 00 04 89 0B 04 00 Befehl: Schließen
014034A2 Daten: 00 5B 00 04 89 03 04 00
014034A2 Daten: 00 5B 00 04 89 03 04 00
014034A2 Daten: 00 5B 00 04 89 93 04 00 Bestätigung: geschlossen
014034A2 Daten: 00 5B 00 04 89 13 04 00
...
014034A2 Daten: 00 5B 00 04 89 13 04 00
014034A2 Daten: 00 5B 00 04 89 1B 04 00 Befehl: Öffnen
014034A2 Daten: 00 5B 00 04 89 13 04 00
014034A2 Daten: 00 5B 00 04 89 13 04 00
014034A2 Daten: 00 5B 00 04 89 83 04 00 Bestätigung: offen
014034A2 Daten: 00 5B 00 04 89 03 04 00
Mit einer Message, bei der bei Datenblock 5 die zweite Stelle ein "B" ist, kann ich mein Auto abschließen bzw. öffnen - ungeachtet dem Wert an Stelle 1! Dieser Befehl scheint kein mehrzeiliger Befehl zu sein, die zweite Zeile dient der Bestätigung der Aktion.
Meine IDs sind offensichtlich ident mit denen, die MaddinV70D5 vor ziemlich genau einem Jahr hier gepostet hat, allerdings unterscheiden sich die Datensätze in kleinen Details und so habe ich erst verstanden, dass innerhalb eines Datenblocks beide Positionen eine unterschiedliche Funktion haben können. MaddinV70D5 hat für die ID 014034A2 gepostet, dass sich bei Datenblock 5 die erste Stelle im Zusammenhang mit dem Spiegel verändert hat. Ich habe heute gesehen, dass sich für den gleichen Datenblock die zweite Stelle im Zusammenhang mit der Fensterposition VL geändert hat. Ich werde die Tage überprüfen, ob sich diese beiden Erkenntnisse quasi verbinden lassen...
Hallo kabukabu,
habe heute auch mal etwas an meinem 2008 XC90 gelauscht.
Motivation = Rechter Ausenspiegel bei eingelegtem Rückwärtsgang nach unten verstellen.
Heraus gekommen ist bei dem Connect im rechten Fußraum hinter der Verkleidung (grun / weiß Kabel)
folgendes Ergebnis auf die Schnelle:
Spiegel rechts
Timing 45 ms wobei ich mit 10 ms schreiben muss um eine halbwegs flüssige Bewegung am Spiegelglas zu bekommen.
Nachteil ist, das der Auswahlschalter für linken od. rechten Spiegel leider wohl nicht am CAN hängt.
Somit muss ich mir noch etwas einfallen lassen, wie ich den remote triggern kann.
ID Message DLC DATA
0x14034A2 0x14034A2 8 00 5B 40 04 8E 23 04 00
Wert welcher sich ändert wenn man die Richtung am Schalter wählt
8E = keine Bewegung bzw. Richtungsänderung
9E = nach LINKS
AE = nach RECHTS
CE = nach UNTEN
BE = nach OBEN
ID Message DLC DATA
0x2C1302A 0x2C1302A 8 00 00 00 A8 .. .. .. ..
A8 = Licht aus
Toggeln zwischen A8 und A7 = Blinker links und rechts
..
..
..
..
so weiter bin ich nicht gekommen für heute Abend.
Zitat:
Original geschrieben von dossdir
Hallo kabukabu,habe heute auch mal etwas an meinem 2008 XC90 gelauscht.
Motivation = Rechter Ausenspiegel bei eingelegtem Rückwärtsgang nach unten verstellen.
Heraus gekommen ist bei dem Connect im rechten Fußraum hinter der Verkleidung (grun / weiß Kabel)
folgendes Ergebnis auf die Schnelle:Spiegel rechts
Timing 45 ms wobei ich mit 10 ms schreiben muss um eine halbwegs flüssige Bewegung am Spiegelglas zu bekommen.
Nachteil ist, das der Auswahlschalter für linken od. rechten Spiegel leider wohl nicht am CAN hängt.
Somit muss ich mir noch etwas einfallen lassen, wie ich den remote triggern kann.
Bedienelement elektrisch verstellbare Außenspiegel / Fensterheber / Zentralschliesen
ID Message DLC DATA
0x14034A2 0x14034A2 8 00 5B 40 04 8E 23 04 00Wert welcher sich ändert wenn man die Richtung am Schalter wählt
8E = keine Bewegung bzw. Richtungsänderung
9E = nach LINKS
AE = nach RECHTS
CE = nach UNTEN
BE = nach OBENso weiter bin ich nicht gekommen für heute Abend.
Update:
Habe heute mal weiter gesucht und bin wie folgt fündig geworden:
Lenkstockhebel links Blinker / READ / Rädchen / RESET / Aufblendlicht /
ID Message DLC DATA
0x131726C 0x131726C 8 00 0C 30 52 80 00 00 3F (INITIALISIERUNG auf Pos 1 am Zündschloss)
BYTE 1 3F Display = keine Nachricht oder drücken Read = 7F(funktioniert als ON OFF Wechselschalter
BYTE 2 80 = Blinkerhebel links 40 = Blinkerhebel Rechts
00 = OFF
BYTE 3 03 = 1 Raster nach oben drehen = Direktstart Standheizung AUS / AN
(wenn dann auf BYTE1 = BF gesendet wird, springt die Heizung an oder geht aus)
Hauptlichtschalter Timing 20ms
ID Message DLC DATA
0x217FFC 0x217FFC 8 05 6B 40 D2 F0 58 00 00
BYTE 5 D2 = Lichtschalter OFF D4 = Standlicht D8 = Abblendlicht
Blinker Hebel (Ansteuerung auf dem CAN Bus) Timing 300ms
ID Message DLC DATA
0xA10408 0xA10408 8 00 00 00 00 00 00 00 08
(Das senden der Botschaft ist nur sinnvoll möglich, wenn zwischen 08 und 0C oder 08 und 0A getoggelt wird auf dem CAN)
BYTE 1 08 = kein Blinker betätigt
0C = Blinker links wird angesteuert
0A = Blinker rechts wird angesteuert
Bremspedal Timing 150-200ms
ID Message DLC DATA
0x381526C 0x381526C 8 00 01 05 BC 04 41 42 3F
BYTE 4 04 = kein Bremsen
0C = Bremse betätigt
Jetzt benötige ich nur noch die Info über den eingelegten Rückwärtsgang und die Geschwindigkeit.
Damit kann ich dann versuchen ein Abbiegelicht via Nebelscheinwerfer <60km/h abhängig von der Blinker Information / Spiegelabsenken bei eingelegtem Rückwärtsgang via Arduino realisieren!
Kann mir jemand sagen, ob bei einem Volvo Handschalter die Ganginformation auf dem CAN übertragen wird? Ich denke schon oder! Habe nähmlich an der von mir gemessenen Stelle am CAN keine Info gefunden die irgendwie auf die Aktivierung des Parkassisten hinweist. Ich glaube ich messe mal noch wo anders.
Weiterhin habe ich leider auch keine Info gefunden, aus welcher sich ableiten lässt, ob ich die Nebelscheinwerfer via CAN ansprechen kann. Damit würde mir auch nur die Hardwire Methode bleiben. Aber die halbe Miete aus der Blinker Info habe ich ja schon. Damit habe ich zumindest die erste Deklarierung der Steuergröße!
Bin für Infos und Erfahrungen sehr dankbar.
Achso, habe auch mal mit den Infos des Lenkstockhebels herumgespielt und konnte zumindest das Display recht wild ansteuern :-).
Damit hoffe ich doch die richtige Richtung für den CAN eingeschlagen zu haben!
Schöne Ostern zusammen!
dossidr
Hallo Experten,
was haltet Ihr von dieser Arduino CAN HW?
http://www.seeedstudio.com/depot/CANBUS-Shield-p-1240.html
oder sollte ich lieber das von Sparkfun nehmen?
Gruß
dossidr