Het formaat van een CAN FD-bericht

Een standaard CAN FD-bericht

Het onderstaande figuur geeft het formaat van een standaard CAN FD-bericht weer. Het begin van een bericht is te herkennen aan een dominant bit voorop, gevolgd door een 11-bit lange berichtensleutel. Het oorspronkelijke r0-bit is nu omgedoopt nar EDL (Extended Data Length) en geeft aan of het een CAN 2.0 of CAN FD bericht betreft. CAN FD bevat een aantal nieuwe controle bits. De totale overhead is gegroeid van 44 bits (CAN 2.0) naar 53 bits in CAN FD.

Formaat standaard CAN-FD bericht met 11-bit identifier, control, DLC, max. 64 data bytes, CRC en end
Formaat standaard CAN-FD bericht
Formaat standaard CAN-FD bericht met 11-bit identifier, control, DLC, max. 64 data bytes, CRC en end
Formaat standaard CAN-FD bericht

Veldnaam Lengte [bits] Doel
SOF = Start-of-frame 1 Maakt start van een bericht duidelijk door de bus naar dominant '0' te trekken
Identifier 11 Een (unieke) identificatie voor de data die ook de berichtprioriteit aangeeft
r1 = Reserved bit 1 1 Gereserveerd bit moet dominant '0' zijn. Let op: In CAN 2.0 is dit het RTR-bit, zie opmerking hierna
IDE = Identifier extension bit 1 Dominant '0' voor een standaard (11 bits Id) CAN FD-frame
EDL = Extended Data Length 1 Recessief '1' voor CAN FD; Dominant '0' voor CAN 2.0 Let op: Dit is in CAN 2.0 reserved bit r0
r0 = Reserved bit 0 1 Gereserveerd bit 1 moet dominant '0' zijn.
BRS = Bit Rate Switch 1 Recessief '1' schakelt tijdens data-fase over op versneld zenden; Dominant '0' geen snelheidsomschakeling tijdens data-fase
ESI = Error State Indicator 1 Recessief '1' Zender node is Error Passief; Dominant '0' Zender node is Error Actief
DLC = Data length code 4 Aantal data byte's (0–64 bytes) volgens tabel
Data field 0 – 512 Data die verzonden wordt (aantal bytes bepaald door het DLC-veld)
CRC = Cyclic Redundancy Check 17 / 21 Controle rekensom over alle voorgaande velden CRC = 17 bits voor DLC ≤ 16 bytes en 21 bits voor > 16 data byte's
CDL = CRC delimiter 1 Moet recessief '1' zijn
ACK = Acknowledge slot 1 Zender stuurt recessief '1' en (iedere) ontvanger kan met dominant '0' de succesvolle ontvangst terug melden
ADL = Acknowledge delimiter 1 Moet recessief '1' zijn
EOF = End-of-frame 7 Moet recessief '1' zijn

Het dataveld van een CAN-bericht kan tussen de nul en 64 databytes bevatten. Het dataveld wordt gevolgd door een 17-bits (≤16 data bytes) of 21-bits (>16 data bytes) CRC-segment. Dit veld wordt gebruikt door de ontvanger om het bericht te controleren. In het acknowledge-veld verwacht de zender van een bericht erkenning door van tenminste één ontvangende node’s binnen het netwerk het signaal te ontvangen dat het bericht foutloos is ontvangen. Deze erkenning wordt gegeven door de transmissie van een dominante bit in het acknwoledge-veld door alle (ontvangende) knooppunten binnen het netwerk die het bericht foutloos ontvangen hebben. Deze ontvangstbevestiging wordt uitsluitend gebruikt voor het uitsluiten van fout verzendende node’s.
Uiteindelijk geeft het ‘einde bericht’-veld de afsluitende en foutloze transmissie van een CAN-bericht aan. Zoals al eerder aangegeven zal, indien een node een fout heeft vastgesteld, het bericht direct onderbroken worden door een Error-frame met dominante ‘0’-en.

Een Extended CAN FD-bericht

Het onderstaande figuur geeft het formaat van een Extended CAN-bericht weer. Het basisverschil is dat een Extended CAN-bericht een Identifier-veld van 29-bits heeft.

Formaat extended CAN-FD bericht met 29-bit identifier, control, DLC, max. 64 data bytes, CRC en end
Formaat extended CAN-FD bericht
Formaat extended CAN-FD bericht met 29-bit identifier, control, DLC, max. 64 data bytes, CRC en end
Formaat extended CAN-FD bericht

Veldnaam Lengte [bits] Doel
SOF = Start-of-frame 1 Maakt start van een bericht duidelijk door de bus naar dominant '0' te trekken
Identifier A 11 Deel A van een (unieke) 29-bits identificatie voor de data die ook de berichtprioriteit aangeeft; MSB bits 28 t/m 18
SSR = Substitute remote request 1 Recessief '1', maakt het mogelijk dat een standaard 11-bits CAN data-bericht de arbitrage wint van een extended CAN-bericht
IDE = Identifier extension bit 1 Recessief '1' voor een extended (29 bits Id) CAN-frame
Identifier B 18 Deel B van een (unieke) 29-bits identificatie voor de data die ook de berichtprioriteit aangeeft; LSB bits 17 t/m 0
r1 = Reserved bit 1 1 Gereserveerd bit moet dominant '0' zijn. Let op: In CAN 2.0 is dit het RTR-bit, zie opmerking hierna
EDL = Extended Data Length 1 Recessief '1' voor CAN FD; Dominant '0' voor CAN 2.0 Let op: Dit is in CAN 2.0 reserved bit r0
r0 = Reserved bit 0 1 Gereserveerd bit 1 moet dominant '0' zijn.
BRS = Bit Rate Switch 1 Recessief '1' schakelt tijdens data-fase over op versneld zenden; Dominant '0' geen snelheidsomschakeling tijdens data-fase
ESI = Error State Indicator 1 Recessief '1' Zender node is Error Passief; Dominant '0' Zender node is Error Actief
DLC = Data length code 4 Aantal data byte's (0–64 bytes) volgens tabel
Data field 0 – 512 Data die verzonden wordt (aantal bytes bepaald door het DLC-veld)
CRC = Cyclic Redundancy Check 17 / 21 Controle rekensom over alle voorgaande velden CRC = 17 bits voor DLC ≤ 16 bytes en 21 bits voor > 16 data byte's
CDL = CRC delimiter 1 Moet recessief '1' zijn
ACK = Acknowledge slot 1 Zender stuurt recessief '1' en (iedere) ontvanger kan met dominant '0' de succesvolle ontvangst terug melden
ADL = Acknowledge delimiter 1 Moet recessief '1' zijn
EOF = End-of-frame 7 Moet recessief '1' zijn

Omdat het extended CAN-bericht later aan de CAN-standaard werd toegevoegd, moest het extended-bericht dusdanig aangepast worden dat het naast het standaard bericht past. Dit is gerealiseerd door de 29-bits identifier te verdelen in een 11-bits deel A (het standaard CAN-bericht Id) en een aanvullende 18-bits deel B. Een oorspronkelijk gereserveerd bit is omgedoopt in IDE om een onderscheid tussen standaard (IDE=’0’) en extended (IDE=’1’) te maken. In het extended frame werd een extra geserveerd bit toegevoegd.
Het SSR-bit heeft een speciale functie: het zorgt ervoor dat een standaard 11-bits data-bericht de arbitrage wint van het vergelijkbare 29-bits extended data-bericht. Stel dat twee CAN-node’s tegelijkertijd een bericht willen verzenden met standard Id = 0h én extended Id = 0h, dan zal de node die standard Id = 0h bericht verzend de arbitrage winnen.

Remote Request Frame

Een CAN-node kan een Identifier opvragen door een Remote Request Bericht te versturen. Het is een CAN-bericht zonder data-veld én met het RTR-bit gezet op recessief '1'. Het is er natuurlijk in de smaken standaard en extended. Een Remote Request bericht kan het beste worden vertaal met “Identifier?”. het is de bedoeling dat de ‘eigenaar’ van de gevraagde identifier reageert door het corresponderende CAN data-bericht te versturen.

Echter, een Remote Request Frame bevat van nature geen enkele data byte, het is immers bedoeld om data op te vragen. Een dergelijke frame maakt dus ook geen gebruik van de voordelen van CAN FD omdat die juist rond het verzenden van data bytes geconcentreerd zijn. Daarom ondersteunt CAN FD ook geen Remote Request Frames. Het RTR-bit is in CAN FD omgedoopt tot r1 (Reserved 1).

Bosch raadt aan om voor Remote Requests gebruik te maken van het CAN 2.0 Remote Request Formaat. Dat kan ook omdat CAN FD controllers terugwerkend CAN 2.0 compatibel zijn. Overigens zijn Remote Requests een achterhaald principe en worden in principe geadviseerd er géén gebruik (meer) van te maken in nieuwe implementaties.