Skapa ett program

Detta kapitel beskriver mjukvarustrukturen för USB Host-komponenten och förklarar hur den används för att skapa ett USB Host-program. Den här programvarukomponenten är endast tillgänglig för användare av MDK-Professional.

USB Host Component förenklar mjukvaruutvecklingen av mikrokontrollersystem som gör det möjligt att ansluta USB-enheter. USB Host Component har följande egenskaper:

  • Kompatibelt med USB 2.0-specifikationen.
  • Stöd för HID-, MSC-, CDC- och anpassade USB-enhetsklasser som kan anslutas till USB Host.
  • Stöd för kontroll-, avbrotts- och bulköverföringstyper.

RTE-komponenter

Följande bild visar relationerna mellan RTE-komponenterna och mikrokontrollerns USB-värdperiferi (USB-kontroller). RTE-komponenterna tillhandahåller konfigurationsfiler och mallar för användarkod. Konfigurationsfiler konfigurerar RTE-komponenterna, hårdvarugränssnitt, minnesresurser och USB-värdparametrar. Användarkodmallar tillhandahåller skelettet för att implementera stöd för olika USB-enhetsklasser.

usb_host_blocks_config_files.png

USB Host Structure

Ströden för att skapa en mikrokontrollertillämpning som fungerar som en USB Host är följande:

  1. Välj de RTE-komponenter som krävs för din tillämpning.
  2. Aktivera och konfigurera USB Host Driver.
  3. Konfigurera USB Host som ansluter USB Middleware till mikrokontrollerns USB-periferiutrustning.
  4. Konfigurera systemresurserna enligt USB Host-komponentens resurskrav.
  5. Konfigurera parametrarna för de anslutna USB-enheterna.
  6. Installera programkoden med hjälp av kodmallar som tillhandahålls för att stödja olika USB-enhetsklasser.
  7. Debugga programmet med hjälp av de inbyggda mekanismerna i USB-komponenten.

Val av RTE-komponent

Valet av RTE-komponent sker i några få steg:

  1. Från USB-komponenten:
    • Välj USB:CORE som tillhandahåller den grundläggande funktionalitet som krävs för USB-kommunikation.
    • Sätt USB:Host till ”1”. Detta skapar en USB-värd för kommunikation med anslutna USB-enheter.
    • Välj önskat stöd för USB-klasser (HID/MSC/CDC/Custom Class). Välj till exempel USB:Host:HID för att endast stödja enheter av HID-klass.
  2. Från drivrutinskomponenten:
    • Välj en lämplig drivrutin för USB-värd som lämpar sig för ditt program.
  3. Från enhetskomponenten:
    • Det kan krävas ytterligare enhetsspecifika drivrutiner enligt valideringsresultatet.
  4. Från CMSIS-komponenten:
    • Välj CMSIS:CORE för att tillhandahålla kärnans gränssnitt mot processorn.
    • Välj en lämplig CMSIS:RTOS eller CMSIS:RTOS2 som krävs för programmet.
USBH_RTE.png

RTE-komponentval

USB-drivrutin och styrenhet

Mikrokontrollerns USB-värddrivrutin och USB-kontrollenhet måste konfigureras korrekt. Detta innebär i synnerhet:

  • Den USB-värddrivrutin som väljs under Drivers Component konfigureras vanligtvis med konfigurationsfilen RTE_Device.h. Även om den här filen innehåller flera alternativ är det vanligtvis tillräckligt att aktivera USB-värdperiferin relaterad till den här drivrutinen. Vissa mikrokontroller kan kräva inställningar som rör ett gränssnitt för det fysiska lagret (PHY), USB VBUS-strömmen och överströmsskydd.
  • Mikrokontrollerns USB-kontroller behöver vanligtvis specifika klockinställningar. Se mikrokontrollerns användarhandbok för att förstå kraven. Alternativt kan du kopiera inställningen av ett USB Host-exempel som tillhandahålls för olika utvärderingskort.

USB Host Configuration

Filen USBH_Config_n.c innehåller ytterligare inställningar för den specifika USB Host:

  • Drivrutinnumret ställs in i enlighet med den valda USB-kontrollern. För enskilda USB-enhetskontrollanter blir det ”0”.
  • Vissa mikrokontrollanter kan använda sig av olika kontrollantgränssnitt för hårdvara. Se användarhandboken för den valda mikrokontrollern för att välja rätt inställning.

Se Konfiguration för en detaljerad lista över alla tillgängliga inställningar.

Konfigurering av systemresurser

För att USB-värdkomponenten ska fungera korrekt krävs vissa systemkonfigurationsinställningar. Kraven är följande:

  • Att ytterligare stackstorlek på 512 byte. Detta kan konfigureras i enhetens fil (Stack_Size).
  • USB-enhetskomponenten använder CMSIS-RTOS-trådar. Om RTX v5 används behövs inga ändringar i RTX-inställningarna eftersom alla resurser allokeras statiskt. Om RTX v4 används måste du ändra följande inställningar i filen:
    • Öka antalet samtidigt körda användartrådar med det antal trådar som krävs av USB-värd
    • Öka antalet trådar med användar-med användarens stapelstorlek med antalet trådar som krävs av USB-värd
    • Öka den totala stapelstorleken för trådar med användarens stapelstorlek med antalet trådar som krävs av USB-värd
    • Aktivera användartimers

För mer information: Användartimers

För mer information, kontrollera avsnittet Resurskrav för USB Host-komponenten.

Konfiguration av anslutningsbara USB-enheter

I USBH_Config_HID.h, USBH_Config_MSC.h, USBH_Config_CDC.h eller USBH_Config_CustomClass.h kan du ange antalet samtidiga USB-enheter som USB-värdkomponenten har stöd för. Detta påverkar hur mycket minne som kommer att reserveras i ditt program för att bifoga USB-enheter. Exemplen visar hur man konfigurerar en USB-värd för att interagera med olika HID-, MSC- eller CDC-periferienheter.

User Code Implementation

-filer tillhandahåller funktionsmallar för att stödja olika USB-enhetsklasser på USB-värden. De tillgängliga funktionerna förklaras i avsnittet Referens i USB-värdkomponenten. Dessa rutiner kan anpassas till mikrokontrollertillämpningens behov, om det behövs annan funktionalitet än standardfunktionalitet.

Följande mallar är tillgängliga för USB Host-komponenten:

Mallnamn Syfte
USBH_MSC.c Obligatoriska funktioner för att stödja MSC-enheter. Mallen kan hittas här.
USBH_PL2303.c Behövliga funktioner för att stödja Prolific PL2303 USB- till seriell RS232-adapter. Mallen finns här.
USBH_User_CustomClass.c Obligatoriska funktioner för att stödja alla USB-enhetsklasser. Mallen kan hittas här.

Debuggning

USB Host Component distribueras i biblioteksform och tillåter inte dess direkta koddebuggning. Den kan dock enkelt konfigureras för att generera felsökningshändelser och ge dynamisk insyn i komponentens funktion.

Följande varianter kan väljas för programvarukomponenten USB:CORE i fönstret Hantera körtidsmiljö:

  • Felsökning: den här varianten har stöd för händelsemeddelanden för och gör det mycket enkelt att analysera den interna driften av USB-värdkomponenten under felsökning av programmet. Event Recorder Support nedan förklarar hur du konfigurerar och använder den här varianten.
  • Release: Den här varianten innehåller ingen ytterligare felsökningskod. Använd den här varianten när du distribuerar applikationen.

Figuren nedan visar val av Debug-varianten.

usbh_debug_variant.png

I USB Host:Debug Events beskrivs de händelser som implementeras i USB Device Component.

Event Recorder Support

är ett kraftfullt verktyg som ger insyn i den dynamiska exekveringen av programmet.

Den USB Host Component genererar en bred uppsättning av felsökningshändelser för Event Recorder och implementerar nödvändig infrastruktur för att skapa ett gränssnitt mot den.

För att kunna använda Event Recorder krävs det att man skapar en avbildning med stöd för händelsegenerering. De nödvändiga stegen är:

  1. : i dialogrutan RTE-hantering väljer du Debug-varianten för programvarukomponenten USB:CORE.
  2. : i dialogrutan RTE-hantering aktiverar du programvarukomponenten Compiler:Event Recorder.
  3. Säkerställ att Event Recorder initialiseras företrädesvis genom att, om CMSIS-RTOS2 RTX v5 används, alternativt genom att anropa funktionen i applikationskoden.
  4. Konfigurering av händelseskrivaren: justera vid behov standardkonfigurationen för händelseskrivaren.
  5. Bygg programkoden, ladda ner den till målhårdvaran och starta felsökningssessionen.

När USB-värden genererar händelsemeddelanden kan de nu visas i .

Konfiguration av händelseskrivaren

Detta avsnitt beskriver konfigurationsinställningarna för händelseskrivaren. Användningen kräver debugvarianten av programvarukomponenten USB:CORE; se Stöd för händelserapporterare för mer information.

USB Event Generation Configuration

Väljer du debugvarianten för USB:CORE läggs filen USB_Debug.c till ditt projekt. Använd den här filen för att ställa in konfigurationen för händelsegenerering för USB core, drivrutiner och enhetsklasser separat. Filen är tillgänglig för USB-enhets- och värdkomponenter.

USBH_USB_Debug_c.png

USB_Debug.c-filen för konfiguration av händelsegenerering

Följande inställningar finns tillgängliga för konfiguration av händelsegenerering för varje modul:

  • Av innebär att inga händelser kommer att genereras av modulen
  • Fel innebär att endast felhändelser kommer att genereras av modulen
  • Fel + API innebär att fel- och API-anropshändelser kommer att genereras av modulen
  • Alla innebär att alla tillgängliga händelser kommer att genereras av modulen. Förutom fel- och API-anropshändelser innehåller detta drifts- och detaljerade händelser.

Händelse-ID

Den här USB-värdkomponenten använder följande händelse-ID:n:

Komponent Händelse-ID
USBH_Core 0xB0
USBH_Driver 0xB1
USBH_CC 0xB2
USBH_CDC 0xB3
USBH_HID 0xB4
USBH_MSC 0xB5