Introduction
Le Controller Area Network, ou bus CAN, est le réseau qui assure la communication entre les différents systèmes électroniques d’un véhicule moderne. Bosch a commencé à travailler sur cette technologie en 1983, l’a présentée lors du congrès de la SAE à Détroit en 1986, puis elle a été intégrée pour la première fois en production de série dans la Mercedes-Benz Classe S en 1991. Aujourd’hui, une voiture embarque entre une douzaine et plus d’une centaine de calculateurs électroniques (ECU), dont la plupart communiquent entre eux via le bus CAN. Cette technologie s’est également largement développée au-delà de l’automobile, notamment dans les poids lourds, les machines agricoles, les navires, les ascenseurs, l’automatisation industrielle et les équipements médicaux.
Si vous connaissez déjà les protocoles SPI et I2C, la première chose à remarquer est la différence fondamentale dans le fonctionnement du CAN. Il n’y a pas de maître, ni d’adresses de périphériques. Chaque trame est diffusée à tous les nœuds du bus. Elle contient un identifiant qui indique la nature du message, et non son destinataire. Chaque nœud détermine lui-même les identifiants auxquels il souhaite s’intéresser. Dès sa conception, le bus CAN a été pensé pour fonctionner dans un environnement électriquement perturbé, gérer les conflits d’accès entre plusieurs nœuds sans perte de données et détecter de manière fiable les trames corrompues.
Cet article suit le parcours d’une trame, depuis son émission par un nœud jusqu’à sa transmission sur le bus, et explique le rôle de chacun de ses éléments. Les prochains articles de cette série s’appuieront sur ces bases pour aborder le diagnostic des défauts, la sécurité et les données qui circulent réellement dans la chaîne cinématique d’un véhicule
Dominant et récessif
La couche physique à laquelle on fait généralement référence lorsqu’on parle du bus CAN est le CAN haute vitesse, normalisé par la norme ISO 11898-2. Deux fils, CAN High (CANH) et CAN Low (CANL), forment une paire torsadée avec une résistance de terminaison de 120 ohms à chaque extrémité. Un nœud se connecte à cette paire par l’intermédiaire d’un transceiver CAN, qui convertit les signaux d’émission et de réception à niveaux logiques simples du contrôleur en signaux différentiels sur le bus, et inversement.
Le bus possède deux états. À l’état récessif, aucun nœud ne pilote le bus. La polarisation des transceivers maintient les deux fils à environ 2,5 V, avec une différence de potentiel proche de zéro. À l’état dominant, un transceiver fait monter la tension de CANH vers 3,5 V et descendre celle de CANL vers 1,5 V, ce qui produit une tension différentielle d’environ 2 V. Un récepteur compare simplement les tensions des deux fils : une différence supérieure à 0,9 V est interprétée comme un état dominant, tandis qu’une différence inférieure à 0,5 V correspond à un état récessif. Les parasites captés le long du câble apparaissent plus ou moins de la même manière sur les deux fils et s’annulent lors de la soustraction. C’est ce mécanisme qui permet au bus CAN de résister aux parasites générés notamment par l’alternateur et le système d’allumage d’un véhicule.
L’état dominant correspond à un 0 logique et l’état récessif à un 1 logique. Ces appellations ont été choisies parce que l’état dominant l’emporte toujours. Si un seul nœud du bus impose un état dominant tandis que les autres restent à l’état récessif, le bus prend l’état dominant. D’un point de vue logique, le bus réalise une fonction ET câblée entre tous les émetteurs. C’est sur cette propriété fondamentale que reposent presque tous les mécanismes intelligents du CAN, de l’arbitrage à l’acquittement, en passant par la signalisation des erreurs.
Le contrôleur intégré au microcontrôleur fonctionne avec des niveaux logiques sur ses broches TX et RX. C’est le transceiver qui lui permet de devenir un nœud CAN. Tout dispositif capable de piloter une ligne d’émission et de lire une ligne de réception peut être connecté derrière un tel transceiver. C’est pourquoi il existe des contrôleurs CAN autonomes pilotés via SPI, en complément des périphériques directement intégrés aux microcontrôleurs.
La trame, champ par champ
Une trame de données standard, utilisée pour la grande majorité des communications dans les voitures particulières, est structurée comme illustré ci-dessous. Elle utilise un identifiant de 11 bits et peut transporter jusqu’à 8 octets de données.
- Début de trame (SOF – Start of Frame) : un seul bit dominant. Le bus était au repos, à l’état récessif. Le front descendant permet donc à tous les autres nœuds de synchroniser leur horloge de bits sur celle de l’émetteur.
- Champ d’arbitrage : l’identifiant de 11 bits, transmis du bit de poids fort au bit de poids faible, suivi du bit RTR (Remote Transmission Request). Le bit RTR est dominant pour une trame de données. Lorsqu’il est transmis à l’état récessif, il indique une trame distante (Remote Frame), qui demande à un autre nœud de transmettre les données associées à cet identifiant. Les trames distantes sont autorisées, mais rarement utilisées dans les véhicules modernes.
- Champ de contrôle : le bit IDE (Identifier Extension), dominant pour une trame standard, un bit réservé (r0) transmis à l’état dominant, puis le code de longueur des données sur 4 bits (DLC – Data Length Code), qui indique le nombre d’octets de données, de 0 à 8. En CAN classique, un récepteur interprète les valeurs de 9 à 15 comme correspondant à 8 octets.
- Champ de données : de 0 à 8 octets, chacun étant transmis en commençant par le bit de poids fort.
- Champ CRC : un contrôle de redondance cyclique de 15 bits, calculé sur l’ensemble des données depuis le début de trame jusqu’à la fin du champ de données, suivi d’un bit délimiteur CRC à l’état récessif. Le polynôme générateur est x¹⁵ + x¹⁴ + x¹⁰ + x⁸ + x⁷ + x⁴ + x³ + 1. Il permet de détecter toute erreur en rafale de moins de 15 bits ainsi que jusqu’à cinq erreurs de bits isolées dans le flux couvert.
- Champ ACK : un emplacement d’acquittement suivi d’un bit délimiteur ACK à l’état récessif. Il s’agit du seul emplacement de la trame où les autres nœuds peuvent intervenir. Ce mécanisme est détaillé dans une section dédiée ci-dessous.
- Fin de trame (EOF – End of Frame) : sept bits récessifs.
Après la fin de trame vient une période d’intermission de trois bits, également récessifs, avant qu’un nœud puisse commencer à transmettre une nouvelle trame. Au total, une trame standard comporte 44 bits de surcharge pour 0 à 64 bits de données. Une trame complète de huit octets représente donc 108 bits avant l’insertion des bits de bourrage, et 111 bits avec l’intermission. À 500 kbit/s, cela représente un peu plus de 220 microsecondes. Cette surcharge est le prix à payer pour la robustesse du CAN. C’est également ce qui explique pourquoi le CAN est un bus de commande plutôt qu’un bus de données : il transporte de nombreux petits messages critiques en termes de temps, et non de gros blocs de données.
Il existe également un format étendu, introduit avec la norme CAN 2.0B en 1991, qui porte l’identifiant à 29 bits. Après les 11 premiers bits de l’identifiant, il transmet un bit SRR (Substitute Remote Request) et un bit IDE récessif, puis les 18 bits restants de l’identifiant, suivis du bit RTR.
Les trames standard et étendues peuvent coexister sur le même bus. Une trame de données standard remporte toujours l’arbitrage face à une trame étendue partageant les mêmes 11 premiers bits. Au douzième bit, la trame standard transmet son bit RTR dominant, tandis que la trame étendue transmet son bit SRR récessif. Ce dernier sert précisément à perdre cet arbitrage. Le bit IDE dominant qui suit permet de départager le cas plus rare d’une trame distante standard. Les identifiants étendus sont très utilisés dans les poids lourds, où la norme SAE J1939 repose sur ce format, et apparaissent également dans certains échanges de diagnostic. La plupart des messages relatifs à la carrosserie et à la chaîne cinématique des voitures particulières utilisent le format 11 bits.
Le bit de bourrage (Bit Stuffing)
Le CAN utilise un codage NRZ (Non-Return-to-Zero) : le niveau du bus reste simplement à la valeur du bit pendant toute sa durée, et aucun changement d’état ne se produit tant que la valeur ne change pas. Cette méthode est efficace, mais les récepteurs doivent maintenir leur horloge de bits synchronisée sur celle de l’émetteur en surveillant les fronts du signal. Une longue succession de bits identiques ne leur fournit donc aucune transition sur laquelle se synchroniser.
Pour résoudre ce problème, le CAN utilise une règle appelée bit stuffing, ou insertion de bits de bourrage. Chaque fois que l’émetteur transmet cinq bits consécutifs de même valeur, il insère automatiquement un bit de valeur opposée. Tous les récepteurs appliquent la même règle et suppriment ce bit de bourrage avant d’interpréter les données reçues.
L’insertion de bits de bourrage s’applique du début de trame jusqu’à la fin de la séquence CRC. Le délimiteur CRC, le champ ACK et la fin de trame possèdent un format fixe et ne sont pas concernés par cette règle.
Deux conséquences en découlent. Premièrement, la longueur réelle d’une trame sur le bus dépend de son contenu : une même trame de huit octets peut ne nécessiter aucun bit de bourrage ou, dans le pire des cas, en contenir jusqu’à 24. La trame standard la plus longue peut ainsi atteindre 135 bits, intermission comprise.
Deuxièmement, six bits consécutifs de même valeur ne peuvent jamais apparaître normalement dans la partie d’une trame soumise au bourrage. Une séquence de six bits identiques constitue donc un indicateur fiable d’une anomalie. Le CAN utilise précisément cette séquence pour signaler les erreurs. C’est sur ce mécanisme que reviendra le prochain article de cette série.
Arbitrage : qui prend le contrôle du bus ?
En l’absence de maître, n’importe quel nœud peut commencer à transmettre dès que le bus est libre. Il arrive donc fréquemment que deux nœuds ou plus commencent à émettre au cours du même temps bit.
Le CAN résout cette situation sans qu’aucune trame ne soit perdue. Chaque émetteur surveille le bus pendant sa transmission. Durant le champ d’arbitrage, un nœud qui transmet un bit récessif, mais lit un bit dominant sur le bus, comprend qu’un autre nœud transmet également et impose un bit dominant à cet emplacement. Il cesse immédiatement sa transmission et devient récepteur de la trame prioritaire. Le nœud gagnant, quant à lui, ne remarque même pas qu’un arbitrage a eu lieu et poursuit normalement son émission.
Puisque l’état dominant correspond à un 0, la trame possédant l’identifiant le plus faible remporte toujours l’arbitrage. La comparaison s’effectue bit par bit, en commençant par le bit de poids fort. Un nœud perdant réessaie simplement de transmettre après la prochaine période d’intermission.
Dans le schéma ci-dessous, le nœud A transmet l’identifiant 0x120 et le nœud B l’identifiant 0x128. Les deux identifiants présentent les mêmes valeurs sur leurs sept premiers bits. Au huitième bit, A transmet un 0 tandis que B transmet un 1. Le nœud B lit alors un état dominant sur le bus et se retire de l’arbitrage. À partir de cet instant, seul le message du nœud A circule sur le bus.
L’identifiant constitue donc à la fois un nom et une priorité. Son attribution représente une véritable décision lors de la conception du système, et non un simple détail secondaire. Les messages liés au moteur, au freinage et à la direction reçoivent des identifiants de faible valeur, tandis que les fonctions moins critiques, comme les sièges chauffants et les lève-vitres, utilisent des identifiants plus élevés.
Deux autres points méritent d’être soulignés. Premièrement, deux nœuds ne doivent jamais transmettre le même identifiant avec des contenus différents. Dans ce cas, les deux transmissions passeraient l’arbitrage et la collision serait détectée ultérieurement comme une erreur de bit. Deuxièmement, l’arbitrage ne fonctionne que si un bit dominant transmis par un nœud est détecté par tous les autres nœuds au cours du même temps bit. C’est cette contrainte qui explique pourquoi la longueur du bus limite son débit, comme nous allons le voir.
L'emplacement d'acquittement (ACK)
Pendant l’emplacement ACK, l’émetteur transmet un bit récessif et écoute le bus. Chaque nœud ayant reçu la trame jusque-là sans erreur, c’est-à-dire dont le CRC calculé correspond au CRC reçu, impose un bit dominant à cet emplacement.
Tous les nœuds récepteurs présents sur le bus participent à cet acquittement, et pas uniquement ceux qui souhaitent exploiter le message. Si l’émetteur lit un bit dominant, cela signifie qu’au moins un autre nœud a correctement reçu la trame. S’il lit un bit récessif, cela signifie qu’aucun nœud ne l’a acquittée. L’émetteur enregistre alors une erreur d’acquittement et retransmet la trame.
Il est important de noter qu’un ACK dominant signifie simplement que la trame a été reçue intacte par au moins un nœud. Cela ne garantit pas qu’un nœud particulier ait traité le message. L’acquittement ne constitue donc pas une confirmation de livraison au destinataire prévu. Les protocoles de couche supérieure ajoutent ce mécanisme lorsque cela est nécessaire.
Par ailleurs, un nœud seul sur un bus ne peut jamais recevoir d’acquittement. Il retransmettra continuellement la même trame, son compteur d’erreurs augmentera et il finira par passer à l’état error-passive (passif en cas d’erreur).
Ainsi, lorsqu’un nœud est testé sur un banc d’essai sans aucun autre équipement connecté au bus, il ne cesse pas d’émettre : il répète indéfiniment la même trame. Un dispositif de surveillance en mode écoute seule ne peut pas résoudre ce problème, puisqu’il n’envoie par définition aucun acquittement.
Des octets à leur signification : les signaux et le fichier DBC
Une trame peut transporter jusqu’à huit octets. Leur signification dépend entièrement d’un accord entre l’émetteur et les récepteurs : le protocole CAN lui-même ne définit pas ce que représentent ces données.
Dans le domaine automobile, cet accord est généralement consigné dans une base de données de signaux, le plus souvent un fichier DBC. Celui-ci décrit chaque message à l’aide de son identifiant, de son nom, de sa longueur et du nœud émetteur. Il décrit également chaque signal qu’il contient en précisant son bit de départ, sa longueur en bits, son ordre des octets, son signe, son facteur d’échelle, son décalage, sa plage de valeurs autorisées et son unité.
La règle de conversion est toujours la même :
Prenons l’exemple d’un message de données moteur portant l’identifiant 0x100. Ses 16 premiers bits contiennent le régime moteur, sous la forme d’une valeur non signée au format little-endian, avec un facteur de 0,25 tr/min par bit et aucun décalage.
Les octets bruts 0x70 0x17 sont interprétés en little-endian comme la valeur 0x1770, soit 6 000 en décimal. En multipliant cette valeur par 0,25, on obtient un régime moteur de 1 500 tr/min.
L’octet suivant correspond à la position de l’accélérateur, avec un facteur de 0,4 % par bit. La température du liquide de refroidissement est codée sur un seul octet, avec un facteur de 1 et un décalage de -40. Une valeur brute de 110 correspond donc à une température de 70 °C.
L’ordre des octets est essentiel : les formats little-endian (Intel) et big-endian (Motorola) sont tous deux utilisés dans les bases de données réelles, parfois au sein d’un même message.
Un analyseur ayant chargé la base de données peut afficher le trafic du bus sous la forme de signaux nommés et exprimés dans leurs unités physiques, plutôt que sous forme de valeurs hexadécimales. C’est à ce moment que les communications CAN cessent d’être un simple flux d’octets et deviennent réellement exploitables pour l’analyse.
C’est également pour cette raison que les constructeurs automobiles considèrent généralement les fichiers DBC comme des documents confidentiels : grâce à eux, l’ensemble du fonctionnement du réseau électronique du véhicule devient lisible.
Débit binaire, point d'échantillonnage et longueur du bus
Aucun élément d’une trame CAN n’indique son débit binaire. Chaque nœud est préalablement configuré avec la même durée de bit nominale. Les récepteurs se synchronisent sur l’émetteur en détectant les fronts du signal, à commencer par celui du début de trame.
Chaque temps bit est divisé en petites unités temporelles appelées Time Quanta, regroupées en quatre segments : un segment de synchronisation d’une unité, dans lequel un front est attendu ; un segment de propagation, qui tient compte du délai de transmission du signal sur le bus ; et deux segments de phase situés de part et d’autre du point d’échantillonnage, c’est-à-dire l’instant auquel le niveau du bus est réellement lu.
Le point d’échantillonnage se situe généralement entre 75 et 87,5 % de la durée du bit. Si un front arrive trop tôt ou trop tard, le récepteur allonge ou raccourcit les segments de phase, dans la limite de la largeur maximale de saut de synchronisation (Synchronization Jump Width), afin de se resynchroniser.
Le segment de propagation établit le lien entre le débit binaire et la longueur du câble. L’arbitrage et l’acquittement reposent tous deux sur la capacité d’un nœud à imposer un bit dominant, puis sur celle de tous les autres nœuds à le détecter et à réagir pendant le même temps bit.
Le temps nécessaire à l’aller-retour du signal sur le trajet le plus long du bus, en passant par deux transceivers, doit donc tenir dans le segment de propagation.
À 1 Mbit/s, cela limite la longueur du bus à environ 40 mètres. À 500 kbit/s, débit utilisé par la plupart des réseaux de transmission du groupe motopropulseur, la limite est d’environ 100 mètres. À 125 kbit/s, débit courant pour les équipements électroniques de carrosserie, elle atteint environ 500 mètres.
Une voiture n’approche jamais de telles longueurs, mais un tracteur équipé de ses outils, un navire ou une ligne de production industrielle peuvent facilement atteindre ces distances.
CAN classique et CAN FD
Tout ce qui précède concerne le CAN classique (Classical CAN).
Le CAN FD (Flexible Data-rate), introduit par Bosch en 2012 et intégré à la norme ISO 11898-1 en 2015, conserve exactement le même mécanisme d’arbitrage, mais apporte deux changements une fois l’arbitrage remporté.
Premièrement, le champ de données peut désormais contenir jusqu’à 64 octets. Deuxièmement, l’émetteur peut passer à un débit binaire plus élevé pendant les phases de transmission des données et du CRC, généralement entre 2 et 5 Mbit/s, avant de revenir au débit nominal pour l’acquittement. L’arbitrage doit néanmoins continuer à s’effectuer au débit le plus faible, pour les raisons expliquées précédemment.
Une trame FD est identifiée par un bit récessif à l’emplacement où une trame de base CAN classique transmet son bit réservé r0 (dans le format étendu, il s’agit du premier bit réservé). Viennent ensuite un bit réservé dominant, le bit BRS (Bit Rate Switch), qui indique si la phase à débit rapide est utilisée, puis un bit ESI (Error State Indicator), qui précise si l’émetteur est à l’état error-active ou error-passive.
Les trames FD utilisent un CRC plus long : 17 bits pour les trames contenant jusqu’à 16 octets de données et 21 bits au-delà. Elles intègrent également un compteur de bits de bourrage, qui permet de corriger une faiblesse du mécanisme de détection des erreurs du CAN classique.
Elles ne prennent pas en charge les trames distantes (Remote Frames).
Un contrôleur CAN classique conforme à la norme de 2015 interprète le bit réservé récessif comme une erreur de format (Form Error). Les contrôleurs plus anciens acceptent ce bit, mais interprètent incorrectement les champs suivants et finissent par détecter une erreur de bourrage, de CRC ou de format peu après.
Dans les deux cas, la trame FD est rejetée. Les nœuds CAN classiques et CAN FD ne peuvent donc pas partager le même bus, sauf si les nœuds classiques sont compatibles FD (FD-tolerant), c’est-à-dire conçus pour reconnaître et ignorer les trames FD.
Conclusion
Une trame CAN est un véritable concentré d’ingénierie. Un bit dominant qui l’emporte toujours sur un bit récessif permet de créer un bus à fonction ET câblée. Un identifiant transmis en commençant par le bit de poids fort transforme ce principe en un système de priorités dans lequel les conflits d’accès au bus n’entraînent aucune perte de données.
L’insertion de bits de bourrage permet à chaque récepteur de rester synchronisé sur l’horloge de l’émetteur et réserve, par la même occasion, un motif binaire spécifique à la signalisation des erreurs. Un CRC de 15 bits vérifie l’intégrité de la trame, tandis que chaque nœud ayant correctement reçu le message le confirme à l’aide d’un bit partagé.
La signification des octets est définie en dehors du protocole, dans une base de données qui permet de transformer une simple trame en informations concrètes, comme le régime moteur ou la température du liquide de refroidissement.
Une fois que l’on comprend le rôle de chacun de ces éléments et que l’on sait les observer sur le bus, le reste du fonctionnement du CAN devient beaucoup plus naturel à appréhender : les défauts, la sécurité et les messages qui assurent le fonctionnement d’un véhicule.
Copyright Labcenter Electronics Ltd. 2026
Traduction française
Copyright Multipower France 2026
