Gestion de bus CAN



Le projet

Introduction
Le protocole CAN
Les composants CAN
Cartes développées
Programmation PPC
Environnement JerryCAN



Divers

L'Equipe
Sources
FAQ
Rapport en PDF

Site Web de Vincent


Le protocole CAN

1.1 Origines et utilisations du CAN.
1.1.1 Le CAN dans l'industrie automobile.
1.1.2 Autres applications industrielles.
1.1.3 Perspectives.

1.2 Le CAN dans le modèle ISO/OSI.
1.2.1 Le modèle ISO/OSI.
1.2.1.1 La couche physique.
1.2.1.2 La couche liaison.
1.2.1.3 La couche réseau.
1.2.1.4 La couche transport.
1.2.1.5 La couche session.
1.2.1.6 La couche présentation.
1.2.1.7 La couche application.

1.3 Fonctionnement du CAN.
1.3.1 Principes.
1.3.1.1 "Identifiers".
1.3.1.2 Notions de bits dominants / récessifs.
1.3.2 Fonctionnement détaillé de l'arbitrage.
1.3.3 Transmission des messages.
1.3.3.1 Protocoles 2.0A et 2.0B.
1.3.3.2 Types de messages.
1.3.4 Format des trames de données.
1.3.4.1 Start of frame.
1.3.4.2 Arbitration field.
1.3.4.3 Control field.
1.3.4.4 Data field.
1.3.4.5 CRC field.
1.3.4.6 ACK field.
1.3.4.7 End of frame.
1.3.5 Bit-stuffing.
1.3.6 Détection et gestion des erreurs.
1.3.6.1 Types d'erreurs.
1.3.6.2 Trames d'erreurs.
1.3.6.3 Gestion et confinement des erreurs.
1.3.6.4 Probabilité de détection des erreurs.

Le CAN est un protocole de communication série qui supporte efficacement le contrôle en temps réel de systèmes distribués tels qu'on peut en trouver dans les automobiles, et ceci avec un très haut niveau d'intégrité au niveau des données.

Le CAN a été standardisé par l'ISO dans les normes 11898 pour les applications à hauts débits et ISO 11519 pour les applications à bas débits.

1.1 Origines et utilisations du CAN.

1.1.1 Le CAN dans l'industrie automobile.

Pour satisfaire les exigences de plus en plus importantes du client en matière de sécurité et de confort, et pour se conformer aux les lois de réduction de la pollution et de la consommation de plus en plus drastiques, l'industrie automobile a développé de nombreux systèmes électroniques : systèmes anti-patinage, contrôle électronique du moteur, de l'air climatisé, fermeture centralisée des portes, etc.

La complexité de ces systèmes et la nécessité d'échanger des données entre eux signifient de plus en plus de câbles. A côté du coût très important de ce câblage, la place qui lui est nécessaire pouvait le rendre tout simplement impossible. Enfin, le nombre croissant de connections et de câbles posait de sérieux problèmes de fiabilité et de réparation.

Bosch, un important équipementier automobile, a fournit la solution dans le milieu des années 80 avec le bus CAN. L'entreprise allemande a définit le protocole et a autorisé de nombreux autres fabricants à développer des composants compatibles CAN.

Avec le protocole CAN, les contrôleurs, capteurs et actionneurs communiquent entres eux sur deux câbles à une vitesse pouvant aller jusqu'à 1 Mbits/s.

1.1.2 Autres applications industrielles.

Les contrôleurs CAN sont physiquement petits, peu coûteux et entièrement intégrés. Ils sont utilisables à des débits importants, en temps réel et dans des environnements difficiles. Enfin, les transmissions ont un haut niveau de fiabilité. C'est pourquoi ils ont été utilisés dans d'autres industries que l'automobile et des applications utilisant le CAN sont aujourd'hui disponibles dans l'agriculture, la marine, le matériel médical, les machines textiles, etc.

1.1.3 Perspectives.

On apprend dans une enquête de la publication Electronics Weekly du 15 novembre 1995 que, dans le monde :

  • 5,5 millions de composants CAN ont été vendus en 1995,
  • plus de 3 millions de bus CAN installés dans des véhicules et 6 millions dans des applications non automobiles,
  • en 1999, 140 millions de composants CAN devraient avoir été vendus.

1.2 Le CAN dans le modèle ISO/OSI.

Le CAN étant un protocole réseau, il s'intègre dans la norme ISO/OSI (ISO : International Standards Organization, OSI : Open Systems Interconnection) qui définit 7 couches permettant de couvrir la totalité d'un protocole.

Les différentes couches définissent les services du protocole.

Le tableau suivant résume les couches utilisées par le protocole CAN.

Spécifications Couche OSI Implémentation
à spécifier par l'utilisateur Couche application Software embarqué ou non
Spécifications du protocole CAN Couche de communication de données Logical Link Control On-chip hardware
Medium Access Control
Couche physique Physical Signaling
Physical Medium Attachment
Medium Dependent Interface Off-chip hardware
Transmission Medium
Couches OSI appliquées au CAN

1.2.1 Le modèle ISO/OSI

1.2.1.1 La couche physique.

La première couche du modèle a pour but de conduire les éléments binaires jusqu'à leur destination sur le support physique. Elle fournit les moyens matériels nécessaires à l'activation, au maintien et à la désactivation de ces connections physiques.

Cette couche gère la représentation du bit (codage, timing, synchronisation), et définit les niveaux électriques, optiques,... des signaux ainsi que le support de transmission.

Le protocole CAN ne décrit que la représentation détaillée du bit (Physical Signalling), mais pas le moyen de transport et les niveaux des signaux de telles sorte qu'ils puissent être optimisés selon l'application.

1.2.1.2 La couche liaison.

Elle fournit les moyens fonctionnels nécessaires à l'établissement, au maintien et à la libération des connexions entres les entités du réseau. Cette couche (aussi appelée couche de communication de donnée, Data Link Layer) devra notamment corriger les erreurs qui ont pu se produire au premier niveau (même s'il est impossible de corriger toutes les erreurs).

Le protocole CAN décrit entièrement cette couche.

La couche liaison est subdivisée en deux sous-couches. La sous-couche LLC (Logical Link Control) effectue :

  • le filtrage des messages,
  • la notification des surcharges (overload),
  • la procédure de recouvrement des erreurs.

La sous-couche MAC (Medium Access Control), qui est le coeur du protocole CAN, effectue :

  • la mise en trame du message,
  • l'arbitrage,
  • l'acquittement,
  • la détection des erreurs,
  • la signalisation des erreurs.

1.2.1.3 La couche réseau.

La couche réseau doit permettre d'acheminer correctement les paquets d'informations jusqu'à l'utilisateur final, en passant par des passerelles qui interconnectent plusieurs réseaux entre eux. Elle assure le contrôle des flux (pour tenir des temps de réponse acceptables), le routage des paquets, et l'adressage (pour l'ensemble des machines du monde !).

C'est aussi ici qu'interviennent les deux philosophies concurrentes des réseaux:

  • Le mode connecté, à la base du protocole X.25, où l'émetteur et le récepteur se mettent d'accord sur un comportement commun.
  • Le mode non connecté, à la base du protocole IP (Internet Protocol), sans contraintes pour l'émetteur vis-à-vis du récepteur.

Cette couche est vide dans le protocole CAN.

1.2.1.4 La couche transport.

La couche transport est le dernier niveau qui s'occupe de l'acheminement des informations. Elle doit optimiser la qualité de la transmission, notamment avec des outils de détection d'erreurs et des algorithmes de renvoi des messages perdus.

Cette couche est vide dans le protocole CAN.

1.2.1.5 La couche session.

La couche de session permet aux différents éléments du réseau d'organiser et de synchroniser leur dialogue. Il faut en effet s'assurer si l'on veut émettre de l'information qu'un récepteur est là pour récupérer ce qui a été envoyé.

Cette couche est vide dans le protocole CAN.

1.2.1.6 La couche présentation.

Cette couche se charge de la syntaxe des informations que se communiquent les éléments du réseau, c'est-à-dire que ces éléments utilisent bien un langage commun pour transférer des données.

Cette couche est vide dans le protocole CAN.

1.2.1.7 La couche application.

C'est la dernière couche du modèle OSI. Elle donne aux applications le moyen d'accéder aux couches inférieures.

Cette couche a été normalisée en 1987 au sein d'une structure globale : la structure de la couche application, ou ALS (Application Layer Structure). Elle détermine comment différentes applications vont pouvoir coexister et utiliser des modules communs. De très nombreuses normes ont été définies sur cette base.

Cette couche n'est bien sûr pas vide pour le protocole CAN, mais sa spécification est laissée à l'utilisateur.

1.3 Fonctionnement du CAN.

1.3.1 Principes.

1.3.1.1 "Identifiers".

Les trames de données transmises par un noeud sur le bus ne contiennent ni une quelconque adresse du noeud expéditeur ou du noeud destinataire. C'est plutôt le contenu du message, sa signification (son "meaning") qui est précisé par un identificateur (ID). Chaque noeud recevant un message regarde si celui-ci est intéressant pour lui grâce à l'ID. Si c'est le cas, il le traite, sinon, il l'ignore.

Cet unique ID indique aussi la priorité des messages. Plus la valeur est faible, plus le message sera prioritaire. Si deux noeuds ou plus cherchent à avoir accès au bus en même temps, c'est celui de plus haute priorité qui gagne. Les messages de priorité inférieure seront automatiquement retransmis lorsque le bus sera libre.

1.3.1.2 Notions de bits dominants / récessifs.

La norme CAN ne spécifie pas de couche physique. Différentes implémentations sont donc possibles : filaire, HF, infrarouge, par fibre optique, etc.

Mais toute implémentation doit respecter le principe des bits dominants / récessifs. Chaque noeud doit pouvoir présenter sur le bus un bit appelé dominant (0 logique) et un bit appelé récessif (1 logique). Les implémentations doivent aussi respecter la règle suivante : si 2 noeuds présentent des niveaux logiques différents, le bit dominant s'impose.

1.3.2 Fonctionnement détaillé de l'arbitrage.

Dans un système typique, certains paramètres vont changer plus rapidement que d'autres. Ce sera par exemple la vitesse d'un moteur, tandis qu'un paramètre plus lent pourra être la température de l'habitacle.

Il est donc naturel que les paramètres qui varient le plus soient transmis le plus souvent et par conséquent doivent avoir une plus grande priorité.

Dans les applications en temps réel, ceci nécessite non seulement une vitesse de transmission importante, mais aussi un mécanisme d'allocation du bus efficace qui soit capable de traiter les cas où plus d'un noeud cherchent à transmettre en même temps.

Pour déterminer la priorité des messages, le CAN utilise la méthode CSMA/CD (Carrier Sense, Multiple Access with Collision Detect) avec la capacité supplémentaire de l'arbitrage non destructif (Non-Destructive Bitwise Arbitration) afin d'offrir une disponibilité maximale du bus.

Comme on l'a vu précédemment, la priorité d'un message est déterminée par la valeur de son ID. La valeur de chaque ID, et donc la priorité de chaque type de messages, est assignée durant la conception du système. Un certain nombre de standards ont été développés selon les domaines d'utilisation du bus CAN pour fixer la priorité des ID et permettre une interopératibilité des différents équipements.

Tout conflit de bus est résolu par le mécanisme du "ET cablé", c'est-à-dire qu'un état dominant écrase un état récessif. Concrètement, si plusieurs noeuds débutent leur trame en même temps, le premier qui présente un bit récessif alors qu'au moins un autre présente un bit dominant perd l'arbitrage (dans la trame, l'ID commence par le bit de poids fort).

Exemple de perte d'arbitrage : le noeud perd l'arbitrage au 11ème bit.
Exemple de perte d'arbitrage : le noeud perd l'arbitrage au 11ème bit.

Tout ce passe donccomme si le message de plus haute priorité était le seul à être transmis. Lorsqu'un noeud perd l'arbitrage, il devient automatiquement un récepteur du message en cours de transmission, et il n'essaiera de retransmettre son message que lorsque le bus sera à nouveau libre.

L'avantage d'un tel système est une utilisation meilleure du bus qu'avec d'autres mécanismes, tels que le mécanisme de "fixed time schedule allocation" du Token ring ou l'arbitrage destructif de l'Ethernet.

1.3.3 Transmission des messages.

L'information sur le bus est envoyée sous la forme de messages (Appelés aussi trames ou "frames".) au format fixé. Quand le bus est libre, n'importe quel noeud peut commencer à envoyer un message.

1.3.3.1 Protocoles 2.0A et 2.0B.

Le protocole CAN 2.0 comporte deux sous-spécifications qui diffèrent uniquement au niveau de la longueur de l'ID. La version 2.0A définit des ID de 11 bits et la version 2.0B des ID de 29 bits. On appelle ces trames respectivement des trames standards ("Standard Frames") et des trames étendues ("Extended Frames").

Le format standard est équivalent au format tel qu'il était décrit dans la version 1.2 du protocole. Le format étendu est une nouvelle fonctionnalité du protocole 2.0. Pour permettre le développement de contrôleurs assez simple, le support complet du format étendu n'est pas requis pour être conforme au protocole 2.0. Les contrôleurs sont considérés conforme au protocole 2.0 s'ils respectent les deux conditions suivantes :

  • Le format standard doit être totalement supporté.
  • Ils doivent être capables de recevoir des trames étendues, mais sans forcément être capable de les traiter. Elles ne doivent seulement pas être détruites.

On se référera à la description du protocole CAN en 10.3.1.2 pour le détail du fonctionnement de la compatibilité du CAN 2.0B par rapport au 2.0A.

1.3.3.2 Types de messages.

Quatre types de messages peuvent être transmis :

  • Les Data Frames sont utilisées pour transporter des données sur le bus. Leur format est détaillé ci-après.
  • Les Remote Frames sont utilisées par un noeud pour demander la transmission d'une Data Frame par d'autres noeuds avec le même ID. Deux éléments distinguent cette trame d'une trame de données normale : elles ne contient aucun bit de données et son bit RTR est récessif.
  • Les Error Frames sont transmises par un noeud ayant détecté une erreur. Leur format et utilisation est détaillée par la suite.
  • Les Overload Frames sont utilisées pour produire un délai entre deux Data ou Remote Frames successives. Voir le protocole CAN en 10.3.4.

1.3.4 Format des trames de données.

Les trames de données (Data Frames) sont composées de 7 parties détaillées ci-après.

Le format est indiqué pour des trames respectant le protocole 2.0A. On se référera à la documentation du protocole CAN pour le format des trames 2.0B.

Data frame.
Data frame.

1.3.4.1 Start of frame.

Le bit Start of frame (SOF) marque le début d'une Data Frame ou d'une Remote frame. C'est un unique bit dominant.

Un noeud ne peut bien sûr débuter une transmission que si le bus est libre.

Ensuite, tous les autres noeuds se synchronisent sur SOF du noeud ayant commencé une transmission.

1.3.4.2 Arbitration field

Arbitration field : format standard.
Arbitration field : format standard.

L'Arbitration field est constitué de l'identifieur et du bit RTR.

L'identificateur (ID) permet d'identifier le message. Il est transmis dans l'ordre ID10 à ID0, où ID0 est le bit le moins significatif.

Le bit RTR (Remote Transmission Request) caractérise les Remote Frames. Il est dominant dans les Data Frames et récessif dans les Remote Frames.

1.3.4.3 Control field

Control field.
Control field.

Le Control field est composé de 6 bits. Les 2 premiers sont des bits réservés et les 4 suivants constituent le Data length code (DLC). Le DLC indique le nombre d'octets du Data field. La valeur du DLC est forcément comprise entre 0 et 8, soit 9 valeurs. 4 bits dominants (0000) correspondent à la valeur 0 pour le DLC, tandis que 1 bit récessif et 3 bits dominant (1000) correspondent à la valeur 8.

1.3.4.4 Data field

Ce sont les données transmises par la Data frame. Il peut contenir de 0 à 8 octets, où chaque octet est transmis avec le bit de poids fort en premier.

1.3.4.5 CRC field

CRC field.
CRC field.

Le CRC field est composé de la séquence de CRC sur 15 bits suivi du CRC delimiter (1 bit récessif).

La séquence de CRC (Cyclic redundancy code) permet de vérifier l'intégrité des données transmises. Les bits utilisés dans le calcul du CRC sont ceux du SOF, de l'Arbitration field, du Control field et du Data field.

1.3.4.6 ACK field

Le ACK field est composé de 2 bits, l'ACK Slot et le ACK Delimiter (1 bit récessif). Le noeud en train de transmettre envoie un bit récessif pour le ACK Slot. Un noeud ayant reçu correctement le message en informe le transmetteur en envoyant un bit dominant pendant le ACK Slot : il acquitte le message.

1.3.4.7 End of frame

Chaque Data frame et Remote frame est terminée par une séquence de 7 bits récessifs.

1.3.5 Bit-stuffing

Pour les Data Frames et les Remote Frames, les bits depuis le Start of frame jusqu'à la séquence de CRC sont codés selon la méthode du bit stuffing. Quand un transmetteur détecte 5 bits consécutifs de même valeur dans les bits à transmettre, il ajoute automatiquement un bit de valeur opposée.

Exemple de bit stuffing.
Exemple de bit stuffing.

1.3.6 Détection et gestion des erreurs.

Le CAN a été créé pour opérer dans des environnements difficiles et c'est pourquoi il comprend de nombreux mécanismes de détection d'erreur.

1.3.6.1 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érification 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étecte une erreur de stuffing lorsqu'il reçoit 6 bits consécutifs de même valeur dans une partie d'un message qui devrait être codé avec la méthode du bit stuffing.
CRC error
Une erreur de CRC est détecté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.

1.3.6.2 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.
Passive error flag
6 bits récessifs consécutifs, jusqu'à ce qu'ils soient écrasés par des bits dominants.

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.

1.3.6.3 Gestion et confinement 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étecte 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 avec leurs exceptions dans le protocole CAN en 5.2.

  • 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.

1.3.6.4 Probabilité de détection des erreurs

Le protocole CAN est extrêmement fiable au de niveau de la détection des erreurs.

Les erreurs survenants sur tous les noeuds sont détectables à 100 %.

Au niveau des erreurs survenants sur un seul noeud, rien que la vérifcation du CRC peut permettre de détecter jusqu'à 5 erreurs de bits avec une probabilité de 100 % . La probabilité qu'une erreur ne soit pas détectée par le mécanisme du CRC est de 3.10-5.

Avec tous les autres mécanismes de détection, la vraie valeur est de 10-11.


De plusieurs appareils identiques, celui que vous choisirez sera le seul à ne pas fonctionner.

Généralisation de l'Axiome du Choix de Picavet.

Précédent : Introduction

Suivant : Les composants CAN


TOP