Comment un UART fabrique son débit
Un UART tire la cadence de ses bits d’une horloge de périphérique. Il divise cette horloge par un entier et échantillonne chaque bit plusieurs fois, en général 16 fois (certaines puces proposent le 8× pour monter plus haut) :
Diviseur = arrondi(f_horloge ÷ (suréchantillonnage × débit)) Débit réel = f_horloge ÷ (suréchantillonnage × diviseur) Erreur = débit réel ÷ débit visé − 1
Le diviseur étant entier, la plupart des couples horloge-débit laissent une petite erreur.
Exemple : le cas classique de l’Arduino
Un ATmega à 16 MHz réglé à 115 200 bauds en 16× demande un diviseur de 8,68. Arrondi à 9, l’UART tourne en réalité à 111 111 bauds, soit −3,5 %. Beaucoup de liaisons fonctionnent quand même, mais elles sont fragiles. En 8× (bit U2X), le diviseur vaut 17, le débit 117 647 bauds et l’erreur +2,1 %, ce qui est bien plus sûr. Sur les AVR, le registre UBRR contient diviseur − 1.
Quelle erreur est acceptable ?
Le récepteur se resynchronise sur chaque bit de start et doit encore lire le bit de stop dans sa fenêtre. Avec des trames de 10 bits :
| Écart total | Résultat |
|---|---|
| Moins de ±2 % | Fiable |
| De 2 à 4 % | Fonctionne seulement si l’autre côté est précis |
| Plus de 4 à 5 % | Trames corrompues |
La limite porte sur la somme des erreurs des deux côtés : deux appareils à −2,5 % et +2,5 % échoueront.
Les quartz « amis des bauds »
Les fréquences 1,8432, 3,6864, 7,3728, 11,0592, 14,7456 et 18,432 MHz se divisent exactement pour tous les débits standard et donnent 0 % d’erreur. Les puces récentes à générateur fractionnaire (STM32, ESP32, nombreux ARM) atténuent le problème, mais le calcul reste le même.
Débit utile
Chaque octet part dans une trame : 1 bit de start, 7 à 9 bits de données, un bit de parité facultatif et 1 ou 2 bits de stop. En 8N1 (8 données, pas de parité, 1 stop), une trame fait 10 bits : 115 200 bauds transportent au plus 11 520 octets par seconde, et chaque octet prend environ 87 µs.
Bon réflexe
Avant de choisir un débit élevé, vérifiez l’erreur des deux côtés de la liaison, surtout avec un oscillateur RC interne, dont la précision n’est souvent que de ±1 à ±2 % et varie avec la température.