
Gli UARTs avanzati di Maxim milgiorano le prestazioni a livello fisico di una rete di comunicazione asincrona. I dispositivi includono un unico UART con due opzioni di package (MAX3107/MAX3108), dual UART (MAX3109) e un quad UART (MAX14830).
Questo articolo presenta le caratteristiche di ogni UART di Maxim ed esamina gli accorgimenti che si devono avere quando si adatta il software e l'hardware da un dispositivo ad altro.
Maxim produce quattro tipi di UART avanzati per rispondere alle esigenze di una vasta gamma di applicazioni, comprese i dispositivi mobili Internet, point-of-sale (POS) ecc.
La differenza più evidente tra gli UART è la presenza o l'assenza di un oscillatore interno che fa da clock per il dispositivo. Per MAX3108 e MAX3109, deve essere utilizzata una sorgente di clock esterna o oscillatore a cristallo.
A differenza dell'UART unico, gli UART dual e quad dispongono di registri da 0x20 a 0x25. MAX3109 e MAX14830 hanno un set di registri separato per ogni UART on-chip.

Il controller UART( Universal Asyncronous Receiver/Trnasmitter) è il componente chiave delle comunicazioni seriali tra sottosistemi elettronici e ad esempio il PC. E’ sicuramente il sistema di comunicazione più adottato per far dialogare due sistemi elettronici tra di loro.
Dal lato trasmettitore, l’UART prende in un registro parallelo di preload un dato e provvede a trasmetterlo bit dopo bit in maniera sequenziale da una sola uscita. A destinazione, una seconda porta UART re-assembla i bit nel completo byte di partenza. La trasmissione seriale di questo genere la vediamo certamente adoperata per la comunicazione tra modem e computer,ad esempio, oppure tra dispositivi non per forza adibiti al networking con il computer come ad esempio potrebbero esserlo due microcontrollori in comunicazione tra loro.
La trasmissione asincrona permette di trasmettere dati senza che il trasmettitore debba per forza provvedere ad inviare un segnale di clock al ricevitore. Ai fini del sincronismo, il trasmettitore e il ricevitore devono mettersi d’accordo sin da subito condividendo dei parametri temporali (tipo quanto dura il singolo bit) e il trasmettitore deve aggiungere in coda ad ogni parola inviata un riempimento di bit (padding) per permetterne tale sincronismo . Tramite questo sistema di condivisione dinamica e sincronismo, è possibile con estrema facilità implementare funzioni di auto baud-rate. La comunicazione di una dato inizia sempre con un bit di “Start”. Tale bit è usato per avvisare il ricevitore che una parola di dati è in procinto di trasmissione, agganciando la sorgente del clock del ricevitore al clock del trasmettitore. Questi due clock devono essere abbastanza accurati e ben agganciati tra loro poiché, come si è gia detto, la sorgente di tale segnale non è unica tra le due unità. Per sincronizzare il ricevitore al trasmettitore, tipicamente si adottano circuiti ad aggcnacio di fase, noti come PLL (Phase Lock Loop).
Dopo il bit di start, i singoli bit della parola da trasmetter vengono inviati in maniera sequenziale (ovvio, trattandosi di una trasmissione seriale) con il bit meno significativo (LSB) inviato per primo. Ogni bit in trasmissione è trasmesso esattamente con lo stesso ammontare di tempo di tutti gli altri in modo tale che il ricevitore, conoscendo preventivamente il tempo del singolo bit, possa valutarne il valore a metà del periodo. Per esempio, se per inviare due bit occorrono 2 secondi, il ricevitore esaminerà il segnale per determinare se il pirmo bit è 1 o 0 dopo che sia passato un secondo e attederà altri due secondi per esaminare lo stato logico del secondo bit ricevuto e così via. Il fatto che la comunicazione tra le due unità sia asincrona, implica che il trasmettitore non sappia cosa accade lato ricevitore, ma si limita semplicemente ad inivare i dati non appena si presentano e in corrispondenza del segnale di clok generato internamente. Quando l’intera parola di bit è stata trasmessa , il trasmettitore potrebbe aggiungere un bit di “Parità” per munire la comunicazione di un controllo (anche se forse è il più semplice che si possa implementare) per l’integrità del dato. Pone il bit a 1 se nella parola trasmessa il numero di bit a 1 è pari, al contrario fissa il bit di parità a 0. Il ricevitore osserverà il valore di tale bit e lo confronterà con un valore atteso che calcola sulla parola ricevuta tramite una semplice operazione di xor. La comunicazione si conclude con un bit di STOP.
Sul sito della maxim è disponibile il sample per il max 3107
Qui’ l’oscillatore è interno, ha la possibilità di pilotaggio in SPI e I2C di attivare e disattivare il controllo di flusso
Integrated Internal Oscillators
24Mbps (max) Data Rate
Integrated PLL and Divider
Fractional Baud-Rate Generator
SPI Up to 26MHz Clock Rate
Auto Transceiver Direction Control
Half-Duplex Echo Suppression
Auto Active-Low RTS/CTS and XON/XOFF Flow Control
Special Character Detection
GPIO-Based Character Detection
9-Bit Multidrop-Mode Data Filtering
SIR- and MIR-Compliant IrDA Encoder/Decoder
+2.35V to +3.6V Supply Range
Logic-Level Translation on the Controller and Transceiver Interfaces (Down to 1.7V)
Four Flexible GPIOs
Line Noise Indication
Shutdown and Autosleep Modes
Low 640µA (typ) Supply Current at 1Mbaud and 20MHz Clock
Low 20µA (typ) Shutdown Power
Ricordo che dietro il tanto citato protocollo RS232 si nasconde effettivamente una comunicazione UART a baud rate variabile a seconda dell’hardware che si ha disposizione. Anche in questo caso, è necessario impostare il baudrate su entrambi gli host che si troveranno a comunicare e dire se ci sarà il bit di parità e di stop (nel caso di assenza del bit di stop, il ricevitore saprà quanto è la lunghezza massima della parola da ricevere e quindi la dichiererà per ricevuta quando un contatore saturato sulla lunghezza della parola va in overflow). Il bit di parità non è assolutamente necessario, e non in tutte le trasmissioni seriali è effettivamente presente. Anche con l’avvento delle comunucazioni USB, la necessità di non abbandonare totalmente la connettività UART con il PC ha fatto si che nascessero i cosiddetti RS232->USB bridge, circuiti integrati in grado di contenere la’algoritmo di conversione specifico. In questo modo, tutte le applicazioni nate per interfacciarsi al PC tramite RS232 possono ancora sopravvivere collegandole alla porta USB host di un PC, ad esempio. FTDI è stata la prima casa produttrice che ha proposto soluzioni di tipo USB bridge e tra queste, la più utilizzata al mondo è forse quella che vede l’utilizzo dell’integrato FTDI232 (USB<->RS232)…lo monta anche Arduino2009
Ma quante ne sai?? Ti invidio 😉
Dando una veloce occhiata al datasheet del MAX3107 si capisce che in realtà è qualcosa di più di una semplice UART. In effetti il componente si può vedere come un bridge tra porta SPI, o I2C, e Porta seriale di tipo asincrona tipo RS485, RS232 o IrDA.
Il Pll interno insieme al Baud-Rate generator permettono di avere un setup fine della velocità di trasmissione dei dati, inoltre limita la dipendenza del baud rate dall’oscillatore di riferimento. Il tutto per ottenere un data rate fino a 24Mbps!!!. Posiede inoltre una porta GPIO su 4 pin. Ha molte sorgenti di interrupt per una completa gestione delle FIFO interne e di tutti gli eventi che coinvolgono la comunicazione dati su seriale. Quelle elencate sono solo alcune delle caratteristiche avanzate di questo bel componente, da prendere in considerazione per essere affiancato a microcontrollori e FPGA.
Grandiosi gli UART della Maxim si sono rivelati essere sempre molto utili dal punto di vista dei microcontrollori, specialmente i PIC che hanno “UART interno”, ma in effetti funziona con livelli logici TTL e non con la vera UART, ma i prodotti maxim come il buon vecchio MAX232, si sono rivelati molto utili e facili da configurare in queste occasioni.
Infatti non posso che darti ragione…se si trattasse di una semplice UART penso che non ci sarebbe nulla di particolarmente innovativo e concorrenziale. Difatti, come tu stesso hai evidenziato, si tratta di un vero e proprio bridge tra differenti standard di comunicazione, supportato il tutto da Baude-rate generator + PLL + Buffer FIFO…insomma, un IC sicuramente dedicato ad applicazioni di un certo livello di professionalità. Dubito che questo IC possa arrivare ad essere usato da un hobbista, perchè per le prestazioni che offre è anche difficile per un hobbista arrivare ad immaginare i contesti dove collocarlo. Ovviamente un bridge di questo calibro richiede un microcontrollore o FPGA che lo gestisca per quelle che sono le sue massime perfmormance e non ci si immagina nemmeno di utilizzare questo IC come semplice bridge SPI-RS232, ad esempio, lasciando il resto del contenuto on chip totalmente inutilizzato. Sarebbe davvero uno spreco!