ElectroDesignForgeElectroDesignForge
Segnali e interfacceFondamenti

UART: frame, baud rate e livelli elettrici

Comprendi la trasmissione UART asincrona: bit di start e stop, ordine dei dati, parità, baud rate, tolleranza del clock, errori e compatibilità con TTL, CMOS, RS-232 e RS-485.

Redazione e revisione tecnica:Team di ingegneria ElectroDesignForge

Consulta il processo editoriale

Punto chiave: UART trasmette i bit senza un clock condiviso. Il ricevitore si risincronizza su ogni bit di start, poi campiona i dati a intervalli calcolati. Le due estremità devono avere lo stesso formato di trama, temporizzazioni baud sufficientemente vicine e livelli elettrici realmente compatibili.


UART definisce una trama, non un'interfaccia elettrica

UART (Universal Asynchronous Receiver/Transmitter) converte un byte in bit su TX e ricostruisce i byte ricevuti su RX. È asincrona: a differenza di SPI, non ha un filo di clock.

LivelloCosa definisceEsempi
Trama UARTriposo, start, dati, parità, stop, ordine dei bit, velocità8N1 a 115200 baud
Collegamento elettricotensione, polarità, riferimento, corrente, cavoCMOS a 3.3 V, logica a 5 V, RS-232, RS-485

Due schede possono entrambe “usare UART” senza potersi collegare direttamente: un GPIO a 3.3 V non è un'uscita RS-232. Nella convenzione logica più comune, la linea a riposo è alta (mark), una trama inizia con un livello basso e termina con un livello alto.

Struttura della trama

La notazione usuale è bit dati + parità + bit di stop. 8N1 indica otto bit dati, nessuna parità e un bit di stop.

Riposo      Start   D0 D1 D2 D3 D4 D5 D6 D7   Parità   Stop   Riposo
  1     |     0   |  b0 b1 b2 b3 b4 b5 b6 b7 |   P    |  1  |  1
             <----------- durata di un bit Tb = 1 / baud ----------->

Start, dati, parità e stop

Il bit di start rimane basso per la durata di un bit. Dopo un fronte di discesa, il ricevitore attende all'incirca mezzo bit per convalidarlo, poi campiona vicino al centro di ogni intervallo. Le UART moderne spesso sovracampionano a ×8 o ×16; consulta il manuale della periferica per la convalida e la tolleranza esatte.

I dati vengono normalmente trasmessi a partire dal bit meno significativo (LSB). Il valore esadecimale 0x53, scritto convenzionalmente 0101 0011, viene trasmesso come 1 1 0 0 1 0 1 0 da D0 a D7. È un errore facile da commettere leggendo un oscilloscopio. L'hardware può offrire da 5 a 9 bit dati; le due estremità devono usare la stessa configurazione.

Impostazione della paritàRegola per dati più paritàLimite
Nnessun bit aggiuntivonessun rilevamento degli errori
Eil numero totale di 1 è parinon rileva un numero pari di bit alterati
Oil numero totale di 1 è disparistessa capacità di rilevamento, convenzione opposta
mark / space1 forzato / 0 forzatomodalità hardware poco comuni

La parità rileva alcune alterazioni ma non può localizzarle né correggerle. L'integrità dei messaggi richiede un CRC o checksum, un numero di sequenza e una procedura di ritrasmissione a un livello superiore. I bit di stop sono alti; un livello basso quando è atteso un bit di stop provoca normalmente un errore di trama.

Velocità in baud ed errore di clock

Il baud misura i simboli al secondo. Una UART binaria trasporta normalmente un bit per simbolo, quindi 9600 baud equivalgono in genere a 9600 bit/s. La durata di un bit è Tb = 1 / baud.

VelocitàTbDurata della trama 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

Una trama 8N1 richiede dieci intervalli di bit. La portata utile massima è quindi baud × 8 / 10: un flusso continuo a 115200 baud trasporta al massimo 11,520 byte/s prima dell'overhead del protocollo.

Trasmettitore e ricevitore hanno clock indipendenti. Lo scostamento dell'istante di campionamento si accumula nel corso della trama: errore temporale accumulato ≈ numero di intervalli di bit × errore relativo totale di frequenza. Mantienilo ben sotto metà della durata di un bit, lasciando margine per jitter, quantizzazione del divisore, rumore e fronti lenti. Un obiettivo progettuale comune è un errore relativo combinato inferiore a circa 2%, ma non è un limite universale: la tolleranza reale dipende da lunghezza della trama, sovracampionamento e struttura del ricevitore. Due oscillatori da ±1% possono differire del 2% nel caso peggiore. Verifica anche l'errore del divisore baud: un clock di sistema non genera sempre esattamente 115200 baud.

CMOS, TTL, RS-232 e RS-485

“TTL” e “CMOS” sono abbreviazioni: usa sempre le soglie d'ingresso e i limiti massimi assoluti del dispositivo effettivo.

InterfacciaUART a riposoTensioni tipicheCollegamento diretto a UART da 3.3 V?
CMOS da 3.3 Valtavicino a 0 / 3.3 Vsì, se le soglie sono compatibili
Logica da 5 Valtavicino a 0 / 5 Vsolo con ingresso tollerante a 5 V
RS-232negativa (mark)spesso da −5 a −12 V / da +5 a +12 Vno, serve un transceiver RS-232
RS-485differenzialecoppia A/Bno, serve un transceiver RS-485

Per un collegamento logico corto, collega TX_A a RX_B, TX_B a RX_A e condividi un riferimento di massa. Un'uscita a 5 V può danneggiare un ingresso a 3.3 V non tollerante, anche se inizialmente il collegamento sembra funzionare.

RS-232 usa ampiezze diverse e polarità invertita: il livello logico 1 a riposo è normalmente negativo, mentre il bit di start 0 è positivo. Un transceiver del tipo MAX232 gestisce conversione di tensione e inversione. RS-485 è un livello fisico differenziale, non una “UART più potente”: la UART pilota DI e legge RO, mentre il transceiver pilota A/B. Il progetto deve includere controllo di abilitazione (DE), terminazione, polarizzazione, topologia del cavo e gestione delle collisioni half-duplex.

Errori e messa in servizio

SegnalazioneSignificato usualeCause comuni
Errore di paritàla parità ricevuta non corrisponderumore, impostazione errata, temporizzazione al limite
Errore di tramabit di stop non validovelocità errata, inversione, condizione di break
Overrunarriva un nuovo byte prima che il precedente sia gestitointerrupt bloccato, DMA assente, buffer piccolo
Breaklinea bassa più a lungo di una tramabreak intenzionale, cortocircuito, dispositivo fermo
  1. Annota la configurazione completa: per esempio 115200, 8N1, LSB per primo, senza controllo di flusso, CMOS da 3.3 V.
  2. Verifica TX ↔ RX, massa comune, alimentazione del transceiver e DE.
  3. Misura un intervallo di bit: a 115200 baud è circa 8.68 µs.
  4. Trasmetti 0x55, poi 0x00 e 0xFF come sequenze diagnostiche.
  5. Conta le segnalazioni di parità, trama e overrun: il solo testo corrotto non identifica la causa.

Errori comuni

  • Scambiare 115200 baud per 115200 byte/s: 8N1 arriva al massimo a 11,520 byte/s.
  • Incrociare TX/RX due volte o dimenticare la massa comune in un collegamento CMOS.
  • Collegare RS-232 direttamente a un GPIO.
  • Usare la parità come protezione del messaggio invece di un CRC.
  • Attribuire ogni errore alla velocità in baud: buffer pieno, tensioni incompatibili, massa rumorosa o contesa RS-485 possono dare sintomi simili.

Bibliografia