Wat is CAN?

Een kort overzicht van de CAN-bus.

CAN protocol

CAN is een broadcast seriële bus: iedere CAN-node kan berichten verzenden die door alle anderen CAN-nodes ontvangen worden.

CAN broadcast: ieder bericht wordt door alle nodes ontvangen
CAN Broadcast
CAN broadcast: ieder bericht wordt door alle nodes ontvangen
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.

Lees meer

can-introductie

Historie

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.

CAN-bus Mercedes-Benz W211 (2002-2009)
CAN-bus Mercedes-Benz W211 (2002-2009)
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.

Lees meer

Verzenden van berichten

Identifiers

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: ieder bericht wordt door alle nodes ontvangen
CAN Broadcast
CAN broadcast: ieder bericht wordt door alle 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.

Lees meer

Busarbitrage

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.

Lees meer

Bussnelheid en -lengte

Bit timing

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:

CAN Bit Timing: opbouw van een CAN-bit en sampling point
CAN Bit Timing
CAN Bit Timing: opbouw van een CAN-bit en sampling point
CAN Bit Timing

Lees meer

Foutafhandeling

Efficiënte foutendetectie en afsluiting

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.

Lees meer

Het formaat van een CAN-bericht

CAN 2.0

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.

Lees meer

Physical Layer

Van digitaal naar bus

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.

Lees meer