Come creare dispositivi USB usando un microcontrollore PIC18F. 3/4

In questo articolo verrà mostrato come realizzare un dispositivo generico USB HID (Human Interface Device, dispositivi che interagiscono con gli umani e da loro ricevono input, per poi restituirglieli), utilizzando un microcontrollore PIC18F e infine creando l’interfaccia Windows per il dispositivo che permetterà di controllare un LED dal PC. Con l’avvento di Windows 7 c’è bisogno di una certificazione di validazione costosa per creare driver USB personalizzati (senza di essa molti utenti non possono neppure installare il software creato).

Comunicazione con l’host

Il secondo importante lavoro che il firmware compie è la reale comunicazione tra l’host e il dispositivo. Ogni comunicazione è identificata da un comando. Quando si usa lo standard generico HID, il comando comunica all’host e al dispositivo di interpretare l’informazione che è passata con il comando. Questa informazione potrebbe essere di qualunque tipo (per questo è detta generica) così da ottenere massima flessibilità nell’elaborazione del task.

Una volta che il dispositivo viene enumerato l’host sonda periodicamente il dispositivo e può sia inviargli che ricevere da esso un comando o dei dati.
La parte principale da considerare nel firmware è la sezione relativa alle interrogazioni dell’host e alle operazioni necessarie per far funzionare il dispositivo.

Capire il codice sorgente del firmware.

Nel file zippato “PIC18F Generic HID Device” che si trova sempre disponibile per il download in fondo a questa pagina, si trova un firmware completo ready to go per il PIC18F4550. Basta scompattare il file nella directory di MPLAB e poi utilizzare MPLAB per aprire il progetto.

Il firmware fornisce 3 comandi:
- 0x80 – LED toggle
- 0x81 – leggere lo stato dell’interruttore a bottone
- Ox82 – leggere del stato del LED
Il codice che opera questi comandi è localizzato nel file sorgente main.c nella funzione ProcessIO(). Questa funzione è responsabile della determinazione del comando richiesto e poi dell’invio e ricezione dei dati in maniera appropriata.
Per capire meglio il processo di enumerazione si può dare uno sguardo a usb_descriptors.c che contiene l’informazione passata all’host quando il dispositivo viene connesso per la prima volta. Nella sorgente ci sono le informazioni riguardanti il VID e il PID per il dispositivo e anche una serie di descriptor di configurazione che spiegano all’host che tipo di interfacce ha il dispositivo e quali sono le loro capacità. Ci sono anche alcune stringhe che descrivono testualmente il produttore e il prodotto. Windows di solito usa queste stringhe quando nomina i dispositivi USB. Capire il processo di enumerazione e i formati del descriptor non è facile, e l’argomento è trattato nelle varie specifiche USB e in un libro di Jan Axelson intitolato “USB Complete – Everything you need to develop custom USB peripherals”, che sicuramente è di grande aiuto agli inizi per agevolare l’apprendimento.

Scarica subito una copia gratis
Tags:

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend