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.
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
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é.
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.
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.
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.
Trame
Une trame est constituée de 7 champs:
- Le début de trame SOF (Start Of Frame), 1 bit dominant ; la ligne étant précédemment au repos.
- L'identificateur est composé de 12 bits : 11 bits + RTR
- les 11 premiers indiquent l’identité du contenu du message, et servent également à l’arbitrage (gestion des priorités)
- le bit RTR (Remote Transmission Request) détermine s’il s’agit d’une trame de données (ex : régime moteur) ou d’une d’une trame de demande de message (ex : demande de T° eau). Le bit à 0 (dominant) pour une trame de données et le bit à 1 (récessif) pour une trame de demande.
- le champ de commande est constitué de 6 bits :
- les 2 premiers serviront pour une éventuelle évolution du protocole (bits de réserve);
- les 4 derniers permettent de coder le nombre d’octets du champ de données suivant.
- Le champ d'informations (données) contient de 0 à 8 octets de données (64 bits maxi)
- 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.
- 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.
- 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:
- SRR (Substitute Remote Request).
- IDE (Identifier Extension bit) qui établit la distinction entre format standard (état dominant) et format étendu (état récessif).
- RTR (Remote Transmission Request) détermine s’il s’agit d’une trame de données ou d’une d’une trame de demande de message.
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.
- ISO 11898-1:2015 : architecture générale, qui suit l'ISO/IEC 7498-1, couches PHY et MAC.
- ISO 11898-2:2003 : haute vitesse (jusqu'à 1 Mbit/s).
- ISO 11898-3:2006 : basse vitesse à tolérance de fautes, entre 40 kbit/s et 125 kbit/s.
- ISO 11898-4:2004 : synchronisation temporelle.
- ISO 11898-5:2007 : couche physique pour transmission jusqu'à 1Mbit/s, extension de l'ISO 11898-2 pour la faible consommation.
- ISO 11898-6:2013 : idem, mais concerne un mécanisme de réveil.
- ISO 16845-1:2004 : mécanismes de tests pour vérifier la conformité.
- ISO 16845-2:2014 : liste des tests.
Normes haut niveau, basées sur le CAN
Au-dessus des couches basses, on retrouve un certain nombre de normes, standardisées ou non.
- Standardisées:
- ARINC 825 (for the aviation industry)
- CANopen - EN 50325-4 (used for industrial automation)
- DeviceNet (used for industrial automation)
- EnergyBus - CiA 454 (used for light electrical vehicles)
- ISOBUS - ISO 11783 (agriculture)
- ISO-TP - ISO 15765-4 (Transport protocol for automotive diagnostic)
- SAE J1939 (In-vehicle network for buses and trucks)
- MilCAN
- NMEA 2000 - IEC 61162-3 (marine industry)
- Unified Diagnostic Services (UDS) - ISO 14229 (automotive diagnostics)
- Non standardisées:
- CANaerospace - Stock (for the aviation industry)
- CAN Kingdom - Kvaser (embedded control system)
- CCP/XCP (automotive ECU calibration)
- GMLAN - General Motors (for General Motors)
- RV-C - RVIA (used for recreational vehicles)
- SafetyBUS p - Pilz (used for industrial automation)
- UAVCAN (aerospace and robotics)
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.