
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.
| Couche | Ce qu’elle définit | Exemples |
|---|---|---|
| Trame UART | repos, start, données, parité, stop, ordre des bits, débit | 8N1 à 115200 baud |
| Liaison électrique | tensions, polarité, référence, courant, câble | CMOS 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églage | Règle sur données + parité | Limite |
|---|---|---|
N | aucun bit ajouté | pas de détection |
E | nombre total de 1 pair | manque les erreurs touchant un nombre pair de bits |
O | nombre total de 1 impair | même capacité, convention inverse |
| mark / space | bit forcé à 1 / à 0 | modes 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ébit | Tb | Durée 8N1 |
|---|---|---|
| 9 600 baud | 104,17 µs | 1,042 ms |
| 57 600 baud | 17,36 µs | 173,6 µs |
| 115 200 baud | 8,681 µs | 86,81 µs |
| 1 000 000 baud | 1,000 µs | 10,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ôme | Cause possible | Action |
|---|---|---|
| Fonctionne à 9600, pas à 1 Mbaud | marge temporelle ou fronts insuffisants | réduire le débit, améliorer l’horloge ou le transceiver |
| Échecs avec la température | dérive d’oscillateur | spécifier ou mesurer la précision sur la plage thermique |
| Erreurs de trame répétées | mauvais baud ou format incompatible | comparer 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.
| Interface | Repos UART | Tensions typiques | Direct avec 3,3 V ? |
|---|---|---|---|
| CMOS 3,3 V | haut | près de 0 / 3,3 V | oui, si les seuils correspondent |
| logique 5 V | haut | près de 0 / 5 V | seulement si l’entrée est tolérante 5 V |
| RS-232 | négatif (mark) | souvent −5 à −12 V / +5 à +12 V | non, transceiver obligatoire |
| RS-485 | différentiel | paire A/B | non, 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
| Indication | Sens habituel | Causes courantes |
|---|---|---|
| Erreur de parité | parité reçue invalide | bruit, mauvais réglage, timing marginal |
| Erreur de trame | stop invalide | baud incorrect, inversion, break |
| Overrun | nouvel octet avant traitement du précédent | interruption bloquée, DMA/tampon insuffisant |
| Break | ligne basse plus longtemps qu’une trame | commande volontaire, court-circuit ou équipement arrêté |
- Notez la configuration complète : par exemple
115200, 8N1, LSB-first, sans contrôle de flux, CMOS 3,3 V. - Vérifiez
TX ↔ RX, masse commune et, pour un transceiver, alimentation etDE. - Mesurez une cellule de bit : à 115200 baud, elle vaut environ 8,68 µs.
- Envoyez
0x55(alternance utile), puis0x00et0xFF. - 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.