Arbitrage van CAN-berichten op de bus
Omdat elke node binnen een CAN-netwerk kan beginnen met het versturen van een bericht zodra de bus vrij is, is het mogelijk dat verschillende nodes gelijktijdig een nieuw bericht wensen te verzenden. Om te voorkomen dat CAN nodes 'door elkaar praten', is er arbitrage die bepaald welk bericht voorrang heeft.
Conflicterende nodes die tegelijkertijd een bericht willen verzenden komen in veel netwerken voor. Het gebeurd ook zeer regelmatig. De bus is actueel bezet, dus moeten ander nodes wachten om ook een bericht te verzenden. Logischerwijs proberen ze dat tegelijkertijd zodra de bus weer vrij is. Wat echter CAN uniek maakt, is dat de toekenning wie als eerste mag verzenden zonder enige tijdsvertraging of dataverlies verloopt. Dat maakt het gedrag van CAN ook daadwerkelijk real-time.
Toekennen van een master zonder dataverlies of vertraging
Het Id is de belangrijkste factor tijdens de arbitrage.. Alleen de node die het bericht met de op dat moment hoogste prioriteit wil versturen, mag het transmissieproces vervolgen. Het bericht met de laagste (!) Identifier heeft dus de hoogste prioriteit. In het onderstaande figuur is te zien hoe dit principe voor busarbitrage wordt toegepast. De arbitragefase bestaat uit de transmissie van de Identifier en het zogenaamd RTR-bit.
Wanneer een node, hoewel zelf overgegaan naar een recessief niveau (recessieve bit, de ‘1’), in het netwerk een dominant busniveau (dominante bit, de ‘0’) waarneemt zal het, het transmissieproces onmiddellijk afbreken en terugkeren naar de ontvangerspositie omdat er in dit geval klaarblijkelijk gelijktijdig een bericht met een hogere prioriteit wordt verstuurd. Tegelijkertijd beseft deze node dat het de reeds verzonden bits eigenlijk ook al ontvangen heeft van de node waaraan deze de arbitrage verloor.
Node 1, 2, 3 willen tegelijkertijd een bericht verzenden: Node 1 en 2 haken af tijdens de arbitrage omdat ze bij resp. bit 2 en bit 5 een recessief bit ('1') willen zenden maar een dominant bit ('0') op de bus lezen. Node 3 wint de arbitrage en dat bericht is ook (voor alle nodes) op de bus te lezen.
De winnende node wordt de master en verzendt het volledige CAN-bericht. De verliezende node(s) zijn, samen met alle overige nodes, de slaves. Data kan omdat de verliezende nodes, tot het moment dat ze verloren, precies weten welke bits ze op de bus hebben gezet. Die hebben ze dus van de winnende node ook ontvangen. Omdat met elke busarbitrage een bericht wordt verstuurd garandeert dit proces toegang tot de bus zonder dataverlies of -vertraging.
De node(s) die een bericht met lagere Id wilden verzenden, zullen dat opnieuw proberen zodra de bus weer vrij is.
CAN Standaard versus Extended
Indien de arbitrage tussen een standaard- en extended-bericht plaats vindt met dezelfde identifiers, dan zal het standaard bericht prioriteit hebben. Dit komt doordat het eerste bit, dat het verschil tussen beide formaat bepaald, dominant ‘0’ voor een standaard bericht is.
Prioriteit georiënteerde berichtendoorvoer
Het in het bovenstaande beschreven arbitrageproces garandeert dat het bericht met de hoogste prioriteit te allen tijde wordt verstuurd zodra de bus vrij is. De prioriteit van het bericht wordt bepaald door de waarde van de berichtidentificatie. Hoe lager deze waarde is, hoe hoger de prioriteit van het bericht. Het bericht met ID 0 heeft dus de hoogste prioriteit. Het principe van de prioriteit georiënteerde berichten maakt het mogelijk om op uiterst efficiënte wijze gebruik te maken van de voor datatransmissie beschikbare bandbreedte. Zodoende is het mogelijk dat berichten met een lage prioriteit de bus bezetten zonder hiermee de doorvoer van berichten met een hogere prioriteit substantieel te vertragen. Voor berichten met de hoogste prioriteit - dat is Id = 0 - geldt bijvoorbeeld een maximale latentietijd van 130 µs bij een transmissiesnelheid van 1 Mbit/s.
Aan de andere kant moet er bij het ontwerpen van een CAN-systeem rekening mee worden gehouden dat de berichten met een hoge prioriteit niet voortdurend de bus bezetten. Dit kan bijvoorbeeld worden voorkomen door softwarematig een transmissie time-out in te voeren. In bijvoorbeeld CANopen is dit de zogenaamde 'blokkeertijd'.Voor een evenwichtige bus wordt een busbelasting van maximaal 80% geadviseerd. Een hogere busbelasting is enkel aan te raden als met de timing-consequenties in het communicatie model rekening is gehouden. Anders bestaat de kans dan berichten met lage prioriteit continu de arbitrage verliezen en nooit meer verzonden worden.
Merk op dat arbitrage en prioriteit alleen maar betrekking hebben op nodes die proberen tegelijkertijd berichten te verzenden. Zoals al gemeld, een node die arbitrage verliest, zal opnieuw proberen het bericht te verzenden zodra de bus weer vrij is. Stel dat deze node ondertussen een bericht met hogere prioritiet eerder wenst te verzenden, dan zal dat via software geregeld dienen te worden.






