Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti sulle tecnologie emergenti, news, tutorial a puntate, e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. Il bus seriale universale, meglio conosciuto con l’acronimo di USB, nato per consentire ad una qualunque periferica di collegarsi facilmente al PC, ha di fatto sostituito le tradizionali porte COM e LPT che oramai trovano posto solo nei musei della tecnologia informatica.
Introduzione
Se provate a dare uno sguardo alla specifica USB 2.0 o la più recente 3.0, disponibile in formato PDF sul sito della USB, vi renderete subito conto della enorme difficoltà di interpretazione del protocollo che ne governa il funzionamento. La specifica USB è stata scritta da un comitato tecnico composto da centinaia di membri dove ognuno giustamente ha dato il suo contributo cercando tra l’altro di “portare acqua al suo mulino”, cioè realizzare lo standard come meglio serviva alle proprie applicazioni. Questo ha comportato un proliferare di comma e sotto comma, classi e sotto classi che rendono praticamente incomprensibile la lettura, a meno che non ci si dedichi a tempo pieno. Eppure molto spesso con alcune periferiche la quantità di dati (payload) scambiati col PC è veramente limitata a pochi byte, è il caso di un mouse o di una tastiera o, più in generale, di un dispositivo HID (Human Interface Device). Alcune semplici operazioni, come pilotare un led o pilotare un relè dal PC, sono diventate praticamente impossibili senza l’aiuto di un hardware specializzato ed un apposito driver in ambiente Windows, Linux o altro. Fortunatamente, lo standard USB prevede, tra le classi di dispositivi, il CDC (Communication Device Class) cui appartengono i VCP (Virtual COM Port) e pertanto molti costruttori di silicio si sono dedicati alla progettazione e alla commercializzazione di chip in grado di convertire la porta USB in porta COM. Apparentemente un bel passo indietro, qualcuno tra voi potrebbe pensare. In realtà, è un grande vantaggio! Il bridge USB - UART è l’unico modo che abbiamo per far comunicare un hardware auto-costruito, magari basato su microprocessore, con il PC senza doverci addentrare nello studio del protocollo USB. In pratica, grazie al convertitore USB/UART il nostro hardware viene visto dal PC attraverso una porta COM virtuale e può colloquiare, ad esempio, con programmi di comunicazione seriale come Hyper terminal o similari, inviando e ricevendo dati ad un prefissato baud rate come ai vecchi tempi. Il progettista di periferiche a microprocessore può quindi completare il suo lavoro demandando il compito della comunicazione all’UART e dimenticare che esiste una porta USB da affrontare. Molti dispositivi elettronici che dialogano col PC tramite la porta USB hanno in realtà al loro interno un convertitore CDC capace di lavorare a velocità di trasmissione fino a 3 Mb al secondo.
Per applicazioni dove il throughput non è così elevato, quindi non è necessario ricorrere ad un microprocessore dotato di porta USB. Molte sono le case costruttrici che producono chip del genere: Silicon Labs, Texas Instruments, FDTI, Prolific, Cypress per citare i nomi più famosi. Tutti richiedono un apposito driver per poter funzionare col PC, ma questo non rappresenta un problema perché sono sempre disponibili “royalty free” sul sito del costruttore. Ma vediamo come sono fatti questi dispositivi più da vicino. Un convertitore CDC dispone al suo interno di un core SIE (Serial Interface Engine) basato quasi sempre su un microprocessore a 8 bit. Compito del SIE è appunto quello di serializzare con opportuna tempistica le transazioni (controllo e dati) alla velocità del bus USB 1/12 MHz. Inoltre, il SIE deve provvedere a riconoscere e gestire le fasi di reset, wake, suspend, SOF ed EOP previste dal protocollo USB. Il SIE è normalmente connesso ad una o più FIFO con profondità tipicamente da 64 a 512 byte, delle quali una dedicata all’end point 0 (controllo) e l’altra dedicata allo scambio dei payload (dati) endpoint 1/81. Solitamente questi dispositivi sono dotati di un oscillatore a cristallo a 12 /16MHz ed un DPLL (Digital Phase Looked Loop) che ne moltiplica la frequenza, per ottenere una a 48 MHz in modo da disporre di un maggior numero di fasi di clock per la tempificazione dell'attività della macchina. Di solito il trasferimento dei dati da e verso il CDC avviene in modalità Interrupt, in questo caso i frame sono distanti 1 millisecondo, ma ciascun frame è costituito da byte che viaggiano alla velocità prevista dallo standard, 1/12 MHz nel caso di USB1.1 oppure USB2.0, denominate rispettivamente low speed e full speed. Completano la macchina il transceiver che pilota le linee D+/D- del bus USB e l’UART, col suo baud rate generator, che gestisce la porta COM fisicamente collegata all'applicazione finale. L’UART può presentarsi in modalità TTL oppure RS232 e funzionare con livelli di 3V oppure 5 volt. Una EPROM di piccolo taglio da 1-2K consente la memorizzazione dei dati di descriptor, User ID e serial number, necessari in fase di enumerazione per identificare le caratteristiche del prodotto ed il costruttore.
COSA OFFRE IL MERCATO FDTICHIP
I più diffusi sono senz’altro quelli costruiti da FDTICHIP: la casa, con quartier generale nel Regno Unito e sedi in tutto il mondo, è specializzata nella costruzione di convertitori USB per ogni esigenza, offre cavetti già assemblati FT232R e chip per applicazioni OEM. La serie FT23xx (Figura 1) prevede una vasta scelta di dispositivi che vanno dal Basic USB/UART converter come l’FT230X, adatto per comunicazioni RS232, RS485, RS422, al più completo FT231x il quale avendo un contenitore più generoso (ben 20 pin QFN) consente la gestione di tutte le linee di handshaking hardware previste dallo standard RS232. Si alimentano direttamente dalla linea a 5 Volt del bus USB e dispongono di regolatore interno a 3,3 V. Tutte le linee di uscita (comprese RX/TX) hanno livelli TTL. Una caratteristica molto interessante di questi chip è quella di non richiedere un oscillatore esterno. Inoltre, dispone di alcune linee di I/O funzionali denominate CBUS0…3 configurabili da EEPROM, che consentono la segnalazione degli stati interni di funzionamento del dispositivo, ad esempio connesso, sospeso, in trasmissione, in ricezione, etc. Il baud rate è configurabile nell’intervallo da 300 a 3 Mbit/secondo. Affianco ai convertitori di tipo stand alone, la FDTICHIP offre molti dispositivi con interfaccia SPI, in modo da potersi interfacciare con un controller in ambienti embedded. L’offerta di cavetti già assemblati, completi di connettore alle 2 estremità, consente uscite a 3,3 volt oppure a 5 Volt, con livelli TTL oppure RS232 (-3/+3V -5/+5V) e sono disponibili in diverse lunghezze. In particolare, questi componenti sotto forma di chip oppure in cavi assemblati, sono facilmente disponibili sui cataloghi generali dei principali distributori di componenti elettronici.
SILICON LABS
Un discorso molto interessante è quello portato avanti da Silicon Labs. Questa azienda, infatti, oltre ai classici bridge converter (vedi famiglia CP210x, Figura 2) prevede il CP2110 HID USB - UART che non ha bisogno di driver per poter funzionare in ambiente Windows/Linux. Ma procediamo per gradi. Alla base della piramide incontriamo il CP2101, pienamente compatibile USB 2.0 (12MHz), baud rate programmabile da 300 a 921,6 Kbit/sec, EEPROM da 512 byte per la memorizzazione dei dati di configurazione: Vendor Id, Serial number, Power Descriptor, etc. Si alimenta a 5 volt dal bus USB, ha un package da 28 pin QFN 5 x 5 mm. Le caratteristiche elettriche delle linee di uscita e di handshake sono di tipo TTL, necessita di un convertitore esterno per la conversione dei livelli in RS232. Sul sito del costruttore sono disponibili i driver royalty free per ambiente Windows, MAC, Linux. La famiglia si compone di varie configurazioni CP2102-04-08-09 diversificate per contenitore, tensione di alimentazione, numero di linee di I/O ed handshake disponibili, con uscita singola duale o quad UART. Tutti di costo accessibile e facile reperibilità in commercio. Al top della gamma troviamo un innovativo bridge denominato CP2110 pensato per funzionare come periferica HID (Human Interface Device) e quindi non richiede nessun driver per poter funzionare in ambiente PC /MAC/Linux. Il CP2110 dispone di tutte le risorse e prestazioni già viste per i precedenti, in più dispone di 10 linee di I/O configurabili a piacimento per varie applicazioni. Per l’intera famiglia di bridge proposti dalla Silicon Labs sono disponibili schede di valutazione, note applicative e tool kit software per l’utilizzo immediato nei vari ambienti operativi.
PROLIFIC TECHNOLOGY INC.
Vale la pena segnalare, tra i dispositivi bridge più diffusi sul mercato, quelli costruiti dalla casa di Taiwan, noti con la sigla commerciale PL2303 (vedi schema a blocchi in Figura 3). Il più economico disponibile in commercio è il PL2303SA in contenitore SO8. Dispone solo degli elementi essenziali, ha il clock interno a 96MHz, è conforme alla specifica USB 2.0 full speed 12 MHz, lavora in bulk mode consentendo la comunicazione full duplex della porta COM virtuale, il baud rate è programmabile da 75 a 115K. I livelli delle uniche linee di comunicazione RX/TX sono RS232 compatibili. La famiglia si arricchisce e si completa con vari modelli identificati da un diverso suffisso PL2303 TA-TB-HXDEA-RA, quasi tutti in contenitore SSOP28, si diversificano per numero di linee di handshake, velocità di comunicazione (baud rate), etc. Sul sito della casa costruttrice sono disponibili i driver VCP per ambiente Windows e Android.
ALTRI
Concludono la rassegna Cypress, con il CY7C64225 (Figura 4): contenitore a 28 pin SSOP, oscillatore a bordo da 24 MHz, piena compatibilità USB 2.0, velocità programmabile fino a 256 KBaud, 4 linee di handshake hardware, 2 linee di I/O dedicate ai led RX/TX. Alimentazione 3,3 Volt oppure 5 Volt a basso consumo, con regolatore a bordo.
I driver certificati per ambiente Windows 7/8/XP sono disponibili sul sito del costruttore. Supporto per ambiente Android, MAC, Linux. Texas Instruments produce il non meno famoso TUSB3410 (Figura 5); la particolarità di questo chip è quella di essere basato su un microprocessore 8052 che provvede alla gestione della funzionalità del bridge oltre a mettere a disposizione 4 linee di I/O generiche configurabili a piacere.
Le possibilità di configurazione sono infinite, il baud rate è programmabile da 50 a 921,6 Kbit/sec, il controllo di flusso può essere software XON/XOFF oppure hardware RTS/DTR, CTS/DSR, il tipo di interfaccia è configurabile facilmente RS232/RS485. Una caratteristica interessante di questo bridge è la presenza di una porta IRDA utilizzabile con baud rate fino a 115 Kbit. Questo chip si presenta in contenitore QFP/QFN a 32 pin, si alimenta a 3,3 Volt. Sul sito del costruttore sono disponibili la documentazione tecnica, la scheda di valutazione, le note applicative, i tool kit ed i driver per ambiente Windows.
CONCLUSIONE
Dal momento che è possibile convertire la porta USB in porta COM, viene voglia di utilizzare la stessa tecnica per ottenere altri tipi di convertitori. Perché no? Infatti, se guardiamo sui vari siti indicati in questo articolo, noteremo l’esistenza di convertitori di protocollo da USB a LPT oppure da USB a I2C, o ancora da USB a CAN bus, etc. Insomma, il ricorso all’implementazione di una porta USB di tipo nativo su un prodotto, quasi sempre può essere evitato grazie a questi semplici ed indispensabili dispositivi.