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.
Op basis van vastgestelde formaatelementen en het CRC-segment controleert vervolgens iedere ontvangende node ieder ontvangen bericht. Op deze manier kunnen fouten worden opgespoord als ze nog slechts lokaal voor komen. Ter aanvulling op het opsporen van transmissiefouten bevat het CAN-protocol eveneens een mechanisme voor het opsporen en uitsluiten van defecte nodes. Dit voorkomt dat defecte nodes het berichtenverkeer op de bus voortdurend kunnen verstoren.
Fouten signalering in plaats van een ontvangstbevestiging
In tegenstelling tot bussystemen met een node georiënteerde transmissie, gebruikt het berichtengeoriënteerde CAN-systeem het principe van foutensignalering. Elke node controleert ieder bericht dat via de bus wordt verstuurd op fouten. Zodra een verzendende of ontvangende node een fout ontdekt wordt er een signaal gegeven aan alle andere nodes door een foutenbericht (error frame) te versturen. Dit bestaat over het algemeen uit een dominante bitreeks; een bitcombinatie van 6 bits van gelijke polariteit. Alle node nemen het foutensignaal waar en annuleren het bericht dat ze reeds (deels) hadden ontvangen. Dataconsistentie is hiermee voor alle nodes binnen het netwerk gewaarborgd. Zodra een transmissieknooppunt een error frame heeft verstuurd of ontvangen wordt ogenblikkelijk opnieuw geprobeerd het eerder verstuurde bericht te verzenden middels het bekende busarbitrageproces. Het mechanisme om fouten tijdig te signaleren zorgt ervoor dat de berichtendoorvoer voor alle nodes in het netwerk vrij van fouten en consistent verloopt. Omdat het afgeven van een signaal direct plaatsvindt na het ontdekken van een fout zijn uiterst korte foutenhersteltijden mogelijk. Het gegeven dat de bus alleen dan extra wordt belast wanneer er een fout is opgespoord heeft een aanzienlijk lagere additionele busbelasting tot gevolg.
Betrouwbaarheid van CAN
Dankzij Error Frame’s wordt voorkomen dat sommige nodes een bericht wel, en andere het bericht niet accepteren: alle nodes accepteren het, of geen enkele. Deze foutafhandeling in CAN heeft één belangrijk doel: voorkomen dat een node een verkeerde bericht als correct accepteert. De kans dat dat kan gebeuren is in CAN als volgt gedefinieerd:
In een voorbeeld uitgedrukt: Stel we bekijken een CAN-netwerk dat 8 uur per dag en 365 dagen per jaar op 500 kbit/s met volledige bus belasting berichten communiceert. Als hierbij een foutenlast van een bit error per 700 msec voor komt, zal dit tot één niet gedetecteerde fout in eens in de 1000 jaar (!) leiden.
Fouttellers
De foutafhandeling verloopt dus grotendeels tussen de CAN-controllers onderling. Om de host systemen hiervan op de hoogte te houden zijn er zogenaamde fouttellers geïmplementeerd: een verzend en ontvangst foutteller.
Verzend foutenteller
Iedere keer als tijdens het verzenden van een bericht een fout optreedt wordt deze teller verhoogd. Als een bericht succesvol verzonden wordt, en de teller niet nul is, wordt deze verlaagd. Zodra de teller de waarde 96 overschrijdt, geeft de CAN-controller een interrupt en Fout-vlag af aan de host. Indien de teller de waarde 127 overschrijdt, verstuurd de CAN-controller een zogenaamd Error Passive-bericht om andere CAN-controllers te informeren.
Zodra de teller de maximale waarde bereikt (255) schakelt de CAN-controller zich automatisch af van de bus. De CAN-controller dient dan via een zogenaamde software (zachte) reset weer on-line gebracht te worden. Na 128 X 11 bit zal de CAN-controller zich dan weer op de bus aansluiten.
Ontvangst foutenteller
De ontvangst foutenteller werkt gelijk aan de verzendteller, maar dan voor ontvangen berichten. Door technische beperkingen is de maximale waarde van de ontvangsteller beperkt tot het Error Passive Nivau (127).
CAN hanteert overigens een complex algoritme voor het verhogen en verlagen van de foutentellers met waarden die hoger dan één zijn. Afgezien van het bovenstaande algoritme, en de Bus OFF status, hebben de fouttellers geen directe invloed op de werking van de CAN-controllers. Het is aan de achterliggende software om aan de hand van de foutenteller waarden acties te ondernemen.