
Comment fonctionne la communication UART ?
L'UART (Universal Asynchronous Receiver-Transmitter) est un circuit électronique qui assure une communication série asynchrone entre deux équipements. Les données y circulent bit par bit sur une paire de lignes, TX pour la transmission et RX pour la réception. Son fonctionnement est simple, mais il repose sur quelques règles qu'il faut connaître pour établir une liaison fiable.
Une liaison sans horloge commune
Contrairement aux protocoles série synchrones comme le SPI (Serial Peripheral Interface) ou l'I2C, l'UART ne partage pas de signal d'horloge entre l'émetteur et le récepteur. Chaque échange est délimité dans la trame elle-même : un bit de start signale le début de la transmission, un ou plusieurs bits de stop en marquent la fin.
Cette absence d'horloge impose en revanche que les deux équipements soient configurés à l'identique. Les vitesses de transmission courantes vont de quelques bauds (bits par seconde) à plusieurs mégabauds, selon les besoins de l'application et les limites du matériel. Le format des données est lui aussi paramétrable : nombre de bits de données (généralement 7 ou 8), parité (aucune, paire ou impaire) et nombre de bits de stop (généralement 1 ou 2).
L'UART peut enfin intégrer un contrôle de flux matériel par les signaux RTS (Request to Send) et CTS (Clear to Send). Ces lignes supplémentaires permettent de réguler le débit entre les deux équipements, ce qui est particulièrement utile lorsque leurs capacités de traitement diffèrent.
Déroulement d'un échange
Tout commence par l'initialisation. Avant le premier octet, l'émetteur et le récepteur doivent être réglés sur les mêmes paramètres : vitesse en bauds, nombre de bits de données, parité éventuelle et nombre de bits de stop.
Vient ensuite la transmission. L'UART de l'émetteur reçoit les données à envoyer et les sérialise sur la ligne TX. Chaque octet est encadré : un bit de start annonce le début de la trame, puis suivent les bits de données, éventuellement un bit de parité selon la configuration, et enfin un ou plusieurs bits de stop.
Côté réception, le récepteur surveille en permanence sa ligne RX. Dès qu'il détecte un bit de start, il lit les bits de données qui suivent, puis le bit de parité s'il est prévu. Les bits de stop lui confirment la fin de la trame. Les données reçues sont alors traitées selon les besoins de l'application : stockage dans un tampon, traitement par un microcontrôleur ou un autre composant, ou retransmission vers d'autres équipements.
Ce cycle se répète tant que la liaison est active. Comme chaque équipement dispose de sa propre ligne d'émission et de sa propre ligne de réception, l'échange est bidirectionnel.
La structure d'une trame
Une trame UART se compose toujours des mêmes éléments :
- Bit de start : il indique au récepteur le début de la transmission. Il est habituellement au niveau logique bas.
- Bits de données : ils portent l'information, généralement transmise du bit le moins significatif (LSB) au plus significatif (MSB). On en compte typiquement entre 7 et 9, 8 étant le cas le plus courant.
- Bit de parité : facultatif, il sert à détecter les erreurs de transmission. La parité peut être paire, impaire ou absente selon la configuration.
- Bits de stop : ils marquent la fin de la trame. On en utilise un ou deux, deux étant moins courant. Ils sont généralement au niveau logique haut.
Cette simplicité fait de l'UART un choix naturel pour les liaisons point à point peu exigeantes en débit. Lorsque plusieurs périphériques doivent partager le même bus, ou qu'une horloge commune est nécessaire, le SPI et l'I2C prennent le relais : notre article SPI vs I2C vous aidera à choisir entre les deux.
