Der CAN-Bus ist durch die Firma Bosch spezifiziert worden und wurde entwickelt für Anwendungen im Automobil. In Europa hat sich CAN auch durchgesetzt in Bereichen der Anlagenautomatisierung, z.B. der Kommunikation von Einheiten untereinander in größeren Geräten, wie z.B. Testgeräte in der Halbleiterindustrie, Laborautomatisierung, Vernetzung antriebstechnischer Einheiten.
Die CAN-Spezifikation umfasst dabei nur
die physikalische Ebene, die Bittransfercodierung sowie die Übermittlung von
Telegrammen und die Fehlerbehandlung. Weiterhin sind Dokumente zur angrenzenden
Themen verfügbar. Strenge Auflagen zur Kompatibilität sichern einwandfreie Funktion,
so sind z.B. CAN-Implementationen von Bosch in C und VHDL erhältlich.
Mit der sog. CAN-Open-Spezifikation steht ein Vorschlag zur Verfügung, wie Geräte aus unterschiedlichen Bereichen herstellerunabhängig mit definierten Telegrammen parametriert werden. Prinzipiell ist dadurch keine Anpassung der Systemsoftware mehr an die aktuell verwendete Hardware notwendig. Praktisch bedeutet CAN-Open jedoch einen Software-Overhead von ca. 16 Kbyte für ein typisches Gerät, sowie Anforderungen an Prozessorleistung und RAM. Da nicht alle herstellerspezifischen Features abgedeckt werden können, ist für jede Geräteklasse ein gewisser Funktionsumfang definiert, von dem meist nur ein Subset implementiert wird. Dadurch wird die Kompatibilität in vielen Fällen wieder erheblich eingeschränkt.
Applikationsebene |
Objektebene Nachrichtenfilterung Nachrichten- und Statusauswertung |
Transferebene Fehlerabschaltung Fehlerdetektion und –Signalisierung Validierung der Nachrichten Bestätigung Arbitration Nachrichtenkapselung in Telegramme Übertragungsrate und –Timing |
Physikalische Ebene Signalpegel und Bitrepräsentation Übertragungsmedium |
Abb. 6.10 : Umfang der CAN-Spezifikation
In der ersten CAN-Spec 2.0A wurde ein Identifier von 11 Bit vorgesehen.
Da jedoch jedes Peripheriegerät eine Reihe von Identifiern nutzen kann, und
der Wunsch besteht, Identifier anhand der Nachrichtentypen unabhängig von der
jeweiligen Kombination von Teilnehmern zu vergeben, wurde in der Spezifikation
2.0B der Identifier auf 21 Bit erweitert. Nahezu alle auf dem Markt verfügbaren
Bausteine unterstützen 2.0B, bzw. können in Netzwerken mit 2.0B Nachrichten
verwendet werden, wobei sie selbst nur 2.0A Telegramme verarbeiten (2.0B passive
Bausteine).
Das 15-Bit CRC erlaubt die sichere Erkennung von bis zu 5 Einzel-Bit-Fehlern sowie die Erkennung von Fehlerburst bis zu 14 Bit. Eine Fehlerkorrektur ist nicht vorgesehen.
Der / die Empfänger bestätigen den korrekten Empfang einer Nachricht direkt im Acknowledge-Feld des Telegramms durch einen dominanten Pegel.
Detektiert eine Station einen Fehler in einer Übertragung, kann sie durch einen ERROR-FRAME dies allen Stationen übermitteln. Der Error-Frame besteht dabei in einer Verletzung des Bit-Stuffing-Protokolls, d.h. dass mehr als 5 dominante Bits aufeinander folgen. Diese Bedingung ist daher in jedem Fall feststellbar und sichert die Konsistenz bei Multicasts.
Standard-Datenformat
(2.0A)
FS |
Identifier |
|
DLC |
Data |
CRC |
|
Ack |
|
EoF |
1 |
11 |
3 |
4 |
0..8 Byte |
15 |
1 |
1 |
1 |
7 |
Abb. 6‑11 : Erweitertes Datenformat (2.0B)
FS |
Identifier |
|
Identifier |
|
DLC |
Data |
CRC |
|
Ack |
|
EoF |
1 |
11 |
2 |
18 |
3 |
4 |
0..8 Byte |
15 |
1 |
1 |
1 |
7 |
Abb. 6‑12 : Aufbau der Telegramme bei CAN2.0A und CAN2.0B
|
Ein Bit |
|
||
|
SYNC-Seg |
TSEG1 |
TSEG2 |
|
|
|
Sample Point à |
|
|
Abb. 6‑13 : Aufbau der einzelnen Datenzellen
Prinzipiell kann ein Sender nur senden, wenn der Bus frei ist (CSMA/CD-Prinzip). Der CAN-Bus nutzt sowohl für die Auflösung von Kollisionen bei der Arbitration ein logisches Verordern der Informationen auf dem Bus, als auch für die Herstellung von Datenkonsistenz bei der Bestätigung von Multicast-Nachrichten. Dieses Konzept ist auch z.B. vom Bussystem I²C her bekannt. Es bedingt aber gleichzeitig, dass die Datenlaufzeit nicht höher sein darf als ein Bruchteil der Länge einer Bit-Zelle. Dadurch sind Größe des Bussystems und maximale Datenrate eng miteinander verbunden. Jeder Baustein kann beginnen zu senden, sobald der Bus frei ist. Dabei folgt nach einem Startbit, dass auch der Synchronisation der Sender untereinander dient, die Übertragung des Nachrichtenidentifiers, der u.A. den/die Zielknoten identifiziert. Sollten zwei Sender zugleich eine Übertragung starten, z.B. weil der Bus gerade frei geworden ist, so verliert derjenige den Masterzugriff, der als erstes einen „rezessiven“ (=passiven, d.h. durch die Abschlusswiderstände hergestellten) Pegel in seinem Telegramm enthält, der durch einen „dominanten“ Pegel des anderen Senders überdeckt wird. Der Sender, der die Arbitrationsphase verloren hat bricht dann seine Übertragung ab und startet erneut, sobald der Bus wieder frei ist. Auf den ersten Blick scheint die statische Kopplung der Prioritäten an die Nachrichten-IDs nachteilig zu sein. Sie kann jedoch aufgrund des großen Adressraums aufgelöst werden, indem die obersten Adressbits alleine zur Codierung der Priorität genutzt werden, während die niederwertigen Adressbits den Empfänger codieren.
Abb. 6‑14 : Arbitration durch logisches Verodern der Nachrichten-IDs auf dem Bus aus [1]
CAN verwendet eine direkte Codierung der Bits (NRZ), d.h. stabiler Logikpegel während der gesamten Bitübertragung. Dabei wird zu Synchronisationszwecken nach je 5 gleichen Bits ein Pegelwechsel erzwungen, indem ein Bit der gegenüberliegenden Priorität eingeschoben wird. Spezielle Frames, wie der Error-Frame können jederzeit erkannt werden, indem sie gegen diese Konvention verstoßen.
Abb. 6‑15 : Physikalische
Medien für A: Standard-CAN, B: Low-Speed, Fault-tolerant, C: Single-Wire [2]
Tabelle der wichtigsten Merkmale (pdf)