Le bus CAN



Types d'erreurs

Le CAN implémente cinq mécanismes de détection des erreurs, 2 au niveau bits (le ”bit monitoring” et le ”bit stuffing”) et 3 au niveau messages (v´erification du CRC, de la forme des trames et de l’acquittement). Ces cinq types d’erreurs différents qui peuvent être détectée par un noeud sont: Bit error: Un noeud envoyant un bit sur le bus regarde aussi en même temps les bits qu’il reçoit (Bit monitoring). Il considère comme une erreur de bit lorsque le bit envoyé est différent du bit reçu, à l’exception de l’envoi d’un bit récessif durant l’arbitrage (cas de la perte d’arbitrage) ou pendant le ACK Slot (trame acquittée).
Stuff error: Le noeud d´etecte une erreur de stuffing lorsqu’il reçoit 6 bits cons´ecutifs de même valeur dans une partie d’un message qui devrait être codé avec la m´ethode du bit stuffing.
CRC error: Une erreur de CRC est d´etectée lorsque le CRC calculé par un récepteur est différent de la valeur du CRC contenu dans la trame.
Form error: Une ”Form error” est détectée lorsqu’un bit qui devrait être à une certaine valeur est à une valeur différente (un délimiteur par exemple).
ACK error Le transmetteur détecte une erreur d’acquittement lorsqu’il ne reçoit pas de bit dominant pendant le ACK Slot.

Zone de couverture des erreurs


Trames d'erreurs

Une trame d’erreur est constituée de deux parties. La première est formée par la superposition des différents ”Error flags” mis par les noeuds du bus. La seconde partie est un délimiteur. Un noeud qui détecte une erreur la signale en envoyant un Error flag. Celui-ci viole la règle du bit stuffing (6 bits dominants consécutifs) et par conséquent, tous les autres noeuds détectent aussi une erreur et commencent à envoyer un Error flag. La séquence de bits dominants qui existe alors sur le bus est le résultat de la superposition de plusieurs Error flags, et sa longueur varie entre 6 et 12 bits. Il existe deux types d’Error flags :

Active error flag : 6 bits dominants consécutifs.

Detail d'une trame d'erreur active

Passive error flag : 6 bits récessifs consécutifs, jusqu’à ce qu’ils soient écrasés par des bits dominants.

Detail d'une trame d'erreur passive

L’Error delimiter est composé de 8 bits récessifs. En fait, après avoir transmis son Error flag, chaque noeuds envoie des bits récessifs et observe le bus jusqu’à ce qu’il détecte un bit récessif, après quoi il envoie encore 7 bits récessifs supplémentaires.


Gestion des erreurs

Le confinement des erreurs est un mécanisme permettant de faire la différence entre des erreurs temporaires ou permanentes. Les erreurs temporaires peuvent être causées par des glitchs par exemple, tandis que des erreurs permanentes sont en général due à de mauvaises connections ou à des composants défaillants. Ce système va permettre d’enlever un noeud défaillant du bus qui sinon aurait pu perturber les autres noeuds. Un noeud peut être dans trois états : error-active, error-passive ou bus-off.

1. Un noeud en mode d’erreur actif (error-active) peut prendre part normalement dans la communication sur le bus. Il transmettra un Active error flag s’il d´etecte une condition d’erreur.
2. Un noeud en mode d’erreur passif (error-passive) peut prendre part dans la communication, mais s’il détecte une condition d’erreur sur le bus, il transmettra un Passive error flag. Ce mode indique un noeud à problèmes. 3. Un noeud en mode bus-off n’est pas autorisé à avoir une quelconque influence sur le bus. Deux compteurs d’erreurs sont implémentés dans chaque noeud : celui des erreurs en transmission (Transmit error count) et celui des erreurs en réception (Receive error count). Les grandes règles de modifications des compteurs d’erreurs sont les suivantes. Elles sont détaillées dans le schéma ci-dessous:

Synoptique lors de detection d'erreurs


– Lorsqu’un récepteur détecte une erreur, son Receive error count est augmenté de 1.
– Lorsqu’un transmetteur envoie un Error flag, son Transmit error count est augmenté de 8.
– Après une transmission réussie, le Transmit error count est diminué de 1.
– Après une réception réussie, le Receive error count est diminué de 1.

Un noeud est en mode error-active si ses deux compteurs d’erreurs sont inférieurs à 127. Il est en error-passive si l’un des deux est compris entre 128 et 256. Si le Transmit error count est supérieur à 256, le noeud est en bus-off.