ElectroDesignForgeElectroDesignForge
Signaux et interfacesFondamentaux

UART : trames, baud rate et niveaux électriques

Comprenez la transmission UART asynchrone : bits start et stop, ordre des données, parité, baud rate, tolérance d’horloge, erreurs et compatibilité TTL, CMOS, RS-232 et RS-485.

Rédaction et revue techniqueElectroDesignForge Engineering Team

Voir le processus éditorial

À retenir : une UART transmet des bits sans horloge partagée. Le récepteur se recale sur chaque start bit, puis échantillonne les données à des instants calculés. Les deux appareils doivent partager le format de trame, avoir un débit suffisamment proche et employer des niveaux électriques compatibles.


UART : une trame, pas un niveau électrique

UART (Universal Asynchronous Receiver/Transmitter) est le périphérique qui convertit un octet en bits sur TX et reconstruit l’octet reçu sur RX. La liaison est asynchrone : à la différence de SPI, il n’y a pas de fil d’horloge.

CoucheCe qu’elle définitExemples
Trame UARTrepos, start, données, parité, stop, ordre des bits, débit8N1 à 115200 baud
Liaison électriquetensions, polarité, référence, courant, câbleCMOS 3,3 V, logique 5 V, RS-232, RS-485

Deux cartes peuvent donc « parler UART » tout en restant incompatibles au branchement direct : une GPIO 3,3 V n’est pas une sortie RS-232. Dans la convention logique habituelle, la ligne est au repos à 1 (mark) ; une trame commence par un 0, puis se termine par un ou plusieurs 1.

Anatomie d’une trame

Le format s’écrit généralement bits de données + parité + bits de stop. 8N1 signifie huit données, aucune parité et un stop — le réglage le plus répandu.

Repos       Start   D0 D1 D2 D3 D4 D5 D6 D7   Parité   Stop   Repos
  1     |     0   |  b0 b1 b2 b3 b4 b5 b6 b7 |   P    |  1  |  1
          <---------------- une durée de bit Tb = 1 / baud ---------------->

Start bit et échantillonnage

Le start bit est bas pendant une durée de bit. Quand le récepteur détecte le front descendant, il attend environ une demi-durée de bit pour valider le niveau, puis prélève chaque donnée au milieu de sa cellule. Chaque trame fournit donc une nouvelle référence de temps.

Les UART modernes suréchantillonnent souvent à ×8 ou ×16, et peuvent voter entre plusieurs échantillons. Cela aide contre une impulsion courte ou un front imparfait, mais l’implémentation précise dépend du microcontrôleur : son manuel reste la référence pour la tolérance réelle.

Données LSB-first

Les bits sont habituellement envoyés LSB-first. L’octet 0x53, écrit 0101 0011 dans la notation binaire courante, apparaît sur le fil comme suit :

D0 D1 D2 D3 D4 D5 D6 D7
 1  1  0  0  1  0  1  0

À l’oscilloscope, lire les niveaux de gauche à droite ne donne donc pas l’écriture MSB-first affichée par les logiciels. Les UART proposent selon le matériel 5 à 9 bits de données ; les deux extrémités doivent impérativement choisir la même longueur.

Parité

Le bit de parité est facultatif :

RéglageRègle sur données + paritéLimite
Naucun bit ajoutépas de détection
Enombre total de 1 pairmanque les erreurs touchant un nombre pair de bits
Onombre total de 1 impairmême capacité, convention inverse
mark / spacebit forcé à 1 / à 0modes rares et dépendants du matériel

La parité détecte certaines erreurs, mais ne les localise ni ne les corrige. Un protocole qui exige l’intégrité doit ajouter un CRC ou une somme de contrôle, un numéro de séquence et une reprise sur erreur.

Stop bits et erreurs de trame

Le ou les stop bits sont hauts. Ils ramènent la ligne à l’état de repos et terminent le contrôle de format. Si la ligne est basse au moment attendu, l’UART signale en général une erreur de trame (framing error). Les causes fréquentes sont un mauvais débit, un stop/parité incompatible, du bruit, une polarité inversée ou un break.

Baud rate et durée de bit

Le baud est le nombre de symboles par seconde. Dans une UART binaire, un symbole porte normalement un bit : 9600 baud équivaut alors à 9600 bit/s. La durée de bit nominale est :

Tb = 1 / baud
DébitTbDurée 8N1
9 600 baud104,17 µs1,042 ms
57 600 baud17,36 µs173,6 µs
115 200 baud8,681 µs86,81 µs
1 000 000 baud1,000 µs10,00 µs

Une trame 8N1 contient dix durées de bit : start + huit données + stop. Son débit utile théorique est donc baud × 8 / 10. À 115200 baud, une émission continue atteint au maximum 11 520 octets/s, avant la surcharge d’un protocole supérieur.

Erreur d’horloge et budget de timing

Émetteur et récepteur possèdent leur propre horloge. Si l’un est trop rapide et l’autre trop lent, l’instant d’échantillonnage dérive au fil de la trame ; le stop bit est le plus exposé.

erreur cumulée ≈ nombre d’intervalles de bit × erreur relative totale

L’erreur cumulée doit rester confortablement sous une demi-durée de bit, avec de la marge pour le jitter, la quantification du diviseur de baud, le bruit et les fronts lents. Une cible pratique courante est une erreur combinée inférieure à environ 2 %, mais ce n’est pas une limite universelle : longueur de trame, suréchantillonnage et conception du récepteur comptent.

Deux oscillateurs à ±1 % peuvent différer de 2 % au pire. Vérifiez aussi l’erreur du diviseur : une horloge système ne synthétise pas toujours 115200 baud exactement.

SymptômeCause possibleAction
Fonctionne à 9600, pas à 1 Mbaudmarge temporelle ou fronts insuffisantsréduire le débit, améliorer l’horloge ou le transceiver
Échecs avec la températuredérive d’oscillateurspécifier ou mesurer la précision sur la plage thermique
Erreurs de trame répétéesmauvais baud ou format incompatiblecomparer tous les paramètres aux deux extrémités

TTL, CMOS, RS-232 et RS-485

Les termes « TTL » et « CMOS » sont souvent simplifiés abusivement : consultez les seuils d’entrée et les limites absolues du composant réel.

InterfaceRepos UARTTensions typiquesDirect avec 3,3 V ?
CMOS 3,3 Vhautprès de 0 / 3,3 Voui, si les seuils correspondent
logique 5 Vhautprès de 0 / 5 Vseulement si l’entrée est tolérante 5 V
RS-232négatif (mark)souvent −5 à −12 V / +5 à +12 Vnon, transceiver obligatoire
RS-485différentielpaire A/Bnon, transceiver et protocole adaptés

Liaison logique carte à carte

Reliez TX_A à RX_B, TX_B à RX_A et les masses de référence. Une sortie 5 V peut endommager une entrée 3,3 V non tolérante, même si elle semble d’abord fonctionner. Vérifiez aussi le point de vue du module : certains adaptateurs USB–UART ont déjà des libellés TX/RX prévus pour l’hôte.

RS-232

RS-232 emploie une tension et une polarité différentes : le repos logique UART 1 est généralement négatif, le start 0 positif. Une connexion directe à une GPIO est dangereuse et ne marche pas. Un transceiver de type MAX232 transforme simultanément les niveaux et l’inversion ; respectez ses condensateurs de pompe de charge et son schéma d’alimentation.

RS-485

RS-485 est une couche physique différentielle, pas un UART « longue distance ». L’UART pilote l’entrée DI et lit RO; le transceiver pilote A/B. La commande d’émission DE, la terminaison, le biaisage et la topologie de câble sont essentiels. En demi-duplex, le protocole doit aussi empêcher deux émetteurs de parler ensemble.

Erreurs et méthode de mise au point

IndicationSens habituelCauses courantes
Erreur de paritéparité reçue invalidebruit, mauvais réglage, timing marginal
Erreur de tramestop invalidebaud incorrect, inversion, break
Overrunnouvel octet avant traitement du précédentinterruption bloquée, DMA/tampon insuffisant
Breakligne basse plus longtemps qu’une tramecommande volontaire, court-circuit ou équipement arrêté
  1. Notez la configuration complète : par exemple 115200, 8N1, LSB-first, sans contrôle de flux, CMOS 3,3 V.
  2. Vérifiez TX ↔ RX, masse commune et, pour un transceiver, alimentation et DE.
  3. Mesurez une cellule de bit : à 115200 baud, elle vaut environ 8,68 µs.
  4. Envoyez 0x55 (alternance utile), puis 0x00 et 0xFF.
  5. Comptez les indicateurs matériels de parité, trame et overrun ; le texte corrompu seul n’identifie pas la cause.

Pièges fréquents

  • Confondre 115200 baud et 115200 octets/s : en 8N1, le maximum est 11 520 octets/s.
  • Croiser TX/RX deux fois ou oublier la masse commune en logique CMOS.
  • Brancher une sortie RS-232 sur une GPIO.
  • Employer la parité comme protection de message : elle ne remplace pas un CRC.
  • Accuser systématiquement le baud rate : buffer saturé, niveau non compatible, masse bruyante et conflit RS-485 peuvent produire des symptômes semblables.

Bibliographie