Sicherer Datenaustausch mit CAN - Teil 1

Was ist CAN?

CAN (Controller Area Network) ist ein serielles, asynchrones Bussystem, das den schnellen Datenaustausch zwischen elektronischen Steuergeräten erlaubt. Es verfügt über eine sogenannte Multi-Master-Funktionalität. Diese erlaubt sowohl das Senden als auch das Abfragen von Daten zwischen CAN-Knoten (im Folgenden auch „Teilnehmer“ genannt) und Bus. Entwickelt wurde es 1983 von Robert Bosch, um die Kabelbäume in Fahrzeugen zu reduzieren und somit die Vehikel leichter zu konstruieren. Die CAN Schnittstelle besteht aus einem Transceiver und einem Controller. Der Transceiver koppelt den Controller an den CAN-Bus. Der Controller übernimmt das CAN-Protokoll. Eine Differenzialsignalübertragung vermindert Signalstörungen durch zwei Kommunikationsleitungen.

Zuordnung von Knoten und Nachrichten

Im Allgemeinen können alle Knoten auch alle Nachrichten empfangen, da die Adresse der Nachricht (auch Identifier genannt) nicht den Zielknoten, sondern die Nachrichtenidentität selbst bestimmt. Alle Knoten können demnach theoretisch auch alle Nachrichten empfangen. Jeder Knoten filtert jedoch die für sich relevanten Nachrichten. Der 11-bit-breite Identifier (auch base frame format genannt) ermöglicht das Spezifizieren von bis zu 2048 verschiedenen Nachrichten. Es gibt auch 29-bit-breite Identifier (extended frame format), im Automobil finden sich aber meistens die 11-bit-breiten. Diese Form der Nachrichtenverbreitung bringt einige Vorteile wie hohe Flexibilität oder einfache Realisierung mit sich. Den Knoten werden keine Adressen zugeteilt, da dadurch weitere zugeschaltete Knoten nicht weiter manuell bearbeitet werden müssen.

Ereignisgesteuerte Datenübertragung

Die Nachrichten und deren auftretende Reihenfolge sind nicht von der Zeit abhängig, sondern werden bei einem Ereignis ausgelöst. Die relativ kleine Nachrichtengröße und die schnelle Übertragungsgeschwindigkeit erlauben enorm schnelle Reaktionen. Der Datenaustausch erfolgt im Millisekundenbereich.

CSMA/CA- Zugriffsverfahren

Da es zu vielen Nachrichten gleichzeitig kommen kann, könnte es zu einer Kollision der Datenbusse kommen. Um dies zu verhindern, kommt das CSMA- / CA Zugriffsverfahren zum Einsatz. Hierbei hält ein CAN-Knoten sozusagen Ausschau nach einem freien Bus. Findet er einen freien Bus so beginnt er unverzüglich mit dem Datenaustausch. Stellt er beim Bus eine Nachrichtenaktivität fest, so muss er warten bis dieser frei ist. Dies sorgt dafür, dass laufende Nachrichten nicht unterbrochen werden und es zu keinen Kollisionen kommen kann. Außerdem hat jeder Knoten eine Wartezeit von maximal drei Bitzeiten.

Arbitrierung

Senden zwei Teilnehmer gleichzeitig an einen Bus, so überschreibt das Dominante von beiden das Andere. Das Überschriebene bricht sogleich den Übertragungsversuch ab. Es entsteht eine Art Hierarchie unter den Nachrichten, wobei die Nachricht mit dem kleinsten Identifier immer übertragen werden darf. Falls ein Teilnehmer immer Nachrichten mit hoher Priorität sendet, blockiert er irgendwann den Bus. Sollte dieses Verhalten eine nicht gewollte Funktion darstellen, so kann es nur durch Austausch der Hardware behoben werden.

Datenübertragung mittels Data-Frames

Data-Frames werden primär für die Datenübertragung eingesetzt. Neben diesen werden auch die fast identischen Remote-Frames eingesetzt, die bis auf das fehlende Data-Field identisch aufgebaut sind. Jede Übertragung von Frames setzt einen Gleichlauf von Sender und Empfänger voraus. Dieser wird über Signalflanken (Übergänge zwischen Signalzuständen) erreicht. Das dominante Synchronisationsbit erzeugt die erste Signalflanke, woraufhin der Empfänger die Synchronisation bei jeder Signalflanke sichert.

Bitstuffing

Das sogenannte „Bitstopfen“ verlängert die physikalische Länge eines Frames. Nach fünf gleichpoligen Bits wird das „Stopfbit“ in den Bitstrom eingefügt. Es dient der nachträglichen Synchronisation der Teilnehmer.

Fehlererkennungsmechanismen für hohe Datensicherheit

Fehler in CAN-Nachrichten gibt es kaum, da bei Erkennen einer Fehlerbedingung ein Error-Frame vom Empfänger gesendet wird. Es können bis zu fünf Fehlerbedingungen erkannt werden. Jeder Teilnehmer erhält einen Fehlerzähler, der verhindert, dass der Nachrichtentransport blockiert wird. Der Fehlerzähler hat die Funktion, den Teilnehmer vom Bus zu trennen, falls er zu viele Fehlerbedingungen sendet, die die anderen Teilnehmer nicht erkennen. Die Fehlerzähler können den Teilnehmer in verschiedene Weisen vom Bus trennen:

  • error active (normal)
  • error passive (Knoten darf nur noch rezessive Error-Frames senden)
  • bus off (Knoten darf überhaupt nicht mehr senden)

Quittieren empfangener CAN-Nachrichten

Zum Quittieren einer Nachricht wird der ACK-Slot (Acknowledge-Slot) verwendet. Kann ein Empfänger keinen Fehler feststellen, so setzt er einen dominanten Pegel anstelle des ACK-Slots. Der rezessive Pegel des Senders wird somit überschrieben. Ein dominanter Pegel entspricht einer positiven Quittierung. Diese positive Quittierung bestätigt dann die Korrektheit der Nachrichten. Negativ quittierte Knoten senden eine Fehlermeldung. Falls überhaupt keine positiven Quittierungen vorliegen, wird die momentane Nachrichtenübertragung ganz abgebrochen. 

Überlastung von CAN durch Echtzeitfähigkeit und hohe Datenübertragung

Durch zunehmende Anforderungen und neue Technologien (z.B. dem Fahrspurassistenten, der warnt, wenn die Reifen über die weiße Seitenspur geraten) stößt das CAN langsam an seine Grenzen. Genau aus diesem Grund haben sich in der Automobilindustrie auch noch zwei andere Bussysteme durchgesetzt:LIN (Local Interconnected Network) und FlexRay (eine zeitgesteuerte Kommunikationsmethode). Letzteres kann dank der hohen Datenrate (20 Mbit/s) sogar auf zwei Kommunikationsleitungen senden, was es zu einer interessanten Alternative macht.