Der CAN-Bus im Volvo

Volvo V70 2 (S)

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 weitere Antworten
277 Antworten

Ist im Prinzip die gleiche Hardware, sollte also genauso funktionieren.
Weiterer Vorteil, man muss nichts löten und die Einheit ist günstiger...

Hallo DR_V70

so mein Sparkfun kam heute aus den USA :-)
Habs mal gleich zusammen gebastelt. Hatte noch Brücken da.
Nun die Frage an Dich:

Wäre es möglich Dein Sketch zur Verfügung zu stellen damit ich diese mir für meinen XC90 anpassen kann?
Ich bin was die IDE damit das erstellen eines gesamten neuen Sketches nicht so fit.
Es wäre toll wenn ich da auf Deine Hilfe oder Unterstützung zurückgreifen könnte.

Mein eigentliches Ziel im Moment damit wäre dann wie folgt:

1. Abbiegelicht unter Verwendung der NS welche auf Basis:

mind. Standlich = ON --> ID vorhanden
Geschwindigkeit = < 60 km/h ---------> hier fehlt mir noch die ID
Blinker L/R = ON --> ID vorhanden

--> Steuerspannung 12 V via Relais angesprochen vom Arduino. Sollte das in Switch Case oder IF Else gelöst werden?

2. Spiegel RECHTS Außen bei eingelegtem Rückwärtsgang absenken um den Bordstein besser zu sichten

Rückwärtsgang Info = ON ---> ID fehlt
händisch muss die Auswahl getroffen werden in der Verstelleinheit, da dieser Taster wohl nicht am CAN hängt.

3. Infos aus der Abfrage der Diagnose
z.B
Batteriespannung
Temperatur ÖL
etc.....

im Display via Drehschalter auswählbar.

Ja ich weis das ist ziemlich viel aber vielleicht kannst DU mir Starthilfe beid er Umsetzung geben.

Würde mich sehr freuen.

Vielen Dank vorab....

Gruss

dossidr

Hi,

brauchst du nur den Sketch, oder die gesamte IDE mit allen Libraries?

Hallo DR_V70,

ich benötige nur den Sketch damit ich am XC90 mal testen kann um es im 1 Schritt in Betrieb zu nehmen und zu verstehen!
Würde gern die Erfahrung damit teilen und weiter ausbauen wenn Du Deine Zustimmung gibst!

Gruss

dossidr

Ähnliche Themen

Ich hab leider immernoch nicht die ID der Funkfernbedienung herausgefunden... Hat denn sonst niemand einen MY05?

Und eine andere Frage zu meinem Airbag-Fehler aufgrund des falschen Bus-Speeds: Würde der Airbag trotz der Fehlermeldung (SRS Airbag Wartung dringend) im Unfall-Fall auslösen?

Hallo,

hast du den Fehler drin wegen dem senden mit falscher Baudrate?
Das war bei mir der fall.
Habe ich aber Problemlos mit VIDA gelöscht.
Geht das nicht bei dir?

Ich habe ein MY 09 aber das sollte doch fast das gleiche auf dem Bus sein oder net?

Gruss
dossi

Genau, Senden mit falscher Baudrate.

Nachdem DR_V70 mich drauf gestoßen hat, habe ich die Windows-Treiber von Olaf gefunden, womit man den Arduino als DICE nutzen kann, doch im Moment scheitert es daran, dass ich kein VIDA habe...

Schick dir Heute Abend ne PN

So, VIDA 2013A ist da und nach ein wenig Software-Tohuwabohu findet er auch Olafs "Sardine CAN". 😰 Da ich das Ganze nur am Stand-PC getestet habe, muss ich das die Tage noch auf dem Laptop nachbauen, denn den Elch kann ich unmöglich in mein Wohnzimmer stellen. 🙄 Wenn das klappt, wäre das wirklich eine super Sache. 😁

Da hab ich mich wohl zu früh gefreut. 🙁

Laptop da, VIDA installiert, Sardine wird erkannt, aber VIDA kann keine Verbindung aufbauen. CANHacker kann hingegen wunderbar mitlesen. 😕

Nun habe ich alle möglichen Kombinationen aus sardineDLL und sardineFirmware durch und nichts scheint zu funktionieren - zuallererst und mittlerweile mehrmals habe ich die Kombi von Olaf erfolglos getestet sardineDLL 0.2 und sardineFirmware 0.22).

@DR_V70: Meinst du, Volvo hat ab MY05 etwas geändert? Dann kann ich VIDA vermutlich nur mit so nem Fake-DICE nutzen?!

Hast du den COM Port in der Registry eingetragen?

COM-Port in der Registry passt.

Mit dem Drew Tech Tool 1.07 (Empfehlung von Olaf) kann ich über sardineDLL auch den Arduino ansprechen. Versuche ich darüber die CAN Nachrichten mitzulesen, kommt nur: PassThru device could not read any messages from the vehicle network.

In sardineDLL ist die CAN Geschwindigkeit fix auf 125 festgelegt, das sollte ja aber passen, denn mit CANHacker kann ich ja auch nur mit dieser Geschwindigkeit lesen.

Das Problem scheint also irgendwo in der sardineDLL zu stecken. Ich habe jetzt versucht, denn Quellcode nachzuvollziehen, wobei ich mir aber leider noch etwas schwer tue...

Ok, nach einigen Stunden des Testens bin ich weitergekommen, aber noch nicht am Ziel.

Ich habe jetzt sowohl auf dem Arduino als auch die Windows-DLL mit dem USB Lawicel Support (jeweils V0.3) am Laufen und damit konnte ich mit dem Drew Tool einmalig (!) kurz CAN-Meldungen mitlesen. 😕

Die Testroutine läuft durch, aber sobald ich den Arduino ans Auto hänge und sich irgendein Tool (VIDA oder Drew) mit dem CAN-Bus verbindet, schmiert das Programm ab und meldet die DLL als Fehlerquelle.

Ich habe einiges ausprobiert (wie etwa das Deaktivieren der Windows-Fehlerprotokollierung oder die Verwendung einer virtuellen Maschine), aber leider erfolglos. Meine letzte Vermutung ist, dass die DLL in meinem Win7 Pro 32bit irgendeinen Konflikt hat, allerdings hab ich kein XP mehr und der XP Mode lässt sich trotz deaktivierter Hardwareanforderungen nicht installieren. :-(

Wenn keiner einen Tipp für mich hat, werde ich mir so ein Fake-DICE besorgen. Oder kennt einer von Euch zufällig jemanden in Wien mit einem DICE?

*aufzeig*

Dice kostet gerade 70€ - da würde ich nicht lange überlegen. Ich kanns zwar kaum brauchen, liegt nur rum - aber, irgendwann kommt das sicher zur Verwendung 😉

Deine Antwort
Ähnliche Themen