L' UART
Proprio per evitare problemi dovuti ad una gestione puramente
software di segnali hardware ben precisi, le funzioni della comunicazione sono, da
lungo tempo, demandate a componenti specifici, denominati UART (Universal
Asinchronous Receiver Transmitter) che provvedono alla trasmissione ed alla
ricezione dei pacchetti dati. Si tratta essenzialmente di sistemi di shift register
per serializzare e de serializzare i dati da e per la linea di
trasmissione.
L' UART effettua autonomamente le seguenti operazioni:
-
converte dati ricevuti in parallelo dalla CPU in un flusso seriale di bit e viceversa
-
formatta il dato seriale aggiungendo bit di start, parità e stop
-
gestisce il sincronismo del trasmettitore e del ricevitore
-
rende disponibili le linee per il controllo hardware del flusso
-
dispone di buffer FIFO (da 2 bytes nei microcontroller a 128
e più)
Inoltre può anche contenere il generatore di baud rate.
UART intergrati, come 8250 di Intel o 16450-16550 di
NS,
hanno gestito per lungo tempo le COM dei personal computer, prima di
cedere il posto ai chip di I/O multifunzione che contengono anche le interfacce
per la porta parallela, la tastiera, il mouse, ecc.
Nei microcontroller embedded il modulo UART è un elemento
spesso presente, a volte in più di una unità nello steso chip, dato che la
comunicazione seriale asincrona è un elemento di cui si può fare a meno solo
con grande difficoltà, sia per la lunga tradizione di uso, sia per i costi, sia
per la semplicità di implementazione rispetto ad altre soluzioni, come la più
recente USB.
La struttura UART di base si è poi evoluta con l'
aggiunta di funzioni addizionali, dando origine a:
-
USART (Universal Sinchronous Asinchronous Receiver
Transmitter), con la possibilità di gestire comunicazioni asincrone e
sincrone.
-
AUSART (Addressable USART), con la
possibilità di essere associato ad un indirizzo in una connessione multi
drop
-
EUSART (Enhanced USART), con funzioni
avanzate, come il riconoscimento automatico del baud rate (auto-baud rate).
In ogni caso, la consultazione dei fogli dati dei componenti è
la via migliore per comprendere le funzioni e le possibilità di questi moduli.
La trasmissione seriale si svolge a frequenze basse rispetto ai cicli
di istruzione dei microprocessori e microcontroller, per cui, in applicazioni
non critiche, la potenza di calcolo permette di emularla via software (bit
banging), utilizzando comini pin di I/O per uso generico.
Questo consente di disporre di comunicazione RS-232 anche in microcontroller che
non hanno il modulo dedicato.
Comunque, l' impiego di un UART rende estremamente semplice la
comunicazione seriale, permettendo sia gestioni in polling che in interrupt.
Va osservato che l' impiego dell' UART non è limitato a RS-232,
ma si estende a tutte le comunicazioni seriali asincrone (422/423/485/current
loop/IrDA/wireless, ecc), comunque basate sulla
trasmissione di bit in serie.
Inoltre, dispositivi USART sono in grado di supportare anche
comunicazioni di tipo sincrono, in cui è trasmesso il clock, come
descritto più avanti. (Questa modalità sincrona non è da
confondere con gli standard di comunicazione SPI e I2C),
che, nei microcontroller , sono gestite da un modulo specifico, chiamato SSP o MSSP.
|
La modalità sincrona
Un USART (Universal Sinchronous Asinchronous Receiver Transmitter)
consente di gestire anche una modalità sincrona, in cui viene fornito il clock.
Questo modo consente velocità di trasmissione più elevate ed è più
efficiente di quella asincrona, anche per la struttura a pacchetti (data
packet) dei dati scambiati.
Nella modalità sincrona, in generale, la comunicazione è half-duplex,
ovvero trasmissione e ricezione non sono contemporanee, dato che si può
utilizzare una sola linea dati condivisa.
Si può realizzare una struttura a bus, dove un master gestisce il clock e può trasmettere e
ricevere, mentre gli altri dispositivi sono slave e non possono governare il clock.
Non sono presenti i bit speciali (Start, Stop, Parità) e questo migliora l'
efficienza (in un pacchetto asincrono del genere xx, 8, n, 1 il 20%
dei bit trasmessi è "inutile" come dato, ma ha esclusivamente
scopo di correttezza della trasmissione).
In modo sincrono, il sincronismo per lo scambio dei pacchetti di dati è fornito da
una sequenza di inizio (header), contenete le informazioni necessarie al
ricevitore per trattare il pacchetto, che viene chiuso da una coda (tail)
che integra i checksum per la verifica e la correzione di eventuali errori.
Dato il sistema di trasmissione a pacchetti di dati, header e tail
influiscono per percentuali trascurabili sul tempo di trasmissione dei dati.
La modalità sincrona, però, non è comune nell'ambito dei PC.
|