Bus CAN

Le bus CAN est employé dans les véhicules, il fallait bien trouver un moyen de limiter les kilomètres de câbles utilisés dans les voitures!

Vu la multiplication des capteurs et actionneurs dans une voiture, on ne pouvait plus garder les connexions électriques "traditionnelles" entre tous les éléments, il est vite apparu qu'il était plus malin de partager le même câble électrique pour partager l'information et les ordres.

Au début des années 1980, BOSCH développe une solution de multiplexage, le bus CAN, Controler Area Network, qui sera rapidement normalisé (history of CAN technology). Ses caractéristiques sont:

  • hiérarchisation des messages.
  • garantie des temps de latence.
  • souplesse de configuration.
  • réception de multiples sources avec synchronisation temporelle.
  • fonctionnement multimaître.
  • détections et signalisations d’erreurs.
  • retransmission automatique des messages altérés dès que le bus est de nouveau au repos.
  • distinction d’erreurs : d’ordre temporaire ou de non-fonctionnalité permanente au niveau d’un nœud, déconnexion automatique des noeuds défectueux.

Le bus CAN est utilisé dans pas mal d'industries, non seulement l'automobile, mais aussi l'aéronautique.

Le CAN simplifie le véhicule

Couche physique

La transmission de réalise sur une paire filaire différentielle (donc deux fils, CAN_H et CAN_L), ce qui permet d'éliminer les parasites grâce au fort taux de réjection de mode commun.

En pratique, il y a trois bus CAN différents dans une voiture, à des débits différents :

  • un bus très rapide pour gérer la sécurité (freinage, ABS, détection chocs, airbags...);
  • un bus à vitesse moyenne pour gérer le moteur (commandes et capteurs);
  • un bus lent pour gérer tous les accessoires (lampes, moteurs d’asservissements, boutons...).

Le bus CAN existe sous deux versions :

  • CAN2.0A : trame standard identificateur de 11 bits (CAN standard) ;
  • CAN2.0B : trame plus longue avec identificateur sur 29 bits (CAN étendu).

Il existe également deux types différenciés par leur débit :

  • le CAN Low Speed : < 125 kbit/s
  • le CAN High Speed: 125 kbit/s à 1 Mbit/s
CAN paire différentielle
les deux vitesses de CAN

Codage du bus CAN

Je vais donner quelques détails de base ici, mais si vous êtes intéressé pour aller plus en avant, alors il faudra aller voir des cours spécialisés, je ne fais qu'effleurer le sujet ici pour donner une idée de ce que c'est.

Le codage NRZ : bits dominants et récessifs

La succession de bits transitant sur le bus est codé avec la méthode du NRZ (Non Return To Zero). Pendant la durée totale du bit, le niveau de tension de la ligne est maintenu, c’est à dire que pendant toute la durée durant laquelle un bit est généré, sa valeur reste constante qu’elle soit dominante ou récessive.

Comme tout le monde peut causer sur le bus en même temps (du moins au début, pendant une période dite d'arbitrage), c'est toujours le dominant qui gagne et écrase le reste: c'est une sorte de ET câblé.

CAN dominant/récessif

Le bit stuffing

Une des caractéristiques du codage NRZ est que le niveau du bit est maintenu pendant toute sa durée. Cela pose des problèmes de fiabilité si un grand nombre de bits identiques se succèdent. La technique du Bit Stuffing impose au transmetteur d’ajouter automatiquement un bit de valeur opposée lorsqu’il détecte 5 bits consécutifs dans les valeurs à transmettre.

CAN bit stuffing

Le bit timing

On définit la plus petite base de temps reconnue sur un bus CAN comme étant le Time Quantum. Cette base de temps est une fraction de l’horloge de l’oscillateur du bus. Un bit dure entre 8 et 25 quantum.

CAN bit quantum
CAN bit sample

Par exemple, en ISO 11898 : High Speed CAN 250 Kbps

  • 1 bit correspond à 32 coups d’horloge
  • La lecture du bit devra être faite au 20ième coup d’horloge

Protocole

L'arbitrage

Le concept de communication du bus CAN est celui de la diffusion d’information (broadcast) : chaque station connectée au réseau écoute les trames transmises par les stations émettrices. Ensuite chaque nœud décide quoi faire du message, s’il doit y répondre ou non, s’il doit agir ou non, etc…

L'urgence des informations échangées sur le bus peut être très diverse: une valeur variant rapidement, comme l'état d'un capteur ou l'asservissement d'un moteur, doit être transmis plus souvent avec un retard moindre que d'autres valeurs comme la température du moteur, qui évolue lentement.

Le protocole CAN autorise différents stations à accéder simultanément au bus durant une période dite d'arbitrage. Mais cet accès se fait par priorité: cette méthode est appelée CSMA CD/AMP (Carrier Sense Multiple Acces with Collision Detection and Arbitration Message Priority).

Sur le réseau CAN, l'identificateur de chaque message, qui est un mot de 11 bits (format standard) ou 29 bits (format étendu), détermine sa priorité. Les priorités sont attribuées lors de l'analyse conceptuelle du réseau, au moyen de valeur binaire, et ne peuvent donner lieu à aucune modification dynamique.

En début de trame, pendant la période d'arbitrage, tout le monde peut parler en même temps. Mais un seul finira par avoir la parole, le plus prioritaire. Le procédé d'attribution du bus est basé sur le principe de l'"arbitrage bit à bit", selon lequel les noeuds en compétition, emettant simultanément sur le bus, comparent bit à bit l'identificateur de leur message avec celui des messages concurrents. Les stations de priorité moins élevées perderons la compétition face à celle qui a la priorité la plus élevé. Ca marche grâce au coup du "ET câblé" dominant/récessif. Et, résultat intéressant, on ne perd pas de temps: le prioritaire n'a pas à recommencer du début.

CAN arbitrage

Trame

Une trame est constituée de 7 champs:

CAN trame
CAN 7 champs
  1. Le début de trame SOF (Start Of Frame), 1 bit dominant ; la ligne étant précédemment au repos.
  2. L'identificateur est composé de 12 bits : 11 bits + RTR
  3. le champ de commande est constitué de 6 bits :
  4. Le champ d'informations (données) contient de 0 à 8 octets de données (64 bits maxi)
  5. Le champ de contrôle est une zone CRC (Cyclic Redundancy Code) de 15 bits. Ces bits sont recalculés à la réception et comparés aux bits reçus. S’il y a une différence, une erreur CRC est déclarée.
  6. La zone d’acquittement (ACKnowledge) composé d’un bit à l’état récessif ainsi qu’un bit séparateur ACK. Le premier bit doit être forcé à l’état dominant par les stations ayant bien reçu cette trame.
  7. La zone de fin de trame EOF (End Of Frame), 7 bits récessifs (à l’état 1).

Remarque : 3 bits à l’état 1 séparent obligatoirement 2 trames consécutives


En format étendu, les zones sont un peu plus peuplées:

CAN etendu
CAN etendu identificateur

La trame de donnée est prioritaire sur la trame de requête. Il existe aussi une trame de surcharge pour dire qu'une station est surchargée pendant un certain temps. Une trame d'erreur permet de gérer les erreurs locales, pour dire d'émettre de nouveau le message.

Encore une fois, ce qui est indiqué ici n'est qu'un début d'information, pour vor de quoi il retourne.


Normalisation

Bas niveau

L'ISO 11898 spécifie les couches physique et liaison, les deux premières couches du modèle OSI.

Normes haut niveau, basées sur le CAN

Au-dessus des couches basses, on retrouve un certain nombre de normes, standardisées ou non.

Tout ça est récupéré de Wikipedia, et n'est évidemment pas limitatif, et pas forcément très précis, comme tout ce qui vient de Wikipedia, mais bon, c'est un bon point de départ pour chercher.


  • Wikipedia CAN bus
  • Technologuepro.com Bus CAN