Applicazioni USB con MSP430

Benvenuti a un nuovo appuntamento con la Rubrica Firmware Reload di Elettronica Open Source. In questa Rubrica del blog EOS abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi passati ancora di interesse per Professionisti, Makers, Hobbisti e Appassionati di elettronica. In questo articolo faremo un’analisi approfondita del software sviluppato da Texas Instruments, distribuito sotto il nome di “USB Developers Package” per gestire al meglio il modulo USB integrato nei dispositivi della famiglia MSP430.

Introduzione

L’interfaccia USB è oggigiorno lo standard “de facto” per quanto riguarda la connessione cablata tra dispositivi elettronici, soprattutto se si considerano le varie periferiche connesse ad un PC o un notebook. La sua popolarità e larga diffusione sono dovute alla semplicità e all’affidabilità con cui ci si presenta quotidianamente; detto in due parole, l’USB funziona davvero! C’è poco da aggiungere. La semplicità d’uso da parte dell’utente e l’affidabilità nascondono però un ben più complicato standard che permette tutto ciò; infatti, chiunque voglia sviluppare una propria applicazione, professionalmente o solo per diletto, deve fare i conti con una complessa struttura software per poter gestire una altrettanto complessa periferica hardware che, se non gestite entrambe nel modo corretto, possono compromettere la tanto famosa affidabilità e la facilità di utilizzo che noi tutti conosciamo. Fortunatamente, chiunque voglia sviluppare un dispositivo elettronico dotato di USB può contare su vari microcontrollori ed altri dispositivi che integrano al loro interno un’evoluta periferica hardware dedicata e su relative librerie di basso livello per il loro rapido utilizzo, fornite dagli stessi produttori di silicio.

Uno di questi è il TI MSP430 USB Developers Package, fornito dalla Texas Instruments, pensato per soddisfare una vasta gamma di sviluppatori. Infatti, è possibile personalizzare la propria applicazione USB in base alle proprie esigenze. Questo strumento è compatibile con i microcontrollori della famiglia MSP430, i quali includono al loro interno un modulo hardware USB esattamente identico in ogni dispositivo della famiglia. La relativa documentazione tecnica è compresa del foglio specifiche generico della serie, mentre un altro foglio specifiche per ogni dispositivo ne descrive i dettagli relativi a quel particolare “numero di catalogo”. La Tabella 1 elenca i dispositivi della famiglia MSP430 equipaggiati con il modulo USB e come si può notare la memoria RAM per questi dispositivi è espressa in “n+2K”, dove n rappresenta la memoria disponibile per la nostra applicazione mentre 2K è la memoria riservata all’USB. Questa RAM viene usata per mappare i registri del modulo USB una volta abilitato e anche nel caso questo stesso modulo non venga abilitato, questa zona di memoria non viene comunque allocata dal linker e per renderla disponibile ad altri scopi bisogna comunque prendere dei particolari accorgimenti.

Tabella 1: Lista dei dispositivi con modulo USB integrato.

Tabella 1: Lista dei dispositivi con modulo USB integrato

MODULO USB INTEGRATO

Passiamo ad elencare le principali caratteristiche del modulo USB della famiglia MSP430:

  • Full-speed USB device (12 Mbps), Full-speed si abbina bene con MCU a 16 bit; facilita la comunicazione con un USB host, con semplicità ed a bassi costi di sistema. Il modulo non consente i trasferimenti a low o high speed e non ha la funzionalità di USB host;
  • Support of control, interrupt, and bulk transfer. Questo permette di supportare le principali classi di dispositivi;
  • Otto endpoint di input e otto di output. Più endpoint sono supportati e più interfacce USB (dispositivi logici) possono essere implementati in un dispositivo USB; senza entrare troppo nel dettaglio possiamo dire che è sufficiente per la gran maggioranza delle applicazioni USB;
  • Un LDO integrato da 3,3V, in modo da poter alimentare il dispositivo direttamente ai 5V del VBUS dall’host. Questo evita l’utilizzo di un LDO esterno per alimentare l’MCU. Inoltre, l’LDO integrato può essere usato per alimentare l’intero sistema, fino a 12 mA di assorbimento (vedere il foglio specifiche per maggiori dettagli);
  • Un pull-up sulla linea D+ integrato, con il quale un dispositivo USB richiede all’host di essere enumerato. La particolarità di averlo integrato consente un risparmio di componenti esterni;
  • PLL programmabile integrato. Questo PLL genera un clock a 48 MHz necessario al funzionamento del modulo USB, la frequenza di riferimento per il PLL proviene dall’oscillatore XT2 dell’MCU ma è possibile selezionare altre sorgenti;
  • Transceiver integrato (PHY). Ciò evita l’utilizzo e quindi l’oneroso acquisto di un RTX esterno. La Figura 1 mostra il diagramma a blocchi del modulo USB integrato nella famiglia MSP430.
Figura 1: Diagramma a blocchi del modulo USB.

Figura 1: Diagramma a blocchi del modulo USB

IL PACCHETTO

Vediamo ora più in dettaglio l’MSP430 USB Developers Package e il suo ruolo in un sistema USB. La Figura 2 mostra il lato host (su un personal computer, ad esempio) ed il lato MCU, ovvero la nostra applicazione embedded su un dispositivo MSP430.

Figura 2: MSP430 USB Developers Package e sistema USB.

Figura 2: MSP430 USB Developers Package e sistema USB

Le componenti cerchiate in viola rappresentano il pacchetto fornito da TI, mentre le componenti rettangolari identificano le parti software, infine quelle a forma ovale rappresentano la documentazione. Il Descriptor Tool consente la creazione dell’interfaccia USB personalizzata in base alle nostre esigenze; infatti, la nostra applicazione comunicherà con l’host attraverso queste interfacce. TI fornisce fino a 25 applicazioni di esempio che possono essere molto utili per iniziare a sviluppare la propria. Dal lato host, un’applicazione su porta seriale (COM) o un’applicazione per il salvataggio dei dati su dispositivi USB possono bastare per sviluppare un primo sistema. In rete è comunque facile trovare ogni tipo di risorsa, ma risulta più difficile trovare applicazioni per HID (Human Interface Device) e perciò TI fornisce nel pacchetto l’utility Java “HID Demo App” come semplice esempio.

Figura 3: MSP430 USB descriptor Tool.

Figura 3: MSP430 USB Descriptor Tool

DESCRIPTOR TOOL

Per fare in modo che ogni sviluppatore possa integrare nella propria applicazione solo le interfacce USB che intende usare, il Descriptor Tool permette la loro generazione automatica a seconda dei parametri che gli diamo come ingresso. Possiamo quindi creare qualunque combinazione di interfacce CDC, HID e MSC, abilitare o meno il wake up remoto, limitare la corrente di alimentazione fornita dall’host. Insomma, questo tool genera quello che viene definito un USB Descriptor. Il vantaggio non è da poco, dato che scriverne uno manualmente sarebbe a dir poco costoso in termini di tempo di sviluppo, senza considerare i possibili errori e altri tipi di problemi derivanti da una non corretta implementazione; inoltre, nel caso in cui il nostro dispositivo contenga delle interfacce CDC, il Descriptor Tool genera un INF file personalizzato a seconda dei parametri da noi impostati. Infine, il tool avverte lo sviluppatore nel caso si stia creando un certo descriptor che non funzionerà con i più comuni sistemi operativi dell’host. Il Descriptor Tool è quindi il primo passo da compiere per sviluppare un’applicazione USB.

Figura 4: MSP-EXP430F5529LP LaunchPad

Figura 4: MSP-EXP430F5529LP LaunchPad

SOFTWARE HOST

Come accennato precedentemente, si possono trovare molte risorse per implementare un’applicazione USB per dispositivi di classe CDC e MSC, ciò è dovuto al fatto che le interfacce per tali classi non sono specifiche per la periferica USB, basti pensare alle porte virtuali COM e ai volumi di memoria di massa. Diverso invece è il caso delle interfacce per la classe HID, che il più delle volte non dispongono di una relativa applicazione, ad esempio la tastiera ed il mouse sono gestiti direttamente dal sistema operativo. Lo sviluppatore che volesse interagire con un dispositivo HID, potrebbe quindi trovare difficoltà a sviluppare “ex novo” la propria applicazione host; per questo motivo l’MSP430 USB Developers Package fornisce la Java HID Demo App sia come codice sorgente che come eseguibile pronto all’uso. Il fatto di essere stata sviluppata in Java la rende utilizzabile su qualsiasi piattaforma di host.

USB API

Descriviamo brevemente le principali caratteristiche delle API che sono alla base dell’MSP430 USB Developers Package e supportano tre delle più comuni classi di dispositivi USB:

  • Communications Device Class (CDC): (ACM class) che interagiscono con una porta virtuale COM dell’host;
  • Human Interface Device class (HID): che sono suddivise in quattro sottotipi:

--  Datapipe (un dispositivo per impiego generico non formattato con interfaccia simile ad un CDC);

- - Mouse;

- - Keyboard;

- - Custom;

  • Mass Storage Class (MSC): che se visto da un host, quest’ultimo inizia a montare un volume di memoria dedicato.

Le principali caratteristiche delle API sono:

  • ridotto utilizzo di periferiche (solo il modulo USB e l’oscillatore XT2);
  • ridotto consumo di memoria;
  • possono utilizzare o il DMA o la CPU per trasferire dati;
  • vengono fornite come codice sorgente sotto licenza BSD in modo da garantire la massima flessibilità. L’elenco delle API e i dettagli su come utilizzarle si possono trovare nel documento MSP430 USB API Programmer’s Guide contenuto all’interno del pacchetto, in cui è anche presente la documentazione con le indicazioni necessarie per lo sviluppo del proprio hardware e su come scegliere i campi di VID e PID per l’applicazione d’interesse nell’eventualità che il prodotto abbia un fine commerciale. Diamo ora uno sguardo a come iniziare a sviluppare un’applicazione USB con l'MSP430 USB Developers Package.

CONSIDERAZIONI HARDWARE

L’host USB fornisce una linea a 5V direttamente dal cavo USB, chiamata VBUS, un dispositivo può alimentarsi totalmente o in parte (bisogna considerare che la corrente massima erogabile dall’host è limitata) da questa; soluzione ideale per dispositivi sempre connessi all’host. Analogamente, anche i dispositivi a batteria possono sfruttare questa sorgente quando vengono connessi all’host e tornare ad alimentarsi dalla batteria integrata non appena vengono scollegati; in questo modo il consumo della batteria si riduce, allungando la durata del dispositivo. I dispositivi della famiglia MSP430 con modulo USB integrato, contengono al loro interno un LDO per ridurre la tensione da 5V a 3,3V e l’uscita del regolatore può essere sfruttata come sorgente per:

  • il modulo USB;
  • MSP430 DVCC, ovvero la tensione di alimentazione delle logiche digitali del microcontrollore;
  • il resto della scheda.

Le linee VUSB (l’uscita dell’LDO) e DVCC sono isolate tra loro in modo da lasciare libertà al progettista di effettuare collegamenti nel modo che più gli conviene. L‘unico vincolo è la corrente massima erogata da VUSB pari a 12mA, valore più che sufficiente per la maggior parte delle applicazioni USB. Merita un breve sguardo la possibilità di configurare la sorgente di clock del dispositivo fra tre seguenti opzioni:

  • Clock esterno [1,5 - 32MHz]: se presente a bordo della scheda, rappresenta senza dubbio la scelta migliore dato che evita l’utilizzo di un apposito quarzo;
  • Quarzo [4 - 32MHz]: un quarzo dedicato fornisce flessibilità e precisione del clock;
  • Risuonatore ceramico [4 - 32MHz]: rappresenta la scelta più economica, a patto che la precisione del clock rientri nella tolleranza richiesta dallo standard USB: infatti, non tutti i componenti sono adatti a tale scopo. Come accennato nel caso del risuonatore ceramico, il progettista deve prestare attenzione alla precisione del clock generato per il modulo USB, dato che la tolleranza richiesta è di ±2500 ppm. Infine, nella documentazione del pacchetto si trovano altre informazioni e consigli per progetti di schede dedicate.
Figura 5: MSP430F5529 USB Experimenter’s Board

Figura 5: MSP430F5529 USB Experimenter’s Board

SVILUPPO DEL SOFTWARE EMBEDDED E SCHEDE

I principali ambienti di sviluppo per i dispositivi TI MSP430 sono il Code Composer StudioTM IDE (CCS) della TI e lo IAR Embedded Workbench® IDE (IAR). Entrambi supportano il compilatore MSP430GCC e sono disponibili in versioni free limitate nella dimensione del codice (16 KB per CCS e 8 KB per IAR); in entrambi i casi le USB API sono fornite e interamente supportate. Invece, per quanto riguarda le schede di sviluppo, la TI ne mette a disposizione vari modelli, ma due di queste spiccano maggiormente:

  • La MSP-EXP430F5529LP LaunchPad (o “F5529 LaunchPad”) è un economico e semplice “modulo di valutazione” per il microcontrollore MSP430F5529. Quest’ultimo chiaramente ha una periferica USB integrata. Questa scheda costituisce un primo facile modo per avvicinarsi allo sviluppo, grazie all’emulatore a bordo, ai pulsanti, ai LED e alla porta di espansione a 40-pin “Launchpad Booster-PackTM”, a cui si possono connettere i vari moduli plug-in “BoosterPack”.
  • La MSP430F5529 USB Experimenter’s Board racchiude in una sola scheda più porte di input/output, interfacce, vari ingressi di alimentazione e molto altro, permettendo quindi lo sviluppo di un maggior numero di applicazioni. Anch’essa integra un emulatore su scheda.

CONCLUSIONI

Come analizzato, Texas Instruments mette a disposizione vari strumenti evoluti sia hardware che software per applicazioni USB: tali soluzioni semplificano e riducono di molto lo sviluppo, ottimizzando anche le tempistiche di lavorazione. Per maggiori dettagli sugli strumenti e la documentazione relativa si faccia riferimento al sito ufficiale http://www.ti.com/msp430usb. Mentre sul sito http://www.ti.com/support è possibile trovare supporto e in particolare una attiva community di sviluppatori.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend