CAN is een broadcast seriële bus: iedere CAN-node kan berichten verzenden die door alle anderen CAN-nodes ontvangen worden.
CAN Broadcast
Er is dus geen fysieke adressering maar de software bepaald vervolgens wat het met een bericht doet. Een CAN-bericht bestaat uit een 11-bit óf 29-bit Identifier (=Id) gevolgd door maximaal 8 databyte’s. CAN werkt met bus arbitrage: Hoe lager het Id, hoe hóger de berichtprioriteit: bij het verzenden gaan berichten met een lagere Id vóór op die met een hogere Id. CAN Id = 0 heeft dus de hoogste prioriteit. Identifiers hebben verder geen betekenis, het is opnieuw aan de achterliggende software om Id’s een betekenis te geven. Verder bevat een CAN-bericht wat overhead en een CRC checksum controle.
CAN (Controller Area Network) werd in 1986 ontwikkeld door Robert Bosch om in auto’s elektronisch modules met elkaar te verbinden. Zodoende konden nieuwe functies ontwikkeld worden: anti-spin control bij het optrekken van een auto kan bijvoorbeeld worden gerealiseerd als het ABS systeem informatie over het doorslippen van de wielen doorgeeft aan het motormanagement systeem.
Later werd CAN ook toegepast om complexe kabelbomen te vereenvoudigen door signalen over bijvoorbeeld verlichting naar modules in de koplampen te versturen. Bosch ontwikkelde een nieuwe bus omdat bestaande protocollen niet aan de eisen van de auto-industrie voldeden.
In tegenstelling tot het “node georiënteerde” of peer-to-peer berichtenverkeer, waarbij de transmissie van een bericht plaatsvindt tussen twee bepaalde nodes, is de verzending van berichten met CAN gebaseerd op het zogenaamde ‘producent-consument’- of broadcast-principe. Een bericht dat door een node wordt verstuurd, wordt door alle overige CAN-nodes ontvangen.
CAN Broadcast
Om dit te bereiken worden berichten niet voorzien van een afleveradres (fysieke adressering), maar in plaats daarvan met een ondubbelzinnige berichtenidentificatie (functionele adressering). Het versturen van berichten naar alle nodes in een netwerk wordt ook wel ‘broadcasting’ (uitzenden) genoemd.
Toekennen van een master zonder dataverlies of vertraging
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 aan dit transmissieproces beginnen. Om te voorkomen dat de nodes elkaars verzonden data vernietigen wordt in de arbitragefase bepaald welk bericht van de gelijktijdig verstuurde, maar conflicterende berichten de hoogste prioriteit heeft. 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 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.
De bus snelheid is afhankelijk van de bus timing, die in CAN van de kristal gestuurde systeem kloksnelheid wordt afgeleid. Met behulp van een ‘baudrate pre-sclaler’ wordt deze systeem kloksnelheid teruggebracht tot een basis CAN kloksnelheid (=Time Quatum). Dat is nog niet de CAN bus snelheid want in CAN wordt, op deze basis, de timing van een bit opgebouwd:
Een van de meest interessante kenmerken van het CAN-protocol is het bijzonder onderscheidend vermogen in het detecteren van transmissiefouten. Hiermee komt het protocol tegemoet aan de uiterst hoge eisen die gelden voor Electronic Control Units in voertuigen. Het groot vermogen voor foutdetectie wordt gerealiseerd door een combinatie van verschillend methodes voor foutendetectie. Eén van de meest effectieve methodes hierbij bestaat uit het monitoren van het bus niveaudoor de verzendende node van een bericht dat alle bekende fouten opspoort.
Oorspronkelijk omvatte CAN enkel 11-bit identifiers. Bosch voegde de variant met 29-bit identifier toe om in Amerika de SAE J1939-standaard te kunnen ondersteunen. Dit gebeurde in 1991 en werd geïntroduceerd als CAN 2.0. Vandaag de dag kennen we enkel nog CAN 2.0 controllers. De CAN 2.0 standaard bestaat dus uit twee onderdelen:
11-bit identifier, ook wel CAN Standaard of 2.0A genoemd en
29-bit identifier, ook wel CAN Extended of 2.0B genoemd
Beide ‘soorten’ mogen door elkaar heen gebruikt worden, maar zijn wel verschillend. Een Standaard CAN-bericht met Identifier = 0, is een ander bericht dan een Extended CAN-bericht met Identifier = 0.
Een CAN-controller is een volledig digitale oplossingen meestal onderdeel van een microcontroller. Het zendt, via de zogenaamde TxD-uitgang, en ontvangt, via de RxD-ingang, digitale signalen die enkel geschikt zijn voor communicatie op de printplaat. Er is daarom elektronica (=physical layer) nodig om deze signalen betrouwbaar, storingsongevoelig en over grote afstand te kunnen transporteren. Tegelijkertijd moeten de TxD-uitgang en RxD-uitgang dusdanig met elkaar verbonden zijn dat de RxD het TxD-signaal kan teruglezen om dominante bits te herkennen.