Favorite Favorite 88
UARTs
Il pezzo finale di questo puzzle seriale è trovare qualcosa che crei i pacchetti seriali e controlli quelle linee hardware fisiche. Inserisci l’UART.
Un ricevitore/trasmettitore asincrono universale (UART) è un blocco di circuiti responsabile dell’implementazione della comunicazione seriale. Essenzialmente, l’UART agisce come un intermediario tra le interfacce parallela e seriale. A un’estremità dell’UART c’è un bus di otto o più linee di dati (più alcuni pin di controllo), dall’altra ci sono i due fili seriali – RX e TX.
Le UART esistono come circuiti integrati indipendenti, ma si trovano più comunemente all’interno dei microcontrollori. Dovrete controllare il datasheet del vostro microcontrollore per vedere se ha delle UART. Alcuni non ne hanno, alcuni ne hanno uno, altri ne hanno molti. Per esempio, l’Arduino Uno – basato sul “vecchio fedele” ATmega328 – ha solo una singola UART, mentre l’Arduino Mega – costruito su un ATmega2560 – ha ben quattro UART. Sul lato della trasmissione, un UART deve creare il pacchetto di dati – aggiungendo bit di sincronia e parità – e inviare quel pacchetto sulla linea TX con una tempistica precisa (secondo il baud rate impostato). All’estremità della ricezione, l’UART deve campionare la linea RX in base al baud rate previsto, prelevare i bit di sincronizzazione e sputare fuori i dati.
Gli UART più avanzati possono gettare i dati ricevuti in un buffer, dove possono rimanere fino a quando il microcontrollore viene a prenderli. Gli UART di solito rilasciano i loro dati bufferizzati su una base FIFO (first-in-first-out). I buffer possono essere piccoli come pochi bit, o grandi come migliaia di byte.
UART software
Se un microcontrollore non ha un UART (o non ne ha abbastanza), l’interfaccia seriale può essere bit-banged – controllata direttamente dal processore. Questo è l’approccio che le librerie Arduino come SoftwareSerial adottano. Il bit-banging richiede molto processore e di solito non è preciso come un UART, ma funziona in un pizzico!