LES RESEAUX LOCAUX
INDUSTRIELS
Chapitre 22/25 - Etude de Réseaux locaux : Le bus I2C |
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 I2C
Le bus I2C est né en 1992 quand sa première version fut normalisée par l’IEEE. Ce bus, à l’origine conçu pour l’interfaçage des périphériques d’un calculateur, est une "évolution" du bus parallèle IEEE 488 précédemment étudié. Son principe repose sur l'utilisation d'un bus d'instrumentation série (donc mieux protégé et moins coûteux que le bus parallèle HPIB).
Le bus I2C est une liaison synchrone, trifilaire, d'un débit variant entre 0 et 100Kbaud, multimaître et basé sur un double mode de transfert de données (maître/esclave ou producteur/consommateur). Nous verrons plus loin la différence entre ces 2 modes de fonctionnement, mais pour commencer intéressons-nous aux échanges sur le bus.
Les illustrations présentées dans ce document sont extrait de la notice de spécification du bus I2C proposée par Philips. Définitions du bus I2C.
Les 3 lignes utilisées par le bus I2C sont SCL (pour System CLock), SDA (pour Serial DAta) et enfin un fil de masse pour identifier les niveaux logiques transmis. La ligne SCL est la propriété du maître de l'échange, elle définie l'horloge qui rythme la fréquence des échanges entre les 2 machines en communication et avec laquelle on doit être synchronisée , tandis que la ligne SDA sert à l'échange des données du producteur vers le consommateur. Les données présentes sur le bus sont valide uniquement quand la ligne SCL est à l'état haut.
Fonctionnement.
La transmission débute avec une transition de l'état haut à l'état bas de la ligne SDA lorsque la ligne SCL est à l'état haut (donc lorsqu'il n'est pas sensé y avoir de changement d'état sur la ligne SDA), ce qui identifie formellement le délimiteur de début de trame. Elle s'achèvera par une transition de l'état bas à l'état haut de la ligne SDA lorsque SCL est à l'état haut, pour identifier le délimiteur de fin de trame.
Après la transition marquant un début de trame, l'émetteur envoie un octet de données. Puis il envoie un bit à l'état haut et attend que le destinataire du message le force à l'état bas, pour émettre alors le marqueur de fin de transmission. Trame fondamentale.
Le principe du bus I2C est de transmettre via une liaison trifilaire des informations numériques sur des distances de quelques mètres, il est donc volontairement très limité dans ses capacités de transfert. Ainsi, une trame I2C élémentaire est composée des champs suivants :
Un délimiteur de début de trame ; Un champ de donnée de 8 bits ; Un bit de validation ; Un délimiteur de fin de trame.
Lors d'une transmission, le producteur et le consommateur doivent valider régulièrement leurs échanges. Tous les 8 bits, les 2 machines en communication valident les 8 derniers bits reçus, c'est l'acquittement du message.
Le processus d'acquittement repose sur l'envoie par l'émetteur d'un bit récessif et son écrasement par le récepteur qui renvoie alors un bit dominant. Le non respect d'un acquittement peut entraîner la rémission du message ou l'abandon de la transmission. Généralement, la transmission est abandonnée et les machines retentent une transmission pour terminer leur échange. Restriction à l'utilisation du bus I2C.
Le bus I2C n'est pas à proprement parler un bus conçu pour des transmissions à grande distance. En effet, comme il utilise des circuits électriques à collecteur (ou à drain) ouvert, il convient d'utiliser des résistances de "Pull-up" pour définir le niveau de tension sur la ligne lorsque les transistors sont bloqués. Ces résistances doivent avoir un valeur précise de façon à ne pas risquer d'endommager les composants permettant l'accès au médium. Or le simple fait d'utiliser des résistances impose une définition de la capacité parasite maximum tolérée par le bus pour atteindre le débit recherché. Cette capacité est la somme des capacités de couplage (capacités internes des composants branchés sur la ligne) et de la capacité linéique du canal. Globalement, cette impédance ne peut pas dépasser 400pF (soit pour un bus à 4 machines, une ligne de l'ordre de 2 mètres).
Il convient de noter que l'utilisation du bus I2C, soit en mode Fast (400Kbaud), ou en mode High Speed (3,4Mbaud), implique que la charge capacitive tolérée soit réduite à 200pF et on doit utiliser des composants actifs pour établir les niveaux de tension, de façon à engendrer la circulation d'un courant de 3mA sur la ligne. Organisation de l'échange de données.
Le simple fait d'utiliser plusieurs machines sur une ligne impose de définir des règles strictes pour l'accès au médium. On verra plus loin comment les échanges sont synchronisé entre les différentes machines, mais commençons par analyser comment I2C permet l'adressage des machines qui le compose.
Adressage.
La faible longueur de la trame de donnée du bus I2C ne permet naturellement pas de réaliser à la fois un adressage de qualité et une transmission efficace de données.
On réalise donc la concaténation de plusieurs trames simples pour créer une trame complète possédant : un champ d'adresses de taille variable (on verra qu'il existe deux modes d'adressages, un sur 7 bits, l'autre sur 10 bits); un bit définissant le sens de l'échange (Read ou Write) et d'un champ de données de K fois 8 bits (ce champ est obtenu par concaténation de K trames de 8 bits de données).
Dans un adressage sur 7 bits, on utilise certaines adresses spécifiques pour réaliser des fonctions spéciales.
Par exemple, l'adresse 0 (General Call Adress) permet d'ordonner, selon la valeur de l'octet suivant (associé à l'octet d'adresse), la remise à zéro de l'ensemble des machines ou la réinitialisation de leur adressage.
Toutes les adresses ne sont donc pas utilisables. Les adresses interdites sont 0000 XXX et 1111 XXX. Le comité I2C définit donc pour différents composants des adresses incluant une partie fixe et une partie programmable. Ces adresses programmables permettent d'utiliser sur un même montage plusieurs fois le même composant.
Comme on la vu, pour lancer un appel général, le premier octet transmis doit obligatoirement être à 0. C'est l'octet suivant qui défini la fonction réalisée. Si le second octet fini par un "zéro" (son LSB est à "0"), alors on a un RESET logiciel.
Si le LSB est à "1", on est en présence d'un message provenant d'une machine qui n'a pas la possibilité de connaître à priori l'adresse de la machine consommatrice (par exemple un scanner ou un clavier d'ordinateur) et qui utilise une procédure de GENERAL CALL pour se faire connaître, en envoyant son adresse (sur 7 bits) suivi des données à transmettre.
En cas de RESET logiciel, c'est le contenu du deuxième octet qui défini la commande effectuée par les périphériques Réseaux. Si l'octet vaut 4, on demande à toutes les machines de remplacer leur adresse programmable "par défaut" par celle obtenue par programmation. Si l'octet vaut 6 alors toutes les machines font une remise à zéro et chargent leurs adresses par défaut.
Transmission des données par paquets.
Du fait de sa faible capacité de transfert, le protocole I2C impose une transmission par paquet. Imaginez sinon, qu'une fois l'adressage réalisé, on soit limité à une seule trame de donnée, l'efficacité de codage devient alors 38%. Par contre si l'on réalise une transmission par paquet, on concatène des trames de données à la suite les unes des autres après une trame d'adresse pour transmettre un grand nombre d'octets de données sans refaire d'adressage, d'où un sérieux gain d'efficacité. Par exemple, l'émission de 10 trames de données permet d'obtenir une efficacité de codage de 80% (correct).
Mais ce mode de transmission est dangereux car si l'on ne limite pas le temps de parole, une machine peut totalement s'accaparer le Réseau.
Il est possible, entre 2 trames, de faire apparaître un "temps de relaxation". Ce temps permet au récepteur (ou à l'émetteur) du message de réaliser un traitement des données reçues (ou à émettre) avant de poursuivre la transmission, sans avoir à libérer la ligne. Bloquer la ligne SCL à 0 permet alors, sans conséquences pour les autres machines présentes, d'interrompre l'échange.
Pour se protéger de la défaillance de l'un des 2 nœud qui pourrait maintenir la ligne SCL à l'état bas indéfiniment ou qui pourrait ne plus libérer la ligne, on utilise généralement des "chiens de gardes" (WATCHDOG) pour limiter la durée d'activité des composants.
Synchronisation des échanges.
Le maître du bus a pour rôle la création de l'horloge de transmission. Cette horloge ne doit pas être perturbée par des éléments extérieurs (sauf en cas d'arbitrage). Par exemple, si 2 machines souhaitent prendre possession du bus, elles émettent leur horloge. Il faut donc les synchroniser entre elles. Plus généralement, émetteurs et récepteurs synchronisent leurs horloges respectives lors des échanges.
Vu la méthode utilisée pour se connecter au médium, l'état bas est un état dominant c'est à dire qu'il l'emporte sur tous les autres états du bus, la durée de l'état bas de la ligne SCL dépend uniquement de la machine la plus lente, tandis que la durée de l'état haut dépend de l'horloge la plus rapide. Arbitrage.
Lorsque les horloges sont synchronisées, on se retrouve dans le cas où la ligne de donnée doit arbitrer l'échange. C'est donc sur le contenu du message (comme pour le protocole CSMA/NBA) que sera réalisé l'arbitrage.
Encore une fois, du fait de la liaison avec les lignes du Réseau, les états récessifs sont écrasés par les états dominants. Ainsi le message contenant le plus de bits dominants est aussi le plus prioritaire.
Modes de transmissions.Transmission en Mode Simple.
Dans les échanges en mode simple, l'un des maîtres du Réseau s'accapare le bus pour réaliser un transfert unidirectionnel de données vers une seule machine.
Une fois que le maître a pris possession de la ligne (imposition de l'horloge), il commence à émettre l'octet d'adressage (7 bits d'adresse et 1 bit de sens) puis il demande à sa cible (l'esclave) de confirmer l'acceptation de l'échange (acquittement). Une fois l'adresse acceptée, le maître, selon la valeur du bit de sens, lit ou écrit successivement l'ensemble des octets en les acquittant (ou en demandant l'acquittement, selon qu'il est respectivement consommateur ou producteur) les uns après les autres.
Attention, lorsque le maître envoie un ordre de lecture, cela signifie qu'il se place comme consommateur du message (c'est lui qui lit), tandis qu'avec un ordre d'écriture, il se place comme producteur du message.
Lorsque le maître est aussi le consommateur, la seule façon qu'il a d'arrêter l'échange est de ne pas acquitter le dernier octet envoyé (tout en le conservant). Le producteur rompt alors l'échange et arrête d'émettre.
Le cas inverse peut se produire, si le maître émet et ne récupère pas d'acquittement pour l'un de ses messages, il cesse immédiatement d'émettre et, si l'ensemble des données n'a pas encore été expédié, il essaiera de contacter à nouveau la machine cible en recommençant l'adressage.
Dans tous les cas, après avoir envoyé son dernier octet ou en l'absence d'un acquittement, le maître émet une commande de Stop.
Mode combiné.
Une machine maître peut parler à plusieurs machines, à la suite, ou souhaiter modifier le sens de l'échange. Dans ce cas, le maître à la possibilité de changer d'adressage sans avoir à rendre la ligne, c'est le mode combiné.
Dans ce mode, avant d'émettre une nouvelle adresse, le maître émet à la fin de son précédent message, non pas un bit de commande d'arrêt de transmission (Stop), mais au contraire, un bit de commande de début de transmission (Start). On dit alors que c'est une commande de redémarrage. Evolution.
Il existe certaines évolutions du bus I2C, en particulier, les auteurs de la norme tendent vers des versions de I2C à des débits plus élevés avec plus de nœuds. Cette course en avant à conduit à l'utilisation de format d'adresse sur 10 bits, le développement de mode de transmission plus rapide (400K et 3,4Mbaud).
Adressage sur 10 bits.
L'adressage sur 10 bits repose sur l'utilisation de 2 trames pour coder l'adresse du destinataire. La première trame émise étant très fortement amputée par le codage du mode d'adressage (le mode 10 bits est codé 1111 0XX où les XX sont les 2 bits de poids fort de l'adresse du destinataire). Le huitième bit de la première trame d'adresse reste le bit qui code le sens de transfert (comme dans le mode d'adressage à 7 bits). La seconde trame est constituée des 8 derniers octets d'adressage. Attention, encore une fois, chaque octet doit être acquitté. Ce mode d'adressage permet de dialoguer avec plus de machines que le classique mode 7 bits. De plus, il continue à être utilisable avec des machines fonctionnant en mode 7 ou en mode 10 bits. Une machine en mode 7 bits comprenant par la lecture du premier octet d'adresse qu'il s'agit d'un format 10 bits. Exemple de transmission vers 2 machines (mode combiné) en adressage 10 bits.
Exemple de transmission vers 2 machines (mode combiné) en adressage 7 bits puis en 10 bits. Les modes de transfert Haut débit.
Les évolutions de la norme I2C permettent maintenant d'atteindre des débit jusque là inaccessible. Au fur et à mesure de l'évolution technique, on a utilisé des débits de 400Kbaud (Fast Mode) et maintenant on atteint 3,4Mbaud (High Speed Mode).
Fast Mode.
En mode rapide comme en mode standard, le même bus I2C permet aussi bien la transmission des signaux à 100 qu'à 400Kbaud. Par contre, on doit alors respecter scrupuleusement la limitation de la charge capacitive du bus à 200pF. Si toutefois, on souhaite augmenter cette valeur, il faut utiliser non plus des transistors en collecteur ouvert pour l'accès à la ligne, mais des sources de courant de 3mA (max).
High Speed Mode.
Le mode grande vitesse permet d'atteindre des débits de 3,4Mbaud, sur une ligne un peu particulière puisqu'elle doit être pilotée par des sources de courant et non par des transistors en collecteur ouvert, un peu comme dans une liaison rapide. On utilise donc des lignes spécifiques au fonctionnement à grande vitesse, les ligne SDAH et SCLH. Ces lignes doivent pouvoir être compatible avec le mode basses vitesses.
Les résistances de pull-up existant toujours, la charge capacitive de la ligne est encore abaissée pour atteindre 100pF maximum en mode normal. On peut quand même augmenter la capacité de la ligne en remplaçant les résistances par des éléments actifs.
Du fait de ces profondes modifications, le mode haute vitesse interdit totalement de réaliser des arbitrages. En cas de bus multimaître, les arbitrages seront réalisés sur les lignes basses vitesses.
Pour commencer un transfert à grande vitesse, on démarre paradoxalement la transmission par un premier octet (0000 1XXX) en mode standard pour arbitrer entre les différentes machines qui souhaitent la maîtrise du bus (avec un arbitrage sur les 3 bits X). Une seule machine gagne alors la main (c'est le principe de l'arbitrage), mais l'octet précédemment émis n'est pas acquitté. La communication prend alors fin en mode classique et démarre alors en mode grande vitesse.
En mode grande vitesse, la trame commence par une condition de redémarrage suivie soit d'un adressage sur 10 bits, soit d'un adressage sur 7 bits. Puis la machine contrôlant le bus envoie (ou reçoit) des données en recevant un acquittement à chaque octet. Le fonctionnement grande vitesse permet tout de même à la machine maîtresse de "libérer" la ligne d'horloge en fin de message pour permettre à d'autres machines de la bloquer à l'état bas.
En conclusion, en mode HS (High Speed), comme en mode standard, le protocole reste identique, seul l'accès au médium change.
Protocole de transfert en mode HS Exemple de liaison au médium des composants autorisant le mode HS
Il faut remarquer que les composant "maître-esclave" disposent de 2 liaisons. D'une part, une liaison HS, d'autre part, une liaison standard. La seconde liaison permet de transformer ce nœud en pont entre deux Réseaux I2C, l'un utilisant le mode grande vitesse, le second utilisant le mode standard.
|