// TOOL

UART Baud Error

Verifica la configurazione di una UART: dal clock della periferica e dal baud desiderato ottieni divisore, baud reale ed errore percentuale, e vedi a colpo d’occhio quali baud standard sono "puliti" a quel clock. Strumento dimostrativo.

1 · Periferica

2 · Configurazione UART

Risultato

Errore vs target —
— — bps reali
Divisore ideale —
Divisore intero —

baud = f_periph / (oversampling · divisore). Soglie su un estremo (budget combinato 3,95%): |err| < 2% ok, 2–3% al limite, > 3% perde frame. Strumento dimostrativo.

Baud standard a questo clock

Baud Divisore Baud reale Errore Stato

Come genera il baud una UART?

Una UART non ha un proprio oscillatore al baud: divide il clock della periferica. Un generatore campiona ogni bit più volte (oversampling, tipicamente 16× o 8×) e un divisore porta il clock al ritmo del baud: div = f_periph / (oversampling · baud_target). Il baud reale usa il divisore intero e l’errore è (baud_reale − baud_target) / baud_target · 100.

Una UART non ha un proprio oscillatore al baud: divide il clock della periferica. Un generatore campiona ogni bit più volte (oversampling, tipicamente 16× o 8×) e un divisore porta il clock al ritmo del baud:

Perché nasce l’errore?

Il divisore ideale è quasi sempre frazionario, ma quello intero deve essere intero: arrotondandolo, il baud reale si discosta dal target. A 16 MHz e 115200 baud con oversampling 16 il divisore ideale è ~8.68, arrotondato a 9 dà 111111 baud, cioè −3.5% — abbastanza per perdere frame.

Il divisore ideale è quasi sempre frazionario, ma quello intero deve essere... intero. Arrotondandolo, il baud reale si discosta dal target. A 16 MHz e 115200 baud con oversampling 16 il divisore ideale è ~8.68: arrotondato a 9 dà 111111 baud, cioè −3.5% — abbastanza per perdere frame.

La soglia ±2–3%, e da dove viene

Un frame UART è start + 8 dati + stop = 10 bit. Il ricevitore campiona ogni bit al centro, ricalibrandosi sul fronte di start; l’errore di clock si accumula bit dopo bit lungo il frame. Imponendo che il campione dell’ultimo bit resti dentro la sua finestra si ottiene il budget combinato: (0,5 − 2/S)/(n − 0,5), cioè 3,95% per 8N1 a 16× con decisione a maggioranza. Quel budget vale per i DUE estremi insieme, tolleranza dei clock inclusa: il 2–3% qui sotto è quanto se ne può allocare a uno solo.

Oversampling 16× vs 8×

A 16× ogni bit è campionato su 16 "tick" e la decisione si prende a maggioranza attorno al centro: più robustezza al rumore e al jitter. A 8× il divisore può scendere della metà, quindi si raggiungono baud più alti con lo stesso clock, ma con metà del margine di campionamento. Molti MCU usano 16× di default e 8× solo per i baud più spinti.

Cos’è il divisore frazionario?

Molti peripherali (per esempio l’USART STM32) rappresentano il divisore come mantissa intera più una frazione a 4 bit, con passi di 1/16. Quantizzando la parte frazionaria a 1/16 l’errore crolla: nel caso 16 MHz/115200 si passa da −3.5% a meno dello 0.1%. È il modo più efficace per «pulire» un baud che altrimenti fallirebbe.

Molti peripherali (es. USART STM32) rappresentano il divisore come mantissa intera più una frazione su 4 bit (passi di 1/16). Quantizzando la parte frazionaria a 1/16 l’errore crolla: nel caso 16 MHz/115200 si passa da −3.5% a meno dello 0.1%. È il modo più efficace per "pulire" un baud che altrimenti fallirebbe.

Scegliere il clock giusto

I clock "magici" per la seriale sono multipli del baud per l’oversampling: a 16× un clock come 14.7456 MHz dà errore zero su tutta la famiglia 9600–921600, perché 14.7456e6 / 16 = 921600 esatti. È il motivo per cui quei quarzi dall’aria strana esistono. Se il clock è vincolato altrove, il divisore frazionario è il rimedio.

Quali sono i limiti dello strumento?

La quantizzazione frazionaria usata qui è a 1/16 (4 bit), il caso più comune; alcuni peripherali hanno risoluzione o vincoli diversi. Lo strumento considera il solo errore del generatore di baud: non modella la tolleranza del clock sorgente (quarzo/PLL) né il jitter, che consumano lo stesso budget del ±2–3%. Strumento dimostrativo: per la configurazione reale valgono il reference manual della UART e i registri del peripherale.

  • La quantizzazione frazionaria usata qui è a 1/16 (4 bit), il caso più comune; alcuni peripherali hanno risoluzione o vincoli diversi (es. in 8× il bit meno significativo della frazione).
  • Considera il solo errore del generatore di baud: non modella la tolleranza del clock sorgente (quarzo/PLL) né il jitter, che consumano lo stesso budget del ±2–3%.
  • Strumento dimostrativo: per la configurazione reale valgono il reference manual della UART e i registri del peripherale.

Approfondisci: wiki UART baud rate error →