Creare un’applicazione

Questo capitolo descrive la struttura software del componente USB Host e spiega il suo utilizzo per creare un’applicazione USB Host. Questo componente software è disponibile solo per gli utenti di MDK-Professional.

Il componente USB Host semplifica lo sviluppo software di sistemi a microcontrollore che permettono di collegare dispositivi USB. Gli attributi del componente USB Host sono:

  • Conforme alla specifica USB 2.0.
  • Supporto per HID, MSC, CDC e classi di dispositivi USB personalizzati da collegare all’host USB.
  • Supporto per i tipi di controllo, interrupt e bulk transfer.

Componenti RTE

La seguente immagine mostra le relazioni dei componenti RTE con la periferica USB Host del microcontrollore (USB Controller). I componenti RTE forniscono file di configurazione e modelli di codice utente. I file di configurazione configurano i componenti RTE, le interfacce hardware, le risorse di memoria e i parametri dell’host USB. I modelli di codice utente forniscono lo scheletro per implementare il supporto per diverse classi di dispositivi USB.

usb_host_blocks_config_files.png

Struttura dell’host USB

I passi per creare un’applicazione microcontrollore che funzioni come un host USB sono:

  1. Seleziona i componenti RTE che sono necessari per la tua applicazione.
  2. Abilita e configura il driver host USB.
  3. Configura l’host USB che collega il middleware USB alla periferica USB del microcontrollore.
  4. Configura le risorse di sistema secondo i requisiti delle risorse del componente host USB.
  5. Configura i parametri dei dispositivi USB collegati.
  6. Implementa il codice dell’applicazione usando i modelli di codice che sono forniti per supportare varie classi di dispositivi USB.
  7. Fai il debug dell’applicazione usando i meccanismi integrati del componente USB.

Selezione del componente RTE

La selezione del componente RTE si fa in pochi passi:

  1. Dal componente USB:
    • Seleziona USB:CORE che fornisce le funzionalità di base richieste per la comunicazione USB.
    • Imposta USB:Host a ‘1’. Questo crea un host USB per la comunicazione con i dispositivi USB collegati.
    • Seleziona il supporto desiderato per le classi USB (HID/MSC/CDC/Custom Class). Per esempio, seleziona USB:Host:HID per supportare solo i dispositivi di classe HID.
  2. Dal componente Driver:
    • Seleziona un appropriato driver USB Host adatto alla tua applicazione.
  3. Dal componente Dispositivo:
    • Secondo l’output di validazione potrebbero essere richiesti ulteriori driver specifici del dispositivo.
  4. Dal componente CMSIS:
    • Seleziona il CMSIS:CORE per fornire l’interfaccia principale al processore.
    • Seleziona un adatto CMSIS:RTOS o CMSIS:RTOS2 che è richiesto per l’applicazione.

USBH_RTE.png

Selezione dei componenti RTE

Driver e controller USB

Il driver host USB e il controller USB del microcontrollore devono essere configurati correttamente. In particolare questo significa:

  • Il driver host USB selezionato sotto il componente Drivers è tipicamente configurato con il file di configurazione RTE_Device.h. Mentre questo file fornisce molteplici opzioni, è tipicamente sufficiente per abilitare la periferica USB Host relativa a questo driver. Alcuni microcontrollori possono richiedere impostazioni che riguardano un’interfaccia di livello fisico (PHY), l’alimentazione USB VBUS e la protezione da sovracorrente.
  • Il controller USB del microcontrollore necessita tipicamente di specifiche impostazioni di clock. Consultate la guida utente del microcontrollore per capire i requisiti. In alternativa puoi copiare la configurazione di un esempio di Host USB che è fornito per varie schede di valutazione.

Configurazione Host USB

Il file USBH_Config_n.c contiene impostazioni aggiuntive per lo specifico Host USB:

  • Il Driver Number è impostato secondo il Controller USB selezionato. Per i controller di dispositivi USB singoli sarà ‘0’.
  • Alcuni microcontrollori possono fare uso di diverse interfacce controller hardware. Consultare la guida utente del microcontrollore selezionato per scegliere l’impostazione corretta.

Riferimento a Configurazione per una lista dettagliata di tutte le impostazioni disponibili.

Configurazione delle risorse di sistema

Per un corretto funzionamento, il componente host USB richiede alcune impostazioni di configurazione del sistema. I requisiti sono:

  • Dimensione supplementare dello stack di 512 byte. Questo può essere configurato nel file del dispositivo (Stack_Size).
  • Il componente dispositivo USB usa i thread CMSIS-RTOS. Nel caso in cui venga usato RTX v5 non sono necessarie modifiche alle impostazioni RTX poiché tutte le risorse sono allocate staticamente. Nel caso in cui venga usato RTX v4 è necessario cambiare le seguenti impostazioni nel file:
    • Aumenta il numero di thread utente in esecuzione simultanea per il numero di thread richiesti dall’host USB
    • Aumenta il numero di thread con dimensione dello stack fornita dall’utenteper il numero di thread richiesti dall’host USB
    • Aumenta la dimensione totale dello stack per i thread con dimensione dello stack fornita dall’utente per la dimensione dei thread richiesti dall’host USB
    • Abilita i timer utente

Per maggiori informazioni, controllare la sezione Requisiti delle risorse del componente USB Host.

Configurazione dei dispositivi USB collegabili

In USBH_Config_HID.h, USBH_Config_MSC.h, USBH_Config_CDC.h, o USBH_Config_CustomClass.h puoi specificare il numero di dispositivi USB concorrenti che l’host USB supporterà. Questo ha un impatto sulla quantità di memoria che sarà riservata nella tua applicazione per il collegamento dei dispositivi USB. Gli esempi mostrano come configurare un host USB per interagire con diversi dispositivi periferici HID, MSC o CDC.

I file User Code Implementation

forniscono modelli di funzioni per supportare varie classi di dispositivi USB sull’host USB. Le funzioni disponibili sono spiegate nella sezione Reference del componente USB Host. Queste routine possono essere adattate alle esigenze dell’applicazione del microcontrollore, nel caso siano necessarie funzionalità diverse da quelle predefinite.

I seguenti modelli sono disponibili per il componente USB Host:

Nome del template Scopo
USBH_MSC.c Funzioni necessarie per supportare i dispositivi MSC. Il modello può essere trovato qui.
USBH_PL2303.c Funzioni necessarie per supportare l’adattatore Prolific PL2303 da USB a seriale RS232. Il modello può essere trovato qui.
USBH_User_CustomClass.c Funzioni necessarie per supportare qualsiasi classe di dispositivi USB. Il template può essere trovato qui.

Debug

Il componente host USB è distribuito in forma di libreria e non permette il debug diretto del codice. Tuttavia può essere facilmente configurato per generare eventi di debug e fornire visibilità dinamica al funzionamento del componente.

Le seguenti varianti possono essere selezionate per il componente software USB:CORE nella finestra Manage Run-Time Environment:

  • Debug: questa variante supporta annotazioni di eventi per il e rende molto facile analizzare il funzionamento interno del componente host USB durante il debug dell’applicazione. Event Recorder Support di seguito spiega come configurare e utilizzare questa variante.
  • Release: questa variante non include codice di debug aggiuntivo. Usa questa variante quando distribuisci l’applicazione.

La figura sotto mostra la selezione della variante Debug.

usbh_debug_variant.png

L’USB Host:Debug Events descrive gli eventi implementati nel USB Device Component.

Event Recorder Support

è un potente strumento che fornisce visibilità all’esecuzione dinamica del programma.

Il componente host USB genera un ampio set di eventi di debug per il registratore di eventi e implementa l’infrastruttura necessaria per interfacciarsi con esso.

Per usare il registratore di eventi è necessario creare un’immagine con supporto per la generazione di eventi. I passi necessari sono:

  1. : nel dialogo di gestione RTE seleziona la variante Debug per il componente software USB:CORE.
  2. : nel dialogo di gestione RTE abilita il componente software Compiler:Event Recorder.
  3. Assicurati che Event Recorder sia inizializzato preferibilmente se viene usato CMSIS-RTOS2 RTX v5, o in alternativa chiamando la funzione nel codice dell’applicazione.
  4. Configurazione del registratore di eventi: se necessario, regola la configurazione predefinita del registratore di eventi.
  5. Costruisci il codice dell’applicazione, scaricalo sull’hardware di destinazione e avvia la sessione di debug.

Ora, quando l’host USB genera informazioni sugli eventi, queste possono essere visualizzate nel .

Configurazione del registratore di eventi

Questa sezione descrive le impostazioni di configurazione del registratore di eventi. L’utilizzo richiede la variante di debug del componente software USB:CORE; fai riferimento al Supporto del registratore di eventi per maggiori informazioni.

Configurazione della generazione di eventi USB

Selezionando la variante di debug USB:CORE, aggiungerai il file USB_Debug.c al tuo progetto. Usa questo file per impostare la configurazione della generazione di eventi per il core USB, i driver e le classi di dispositivi separatamente. Il file è disponibile per i componenti USB Device e Host.

USBH_USB_Debug_c.png

USB_Debug.c per la configurazione della generazione di eventi

Le seguenti impostazioni sono disponibili per la configurazione della generazione di eventi di ogni modulo:

  • Off significa che nessun evento sarà generato dal modulo
  • Errors significa che solo eventi di errore saranno generati dal modulo
  • Errors + API significa che eventi di errore e chiamate API saranno generati dal modulo
  • All significa che tutti gli eventi disponibili saranno generati dal modulo. Oltre agli eventi di errore e di chiamata API, questo contiene il funzionamento e gli eventi dettagliati.

Event IDs

Il componente USB Host usa i seguenti event IDs:

Componente Event ID
USBH_Core 0xB0
USBH_Driver 0xB1
USBH_CC 0xB2
USBH_CDC 0xB3
USBH_HID 0xB4
USBH_MSC 0xB5