Bei CAN erfolgt der Buszugriff durch die Busteilnehmer völlig unkoordiniert nach dem Prinzip des dezentralen Buszugriffs. Da die Anforderungen zum Senden einer Nachricht bei den über das Netzwerk verteilten Anwendungsprozessen i.a. asynchron erfolgen, ist es daher grundsätzlich möglich, dass mehrere Teilnehmer gleichzeitig mit dem Senden einer Nachricht beginnen. Generell gilt allerdings, dass ein Teilnehmer nur dann den Bus belegen darf, wenn dieser vorher frei war.
Immer dann, wenn mehrere Teilnehmer gleichzeitig mit dem Senden einer Nachricht beginnen, wird im Rahmen einer Auswahlphase (Arbitrierungsphase) entschieden, welcher Teilnehmer am Ende der Auswahlphase am Bus verbleiben darf. Ein solcher Buszugriffskonflikt wird durch bitweises Aufschalten der Bits des Nachrichtenarbitrierungsfeldes aufgelöst. Das Arbitrierungsfeld einer CAN-Nachricht besteht aus dem Nachrichtenidentifier sowie dem RTR-Bit (Remote Transmission Request Bit), über welches zwischen einem Daten- und einem Datenanforderungstelegramm unterschieden wird.
Im CAN-Standardformat hat der Nachrichtenidentifier eine Länge von 11 Bit, im erweiterten (extended) Format eine Länge von 29 Bit. Das höchstsignifikante Bit des Identifiers wird zuerst übertragen.
Grundlage der bitweisen CAN-Bus-Arbitrierung ist die Unterscheidung von zwei physikalischen Buspegeln, nämlich einem dominanten (überstimmenden) und einem rezessiven (nachgebenden) Pegel. Solche Pegelverhältnisse lassen sich auf einfache Weise z. B. durch eine Open-Collector-Anschaltung ("Wired-And"-Schaltung) darstellen.
Realisierung von dominantem/rezessivem Pegel auf der Basis einer Wired-And-Verknüpfung. Im Beispiel ist der Buspegel 0 (0 V) dominant, der Pegel 1 (5 V) rezessiv.
Im Beispiel liegt der Bus nur dann auf H-Pegel (5 V), wenn keiner der Teilnehmer die Busleitung auf L-Pegel zieht. Der H-Pegel entspricht somit dem rezessiven Pegel, der L-Pegel dem dominanten Pegel. Die Darstellung rezessiv/dominanter Pegelverhältnisse ist auch mit optischen Medien möglich. In diesem Falle wird ein rezessiver Pegel durch den Zustand "dunkel" ein, dominanter Pegel durch den Zustand "hell" dargestellt.
Solange der Bus frei ist, befindet er sich auf rezessivem Pegel. Ein Teilnehmer, der den Bus belegt, signalisiert dies durch Aufschalten eines dominanten Bits (Start-of-Frame, SOF).
Während der Arbitrierungsphase vergleicht jeder sendende Teilnehmer den von ihm aufgeschalteten Buspegel mit dem tatsächlich auf dem Bus vorhandenen Pegel. Jeder Teilnehmer der ein rezessives Bit gesendet hat und ein dominantes beobachtet, stellt seinen Arbitrierungsversuch sofort ein und wird zum Empfänger der gerade von einem anderen Teilnehmer gesendeten Nachricht. Unter der Voraussetzung, dass ein Identifier wert nur jeweils einer Nachricht zugeordnet wird, und dass eine logische Null durch einen dominanten Buspegel abgebildet wird, verbleibt am Ende eines Arbitrierungsprozesses daher nur derjenige Teilnehmer am Bus, dessen Nachricht den niedrigsten Identifierwert besitzt. Die Priorität einer Nachricht ist also umso höher, je niedriger der Wert des dieser Nachricht zugeordneten Identifiers ist.
Beispiel eines Arbitrierungsvorgangs im CAN-Protokoll. Die Teilnehmer 1, 2 und 3 beginnen gleichzeitig einen Arbitrierungsversuch (1). Teilnehmer 2 verliert zum Zeitpunkt (2), Teilnehmer 1 zum Zeitpunkt (3) das Buszugriffsrecht. Beide Teilnehmer gehen damit in den Empfangszustand; am Ende der CAN-Bus-Arbitrierungsphase (4) besitzt nur noch Teilnehmer 3 das Buszugriffsrecht und schaltet seine Nachricht auf den Bus.
Die im CAN-Protokoll zugrunde gelegte bitweise CAN-Bus-Arbitrierung über den Identifier einer Nachricht stellt also sicher, dass bei gleichzeitiger Belegung des Busses durch mehrere Teilnehmer immer nur ein Teilnehmer am Bus verbleibt. Die von diesem Teilnehmer gesendete Nachricht wird hierbei nicht zerstört, sodass wir von einer „verlustlosen“ Busarbitrierung sprechen.
Für den Fall, dass der Transfer einer bestimmten Nachricht gleichzeitig von einem Sender als Datentelegramm (Data Frame) sowie von einem Empfänger als Datenanforderungstelegramm (Remote Frame) initiiert wird, kann der Arbitrierungskonflikt nicht allein über den Nachrichtenidentifier gelöst werden. In diesem Fall entscheidet das auf den Identifier folgende RTR-Bit (Remote Transmission Request Bit) über das Buszugriffsrecht.
Das Prinzip der bitweisen CAN-Bus-Arbitrierung basiert darauf, dass ein arbitrierender Teilnehmer den Wert des von ihm aufgeschalteten Bits mit dem tatsächlich auf dem Bus vorhandenen Wert vergleicht. Bei der Festlegung des frühestmöglichen Abtastzeitpunktes (Vergleichszeitpunktes) nach Aufschalten eines Bits müssen daher die maximal möglichen Signallaufzeiten zwischen den Teilnehmern sowie die teilnehmerinternen Signalverzögerungen berücksichtigt werden. Das Verfahren der bitweisen CAN-Bus-Arbitrierung begrenzt somit bei gegebener Datenrate, d.h. Bitdauer, die maximal mögliche Netzausdehnung. Dieses Thema behandeln wir aber in einem anderen Blog-Beitrag.