Le bus de données CAN (Controller Area Network) est un bus système série très répandu dans beaucoup d'industries, notamment l'automobilehttp://ww1.microchip.com/downloads/en/AppNotes/00754.pdfhttps://www.can-cia.org/fileadmin/resources/documents/proceedings/2003_fellmeth.pdf....

Il a été normalisé avec la norme ISO 11898ISO 11898-2:2003, sur iso.org, 30 juillet 2014 (consulté le 28 décembre 2015).

Il met en application une approche connue sous le nom de multiplexage, et qui consiste à raccorder à un même câble (un bus) un grand nombre de calculateurs qui communiqueront donc à tour de rôle. Cette technique élimine le besoin de câbler des lignes dédiées pour chaque information à faire transiter (connexion point-à-point). Dès qu'un système (voiture, avion, bateau, réseau téléphonique) atteint un certain niveau de complexité, l'approche point-à-point devient impossible du fait de l'immense quantité de câblage à installer et de son coût (en masse, matériaux, main d'œuvre, maintenance).

L'introduction des bus multiplexés (principalement le CAN) dans l'automobile avait pour objectif de réduire la quantité de câbles dans les véhicules (il y avait alors jusqu'à de câbles par voiture), mais elle a surtout permis l'explosion du nombre de calculateurs et capteurs distribués dans tout le véhicule, et des prestations correspondantes (baisse de consommation, dépollution, sécurité active/passive, confort, détection des pannes), tout en diminuant les longueurs câblées.

Historique Le bus de données CAN est le fruit de la collaboration entre l'université de Karlsruhe et Bosch.

Il fut d'abord utilisé dans le secteur de l'automobile, mais est actuellement utilisé dans la plupart des industries comme l'aéronautique via des protocoles standardisés basés sur le CAN.

Il fut présenté avec Intel en 1985, mais ne fut standardisé par l'ISO qu'au début des années 1991.

En 1992, plusieurs entreprises se sont réunies pour créer le CAN in Automation, une association qui a pour but de promouvoir le CAN.

Une première évolution appelée pour « Flexible Data-Rate » est sortie.

Une deuxième évolution portée par Bosch et Vector Informatik, appelée « XL », est en cours de développement.

Couche physique Dans l'architecture en couche du modèle OSI, c'est le niveau 1 "Physique" des "couches matérielles" (unité de données : le bit).

Il existe deux normes pour la couche physique : ISO 11898-2 (2016) : CAN « high-speed » (jusqu'à ) ; ISO 11898-3 (2006) : CAN « low-speed, fault tolerant » (jusqu'à ).

Topologie CAN est un bus de données série bidirectionnel half-duplex dans le domaine automobile, mais est utilisé en unidirectionnel — simplex — dans l'aéronautique, pour obtenir un comportement déterministe.

Chaque équipement connecté, appelé « nœud », peut communiquer avec tous les autres.

center|Architecture CAN avec plusieurs nœuds

Le nombre maximal de nœuds sur un bus CAN est limité par la capacité de pilotage d'un émetteur-récepteur CAN. Support Chaque nœud est connecté au bus par l'intermédiaire d'une paire torsadée (blindée ou non).

Les deux extrémités du bus doivent être rebouclées par des résistances de 120 Ω ±10 % (tolérance entre 108 Ω et 132 Ω).

center|Surpport d'un bus CAN

L'accès au bus de données CAN suit la technique CSMA/CR (écoute de chaque station avant de parler mais pas de tour de parole, résolution des collisions par priorité).

La longueur maximale du bus est déterminée par la vitesse utilisée :

Vitesse()Longueur()1 000308005050010025025012550062,51 000202 500105 000

Encodage des bits L'encodage utilisé est de type NRZ (non retour à 0) (Etat dominant et Recessif inversé sur le graph suivant): center|Encodage d'un bit CAN

États logiques et Niveaux électriques Les nœuds sont câblés sur le bus par le principe du « OU câblé » du point de vue électrique (« ET câblé » du point de vue logique), ce qui veut dire qu'en cas d'émission simultanée de deux nœuds, la valeur 0 écrase la valeur 1.

On dit donc : que l'état logique « 0 » est l'état « dominant » ; que l'état logique « 1 » est l'état « récessif ».

Les états logiques et les niveaux électriques utilisés entre les deux lignes de la paire différentielle pour le CAN low-speed sont les suivants :

État logiqueVVVRécessif ou « 1 » 1,75 V 3,25 V Dominant ou « 0 » 4 V 1 V 3 V

Les états logiques et les niveaux électriques utilisés entre les deux lignes de la paire différentielle pour le CAN high-speed sont les suivants :

État logiqueVVVRécessif ou « 1 »2,5 V2,5 Vde 0 à 0,5 VDominant ou « 0 »3,5 V1,5 Vde 0,9 à 2 V

Temps et vitesse La durée d'un bit est appelée « Nominal Bit Time ».

Chaque bit est constitué de plusieurs segments cadencés par l'horloge interne de chaque nœud : segment de synchronisation ; segment de propagation ; segment de phase buffer ; segment de phase buffer .

Time Quantum Le « Time Quantum » est l'unité de temps construite à partir de la période de l'oscillateur interne de chaque nœud.

La fréquence du bus étant au maximum de 1 MHz et celles des oscillateurs de plusieurs MHz, le « Time Quantum » vaut généralement plusieurs périodes d'horloge (entre 1 et ).

La durée de chaque segment est la suivante :

SegmentDurée en « Time Quantum »Synchronisation1Propagationde 1 à 8Phase buffer de 1 à 8Phase buffer de 2 à 8

Ainsi la durée d'un bit peut varier de 5 à 25 « Time Quantum ».

Plus la fréquence de l'horloge interne du nœud est importante, plus la durée du « Time Quantum » pourra être faible, plus les trois derniers segments compteront de « Time Quantum » et meilleure sera la précision de la synchronisation.

Segment de synchronisation Le segment de synchronisation est utilisé pour synchroniser les différents nœuds.

La transition de 0 à 1 ou de 1 à 0, effectuée pour le nœud émetteur, doit s'effectuer dans ce segment. Si pour un nœud récepteur cette transition n'a pas lieu dans ce même segment, c'est qu'il est désynchronisé. Il s'agit d'une erreur de phase.

Grâce au bit de transparence, cette vérification peut être faite au moins tous les 5 bits (pour les premiers champs de la trame dans lequel il est utilisé).

Segment de propagation Le segment de propagation est utilisé pour compenser les phénomènes de propagation sur le bus.

Segments de phase Les segments de phase sont utilisés pour compenser les erreurs de phase détectées lors des transitions.

La durée de ces segments peut varier en cas de resynchronisation.

Point d'échantillonnage Le point d'échantillonnage ou « Sample point » est l'instant où on lit la valeur du bit sur le bus. Celui-ci intervient entre les deux segments de phase.

Synchronisation Il existe deux types de synchronisation : la hard-synchronisation qui consiste à se resynchroniser brutalement dès qu'une transition est détectée dans le segment de synchronisation, notamment lors du SOF (Start Of Frame) d'une nouvelle trame ; la resynchronisation qui consiste à allonger le segment de phase buffer ou à diminuer le segment de buffer phase , ce qui a deux effets : déplacer le point d'échantillonnage, diminuer ou augmenter la durée du bit et ainsi améliorer la synchronisation du bit suivant.

Connecteur Le brochage sur le bus de données CAN est normalisé et utilise un connecteur DE-9 :

center|Connecteur CAN

BrocheDescription1(Réservé)2CANL3Masse4(Réservé)5Blindage (optionnel)6Masse7CANH8(Réservé)9Alimentation externe (optionnel)

Couche liaison de données Dans l'architecture en couche du modèle OSI, c'est le niveau 2 "Liaison" des "couches matérielles" (unité de donnée : la trame).

Il existe également deux standards pour la couche de liaison de données : ISO 11898 part A → CAN 2.0A « standard frame format » (identification sur 11 bits) ; ISO 11898 part B → CAN 2.0B « extended frame format » (identification sur 29 bits).

Il existe plusieurs types de trame : trame de données ; trame de requête ; trame d'erreur ; trame de surcharge.

Entre deux trames, les émetteurs doivent respecter une pause (période d’inter-trame) équivalente à la durée de trois bits pendant laquelle le bus est maintenu à l'état récessif.

Trame de données La trame de données sert à envoyer des informations aux autres nœuds.

Une trame de données se compose de sept champs différents : le début de trame ou SOF (Start Of Frame) matérialisé par 1 bit dominant ; le champ d'arbitrage (identificateur) composé de 12 ou 32 bits ; le champ de commande (ou de contrôle) composé de 6 bits ; le champ de données composé de 0 à 64 bits (de 0 à 8 octets) ; le champ de CRC composé de 16 bits ; le champ d'acquittement composé de 2 bits ; la fin de trame ou EOF (End of Frame) matérialisée par 7 bits récessifs.

centré|Trame de données sur bus CAN

Ordre de transmission des bits Les champs sont transmis dans l'ordre du SOF à l'EOF.

Dans chaque champ de la trame, les bits sont transmis du plus fort au plus faible.

Champ d'arbitrage Le champ d'arbitrage est composé de 11 bits d'identification pour CAN 2.0A et 29 bits pour CAN 2.0B suivis par le bit RTR (Remote Transmission Request) qui est dominant. Ce champ sert d'identifiant pour la donnée transportée dans le champ de données.

Les 11 bits de CAN 2.0A autorisent 2 = 2 048 combinaisons.

Les 29 bits de CAN 2.0B autorisent 2 = 536 870 912 combinaisons.

Champ de commande Le champ de commande est composé de six bits.

Le bit de poids fort est utilisé pour différencier le type de trame : dans le cas d'une trame standard (sur 11 bits), le bit de poids fort est dominant ; dans le cas d'une trame étendue (sur 29 bits), le bit de poids fort est récessif.

Le bit suivant n'est pas utilisé.

Les quatre bits de poids faibles appelés DLC (Data Length Code) représentent le nombre d'octets du champ de données (PAYLOAD) embarqué.

Ce nombre d'octets peut varier de 0 à 8, soit neuf valeurs stockées avec les quatre bits du champ DLC. Les valeurs DLC supérieures à 9 ne seraient donc pas utilisées (de 9 à 15).

Champ de données Le champ de données peut varier de 0 à 8 octets.

Dans le cas d'une trame de requête le champ de données est vide.

Champ de CRC Le champ est composé de quinze bits de CRC (Cyclic Redundancy Check) et d'un bit dit délimiteur (« CRC delimiter ») toujours récessif.

Le CRC est calculé à partir de l'ensemble des champs transmis jusque-là (c'est-à-dire le SOF, le champ d'arbitrage, le champ de commande et le champ de données ; les bits de transparence ne sont pas pris en compte). L'ensemble constitue le polynôme f(x).

L'algorithme consiste dans un premier temps à multiplier f(x) par 2.

Ensuite le polynôme f(x) est divisé (modulo 2) par le polynôme g(x) = x + x + x + x + x + x + x + x.

Une fois les divisions successives effectuées, le reste constitue la séquence de CRC.

La distance de Hamming de l’algorithme utilisé est de 6, ce qui signifie que cinq erreurs au maximum sont détectables.

Grâce à ce système de détection, le taux d’erreur enregistré est très faible (inférieur à ). De plus, le réseau est capable de différencier les erreurs ponctuelles des erreurs redondantes. Ainsi, tout périphérique défaillant peut être déconnecté du réseau afin de limiter les perturbations. Le réseau entre alors en mode « dégradé ».

Champ d'acquittement ACK Le champ est composé d'un bit d'acquittement ACK (ACKnowledge) et d'un bit dit délimiteur (« ACKnowledge delimiter ») toujours récessif.

Tous les récepteurs qui ont bien reçu le message doivent l'acquitter en émettant un bit dominant pendant la durée du bit ACK, ce qui permet au nœud émetteur de savoir qu'au moins un des nœuds récepteurs a reçu le message.

Si un nœud récepteur n'a pas ou mal reçu le message, il ne peut pas se servir de ce mécanisme pour signaler l'erreur, puisqu'il suffit qu'une station réceptrice envoie un bit dominant pour masquer tous les bits récessifs. Pour signaler le dysfonctionnement, il doit émettre une trame d'erreur.

Trame de requête La trame de requête sert à demander une donnée à un autre nœud. Elle est similaire à la trame de données hormis :