Anwendung erstellen

Dieses Kapitel beschreibt die Softwarestruktur der USB-Host-Komponente und erläutert ihre Verwendung zur Erstellung einer USB-Host-Anwendung. Diese Softwarekomponente steht nur Anwendern von MDK-Professional zur Verfügung.

Die USB-Host-Komponente vereinfacht die Softwareentwicklung von Mikrocontrollersystemen, die den Anschluss von USB-Geräten ermöglichen. Die Attribute der USB-Host-Komponente sind:

  • Konformität mit der USB 2.0-Spezifikation.
  • Unterstützung für HID, MSC, CDC und benutzerdefinierte USB-Geräteklassen, die an den USB-Host angeschlossen werden können.
  • Unterstützung für Steuer-, Interrupt- und Bulk-Transfer-Typen.

RTE-Komponenten

Die folgende Abbildung zeigt die Beziehungen der RTE-Komponenten mit der USB-Host-Peripherie des Mikrocontrollers (USB-Controller). RTE-Komponenten stellen Konfigurationsdateien und Benutzercodevorlagen bereit. Konfigurationsdateien konfigurieren die RTE-Komponenten, Hardware-Schnittstellen, Speicherressourcen und USB-Host-Parameter. User Code Templates bieten das Gerüst für die Implementierung der Unterstützung für verschiedene USB-Geräteklassen.

usb_host_blocks_config_files.png

USB-Host-Struktur

Die Schritte zur Erstellung einer Mikrocontroller-Anwendung, die als USB-Host fungiert, sind:

  1. Wählen Sie die RTE-Komponenten aus, die für Ihre Anwendung erforderlich sind.
  2. Aktivieren und konfigurieren Sie den USB-Host-Treiber.
  3. Konfigurieren Sie den USB-Host, der die USB-Middleware mit der USB-Peripherie des Mikrocontrollers verbindet.
  4. Konfigurieren Sie die Systemressourcen gemäß den Ressourcenanforderungen der USB-Host-Komponente.
  5. Konfigurieren Sie die Parameter der angeschlossenen USB-Geräte.
  6. Implementieren Sie den Anwendungscode mit Hilfe von Code-Vorlagen, die zur Unterstützung verschiedener USB-Geräteklassen bereitgestellt werden.
  7. Debuggen Sie Ihre Anwendung mit Hilfe der integrierten Mechanismen der USB-Komponente.

Auswahl der RTE-Komponente

Die Auswahl der RTE-Komponente erfolgt in wenigen Schritten:

  1. Aus der USB-Komponente:
    • Wählen Sie USB:CORE, das die für die USB-Kommunikation erforderlichen Grundfunktionen bereitstellt.
    • Setzen Sie USB:Host auf ‚1‘. Dadurch wird ein USB-Host für die Kommunikation mit angeschlossenen USB-Geräten erstellt.
    • Wählen Sie die gewünschte Unterstützung für USB-Klassen (HID/MSC/CDC/Custom Class). Wählen Sie zum Beispiel USB:Host:HID, um nur Geräte der HID-Klasse zu unterstützen.
  2. Aus der Komponente Treiber:
    • Wählen Sie einen geeigneten USB-Host-Treiber für Ihre Anwendung.
  3. Aus der Komponente Gerät:
    • Zusätzliche gerätespezifische Treiber können je nach Validierungsergebnis erforderlich sein.
  4. Aus der CMSIS-Komponente:
    • Wählen Sie den CMSIS:CORE, um die Kernschnittstelle zum Prozessor bereitzustellen.
    • Wählen Sie ein geeignetes CMSIS:RTOS oder CMSIS:RTOS2, das für die Anwendung erforderlich ist.

USBH_RTE.png

RTE-Komponentenauswahl

USB-Treiber und Controller

Der USB-Host-Treiber und der USB-Controller des Mikrocontrollers müssen korrekt konfiguriert werden. Dies bedeutet insbesondere:

  • Der unter der Komponente „Treiber“ ausgewählte USB-Host-Treiber wird normalerweise mit der Konfigurationsdatei RTE_Device.h konfiguriert. Diese Datei bietet zwar mehrere Optionen, aber in der Regel reicht es aus, die USB-Host-Peripherie im Zusammenhang mit diesem Treiber zu aktivieren. Bei einigen Mikrocontrollern sind möglicherweise Einstellungen erforderlich, die sich auf die Schnittstelle der physikalischen Schicht (PHY), die USB-VBUS-Stromversorgung und den Überstromschutz beziehen.
  • Der USB-Controller des Mikrocontrollers benötigt in der Regel bestimmte Takteinstellungen. Konsultieren Sie das Benutzerhandbuch des Mikrocontrollers, um die Anforderungen zu verstehen. Alternativ können Sie das Setup eines USB-Host-Beispiels kopieren, das für verschiedene Evaluierungsboards bereitgestellt wird.

USB-Host-Konfiguration

Die Datei USBH_Config_n.c enthält zusätzliche Einstellungen für den spezifischen USB-Host:

  • Die Treibernummer wird entsprechend dem ausgewählten USB-Controller eingestellt. Für einzelne USB-Geräte-Controller ist sie ‚0‘.
  • Einige Mikrocontroller können unterschiedliche Hardware-Controller-Schnittstellen verwenden. Konsultieren Sie das Benutzerhandbuch des ausgewählten Mikrocontrollers, um die richtige Einstellung zu wählen.

Eine detaillierte Liste aller verfügbaren Einstellungen finden Sie unter Konfiguration.

Systemressourcenkonfiguration

Für den ordnungsgemäßen Betrieb benötigt die USB-Host-Komponente einige Systemkonfigurationseinstellungen. Die Anforderungen sind:

  • Zusätzliche Stackgröße von 512 Bytes. Dies kann in der Gerätedatei (Stack_Size) konfiguriert werden.
  • Die USB-Gerätekomponente verwendet CMSIS-RTOS-Threads. Wenn RTX v5 verwendet wird, sind keine Änderungen an den RTX-Einstellungen erforderlich, da alle Ressourcen statisch zugewiesen werden. Falls RTX v4 verwendet wird, müssen Sie die folgenden Einstellungen in der Datei ändern:
    • Erhöhen Sie die Anzahl der gleichzeitig laufenden Benutzer-Threads um die Anzahl der vom USB-Host benötigten Threads
    • Erhöhen Sie die Anzahl der Threads mit benutzerdefinierterStack-Größe um die Anzahl der vom USB-Host benötigten Threads erhöhen
    • Gesamtstack-Größe für Threads mit benutzerdefinierter Stack-Größe um die Größe der vom USB-Host benötigten Threads erhöhen
    • Benutzer-Timer aktivieren

Für weitere Informationen, finden Sie im Abschnitt „Ressourcenanforderungen“ der Komponente USB-Host.

Konfiguration der anschließbaren USB-Geräte

In den Dateien USBH_Config_HID.h, USBH_Config_MSC.h, USBH_Config_CDC.h oder USBH_Config_CustomClass.h können Sie die Anzahl der gleichzeitigen USB-Geräte angeben, die der USB-Host unterstützen wird. Dies wirkt sich auf die Menge des Speichers aus, der in Ihrer Anwendung für das Anhängen von USB-Geräten reserviert wird. Die Beispiele zeigen, wie ein USB-Host konfiguriert wird, um mit verschiedenen HID-, MSC- oder CDC-Peripheriegeräten zu interagieren.

User Code Implementation

Dateien bieten Funktionsvorlagen zur Unterstützung verschiedener USB-Geräteklassen auf dem USB-Host. Die verfügbaren Funktionen werden im Abschnitt Referenz der USB-Host-Komponente erläutert. Diese Routinen können an die Bedürfnisse der Mikrocontroller-Anwendung angepasst werden, falls eine andere als die Standardfunktionalität benötigt wird.

Die folgenden Vorlagen sind für die USB-Host-Komponente verfügbar:

Template Name Zweck
USBH_MSC.c Erforderliche Funktionen zur Unterstützung von MSC-Geräten. Die Vorlage ist hier zu finden.
USBH_PL2303.c Benötigte Funktionen zur Unterstützung des Prolific PL2303 USB-zu-RS232-Adapters. Die Vorlage ist hier zu finden.
USBH_User_CustomClass.c Benötigte Funktionen zur Unterstützung jeder USB-Geräteklasse. Die Vorlage ist hier zu finden.

Debugging

USB Host Component wird in Form einer Bibliothek verteilt und erlaubt kein direktes Debuggen des Codes. Sie kann jedoch leicht konfiguriert werden, um Debug-Ereignisse zu erzeugen und eine dynamische Sichtbarkeit des Komponentenbetriebs zu ermöglichen.

Folgende Varianten können für die USB:CORE-Softwarekomponente im Fenster Laufzeitumgebung verwalten ausgewählt werden:

  • Debug: Diese Variante unterstützt Ereignisanmerkungen für die und macht es sehr einfach, den internen Betrieb der USB-Host-Komponente während des Anwendungsdebugs zu analysieren. Der unten stehende Event-Recorder-Support erklärt, wie diese Variante konfiguriert und verwendet wird.
  • Release: Diese Variante enthält keinen zusätzlichen Debugging-Code. Verwenden Sie diese Variante, wenn Sie die Anwendung bereitstellen.

Die folgende Abbildung zeigt die Auswahl der Debug-Variante.

usbh_debug_variant.png

Die USB-Host:Debug-Ereignisse beschreiben die Ereignisse, die in der USB-Gerätekomponente implementiert sind.

Ereignisaufzeichnungsunterstützung

ist ein leistungsfähiges Werkzeug, das Einblick in die dynamische Ausführung des Programms bietet.

Die USB-Host-Komponente generiert eine breite Palette von Debug-Ereignissen für den Ereignisrekorder und implementiert die erforderliche Infrastruktur, um mit ihm zu kommunizieren.

Um den Ereignisrekorder zu verwenden, ist es erforderlich, ein Image mit Ereignisgenerierungsunterstützung zu erstellen. Die notwendigen Schritte sind:

  1. : im RTE-Verwaltungsdialog wählen Sie die Debug-Variante für die Softwarekomponente USB:CORE.
  2. : im RTE-Verwaltungsdialog aktivieren Sie die Softwarekomponente Compiler:Event Recorder.
  3. Stellen Sie sicher, dass der Event Recorder initialisiert wird, vorzugsweise durch, wenn CMSIS-RTOS2 RTX v5 verwendet wird, oder alternativ durch Aufruf der Funktion im Anwendungscode.
  4. Ereignisrekorder-Konfiguration: Falls erforderlich, passen Sie die Standard-Ereignisrekorder-Konfiguration an.
  5. Erstellen Sie den Anwendungscode, laden Sie ihn auf die Zielhardware herunter und starten Sie die Debug-Sitzung.

Wenn der USB-Host nun Ereignisinformationen generiert, können diese im .

Ereignisrekorder-Konfiguration

Dieser Abschnitt beschreibt die Konfigurationseinstellungen für den Ereignisrekorder. Die Verwendung erfordert die Debug-Variante der USB:CORE-Softwarekomponente; weitere Informationen finden Sie unter Event Recorder Support.

USB Event Generation Configuration

Wenn Sie die USB:CORE-Debug-Variante auswählen, wird die Datei USB_Debug.c zu Ihrem Projekt hinzugefügt. Verwenden Sie diese Datei, um die Konfiguration der Ereignisgenerierung für USB-Core, Treiber und Geräteklassen separat einzustellen. Die Datei ist für USB Device und Host Komponenten verfügbar.

USBH_USB_Debug_c.png

USB_Debug.c-Datei für die Konfiguration der Ereignisgenerierung

Die folgenden Einstellungen stehen für die Konfiguration der Ereignisgenerierung jedes Moduls zur Verfügung:

  • Aus bedeutet, dass keine Ereignisse vom Modul generiert werden
  • Fehler bedeutet, dass nur Fehlerereignisse vom Modul generiert werden
  • Fehler + API bedeutet, dass Fehler- und API-Aufrufereignisse vom Modul generiert werden
  • Alle bedeutet, dass alle verfügbaren Ereignisse vom Modul generiert werden. Neben Fehler- und API-Aufrufereignissen enthält dies auch Betriebs- und Detailereignisse.

Ereignis-IDs

Die USB-Host-Komponente verwendet die folgenden Ereignis-IDs:

Komponente Ereignis-ID
USBH_Core 0xB0
USBH_Driver 0xB1
USBH_CC 0xB2
USBH_CDC 0xB3
USBH_HID 0xB4
USBH_MSC 0xB5