Cosa è e come funziona il protocollo UART

0
60
Come funziona protocollo UART
0
(0)

L’UART è un protocollo di comunicazione utilizzato per inviare dati da un dispositivo a un altro. Tra i protocolli di comunicazione dei microcontrollori più diffusi (UART, SPI e I2C), l’UART è stato il primo a essere sviluppato.

UART è l’acronimo di Universal Asynchronous Receiver and Transmitter. I protocolli sincroni hanno linee separate per Clock (orologio) e i Dati e la linea del clock viene utilizzata per attivare la lettura (o la scrittura) della linea dei dati. L’UART è asincrono, cioè ha solo linee di dati e nessuna linea di clock. Invece di utilizzare una linea di clock, i dati vengono trasmessi a una velocità particolare e sia il ricevitore che il trasmettitore devono essere impostati sulla stessa velocità (chiamata baud rate) affinché la comunicazione vada a buon fine. L’UART dispone solitamente di due linee di dati, ovvero Trasmissione (Tx) e Ricezione (Rx), e quindi i dati possono essere inviati in entrambe le direzioni contemporaneamente (full duplex).

Il frame UART

La linea dati dell’UART rimane alta quando non vengono trasmessi dati. La trasmissione dei dati inizia tirando la linea bassa per 1 bit. Dopo il bit di avvio, vengono trasmessi i bit di dati. Segue un bit di stop, in cui la linea è di nuovo alta.

Ad esempio, ecco la trasmissione del numero binario 01011110 (esadecimale 0x7A):

Sono possibili alcune variazioni del framing, tuttavia la configurazione di framing illustrata sopra è di gran lunga la più comune. Ulteriori dettagli sulle variazioni di framing seguono più avanti in questo articolo. I byte multipli vengono concatenati direttamente l’uno dopo l’altro, senza che sia necessario un tempo di inattività tra l’uno e l’altro; ad esempio, di seguito è riportata la sequenza esadecimale 0x1A9E2B:

Velocità di trasmissione

La velocità con cui avviene la comunicazione è chiamata velocità di trasmissione (baud rate). La velocità di trasmissione è specificata in bit al secondo (bps) e le velocità più diffuse sono 9600, 19200 e 115200. Per un’impostazione di framing con 1 bit di stop e nessun bit di parità (di cui si parlerà più avanti), occorrono 10 bit per trasmettere 8 bit di dati (1 byte); quindi, a 9600 baud, la velocità di trasmissione dei dati è di 960 byte al secondo o poco più di 1 millisecondo per byte.

Poiché il protocollo è asincrono e non viene utilizzato alcun clock, sia il trasmettitore che il ricevitore devono utilizzare i loro clock interni (come il clock di sistema di un microcontrollore) per cronometrare il segnale. A volte non è possibile per il trasmettitore o il ricevitore generare l’esatta velocità di trasmissione richiesta, in quanto le velocità di trasmissione possibili sono solitamente un fattore della velocità di clock interna del ricetrasmettitore; in questo caso la velocità di trasmissione effettiva si discosterà dalla velocità di trasmissione richiesta di una certa percentuale, ma fintanto che la deviazione rientra in una certa tolleranza la comunicazione dovrebbe comunque funzionare bene; di solito il 3% è circa la deviazione massima possibile affinché la comunicazione avvenga comunque con successo. Di solito è possibile controllare la scheda tecnica del microcontrollore (o di un altro ricetrasmettitore) per calcolare le esatte velocità di trasmissione possibili (e quindi anche la percentuale di deviazione per altre velocità).

Autobauding

Alcuni sistemi supportano l’autobauding: il ricevitore rileva automaticamente la velocità di trasmissione dopo aver analizzato alcuni dati ricevuti dal trasmettitore. Ciò avviene misurando l’ampiezza dell’impulso più piccolo nei dati: ad esempio, se l’ampiezza dell’impulso più piccolo è di 8,68 µs, la velocità di trasmissione è di 115200bps.

Controllo di flusso

L’UART può avere linee di controllo del flusso aggiuntive, che indicano al trasmettitore quando il ricevitore è occupato e non è in grado di ricevere immediatamente altri dati. Ciò può essere utile, ad esempio, quando un modem radio (come un modulo BlueTooth) prende i dati ricevuti tramite UART e li trasmette via etere (over-the-air), e la velocità di trasmissione via etere è inferiore a quella dell’UART (anche se temporaneamente, come nel caso in cui le onde radio siano congestionate da altro traffico). Le linee di controllo del flusso sono chiamate Request to Send (RTS) e Clear to Send (CTS), e la linea RTS di un ricetrasmettitore è collegata alla linea CTS dell’altro ricetrasmettitore e viceversa. Il ricetrasmettitore che vuole trasmettere controlla la linea CTS dell’altro ricetrasmettitore (collegata al pin RTS del primo ricetrasmettitore), che imposta la linea CTS alta quando è pronto a ricevere i dati.

Variazioni del protocollo

La variante di gran lunga più utilizzata del protocollo UART è 8N1, abbreviazione di:

  • 8 bit di dati.
  • Nessun bit di parità.
  • 1 bit di stop.

Il numero di bit di dati utilizzati può variare da 5 a 9 (anche se la maggior parte delle periferiche UART dei microcontrollori supporta solo 8 o 9 bit). Se viene utilizzato un 9° bit, questo viene spesso usato per indicare se il frame è un messaggio di dati o di controllo.

La presenza di 2 bit di stop fornisce un ulteriore controllo di errore sul frame (se entrambi i bit di stop non sono presenti, si tratta di un errore).

La parità è un’altra forma di controllo degli errori in cui viene impostato un bit aggiuntivo per rendere pari o dispari il numero di 1 nel frame. Ad esempio: per la parità pari, se il numero di 1 nei dati è 3, il bit di parità viene impostato in modo che il numero di 1 nel frame sia 4 (pari). Per la parità dispari, se il numero di 1 nei dati è 4, il bit di parità viene impostato in modo che il numero di 1 nel frame sia 5 (dispari).

Errori di protocollo

Possono verificarsi vari errori di protocollo, in cui il segnale non è conforme allo standard UART, e molti microcontrollori dispongono di un supporto hardware integrato per rilevare e segnalare questi errori. Gli errori possono verificarsi a causa di interferenze nella linea di comunicazione (come l’interferenza elettromagnetica, ad esempio EMI), di una configurazione del protocollo non corrispondente o di un baud non corrispondente.

  • Errore di frame (Framing Error): Il bit di stop non è stato rilevato nella posizione prevista.
  • Errore di parità (Parity Error): La parità non è corretta.
  • Errore di rumore (Noise Error): Sulla linea sono state rilevate transizioni (impulsi) più brevi della velocità di trasmissione. Alcuni microcontrollori dispongono di una funzione di sovracampionamento (oversampling) in cui la linea UART viene letta più di una volta per bit; questa funzione viene utilizzata per rilevare il rumore.

Cablaggio

Un errore molto comune (e facile da commettere) con l’UART è quello di cablare la comunicazione in modo errato: è importante ricordare che Rx da un lato va a Tx dall’altro e viceversa. Lo stesso vale per le linee di controllo del flusso: RTS da un lato va a CTS dall’altro e viceversa. Come se non bastasse, alcuni produttori etichettano i pin delle loro periferiche in base alla posizione in cui devono essere collegati sull’host! Su questi dispositivi, quindi, Rx sull’host viene collegato a Rx sulla periferica (e così via). È sempre una buona idea ricontrollare il cablaggio dell’UART, utilizzando il datasheet dei dispositivi. Ad esempio, ecco un estratto della scheda tecnica di un modulo GSM in cui i pin sono etichettati dal punto di vista del modulo:

Ed ecco un estratto del datasheet di un altro modulo GSM in cui i pin sono etichettati dal punto di vista dell’host:

Lo schema di denominazione SPI di MISO (Master-In-Slave-Out) / MOSI (Master-Out-Slave-In) è molto più adatto a evitare questo tipo di errori banali (e costosi), ma purtroppo non si applica all’UART. Tuttavia, quando si disegna lo schema, può essere utile assegnare un nome preciso alle reti (come BlueTooth_Tx) per evitare errori.

Livello fisico

La comunicazione UART può avvenire attraverso vari schemi hardware fisici. Alcuni di questi sono TTL, RS232 e RS485:

  • TTL è l’acronimo di Transistor to Transistor Logic (si veda l’articolo Segnali analogici e digitali) ed è adatto per comunicazioni a breve distanza. Il valore alto è solitamente di 5 V o 3,3 V e il valore basso è di 0 V.
  • La RS232 era comune nei computer, ma è stata sostituita dall’USB. Il valore alto della RS232 è compreso tra -3V e -15V, mentre il valore basso è compreso tra 3V e 15V. Da quando la RS232 è stata sostituita dall’USB, sono diventati comuni i chip di conversione da USB a seriale (come l’onnipresente FT232) che si presentano come una porta COM virtuale sul computer.
  • La RS485 è un’implementazione a coppie differenziali, più adatta a essere immune alle interferenze elettromagnetiche (EMI) e a comunicare su distanze maggiori.

Conclusioni

Nonostante sia stato uno dei primi protocolli di comunicazione ad essere sviluppato, l’UART è ancora attuale e popolare come non mai; una piccola conoscenza del protocollo può aiutare a capire come può essere implementato al meglio nelle vostre applicazioni e come eseguire il debug di eventuali problemi (ad esempio, con un oscilloscopio).

Proteus mette a disposizione strumenti come il terminale virtuale (Virtual Terminal) e l’oscilloscopio per lavorare con l’UART in simulazione, oltre ad avere una pletora di dispositivi abilitati all’UART disponibili nelle librerie dei componenti.

Inoltre, in Proteus troverete, nel portfolio di progetti di esempio, molti esempi di simulazioni UART e potrete facilmente creare delle maschere di prova utilizzando il modello di terminale RS232 (TTY) e un microprocessore in Proteus.

Puoi scaricare la versione demo di Proteus di Labcenter, distribuito in Italia da Galgo Electronics.

All content Copyright Labcenter Electronics Ltd. 2024 – Per l’articolo originale clicca qui

Quanto hai trovato interessante questo articolo?

Voto medio 0 / 5. Numero valutazioni: 0

Ancora nessuna valutazione! Valuta per primo questo articolo.