CAN Bus

URL: ../..dic/bussysteme/can.html

CAN Bus

Allgemeines link symbol

CAN steht für Controller Area Network und ist ein serielles Feldbussystem. Die Entwicklung von CAN startete 1983 bei Bosch mit dem Ziel, die Vernetzung der Steuergeräte in Fahrzeugen zu vereinfachen. CAN ist ein ISO-Standard (11898) und findet weite Verwendung im Automobil- sowie Automatisierungsbereich.

Der CAN-Standard definiert die beiden Schichten 1 und 2 des ISO/OSI-Schichtenmodells (Bitübertragungsschicht und Sicherungsschicht).

Bitübertragungsschicht link symbol

Für die Übertragung wird neben der gemeinsamen Masse ein differentielles Signal verwendet, welches über die beiden Signalpfade CAN+ und CAN- (oft auch CAN_HIGH und CAN_LOW genannt) läuft.

Der Bus arbeitet nach dem Multi-Master-Prinzip, d. h. jede Komponente kann aktiv auf den Bus zugreifen. Ein CSMA/CR-Verfahren stellt sicher, dass Nachrichten mit höherer Priorität nicht durch gleichzeitig startende Nachrichten mit niedrigerer Priorität beschädigt werden (siehe Arbitrierung).

Die beiden logischen Werte 0 und 1 werden mittels zweier Zustände übermittelt. Die logische 1 wird dabei rezessiv übertragen, die logische 0 wird dominant übertragen. Durch diese zwei Zustände setzt sich am Bus eine logische 0 gegenüber einer gleichzeitig anliegenden logischen 1 durch.

Ein wichtiges Grundprinzip von CAN ist, dass jeder aktive Sender während der Übertragung den Zustand des Busses überwacht. Wenn der Bus einen anderen Zustand hat, als der Sender selbst auf den Bus legt, wird die Übertragung abgebrochen.

Je nach Leitungslänge des Busses gibt es Limitierungen für die Datenrate:

  • 1 MBit/s bis 40 Meter
  • 500 kBit/s bis 100 Meter
  • 125 kBit/s bis 500 Meter

Als Busmedium wird meist ein Twisted-Pair-Kabel mit einem Wellenwiderstand von ungefähr 110 Ohm verwendet.

Arbitrierung link symbol

Jedes Datentelegramm enthält am Anfang des Pakets eine 11-Bit-Identifikationsnummer (direkt hinter einem Start of Frame-Bit). Im CAN-2.0-B-Standard wird darüber hinaus auch eine 29 Bit lange Identifikationsnummer definiert.

Sobald ein Paket erfolgreich übertragen wurde und der Bus damit frei ist, hat jeder Sender die Möglichkeit, ein Datentelegramm zu schicken. Übertragen mehrere Sender zeitgleich ein Paket, wird mittels der Arbitrierung das Paket mit der höchsten Priorität ermittelt. Dazu übertragen die Teilnehmer Bit für Bit der Identifikationsnummer, beginnend mit dem höchstwertigen Bit. Wird eine logische 1 ausgesendet, eine logische 0 aber vom Bus zurückgelesen, beendet der Teilnehmer die Übertragung.

Je niedriger die Identifikationsnummer, desto höher die Priorität. Ein Paket mit der ID 0 hat alle Bits auf logisch 0, und diese wird sich gegen alle anderen IDs durchsetzen.

Eindeutigkeit der IDseverity symbol

Identifikationsnummern identifizieren das Datentelegramm, nicht den Teilnehmer selbst! Für ein CAN-System muss sichergestellt werden, dass Identifikationsnummern eindeutig sind.

Beispiel link symbol

Im folgenden Beispiel senden drei Teilnehmer ein Paket. Die Identifikationsnummern der Datentelegramme sind dabei:

  • 0x125 – Binär 001 0010 0101
  • 0x12A – Binär 001 0010 1010
  • 0x147 – Binär 001 0100 0111

CAN Arbitrierung

Als erstes scheidet ID 0x147 aus. Bei Bit ID6 wird vom Teilnehmer eine logische 1 gesendet, am Bus hat sich aber die logische 0 der beiden anderen Teilnehmer durchgesetzt. Gleiches passiert bei ID 0x12A bei Bit ID3.

Sicherungsschicht link symbol

Aufbau eines CAN-Telegramms im Base-Frame-Format
Aufbau eines CAN-Telegramms im Base-Frame-Format (Quelle: Endres~commonswiki, Lizenz CC BY-SA 3.0)

Ein Datentelegramm besteht aus folgenden Feldern:

  • Start of Frame – markiert den Start eines Frames und ist logisch 0
  • Arbitration Field – überträgt die 11 Bit Identifikation und ein Remote Transmission Request-Flag
  • Control
    • ID Extension-Bit – muss logisch 0 für eine 11-Bit-Identifikation sein (logisch 1 bei 29 Bit)
    • Data Length – Anzahl an Datenbytes (0 bis 8)
  • Data – Datenbytes (im Bild wird ein Datenbyte übertragen)
  • CRC Field – CRC-Prüfsumme
  • ACK Slot – wird vom Sender mit logisch 1 gesendet, ein Empfänger sendet bei Erfolg logisch 0
  • End of Frame – 7 rezessive Bits

Der Remote Transmission Request (kurz RTR) ist eine Möglichkeit, von einem Teilnehmer Daten anzufordern. Dazu wird ein Telegramm mit der gewünschten Identifikationsnummer und dem RTR-Bit auf logisch 1 gesendet.