LE BUS CAN 1/3 1 ) GENERALITES Le bus CAN (Controller Area Network) est né pour répondre au besoin d'assurer une communication de type série entre plusieurs calculateurs dans les véhicules automobiles. Ce bus a été développé par Bosch en 1983 et sa première normalisation référencée IS011898 date de 1994. Depuis, la norme du protocole du bus CAN définit deux formats: • Version standard CAN 2.A ( champ identificateur sur 11 bits ) • Version étendu CAN 2.B ( champ identificateur sur 29 bits ) Le débit de transmission sur le réseau CAN peut atteindre 1 Mbits/s. Deux classes de débits ont été également normalisées: CAN Low Speed ( noté CAN LS ), dont le débit peut atteindre le 125 kbits/s. CAN High Speed ( noté CAN HS ), de 125 kbits/s jusqu'à 1 Mbits/s. Comme illustré ci-dessus, un réseau CAN est constitué d'un medium (le support physique qui transporte le signal informationnel), qui souvent utilise deux fils électriques en différentiel: CAN_H et CAN_L. Cette paire de fils (généralement torsadée pour des problèmes de CEM) est raccordée à chaque calculateur (on dit souvent nœud) par une paire d'amplificateurs différentiels (un pour la transmission et l'autre pour la réception) intégrés dans un boîtier appelé transceiver (ou interface ligne). Le nombre de calculateurs branchés sur la même paire est limité. La paire de fils est chargée par deux résistances de terminaison ( RT = 120 Ω chacune ). Le transceiver est relié au bloc gestionnaire du protocole CAN par deux lignes logiques: transmission (Tx) et réception (Rx). Le gestionnaire du protocole CAN comporte des buffers d'émission, des buffers et des filtres de messages en réception. Souvent, le µcontrôleur intègre le gestionnaire du protocole CAN. Cours bus CAN REV2010 STS.doc LE BUS CAN 2/3 2 ) FORMAT D’UNE TRAME STANDARD CAN 2.A 2.1 ) SOF ( START OF FRAME ) Constitué par un seul bit, de niveau dominant, indique aux nœuds le début de la trame. La détection du front descendant du SOF par les nœuds va leur permettre de se synchroniser sur la trame en cours de transmission. 2.2 ) CHAMP D'ARBITRAGE Constitué de l'identificateur du message ( 11 bits en trame standard ) et du bit RTR ( Remote Transmission Request ). L'identificateur de longueur 11 bits permet d'attribuer une adresse spécifique à chaque message. Le bit de poids fort de l'identificateur est transmis en premier. Le bit RTR de niveau dominant indique que c'est une trame de données qui est en cours de transmission. Le bit RTR de niveau récessif indique que c'est une trame de requête (absence du champ de données) qui est en cours de transmission. La trame de requête est envoyée par un nœud à un autre nœud pour lui demander un renvoi de ses données. Le champ d'arbitrage influe sur l'attribution du bus dans le cas où deux nœuds ou plus émettent simultanément leurs trames. Pour éviter les collisions et par conséquent la destruction de la trame, l'arbitrage du bus CAN s'appuie sur l'évaluation des identificateurs commençant la trame. Chaque nœud débute son émission par l'identificateur composé de bits dominants et de bits récessifs. A travers son transceiver ( on écoute ce que l'on émet: rebouclage du TxD sur le RxD ), il compare chaque bit qu'il transmet sur le bus et le bit réellement transmis. En transmettant un bit récessif et après lecture du RxD, il détecte un bit dominant, le nœud s'aperçoit qu'il a perdu l'arbitrage. Par conséquent, à partir du bit suivant, il se met en position récepteur. Il tentera un accès au bus à la fin de transmission de la trame en cours. Ci-dessous, une illustration du processus d'arbitrage entre 3 nœuds qui veulent accéder simultanément au bus: R = Récessif = ‘1’ D = Dominant = ‘0’ Finalement, c’est le nœud 3 qui garde le bus Cours bus CAN REV2010 STS.doc LE BUS CAN 3/3 2.3 ) CHAMP DE COMMANDE Constitué de 6 bits: 2 bits r1 et r0 : sont réservés et toujours au niveau dominant. 4 bits formant le champ DLC qui indiquent le nombre d'octets qui seront transmis dans le champ de données. 2.4 ) CHAMP DE DONNEES Constitué de 0 à 8 octets maximums de données utiles, l'octet le plus significatif est transmis en premier et les bits de l'octet sont transmis dans l'ordre MSB ….. LSB. 2.5 ) CHAMP CRC C'est un code de contrôle, constitué de 15 bits, suivi d'un bit délimiteur au niveau récessif. 2.6 ) CHAMP D'ACQUITTEMENT: ACK Constitué de 2 bits: ACK SLOT suivi d'un ACK délimiteur qui est récessif. Quant au ACK SLOT, le nœud émetteur le met au niveau récessif (libération du bus pendant la durée d'un bit) et c'est un des nœuds récepteurs qui doit le mettre au niveau dominant pour acquitter la trame signifiant qu'elle a été bien reçue. 2.7 ) FIN DE TRAME: EOF Constitué de 7 bits au niveau récessif, il permet d'identifier la fin de la trame. 3 ) TECHNIQUE DE BIT DE BOURRAGE « STUFFING » La synchronisation des nœuds récepteurs sur le nœud émetteur exploite les transitions entre les niveaux récessif et dominant. Pour éviter une longue suite de niveaux identiques, le gestionnaire du protocole introduit ( au niveau de la transmission TxD ), après 5 bits de niveaux identiques ( dominants ou récessifs ), un bit supplémentaire de niveau opposé pour casser le rythme, c'est ce qu'on appelle le bit de « bourrage» ou de « stuffing ». Cette technique allonge bien sûr la longueur de la trame et donc le temps de sa transmission. Quant aux nœuds récepteurs, ils feront l'opération inverse, c'est-à-dire, enlever les bits de « stuffing » ( qui peuvent être présents dans le signal RxD ) avant de traiter le contenu de la trame. Voici un exemple qui illustre la technique de bourrage: Cours bus CAN REV2010 STS.doc