3.18. Notions de base de l’UART

Un UART (Universal Asynchronous Receiver-Transmitter) est le moyen le plus ancien et le plus simple de transférer des octets entre deux microcontrôleurs, ou entre un microcontrôleur et un PC hôte. Deux fils transportent les données – un pour chaque sens – et une masse commune assure le retour du signal. Aucun des deux côtés ne partage d’horloge ; ils conviennent d’un débit en bauds à l’avance et récupèrent le rythme des bits à partir de la ligne de données elle-même.

3.18.1. La trame

Chaque caractère sur la ligne est encapsulé dans une trame : un bit de départ, les bits de données, un bit de parité optionnel et un ou deux bits d’arrêt.

Une forme d'onde de trame UART. Le signal reste au repos à l'état haut à gauche, descend à l'état bas pendant une durée de bit (le bit de départ), puis transporte huit bits de données en séquence, puis revient à l'état haut pendant une durée de bit (le bit d'arrêt) avant de revenir au repos.

Une trame UART : un bit de départ, huit bits de données et un bit d’arrêt, chacun d’une durée d’une période de bit (1 / baudrate secondes).

La ligne reste au repos à l’état haut. Le récepteur guette un front descendant, qui marque le début d’une nouvelle trame. Il échantillonne ensuite la ligne de données une fois par période de bit – généralement au milieu de chaque bit – et réassemble les bits en un caractère. Le bit d’arrêt ramène la ligne au repos afin que le bit de départ suivant puisse être détecté.

3.18.2. Le débit en bauds

La période de bit – et la vitesse de la liaison – est définie par le débit en bauds, le nombre de bits par seconde. 9600, 19200, 38400, 57600, 115200, 230400, 460800 et 921600 sont les valeurs standard ; 115200 est la valeur par défaut la plus courante. Les deux extrémités doivent s’accorder sur le débit en bauds à quelques pour cent près, sinon le récepteur échantillonne les bits aux mauvais instants et les données reviennent corrompues.

Les débits en bauds plus élevés transfèrent davantage de données par seconde mais sont plus sensibles à la longueur du câble, à la capacité parasite et à la précision des horloges de chaque extrémité. Pour des liaisons courtes entre deux cartes sur le même banc, 115200 à 921600 fonctionne sans difficulté.

3.18.3. Câblage

Une liaison UART utilise trois fils :

Deux cartes étiquetées A et B, reliées par trois fils. La broche TX de la carte A se connecte à la broche RX de la carte B ; la broche TX de la carte B se connecte à la broche RX de la carte A ; et les broches de masse des deux cartes sont reliées entre elles.

Câblage UART : le TX d’une carte va au RX de l’autre, et les deux masses sont reliées.

  • TX → RX, dans les deux sens. La broche de transmission de chaque carte est la broche de réception de l’autre carte. Une erreur courante chez les débutants est de câbler TX → TX – deux sorties qui se combattent, sans aucune donnée sur l’un ou l’autre récepteur.

  • Masse commune. Les niveaux de signal sont référencés à la masse, donc les deux cartes doivent avoir une masse commune, sinon le récepteur voit une tension erronée sur la ligne.

3.18.4. Niveaux de tension et couches physiques

Les niveaux de signal sur les broches UART de la caméra sont en CMOS 3,3 V : la masse pour un zéro logique, 3,3 V pour un un logique. Tout dispositif parlant l’UART CMOS 3,3 V – un autre microcontrôleur, un adaptateur USB-série réglé sur 3,3 V, un module GPS 3,3 V – peut être câblé directement.

Note

Les dispositifs UART CMOS 5 V (anciens microcontrôleurs, certains modules GPS, certaines anciennes cartes d’extension de capteur) parlent le même format de trame UART avec des niveaux logiques 5 V. Les câbler directement à la caméra est dangereux : un TX 5 V pilotant le RX de la caméra dépasse la tension d’entrée maximale absolue sur les caméras qui ne tolèrent pas le 5 V, et le TX 3,3 V de la caméra peut ne pas atteindre le seuil haut du dispositif 5 V pour obtenir un un logique propre.

La conversion entre les deux tensions nécessite un pilote de ligne actif – un circuit intégré décaleur de niveau bidirectionnel dédié, doté de ses propres transistors de commande de part et d’autre de chaque ligne. Les décaleurs passifs à MOSFET et résistance de rappel de Adaptation de niveau ne suffisent pas ici : leurs fronts montants reposent sur la charge de la ligne à travers une résistance, ce qui convient à des vitesses de commutation mais est bien trop lent pour l’UART. À 115200 bauds, chaque bit dure environ 8 µs, et la pente RC du décaleur passif fait déborder un bit sur le suivant.

Un pilote de ligne actif produit des fronts propres dans les deux sens aux pleins débits UART. Choisissez un composant calibré pour le débit en bauds auquel la liaison fonctionnera, câblez le TX et le RX de la caméra du côté 3,3 V du décaleur, et câblez le TX et le RX du dispositif 5 V du côté 5 V du décaleur.

Trois anciennes couches physiques utilisent le même format de trame mais des tensions différentes, et nécessitent un convertisseur de niveau entre elles et un microcontrôleur 3,3 V :

  • RS-232. Utilisé par les ports série des PC de bureau et certains équipements industriels. La ligne oscille entre environ ±5 V et ±15 V, le repos étant au rail négatif. Polarité inversée et tension élevée par rapport au CMOS ; une puce de la famille MAX232 / MAX3232 (ou similaire) gère la conversion.

  • RS-422. Une norme de signalisation différentielle pour les liaisons point à point (un émetteur, jusqu’à dix récepteurs). L’émetteur transmet sur une paire de fils équilibrée ; le récepteur voit la différence entre eux et ignore le bruit en mode commun le long du trajet. Les liaisons full-duplex utilisent deux paires – une pour chaque sens. Le RS-422 atteint des dizaines de mètres à un kilomètre selon le débit en bauds, et une puce émetteur-récepteur RS-422 se place entre le TX / RX de la caméra et la paire équilibrée.

  • RS-485. Le cousin multipoint du RS-422 – la même signalisation différentielle, mais conçue pour placer jusqu’à 32 émetteurs et récepteurs sur un seul bus. La plupart des liaisons sont half-duplex sur une seule paire, l’émetteur et le récepteur de chaque nœud partageant les mêmes fils et le logiciel arbitrant qui parle. Utilisé dans les bus d’automatisation industrielle (Modbus, DMX512, Profibus) où les fils s’étendent loin et où le bruit est important ; une puce émetteur-récepteur RS-485 se place entre le TX / RX de la caméra et la paire différentielle.

Les deux envoient toujours des trames UART au niveau du bit sous-jacent. La configuration machine.UART de la caméra (débit en bauds, bits, parité, bits d’arrêt) est la même quelle que soit la couche physique qui transporte le signal de l’autre côté de l’émetteur-récepteur.