Retour de notre grande série, Parlons « embarqué » afin de monter dans les hautes sphères de la communication. J’ai parlé la dernière fois de communication entre mon µC (microcontrôleur) et divers composants avec un principe de base, le bus parallèle.
image manquante
Mais vous l’avez constaté vous-même, ça devient vite un peu le bordel, c’est donc pour ça qu’une tétrachié de chercheur et d’ingénieur ont mis au point des bus de communication pour se faciliter un peu le câblage.
Exemple pratique récent avec vos disques durs, regardez moi dans les yeux du blog et dîtes sincèrement que vous ne regrettez absolument pas cette superbe interface qu’était l’IDE (ou Parrallel-Advanced Technology Attachment) au profit d’un Serial ATA beaucoup plus saillant.
image manquante
Hummmmmiam, la bonne vieille nappe IDE qui niquait le flux d’air du PC, qui entrainait des galères de « T’es en slave ou en master sur la nappe? », ça en fait des bons souvenirs !
Bref, rapidement on se rend compte que physiquement parlant, ça serait bien de pouvoir brancher autre chose que des machins qui font quarante fils de large pour quelque chose de plus discret.
Mais avant d’aller voir plus loin, parlons du moyen le plus simple pour « communiquer » avec un µC : le DI/O. Comme Digital Input / Output. Et oui, quoi de plus gratifiant que de faire rentrer un signal (avec un interrupteur ou un bouton poussoir) et de voir un résultat sur une sortie avec une petite LED dessus ? Et oui, ça vend toujours autant du rêve ici. Mais sans déconner, quand vous venez de finir de monter votre PC, vous faites quoi a part appuyer sur un putain de bouton en regardant la diode de la façade, attendant l’allumage de cette dernière tel un enfant qui attend fébrile le père noël ? Comme quoi, avec une diode on fait passer pas mal de message. Si vous voulez, vous pouvez même câbler 8 diodes et faire LE TP d’informatique industrielle le plus célèbre, le « chenillard », ainsi que sa version haut de gamme dite « K2000 ». Avec une Led, vous pouvez faire du morse, bon vieux protocole de communication série qui marche aussi bien avec des fils électriques qu’avec des signaux lumineux (foutez vous de ma gueule avec ma Led, mais les bateaux ont utilisé ce principe pour chatter).
Parallèle ? Série ?
Mais si rappelez-vous, je vous expliquais que le µC plaçait des niveaux électriques sur le bus de données. Dans mon exemple on utilisait un bus 8 bits, on avait donc en parallèle 8 informations sur 8 fils. Et si maintenant on disait que plutôt que d’envoyer 8 infos en même temps sur 8 fils on envoyait un série de 8 informations l’une après l’autre sur un seul fil ? Si la communication parallèle est faite avec une vitesse de 1 rafraichissement par seconde, il suffit d’aller 8 fois plus vite sur un seul fil pour obtenir le même débit.
Un bus parallèle à 1Hz (majuscule au H, je vous rappelle qu’Hertz est un éminent monsieur) offre les même performances qu’un bus série de 8Hz. Donc pour envoyer une information en série sur un seul fil, il suffira de mettre un niveau logique haut puis bas à une fréquence qui sera connu par le récepteur. Vous imaginez bien d’allumer et d’éteindre une Led à une fréquence constante pour envoyer un message est vite chiant, et c’est pour ça que des gens ont sacrifié leur vie pour créer des interfaces de communication standardisées.
Et la première interface qui me servira de support sera… la liaison RS-232 ! J’en vois deux au fond (toujours les mêmes) qui se disent que « tiens ça me rappelle un truc ». Et oui, dans les temps reculer de l’informatique cette sympathique interface méritait d’avoir son propre port sur votre PC, sous la forme d’une prise DB9 qui s’appelait glorieusement sur votre PC : COM1.
image manquante
« AAAAAaaahhhh ouuuuuuuuui ! J’me rappelle, j’y branchais (enfin, papa le faisait…) mon modem US-Robotics 33,6kbauds pour aller occuper la ligne téléphonique avec les CD d’AOL gratuit trop bien ».
Exactement, cette glorieuse interface a fait son temps car elle permettait de brancher un peu un n’importe quoi pourvu qu’un dispose d’un logiciel qui gère une communication avec un périphérique externe (modem, imprimante, scanner, lance missile USB… ah non pas celui là, mais on aurait pu). Aujourd’hui elle a disparu du cul des PC grand public, et seul les professionnels en ont parfois besoin (moi en particulier) car c’est une interface très simple à utiliser pour discuter avec de l’électronique embarquée. Au passage j’en profite pour dire que si le connecteur n’est plus présent, les fils qui l’utilisent sont parfois disponibles sur les cartes-mères. Ainsi vous pouvez à peu de frais acheter le connecteur et faire un coup de tuning/soudure pour un effet rétrochic des plus charmants.
Question : Pourquoi le connecteur ayant disparu, l’interface électrique est elle toujours présente ? Et bien ce n’est que mon avis, mais c’est parce que le module du processeur qui va derrière est tellement bidon, peu cher et historique que tout les designers du puce le garde « au cas où ».
Ce module s’appelle la plupart du temps un UART (Universal Asynchronous Receiver Transmitter). L’UART est un module de µC qui se charge de transformer des signaux électriques en valeur compréhensible par le cœur du processeur, et de faire également l’inverse, transformer des informations venant du cœur en signaux électriques. Parce que manuellement changer les niveaux électriques est fatiguant, l’UART se charge d’envoyer à vitesse constante les octets qu’on lui met en entrée, déchargeant ainsi le CPU de cette tâche ingrate. L’UART est un périphérique qui utilise 3 fils :
- Un pour la réception (Rx)
- Un pour l’émission (Tx)
- Une masse électrique.
D’un point de vue électrique lors d’une communication on observe ce genre de chose :
image manquante
Lorsqu’on connait la vitesse et quelques autres paramètres, on peut facilement regrouper les changements d’états par paquets de 8 et ainsi recréer des octets, qui vont au final former un message qu’on décodera ensuite dans le programme. Sur l’exemple ci dessus, le programme reçoit une trame et en renvoi une identique. Si on fait le regroupement précité, on observe ça :
image manquante
Si avez le temps, observez les niveaux logiques et vous pourrez trouver les valeurs binaires de chaque paquet, qui donne les valeurs hexadécimales de la première ligne. Pour indication la deuxième ligne montre les valeurs ASCII correspondantes (sauf les valeurs entre guillemets car elles ne correspondent à aucun caractère « classique »). Si cette trame est envoyée sur un PC avec un Hyperterminal, vous verrez donc quelques caractères s’afficher à l’écran.
On a donc utilisé 2 fils pour faire transiter 8 octets de 8 bits chacun, soit 64 bits. Plus pratique que 64 fils !
Limitation et contre mesure
La limite principale d’une communication série est la perte de données suite à une vitesse trop élevée. En effet si on regarde les chronogrammes ci dessus, il est facile de comprendre que si un bit est oublié, tout le message est décalé et l’information est mal comprise. Et plus on augmente la vitesse, plus le risque d’incompréhension est grand. De plus, dans le cas de la RS232, le côté « repère temporelle » est indépendant de chaque côté. C’est à dire que l’émetteur et le récepteur sont « sensé » utiliser la même vitesse de communication. Mais si ce n’était pas le cas… impossible de se comprendre.
Autre soucis, la préservation de l’intégrité des données. C’est simple, il n’y en a pas. Si une perturbation vient transformer un 1 en 0, impossible pour le récepteur de le savoir. Cependant on peut palier à ça en intégrant des checksum dans les trames, au prix d’une phase d’analyse supplémentaire à l’émission et à la réception. Et oui, rien n’est parfait en ce bas monde.
Conclusion
Une communication dans un système embarqué est soumise à un certain nombre de contraintes dont l’encombrement. On voit bien avec ces quelques paragraphes l’intérêt d’une communication série qui permet de limité les éléments à câbler. Si la RS232 répond à des besoins simples, elle sera insuffisante pour des communications rapides ou bien soumises à des contraintes de pollution électromagnétique.
Et bien ce que je peux conclure c’est que cet article et déjà assez long comme ça, alors que j’avais envie de parler d’autre type de bus de comm. Rendez un peu plus tard pour parler SPI, CAN et pourquoi pas USB et Ethernet.