Débit UART : valeur du registre et erreur

Illustration : Débit UART

Écrit par

dans

Une liaison série qui affiche des caractères incohérents a souvent une seule cause : le débit réellement généré s’écarte trop du débit visé, parce que la fréquence d’horloge n’est pas divisible exactement. L’outil calcule, pour chaque débit standard, la valeur du registre et l’erreur obtenue.

PIC 8 bits : la fréquence est FOSC. PIC32 (et PIC24, dsPIC) : l’horloge périphérique PBCLK. AVR : FCPU. STM32 : l’horloge du bus APB du périphérique.

Réglage pour le débit choisi

–

Registres concernés

–

Code C d’initialisation

Débit viséRegistreDébit obtenuErreur

Les formules

PériphériqueDébit obtenu
AVR, U2X = 0FCPU / (16 × (UBRR + 1))
AVR, U2X = 1FCPU / (8 × (UBRR + 1))
PIC, BRG16 = 0, BRGH = 0FOSC / (64 × (n + 1))
PIC, ÷16FOSC / (16 × (n + 1))
PIC, BRG16 = 1, BRGH = 1FOSC / (4 × (n + 1))
STM32, OVER8 = 0FPCLK / BRR

Quelle erreur est acceptable ?

Le récepteur se resynchronise sur chaque bit de départ et échantillonne au milieu des bits suivants. Sur une trame de 10 bits, le dernier bit est lu environ 9,5 bits après le front de départ : l’écart cumulé entre émetteur et récepteur doit rester sous un demi-bit, soit environ 5 % au total. Comme les deux côtés peuvent dériver dans des sens opposés et que les fronts ne sont pas parfaits, on vise moins de 2 % de chaque côté, et moins de 1 % pour être tranquille (vert dans le tableau).

  • C’est pour cela qu’on trouve des quartz à 11,0592 MHz ou 14,7456 MHz : multiples exacts des débits standard, ils donnent 0 % d’erreur.
  • Un AVR à 16 MHz donne 3,5 % d’erreur à 115 200 bit/s avec U2X = 0 : la liaison marche avec un convertisseur USB tolérant, et échoue avec un autre microcontrôleur. Passer en U2X = 1 réduit l’erreur à 2,1 %.
  • L’oscillateur RC interne d’un microcontrôleur dérive souvent de 1 à 2 % avec la température : il consomme à lui seul l’essentiel de la marge.

Commentaires

Laisser un commentaire