LES RESEAUX LOCAUX
INDUSTRIELS
Chapitre 21/25 - Etude de Réseaux locaux : Le bus CAN |
Hugues Angélis |
Etude de quelques Réseaux locaux
Dans ce chapitre, nous allons (enfin) étudier le fonctionnement de quelques Réseaux. En particulier, il me semble logique de vous parler d'ETHERNET + TCP-IP, de CAN et de I2C. Bien entendu, ce chapitre n'est pas exhaustif, et ne pourrait pas l'être. En effet, le renouvellement quasi permanent des technologies ne le permettrait pas.
Mais avant de présenter ces Réseaux, nous allons regarder un petit lexique des différents Réseaux disponibles sur le marché.
Il faut noter que bon nombre de Réseaux ne sont que des variantes des Réseaux les plus connus (ce qui à tendance à rendre l'offre encore plus difficile à analyser), on retiendra pour l'exemple FIPIO qui est une version SENSOR BUS de FIP et FIPWAY la version DEVICE BUS. Mais les exemples ne s'arrêtent pas là puisque certains Réseaux (comme CAN ou FIP, considérés comme des technologies), sont utilisés comme des "supports" pour des applications, ce qui fait qu'entre 2 Réseaux basés sur CAN, il n'y a souvent que la couche 7 (couche d'application) qui les rend incompatible (par exemple SDS, DEVICENET, VAN et CAL ne sont que des applications spécifiques de CAN pour un type de fonctionnement précis).
Ce genre de récupération est assez intéressante puisqu'elle autorise l'utilisation de systèmes CAN tout en les rendant plus spécifique donc plus adaptable. Le bus CAN.
e bus CAN est né en 1984 dans les ateliers BOSCH, initialement prévu pour des applications automobiles, il s'est au fur et à mesure étendu pour former une gamme industrielle complète. Les composants spécifiques CAN sont fabriqués par les plus grands manufacturiers (PHILIPS, INTEL, MOTOROLA, SIEMENS, NEC, THOMSON, NATIONAL SEMICONDUCTOR, etc.) et on considère que CAN représente désormais un standard international.
CAN ou CONTROLER AREA NETWORK (Réseau de contrôle local) est un protocole de transmission différentiel série avec viol (après 5 bits) qui permet l'utilisation de systèmes temps réel pour des coûts relativement faible.
Développé pour l'automobiles, il permet de réduire les câblages internes des véhicules en multiplexant sur une ligne les informations en provenances des divers éléments du véhicule (gestion de la motorisation, des organes de signalisation, de l'allumage électronique, etc.). Entièrement compatible avec la norme OSI, il est composé de 4 couches (en réalité 3 mais la couche de liaison a été découpée entre LLC et MAC).
Il peut autoriser des débits de 20Kbits/s sur une distance de 1000m ou pour des distances réduites, de l'ordre de 40m, autoriser un débit de 1Mbit/s. Les trames de données peuvent accueillir un message comprenant jusqu'à 8 octets. Grâce à son code CRC, il permet d'obtenir une probabilité d'erreur rémanente (non détectés) de 4,7.10-11. Il dispose aussi d'un système permettant la mise en sommeil des éléments du Réseau (ce qui permet dans le cas de l'automobile de gérer une alarme). Les trames CAN.Les communications sur le Réseau CAN sont réalisées grâce à différentes trames, chaque trame permettant de transmettre une information spécifique (données, requêtes, surcharges ou erreurs). Ces trames sont composées de plusieurs champs permettant de définir tous les paramètres de la transmission. Entre 2 trames, on place un ou plusieurs intervalles "vides" permettant au récepteur de décoder le message et de signaler si on doit le placer dans un mode d'attente (surcharge), s’il y a une erreur de transmission ou si d'autres données sont nécessaires.
Ainsi, une trame de donnée est obligatoirement suivie soit d'une trame d'erreur, soit d'une trame de surcharge, soit d'un intertrame. Dans ce dernier cas, il peut apparaître, après l'intertrame, à nouveau une intertrame, une trame de requête ou de données.
Après une trame d'erreur, on peut voir soit un intertrame, soit une trame de surcharge. Après une trame de surcharge, on peut voir apparaître une nouvelle trame de surcharge ou un intertrame. Le protocole CSMA/NBALe protocole CSMA/NBA est un protocole sans contention, en cas de conflit, les machines s'arbitrent grâce aux valeurs "d'index" qu'elles envoient.
Pour le protocole CSMA/NBA, il existe 2 niveaux de tension correspondant au "1" et au "0" logique, l'état "0" est obtenu par mise directe à la masse (on dit que c'est un état dominant) et l'état logique "1" s'obtient par passage dans un élément résistif (on dit que c'est un état récessif). En cas de confit, un état dominant l'emporte toujours sur un état récessif, l'arbitrage est donc facile à faire et surtout il est non destructif puisqu'il ne nécessite pas la réémission des 2 messages. D'où le nom de ce protocole (NBA = Non-destructive Bitwise Arbitration ou arbitrage bit à bit non destructif)
Ce protocole joue sur la capacité de la couche physique à absorber les chocs liés aux conflits de bus. Toutefois, il reste encore teinté d'une connotation aléatoire, on ne peut en effet pas prédire en combien de temps une machine peut transmettre un message, la seule chose qui soit sure, c'est que plus "l'index" contient des bits dominants au début, plus le message devient prioritaire. Les trames de données.Les trames de données sont composées de 7 champs, le premier permettant de définir le début de la trame (délimiteur de début), puis, on trouve un champ d'arbitrage, utilisant le protocole CSMA/NBA, permettant à la machine la plus prioritaire d'obtenir le contrôle du bus. Vient après, le champ de contrôle, permettant de définir la longueur du message à transmettre, puis on trouve le champ de données où se trouve le message. Enfin viennent les champs de contrôle d'erreur champ de CRC), d'acquittement et de fin de trame.
Le délimiteur de début.Le délimiteur de début permet de définir le début de la trame. Il est constitué d'un simple bit dominant ("0") qui permet de lancer une resynchronisation des machines du Réseau. La transmission du délimiteur n'est autorisée que lorsque le code IDLE (prêt à transmettre) est détecté (intertrame). Le champ d'arbitrage.Le champ d'arbitrage est composé de 12 bits, 11 bits d'identification et 1 bit spécial nommé RTR ou REMOTE TRANSMISSION REQUEST (demande de transmission à distance). Les 11 bits d'identification servent à définir le ou les destinataires (on ne transmet pas une adresse mais un "descriptif" du message). Ils servent aussi à définir le niveau de priorité des messages. C'est sur ce champ, qui est définit lors de la mise en œuvre du Réseau, que l'on réalise l'arbitrage du bus (d'où son nom).
Il faut noter que toutes les machines lisent le message mais seules celles destinataires du message sont susceptibles de l'utiliser. Les 11 bits sont transmis dans l'ordre ID10 (MSB) à ID0 (LSB).
Le bit RTR permet d'effectuer une demande de transmission à distance. Placé à l'état dominant, il signifie que l'on a une trame de données, placé à l'état récessif il signifie que l'on a une trame de requête. Dans une trame de requête il n'y a pas de données dans le champ de message, quelle que soit la longueur définie dans le champ de contrôle. Le champ de contrôle.Le champ de contrôle est composé de 6 bits, 4 permettent le codage de la longueur du message et les 2 autres servent à définir la version du protocole Réseau utilisé.
Les 2 premiers bits du champ de contrôle définissent le protocole utilisé par le bus CAN. Le premier bit nommé IDE pour Identifier Extended permet de signifier si l'index est codé sur 11 bits (IDE à l'état Dominant, Réseau à la norme CAN 2.A) ou sur 29 bits (IDE à l'état récessif, Réseau à la norme CAN 2.B). Le second bit étant toujours à l'état dominant. La longueur du message est définie au moyen des 4 bits suivant du champ de contrôles.
Le champ de données.Le champ de données est composé de 0 à 8 octets de données. La taille de ce message est définie par 4 bits du champ de contrôle. Le champ de CRC.Le champ de CRC est composé de 16 bits. On a d'abord la séquence CRC (15 bits), représentant le reste de la division des bits des champs précédents de la trame par le polynôme suivant :
D’autre part, on a un marqueur de fin de CRC qui est un simple bit récessif appelé délimiteur de CRC (CRC DEL).
Le code CRC du message est calculé sur tous les champs précédents (début de trame, arbitrage, contrôle et données). Il ne tient pas compte du BIT-STUFFING du message mais est lui-même soumis à cette règle. Le champ d'acquittement.Le champ d'acquittement est composé de 2 bits, d'un coté, le bit d'acquittement (ACK SLOT), mis à 1 (récessif) par l'émetteur et mis à 0 (dominant) par les machines réceptrices (il faut noter que toutes les machines doivent répondre, y compris celles qui ne sont pas concernées par le message). De l'autre, le bit de délimitation (ACK DEL) qui est un bit récessif. Le champ de fin de trame.Le champ de fin de trame est composé de 2 champs, d'une part le champ d'intertrame (composé de 7 bits récessifs) et après le champ BUS-IDLE qui signifie que le bus est libre et dont la taille n'est pas limitée. Les trames de requête.Les trames de requête sont composées comme les trames de données du délimiteur, suivit du champ d'arbitrage, du champ de contrôle, du champ de CRC, du champ d'acquittement et du délimiteur de fin.
Il n'y a donc pas de champ de données. Toutefois, dans le champ de contrôle, la définition de la longueur du message est, elle, totalement libre, on peut donc y inscrire toutes les valeurs utilisables (de 0 à 8).
Le champ d'arbitrage est composé, comme pour une trame de donnée de 11 bits d'identification et du bit RTR qui doit être obligatoirement récessif. Les bits d'identification émis par la machine qui sollicite le transfert seront utilisés pour identifier la réponse. La règle du BIT-STUFFING.
Le bus CAN étant asynchrone, l'horloge de l'émetteur et celle du récepteur ne sont pas identique en permanence (pas de boucle à verrouillage de phase pour fabriquer l'horloge de réception à partir de la ligne de transmission). Toutefois, pour que le synchronisme des échanges reste correct, il faut que les 2 horloges soient à peu près identiques (on verra plus loin comment synchroniser les échanges). Pour cela, le récepteur essaye de caler son horloge sur celle de l'émetteur grâce aux fronts (descendant) que celui-ci émet.
Dans cette hypothèse, une longue absence de fronts risque de désynchroniser le récepteur et donc de créer des problèmes de réception. Pour cela, régulièrement, l'émetteur, quelque soit son message, va insérer des fronts de resynchronisation, c'est le BIT-STUFFING.
Le BIT-STUFFING est un élément important du Réseau CAN, il permet à l'horloge de réception de ne pas dériver trop vis à vis de la fréquence de l'horloge d'émission. Il est réalisé par l'ajout d'un bit récessif ou dominant (respectivement pour une série de 5 bits dominants ou récessifs).
Le BIT-STUFFING s'applique aux champs suivants des trames de données ou de requête : · Le délimiteur de début de trame. · Le champ d'arbitrage. · Le champ de contrôle. · Le champ de données (quand il est présent). · Le champ de CRC.
Les bits de STUFFING sont extrais à la réception, lorsque le récepteur détecte 5 bits dans un état, il vérifie que le 6ème n'est pas dans le même état (ce qui serait contraire à la règle de stuffing) et si ce bit est différent de la série précédente, il l'élimine et reprend son analyse de la trame au bit suivant comme si de rien n'était. Récapitulatif des trames CAN.
Format des différents champs. Les trames d'erreurs.L'activité principale du Réseau CAN étant l'automobile, on comprend facilement le soin qui a été porté à la gestion des erreurs, car un système automobile est par essence extrêmement sensible aux éventuelles défaillances du Réseau. On doit donc rendre les éléments du Réseau "intelligent" vis à vis de la détection d'erreur.
Chaque nœud du Réseau CAN peut détecter 5 types d'erreurs. · Les erreurs de bits qui sont liées à la détection par l'émetteur d'un état différent de celui émis. Il n'y a pas d'erreur si un bit dominant apparaît à la place d'un bit récessif durant l'émission du champ d'arbitrage, du bit ACK SLOT ou durant l'émission une d'erreur passive. · Les erreurs d'acquittement apparaissent lorsque le ACK SLOT n'est pas passé à un état dominant. · Les STUFF ERROR (ou erreur de viol) signifie que la machine réceptrice a détecté 6 bits dans le même état (alors qu'au bout de 5 bits, il doit en principe, il y avoir un viol). · Les erreurs de CRC sont émises lorsque le champ de CRC ne correspond pas aux données transmises. · Les erreurs de forme sont émises lorsque la trame n'est pas conforme au format prédéfini (trame trop courte par exemple).
De plus, chaque nœud dispose de 3 états de réceptivité aux communications. L'état actif, qui est l'état normal de fonctionnement, l'état passif qui est un mode légèrement dégradé et l'état déconnecté (état Off) qui verrouille le contrôleur en lui interdisant d'émettre et de recevoir des données.
La trame d'erreur active est composée de 6 bits dominants (appelés ERROR FLAG) puis de 8 bits récessifs (ERROR DELIMITER), et ceci en violant les règles du BIT-STUFFING.
La trame d'erreur passive est composée de 6 bits récessifs (ERROR FLAG) puis du ERROR DELIMITER.
Les trames d'erreurs sont impérativement suivies de 3 temps bit pendant lesquels le bus est laissé libre. Présentation de la trame d'erreur active
Une machine qui détecte une erreur émet immédiatement (en interrompant la transmission du message, c'est à dire sans en attendre la fin) son ERROR FLAG puis le premier bit de son ERROR DELIMITER. Si la machine est en mode actif, les 6 bits dominant qu'elle émet créent une erreur de BIT-STUFFING pour toutes les autres machines du bus. Toutes les machines qui n'auraient pas détecté l'erreur initiale, envoient alors leur trame d'erreur. La ou les machines qui avaient détecté l'erreur initiale (et émis leurs ERROR FLAG) attendent l'apparition d'un front montant (passage du premier bit du ERROR DELIMITER de la dernière machine ayant détecté une erreur), pour émettre le reste du ERROR DELIMITER.
De plus, chaque machine comptabilise les erreurs qu'elle détecte ou qui lui sont signalées grâce à deux compteurs, l'un en émission qui compte le nombre d'erreur que la machine réalise lorsqu'elle émet, le second en réception compte les erreurs que la machine détecte quand elle reçoit.
Chaque fois qu'une erreur est détectée, les machines émettent une trame d'erreur (active ou passive) et incrémente leur compteur d'erreur concerné de 8 unités. Tout message transmis avec succès permet de décrémenter le compteur concerné d'une unité.
Dans notre premier exemple, La machine C est la seule qui souhaite parler, les machines A et B n'ayant rien à transmettre durant toute la phase présentée.
Dans notre deuxième exemple, la machine A est la seule qui souhaite parler et la machine C est toujours défaillante.
Les trames de surcharge.L'émission d'une trame de surcharge répond à un problème de surcharge sur l'une des machines. Elle permet de temporiser l'émission de la trame de donnée suivante. Il ne peut y avoir plus de 2 trames de surcharge de suite pour éviter qu'un problème sur une machine puisse bloquer les autres machines du Réseau trop longtemps.
Comme pour les trames d'erreur, les trames de surcharges sont composées de 2 champs. Le champ de surcharge (OVERLOAD FLAG) est composé de 6 bits dominants violant ainsi la règle du BIT-STUFFING et par le délimiteur de surcharge (OVERLOAD DELIMITER) composé de 8 bits récessifs.
A la différence des trames d'erreur, les trames de surcharges sont exclusivement émises à la fin d'une trame de données ou de requête tandis qu'une trame d'erreur interrompt la transmission. C'est d’ailleurs de cette façon que l'on différentie les deux. Synchronisation des échanges.
L'utilisation de composants CAN nécessite une certaine compréhension de ce que l'on appelle la synchronisation des échanges. Il faut envisager ce point avec en mémoire les règles élémentaires des transmissions. Le but de ce chapitre est de définir les points importants de la transmission. La définition de la vitesse maximale de transmission, la définition du point d'échantillonnage, et enfin, la définition des longueurs maximales des lignes du Réseau. Décomposition d'un bit en segments.Un bit, au sens du Réseau CAN, est composé de 3 segments, le segment de synchronisation, le segment n°1 qui est composé de la propagation et de la phase de pré-acquisition et enfin le segment 2.
L'horloge de transmission (TSCL ou System Clock) est réalisée à partir de l'horloge du composant (TCLK). Ces deux horloges sont liées par le terme NBRP ou Baud Rate Prescaler. On peut dont écrire la relation suivante :
Pour chaque bit transmis, la première période de l'horloge système est appelée temps de resynchronisation (TSYNC), il permet à la machine réceptrice de se resynchroniser avec l'émetteur.
Viens en suite le temps de propagation de la ligne et les retards liés aux différents composants rencontrés sur le bus. L'addition de ces temps forme le segment SEG1 (TSEG1).
On ajoute enfin un petit intervalle de temps pour permettre le traitement et éventuellement pour obtenir une "marge d'erreur" sur la longueur d'un bit. Cela forme le segment SEG2 (TSEG2).
Pour permettre au système de se resynchroniser, on autorise la trame à être réduite ou au contraire prolongée. Cette valeur est nommée SJW pour Synchronisation Jump Width.
Pour les
segments SYNC, SEG1 et SEG2, on peut traduire la durée des segments en un nombre
de périodes de l'horloge système :
On peut donc en déduire que la transmission d'un bit est la somme d'un nombre de périodes de l'horloge système. Ce nombre est nommé NNBT (pour Nominal Bit Time) et se décompose de la façon suivante :
On cherchera toujours à obtenir NNBT le plus grand possible.
De plus, les composants CAN permettent de réaliser l'acquisition, au choix, de un ou de trois échantillons. On réalise alors un "filtrage numérique" en calculant la moyenne et en la comparant à une certaine valeur. Cette possibilité est nommée SAM pour Sample Mode.
On a donc définit, en fonction des limites des composants, les règles liant les valeurs les unes aux autres.
Il existe aussi des critères de "qualité" dans la définition des segments d'un bus CAN. Cela reviens à dire que le point d'échantillonnage doit se situer entre 66 et 75% de la taille de la trame. Autrement dit, on considère que :
Toutefois, dans certains cas, ces règles ne peuvent être atteinte, dans ce cas, il existe des limites qui sont simplement liées à la cohérence du système ou à une vision moins restrictive de la norme :
Exemple de calcul. On souhaite transmettre à l'aide d'un composant CAN doté d'une horloge à 16MHz des signaux à un débit de 100Kbit/s en ne prenant qu'un seul échantillon, sur une ligne de 50m.
On reprendra ce calcul un peu plus loin pour prendre en compte la longueur souhaitée de la ligne, lors du paragraphe sur les temps de propagation et sur la tolérance de l'horloge. Rappel sur les oscillateurs.
Le fait de ne pas transmettre l'horloge dans une liaison CAN implique une resynchronisation régulière des différents nœuds du Réseau. Cette resynchronisation est réalisé à chaque front descendant de la trame. Avec elle, le récepteur est capable de compenser la dérive de son oscillateur local par rapport à celui de l'émetteur, puisque par définition, un front est synchrone avec l'horloge qui l'a créé.
Cette synchronisation est réalisée par le NSJW et s'établie de la façon suivante :
· Si le changement d'état (front descendant) intervient durant le segment SYNC, la durée du bit n'est pas modifiée.
· Si le changement d'état intervient après le segment SYNC, on parle d'erreur de phase positive, dans ce cas, le Segment 1 sera rallongé, dans la limite de la valeur de NSJW, d'un nombre entier de périodes de TSCL.
· Si le changement d'état intervient avant le segment SYNC, on parle d'erreur de phase négative, dans ce cas, le segment 2 sera diminué, dans la limite de la valeur de NSJW, d'un nombre entier de périodes de TSCL.
Dans le cas d'une erreur de phase positive, le segment n°1 en se rallongeant va compenser la perte de temps de propagation liée au retard du front d'horloge. Cela revient
à dire que tant que le retard du front est inférieur à
Dans le cas d'une erreur de phase négative, c'est le segment 2 du bit "précédent" qui est atteint, cela n'a donc aucune conséquence sur la propagation. La tolérance maximale sur l'oscillateur local d'un composant CAN est donnée par la formule :
On notera que la tolérance généralement admise pour un astable est de 1,5%, de 0,1% pour un quartz non thermostaté et de 10ppm pour un quartz de très bonne qualité. Interface entre les composants CAN et la couche physique.
Dans la plus part des cas, il est impossible de placer directement le contrôleur CAN sur la ligne physique, et on doit souvent utiliser des composants spécifiques d'interfaçage (par exemple le 82c250 de Philips). En effet, l'utilisation d'une ligne bifilaire à des débits importants implique une adaptation d'impédance. De plus les niveaux électriques utilisés sur les 2 voies différentielles du Réseau sont assez difficiles à obtenir sans interfaçage.
La norme CAN définie 2 règles de transfert, la règle de transfert rapide (High Speed CAN) caractérisée par des débits supérieurs à125Kbit/s et la règle de transfert lent (Low Speed CAN) caractérisée par des débits inférieurs à 100Kbit/s. High Speed CAN.Les contraintes technologiques liées à l'utilisation de CAN à des débits élevés, sont les suivantes :
La ligne utilisée est alors de la forme suivante :
D'où les niveaux de tension :
Low Speed CAN.
Les contraintes technologiques liées à l'utilisation de CAN à des débits faible, sont les suivantes :
La ligne utilisée est alors de la forme suivante :
D'où les niveaux de tension :
Fonctionnement du système physique.Cette petite étude à pour but de vous familiariser avec votre environnement de travail lorsque vous allez utiliser le Réseau CAN, on va donc s’intéresser aux temps de propagation.
Si l'on simplifie un peu la chaîne d'un Réseau CAN, on arrive rapidement au schéma suivant :
Présentation d'un Réseau CAN (pire des cas).
La distance la plus longue entre 2 machines CAN permet de calculer le temps de propagation maximum du Réseau. Ce temps de propagation est composé de 3 éléments :
Calcul du temps de propagation sur la ligne.Le temps mis par une onde à se propager sur la ligne dépend beaucoup de la vitesse de phase de la ligne. Dans la plupart des cas, la vitesse de propagation est de 220 000km/s. Soit un temps de propagation par mètre de l'ordre de 5ns (pour 200 000km/s ou 5,5ns pour 180 000km/s ou 4,5ns pour 220 000km/s). Définition des paramètres de l'adaptateur.L'adaptateur peut être soit encapsulé (composant discret) soit réalisé par le développeur. Dans tous les cas, la définition des temps de propagation est extrêmement variable. On se contente donc de réaliser ce calcul grâce aux documents constructeurs (cas des composants discrets) ou par des essais (cas des composants fait main). Généralement on essaie d'obtenir des temps de l'ordre de 10ns. Définition des paramètres du contrôleur.Le contrôleur CAN doit acquérir les signaux pour pouvoir les traiter. Cette acquisition se fait par l'intermédiaire de bascules D. Ces bascules sont directement reliées à l'horloge du contrôleur. Par contre la réémission elle se fait directement sur les sorties des bascules d’acquisition. On peut donc déduire que le temps maximum mis par le contrôleur pour acquérir des signaux et les restituer est une période de l'horloge.
Calcul du temps de propagation global.
Le temps de propagation réel du Réseau CAN est définit par la formule suivante :
Grâce à cette formule, on peut imposer la valeur minimum du temps de propagation du Réseau grâce à la formule :
Dans le cas de notre exemple précédent nous avions trouvé : NSEG1 = 11; NSEG2 = 4; TSCL = 625ns.
Pour TTX = TRX = 40ns et TSD = TOSC = 62,5ns, si l'on souhaite une longueur de ligne d'au moins 40m, on trouve :
Selon la formule utilisée…
|