SILICON LABS USB-Gerätestapel-Bedienungsanleitung

USB-Gerätestapel

Technische Daten

  • USB-Version: 1.5.1
  • Veröffentlichungsdatum: 21. Juli 2025
  • Simplicity SDK-Version: 2025.6.1

Produkt überview

Der USB-Gerätestapel von Silicon Labs bietet vielseitige und
einfach zu verwendende USB-Konnektivität für IoT-Projekte, die
Kommunikation zwischen Netzwerk-Coprozessoren und Hosts.

Merkmale

  • Effizienter USB-Gerätestapel
  • Ideal für IoT-Projekte
  • Unterstützung für die Kommunikation zwischen Netzwerk-Coprozessoren und
    Gastgeber

Anweisungen zur Produktverwendung

USB-Gerätekonfiguration

Konfigurieren Sie die USB-Geräteeinstellungen entsprechend Ihrem Projekt
Anforderungen, siehe Abschnitt „USB-Gerätekonfiguration“
in der Dokumentation.

Programmierhandbuch für USB-Geräte

Folgen Sie dem USB Device Programming Guide, um zu erfahren, wie Sie
programmieren und mit dem USB-Gerät für verschiedene
Anwendungen.

USB-Geräteklassen

Der Abschnitt USB-Geräteklassen bietet einen Überblickview von verschiedenen
Klassen wie CDC ACM, HID, MSC SCSI und Vendor Class. Wählen Sie die
entsprechende Klasse basierend auf der Funktionalität Ihres Geräts.

Fehlerbehebung bei USB-Geräten

Wenn Sie Probleme mit dem USB-Gerät haben, lesen Sie die
Abschnitt zur Fehlerbehebung bei USB-Geräten für Lösungen und Debugging
Tipps.

Microsoft Windows OS USB-Host

Wenn Sie das USB-Gerät mit einem Microsoft Windows OS USB verwenden
Host, stellen Sie sicher, dass Sie die Richtlinien befolgen, die in der
Dokumentation für eine nahtlose Integration.

Häufig gestellte Fragen

F: Was sind einige häufige Beispieleamples von Geräten, die ich bauen kann mit
dieser USB-Stack?

A: Mit dem USB-Stack können Sie Geräte wie
USB-zu-Seriell-Adapter, Mäuse oder Tastaturen, Wechselspeicher
Geräte und benutzerdefinierte Geräte.

F: Gibt es bestimmte Softwareanforderungen für die Verwendung dieses
USB-Gerätestapel?

A: Kompatible Software umfasst Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (Die GNU Compiler Collection),
IAR Embedded Workbench für ARM und IAR EWARM.

Universal Serial Bus USB

Universal Serial Bus USB

USB überview Überview
Versionshinweise USB
Spezifikationen und Funktionen überview
USB-Gerätekonfiguration abgeschlossenview
USB-Geräte-Programmierhandbuch Überview
USB-Geräteklassen überview CDC ACM-Klasse vorbeiview HID-Klasse vorbeiview MSC SCSI-Klasse überview Anbieterklasse vorbeiview
USB-API API-Dokumentation USB-Geräte-API USB-Geräte-ACM-API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB-Geräte-CDC-API a sl_usbd_cdc_subcl ss_driver_t USB-Geräte-Core-API
sl_usbd_device_config_t sl_usbd_setup_req_t
a sl_usbd_cl ss_driver_t USB-Gerät HID-API
sl_usbd_hid_callbacks_t USB-Gerät MSC-API
a sl_usbd_msc_subcl ss_driver_t USB-Gerät MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

1/174

Universal Serial Bus USB
ein sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB-Geräteanbieter-API sl_usbd_vendor_callbacks_t
API-Dokumentation Fehlerbehebung bei USB-Geräten
Überview Microsoft Windows OS USB-Host
Überview

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

2/174

Überview
Überview
USB-Gerät
USB ist eine der erfolgreichsten Kommunikationsschnittstellen in der Geschichte der Computersysteme und der De-facto-Standard für den Anschluss von Computerperipheriegeräten. Der Silicon Labs USB Device Stack ist ein USB-Gerätemodul, das speziell für eingebettete Systeme entwickelt wurde. Es wurde von Grund auf mit der Qualität, Skalierbarkeit und Zuverlässigkeit von Silicon Labs entwickelt und hat einen strengen Validierungsprozess durchlaufen, um die USB 2.0-Spezifikation zu erfüllen. Diese Dokumentation beschreibt die Initialisierung, den Start und die Verwendung des Silicon Labs USB Device Stack. Sie erklärt die verschiedenen Konfigurationswerte und ihre Verwendung. Sie enthält außerdem eine Übersichtview der Technologie, Arten von Konfigurationsmöglichkeiten, Implementierungsverfahren und ExampDateien mit typischer Verwendung für jede verfügbare Klasse.
Damit Sie die USB-Konzepte schnell verstehen, enthält die Dokumentation viele BeispieleampUSB-Dateien mit Basisfunktionen. Dieseamples bietet Ihnen ein Framework, mit dem Sie schnell Geräte erstellen können. Diese ExampDie Dateien umfassen:
USB-Seriell-Adapter (Klasse Kommunikationsgerät) Maus oder Tastatur (Klasse Human Interface Device) Wechselspeichergerät (Klasse Massenspeicher) Benutzerdefiniertes Gerät (Klasse Anbieter)
Das Folgende ist das Überview der Dokumentationsabschnitte:
Spezifikationen und Funktionen USB-Gerätekonfiguration USB-Geräte-Programmierhandbuch USB-Geräteklassen
CDC ACM-Klasse HID-Klasse MSC SCSI-Klasse Herstellerklasse Fehlerbehebung für USB-Geräte Microsoft Windows OS USB-Host

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

3/174

USB
USB

USB Version 1.5.1 21. Juli 2025 – Versionshinweise
Simplicity SDK Version 2025.6.1
Der effiziente USB-Gerätestapel von Silicon Labs bietet vielseitige, benutzerfreundliche USB-Konnektivität, ideal für IoT-Projekte, einschließlich der Kommunikation zwischen Netzwerk-Coprozessoren und Hosts. Klicken Sie hier für frühere Versionen.
Versionszusammenfassung
Hauptfunktionen | API-Änderungen | Fehlerbehebungen | Chip-Aktivierung
Hauptmerkmale
Nur Änderungen der zugrunde liegenden Plattform.
API-Änderungen
Keiner.
Fehlerbehebungen
Keiner.
Chip-Aktivierung
Keiner.
Hauptmerkmale
Neue Funktionen | Verbesserungen | Entfernte Funktionen | Veraltete Funktionen
Neue Features
Keiner.
Verbesserungen
Nur Änderungen der zugrunde liegenden Plattform.
Entfernte Funktionen
Keiner.
Veraltete Funktionen
Keiner.
API-Änderungen
Neue APIs | Geänderte APIs | Entfernte APIs | Veraltete APIs
Neue APIs

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

4/174

USB
Keiner.
Geänderte APIs
Keiner.
Entfernte APIs
Keiner.
Veraltete APIs
Keiner.
Fehlerbehebungen
Keiner.
Chip-Aktivierung
Keiner.
Anwendung ExampÄnderungen
Neue Examples | Modifiziertes Beispielamples | Ex entferntamples | Veraltetes Examples
Neue Examples
Keiner.
Modifiziertes Examples
Keiner.
Ex entferntamples
Keiner.
Veraltetes Examples
Keiner.
Auswirkungen von Release-Änderungen
Auswirkungserklärungen | Migrationsleitfaden
Wirkungserklärungen
Keiner.
Migrationsleitfaden
Keiner.
Bekannte Probleme und Einschränkungen
Keiner.
Verwendung dieser Version

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

5/174

USB

Was ist in der Version enthalten? | Kompatible Software | Installation und Verwendung | Hilfe und Feedback

Was ist in der Veröffentlichung enthalten?

USB-Gerätestapelanwendung, Beispielamples
Kompatible Software

Software
Simplicity SDK Simplicity Studio Simplicity Commander GCC (Die GNU Compiler Collection) IAR Embedded Workbench für ARM IAR EWARM

Kompatible Version oder Variante
2025.6.0 5.11.0 1.18.2 (mit Simplicity Studio bereitgestellt) 12.2.1 (mit Simplicity Studio bereitgestellt) 9.40.1 (mit Simplicity Studio bereitgestellt)

Installation und Verwendung

Um Ihre Entwicklung anzukurbeln, sehen Sie sich unsere an:
Programmierhandbuch für USB-Geräte. API-Dokumentation.
Informationen zur Secure Vault-Integration finden Sie unter Secure Vault.
Um zu review Benachrichtigungen zu Sicherheits- und Softwarehinweisen und Verwalten Ihrer Benachrichtigungseinstellungen:
ò Gehen Sie zu https://community.silabs.com/. ó Melden Sie sich mit Ihren Kontodaten an. ô Klicken Sie auf Ihr Profile Symbol in der oberen rechten Ecke der Seite.
õ Wählen Sie Benachrichtigungen aus dem Dropdown-Menü. ö Gehen Sie im Abschnitt Benachrichtigungen zur Registerkarte Meine Produktbenachrichtigungen, umview historische Sicherheits- und Softwareberatung
Benachrichtigungen
÷ Um Ihre Einstellungen zu verwalten, verwenden Sie die Registerkarte „Benachrichtigungen verwalten“, um anzupassen, welche Produktaktualisierungen und Hinweise Sie
erhalten.
Empfohlene Konfigurationseinstellungen finden Sie hier.
Um mehr über die Software in dieser Version zu erfahren, tauchen Sie in unsere Online-Dokumentation ein.
Hilfe und Feedback

Kontaktieren Sie den Silicon Labs-Support. Um Antworten mit unserem Ask AI-Tool zu erhalten, nutzen Sie das Suchfeld oben auf dieser Seite.

Hinweis: Ask AI ist experimentell.

Holen Sie sich Hilfe von unserer Entwickler-Community.
SDK-Release- und Wartungsrichtlinie
Siehe unsere SDK-Release- und Wartungsrichtlinien.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

6/174

Überview
Überview
Technische Daten
Entspricht der „Universal Serial Bus-Spezifikation Revision 2.0“ Implementiert die „Interface Association Descriptor Engineering Change Notice (ECN)“ Übertragungsarten
Steuerung von Bulk-Interrupts USB-Klassen Communication Device Class (CDC) Abstract Control Model (ACM) Human Interface Device (HID) Mass Storage Class (MSC) Anbieterspezifisches Klassen-Framework
Merkmale
Skalierbar, um nur die erforderlichen Funktionen einzuschließen und so den Speicherbedarf zu minimieren. Unterstützt Vollgeschwindigkeit (12 Mbit/s). Unterstützt zusammengesetzte (Multifunktions-)Geräte. Unterstützt Geräte mit mehreren Konfigurationen. Unterstützt USB-Energiesparfunktionen (Gerät aus- und wieder einschalten). Vollständige Integration der Massenspeicherklasse in Micrium OS. File Systemmodul, das mit der Abstraktionsschicht CMSIS-RTOS2 entwickelt wurde, sodass es mit verschiedenen Betriebssystemen funktioniert. Silicon Labs GSDK wird mit FreeRTOS- und Micrium-OS-Ports geliefert.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

7/174

Überview
Überview

USB-Gerätekonfiguration

In diesem Abschnitt wird die Konfiguration des Silicon Labs USB-Geräts erläutert. Es gibt drei Gruppen von Konfigurationsparametern:
USB-Gerätekernkonfiguration USB-Geräteinformationskonfiguration USB-Gerätehardwarekonfiguration
USB-Gerätekernkonfiguration
Das USB-Gerät von Silicon Labs kann zur Kompilierzeit über eine Reihe von #defines konfiguriert werden, die sich in der Datei sl_usbd_core_config.h befinden. fileUSB-Geräte verwenden nach Möglichkeit #defines, da sie die Skalierung von Code und Datengrößen zur Kompilierzeit basierend auf den aktivierten Funktionen ermöglichen. Dadurch können die Speicherkapazitäten des Nur-Lese-Speichers (ROM) und des Direktzugriffsspeichers (RAM) des Silicon Labs USB-Geräts an die Anforderungen Ihrer Anwendung angepasst werden.
Empfehlung: Starten Sie den Konfigurationsprozess mit den Standardwerten (fett hervorgehoben).
Die folgenden Abschnitte sind basierend auf der Reihenfolge in der Vorlagenkonfiguration organisiert. file, sl_usbd_core_config.h.
Kernkonfigurationsklassenkonfiguration
Kernkonfiguration
Tabelle – Konfigurationskonstanten des USB-Gerätekerns

Konstante Beschreibung

Standardwert

SL_USBD_TA SK_STACK_SIZE

Konfiguriert die Stapelgröße in Bytes der USBD-Kernaufgabe

4096

SL_USBD_TA SK_PRIORIT Y

Konfiguriert die Priorität der USBD-Kernaufgabe. Dies ist eine CMSIS-RTOS2-Priorität.

osPriorityHigh

SL_USBD_A UTO_START _USB_DEVIC E

Wenn aktiviert, wird das USB-Gerät automatisch gestartet, sobald der Kernel gestartet wird und die erste USBD-Kernaufgabe geplant ist. Wenn deaktiviert, muss Ihre Anwendung sl_usbd_core_start_device() aufrufen, wenn sie bereit ist, vom USB-Host erkannt zu werden.

SL_USBD_C Die Gesamtzahl der Konfigurationen, die über sl_usbd_add_configuration() hinzugefügt werden

1

ONFIGURATI-Funktion.

ON_QUANTI

TY

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

8/174

Überview

Konstante
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITÄT
SL_USBD _DESCRI
PTOR_Q
UANTITÄT
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY

Beschreibung: Die Gesamtzahl der USB-Schnittstellen, die für alle Ihre Konfigurationen hinzugefügt werden sollen. Dies hängt stark von der/den verwendeten Klasse(n) ab. Weitere Informationen dazu, wie viele Schnittstellen eine Klasseninstanz benötigt, finden Sie im Abschnitt „Ressourcenbedarf vom Kern“ Ihrer Klasse(n).
Die Gesamtzahl der für alle Konfigurationen hinzuzufügenden alternativen USB-Schnittstellen. Dies hängt stark von der/den verwendeten Klasse(n) ab. Dieser Wert muss immer gleich oder größer als SL_USBD_INTERFACE_QUANTITY sein. Weitere Informationen dazu, wie viele alternative Schnittstellen eine Klasseninstanz benötigt, finden Sie im Abschnitt „Ressourcenbedarf vom Kern“ Ihrer Klasse(n).
Die Gesamtzahl der USB-Schnittstellengruppen, die für alle Ihre Konfigurationen hinzugefügt werden. Dies hängt stark von den verwendeten Klassen ab. Weitere Informationen dazu, wie viele Schnittstellengruppen eine Klasseninstanz benötigt, finden Sie im Abschnitt „Ressourcenbedarf vom Kern“ Ihrer Klasse(n).
Die Gesamtzahl der Endpunktdeskriptoren, die für alle Ihre Konfigurationen hinzugefügt werden. Dies hängt stark von der/den verwendeten Klasse(n) ab. Weitere Informationen darüber, wie viele Endpunktdeskriptoren eine Klasseninstanz benötigt, finden Sie unter „Anzahl der Endpunkte“ im Abschnitt „Ressourcenbedarf vom Kern“ Ihrer Klasse(n). Beachten Sie, dass die Steuerendpunkte hier nicht berücksichtigt werden müssen. Die Gesamtzahl der USB-Strings. Wenn Sie die Menge auf Null setzen, wird die Funktion deaktiviert. Wenn Sie diese Option deaktivieren, speichert das Gerät keine von der Anwendung übergebenen USB-Beschreibungsstrings. Dies bedeutet, dass der Host die Beschreibungsstrings (wie Hersteller und Produktname) nicht abrufen kann. Die Gesamtzahl der geöffneten Endpunkte pro Konfiguration. Ein Gerät benötigt mindestens zwei geöffnete Endpunkte für Steuerübertragungen, Sie müssen jedoch auch die Endpunkte der verwendeten Klasse(n) hinzufügen. Weitere Informationen darüber, wie viele geöffnete Endpunkte eine Klasseninstanz benötigt, finden Sie unter „Anzahl der Endpunkte“ im Abschnitt „Ressourcenbedarf vom Kern“ Ihrer Klasse(n).

Standardwert
10 10
2
20 30 20

Klassenkonfiguration
Klassen verfügen über spezifische Konfigurationen zur Kompilierzeit. Weitere Informationen finden Sie unter USB-Geräteklassen.
Konfiguration der USB-Geräteinformationen

Die Konfiguration sl_usbd_device_config.h file gruppiert #define-s zur Kompilierzeit neu, um grundlegende Informationen zu Ihrem Gerät festzulegen, wie z. B. Hersteller-/Produkt-ID, Gerätezeichenfolgen usw. Die folgende Tabelle beschreibt jede in dieser Konfiguration verfügbare Informationskonfigurationsdefinition file.

Tabelle – Konfigurationsdefinitionen für USB-Geräteinformationen

Konstante
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID

Beschreibung: Ihre Lieferanten-Identifikationsnummer, wie sie vom USB Implementers Forum bereitgestellt wird. Weitere Informationen zum Erhalt einer Lieferanten-ID finden Sie unter http://www.usb.org/developers/vendor/. Ihre Produkt-Identifikationsnummer.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

9/174

Überview

Konstante

Beschreibung

SL_USBD_DEVICE_RELEASE Versionsnummer Ihres Geräts. _NUMBER

SL_USBD_DEVICE_MANUFA Zeichenfolge, die den Hersteller Ihres Geräts beschreibt. Diese Konfiguration wird ignoriert, wenn

CTURER_STRING

Konfiguration SL_USBD_STRING_QUANTITY ist auf 0 gesetzt.

SL_USBD_DEVICE_PRODUC String, der Ihr Produkt beschreibt. Diese Konfiguration wird ignoriert, wenn die Konfiguration

T_STRING

SL_USBD_STRING_QUANTITY ist auf 0 gesetzt.

SL_USBD_DEVICE_SERIAL_N Zeichenfolge mit der Seriennummer Ihres Geräts. Diese Konfiguration wird ignoriert, wenn

UMBER_STRING

Konfiguration SL_USBD_STRING_QUANTITY ist auf 0 gesetzt.

SL_USBD_DEVICE_LANGUA Identifikationsnummer der Sprache der Zeichenfolgen Ihres Geräts. Mögliche Werte sind:
GE_ID

– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA

– SL_USBD_LANG_ID_CHINESE_TAIWAN

– SL_USBD_LANG_ID_ENGLISH_US

– SL_USBD_LANG_ID_ENGLISH_UK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_GERMAN

– SL_USBD_LANG_ID_GREEK

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGUESE

– SL_USBD_LANG_ID_SANSKRIT

Diese Konfiguration wird ignoriert, wenn die Konfiguration SL_USBD_STRING_QUANTITY auf 0 gesetzt ist.

Hardwarekonfiguration des USB-Geräts

Abhängig vom verwendeten Silicon Labs-Gerät müssen Sie möglicherweise den GPIO-Pin und -Port für das USB-VBUS-Sense-Signal konfigurieren. Die Konfigurationsdefinitionen befinden sich im Header sl_usbd_hardware_config.h file.

Konstante
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Beschreibung
GPIO-Port für das USB-VBUS-Sense-Signal auf Ihrer Platine. GPIO-Pin für das USB-VBUS-Sense-Signal auf Ihrer Platine.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

10/174

Überview
Überview
Programmierhandbuch für USB-Geräte
In diesem Abschnitt wird die Verwendung des USB-Gerätemoduls erläutert.
Ersteinrichtung des USB-Gerätemoduls
In diesem Abschnitt werden die grundlegenden Schritte zum Initialisieren des USB-Gerätemoduls sowie zum Hinzufügen, Vorbereiten und Starten eines Geräts beschrieben. Initialisieren des USB-Gerätemoduls Initialisieren des USB-Gerätekerns Initialisieren der aCl ss(s) Hinzufügen Ihres USB-Geräts Erstellen Ihres USB-Geräts Hinzufügen von Konfiguration(en) Hinzufügen von USB-Funktionen Starten Ihres USB-Geräts
Event-Hook-Funktionen
Initialisieren des USB-Gerätemoduls
Initialisieren des USB-Gerätekerns
a US a Beginnen Sie mit der Initialisierung des B-Gerätemodulkerns, indem Sie die Funktion sl_usbd_core_init() aufrufen. T aa Das folgende Beispiel zeigt das Aufrufen von sl_usbd_core_init().
Example – Aufruf von sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
Initialisieren der Klasse(n)
Nachdem der Kern des USB-Gerätemoduls initialisiert wurde, müssen Sie jede Klasse initialisieren, die Sie verwenden möchten. Weitere Informationen finden Sie im Abschnitt „Programmierhandbuch“ Ihrer ACL(s).
Erstellen Ihres USB-Geräts
Konfiguration(en) hinzufügen
Nachdem Sie Ihr Gerät erfolgreich initialisiert haben, können Sie die USB-Funktionen hinzufügen, beginnend mit einer neuen Konfiguration. Ein Gerät muss mindestens eine Konfiguration haben. Um eine oder mehrere Konfigurationen hinzuzufügen, rufen Sie die Funktion sl_usbd_core_ dd_configuration() auf. Diese Funktion muss für jede hinzuzufügende Konfiguration aufgerufen werden. Die ExampDie folgende Abbildung zeigt, wie Sie eine Vollgeschwindigkeit hinzufügen.
Example – Konfiguration(en) zu Ihrem Gerät hinzufügen

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

11/174

Überview

sl_status_t status; uint8_t config_nbr_fs;

/* Dem Gerät wird eine Vollgeschwindigkeitskonfiguration hinzugefügt. */

status = sl_usbd_core_add_configuration(0,

/* Keine besonderen Attribute für die Konfiguration. */

100u,

/* Maximaler Stromverbrauch: 100 mA.

*/

SL_USBD_DEVICE_SPEED_FULL,

/* Vollgeschwindigkeitskonfiguration.

*/

„Konfiguration hinzufügen Exampdie Full-Speed-Konfiguration“,

&config_nbr_fs);

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

USB-Funktion(en) hinzufügen
Nachdem Sie Ihrem Gerät mindestens eine Konfiguration erfolgreich hinzugefügt haben, können Sie die Schnittstellen und Endpunkte hinzufügen. Jede USB-Klasse hat ihre eigenen Anforderungen hinsichtlich Schnittstellen- und Endpunkttyp, Anzahl und weiteren Parametern. Silicon Labs USB Device fügt Schnittstellen und Endpunkte in den angebotenen Klassen hinzu.
Sie können in Ihrer Anwendung eine USB-Klasse instanziieren und einer Konfiguration hinzufügen. Weitere Informationen zum Konzept der USB-Geräteklasseninstanzen finden Sie unter USB-Geräteklassen. Beachten Sie, dass Sie viele verschiedene Klasseninstanzen instanziieren und einer Konfiguration hinzufügen können, um ein Multifunktionsgerät (Verbundgerät) zu erstellen.
Der ExampDie folgende Datei zeigt, wie Sie eine Klasseninstanz erstellen und sie einer Konfiguration hinzufügen.
Example – Hinzufügen einer Klasseninstanz zu Ihrem Gerät

sl_status_t Status; uint8_t Klassennummer;
/* Erstellen Sie eine Instanz der Klasse, die Sie verwenden möchten.*/ /* Beachten Sie, dass diese Funktion je nach Klasse mehr Argumente haben kann. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }
/* Fügen Sie die Klasseninstanz zur Full-Speed-Konfiguration hinzu. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Von sl_usbd_ zurückgegebene Klassennummer _Instanz_erstellen.*/
config_nbr_fs); /* Von sl_usbd_core_add_configuration() zurückgegebene Konfigurationsnummer. */ if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }
Starten Ihres USB-Geräts
Standardmäßig wird das Gerät automatisch von der USB-Gerätekernaufgabe gestartet, nachdem die Geräteinitialisierung abgeschlossen und der Kernel gestartet wurde. Um zu steuern, wann das Gerät gestartet und für den USB-Host sichtbar wird, deaktivieren Sie die Autostart-Funktion mit der Konfigurationsdefinition SL_USBD_AUTO_START_USB_DEVICE. Wenn diese Funktion deaktiviert ist, können Sie Ihr Gerät nach dem Erstellen/Vorbereiten starten und für den USB-Host sichtbar machen, indem Sie die Funktion sl_usbd_core_start_device() aufrufen.
Der ExampDie folgende Datei zeigt, wie Sie Ihr Gerät mit der Funktion sl_usbd_core_start_device() starten.
Example – Starten Ihres Geräts

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

12/174

Überview

sl_status_t Status;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }

Event-Hook-Funktionen
Das USB-Geräte-Kernmodul bietet zwei schwache Hook-Funktionen, die Sie in Ihrer Anwendung neu definieren können. Ihr Zweck besteht darin, zu benachrichtigen, wenn Bus- und Konfigurationsereignisse auftreten.
Tabelle – USB-Event-Hook-Funktionen

Ereignis

Beschreibung

Bus

Wird aufgerufen, wenn ein USB-Bus-Ereignis auftritt

Konfiguration Wird aufgerufen, wenn ein USB-Konfigurationsereignis auftritt

Funktionssignatur
void sl_usbd_on_bus_event(sl_usbd_bus_event_t Ereignis); void sl_usbd_on_config_event(sl_usbd_config_event_t Ereignis, uint8_t config_nbr);

Example – Event-Hook-Funktionen

void sl_usbd_on_bus_event(sl_usbd_bus_event_t Ereignis) { Schalter (Ereignis) { Fall SL_USBD_EVENT_BUS_CONNECT:
// wird aufgerufen, wenn ein USB-Kabel in einen Host-Controller eingesteckt wird. Unterbrechung;
Fall SL_USBD_EVENT_BUS_DISCONNECT: // wird aufgerufen, wenn das USB-Kabel von einem Host-Controller-Break entfernt wird;
case SL_USBD_EVENT_BUS_RESET: // wird aufgerufen, wenn der Host den Reset-Befehl „break“ sendet;
case SL_USBD_EVENT_BUS_SUSPEND: // wird aufgerufen, wenn der Host den Suspend-Befehl „break“ sendet;
case SL_USBD_EVENT_BUS_RESUME: // wird aufgerufen, wenn der Host den Weckbefehl „break“ sendet;
Standard: Unterbrechung; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t Ereignis, uint8_t config_nbr) { Schalter (Ereignis) { Fall SL_USBD_EVENT_CONFIG_SET:
// wird aufgerufen, wenn der Host einen Konfigurations-Break festlegt;
case SL_USBD_EVENT_CONFIG_UNSET: // wird aufgerufen, wenn eine Konfiguration aufgehoben wird. break;
Standard: Unterbrechung; } }

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

13/174

Überview

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

14/174

Überview
Überview

USB-Geräteklassen

Die im Silicon Labs USB Device verfügbaren USB-Klassen weisen einige gemeinsame Merkmale auf. In diesem Abschnitt werden diese Merkmale und ihre Wechselwirkung mit der Kernschicht erläutert.
Weitere Informationen zu einer bestimmten Klasse finden Sie hier:
CDC ACM-Klasse HID-Klasse MSC SCSI-Klasse Anbieterklasse
Informationen zu Klasseninstanzen
Die im USB-Gerät verfügbaren USB-Klassen implementieren das Konzept von Klasseninstanzen. Eine Klasseninstanz repräsentiert eine Funktion innerhalb eines Geräts. Die Funktion kann durch eine Schnittstelle oder eine Gruppe von Schnittstellen beschrieben werden und gehört zu einer bestimmten Klasse.
Jede USB-Klassenimplementierung hat einige gemeinsame Konfigurationen und Funktionen, basierend auf dem Konzept der Klasseninstanz. Die gemeinsamen Konfigurationen und Funktionen sind in der folgenden Tabelle dargestellt. In der Spaltenüberschrift „Konstanten oder Funktion“ kann der Platzhalter XXXX durch den Namen der Klasse ersetzt werden: CDC, HID, MSC, CDC_ACM oder VENDOR (Anbieter für Funktionsnamen).
Tabelle – Konstanten und Funktionen im Zusammenhang mit dem Konzept mehrerer Klasseninstanzen

Konstante oder Funktion
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_create _insta nce ()
sl_usbd_XXXX_add_to_configuration()

Beschreibung
Konfiguriert die maximale Anzahl von Klasseninstanzen.
Konfiguriert die maximale Anzahl von Konfigurationen. Während der Klasseninitialisierung wird eine erstellte Klasseninstanz zu einer oder mehreren Konfigurationen hinzugefügt. Erstellt eine neue Klasseninstanz.
Fügt der angegebenen Gerätekonfiguration eine vorhandene Klasseninstanz hinzu.

In Bezug auf die Codeimplementierung deklariert die Klasse eine lokale globale Variable, die eine Klassenkontrollstruktur enthält. Diese Klassenkontrollstruktur ist einer Klasseninstanz zugeordnet und enthält spezifische Informationen zur Verwaltung der Klasseninstanz.
Die folgenden Abbildungen zeigen verschiedene Fallbeispiele. Jede Abbildung enthält einen Code, z. B.ampDatei, die dem jeweiligen Fall entspricht.
Abbildung – Mehrere Klasseninstanzen – FS-Gerät (1 Konfiguration mit 1 Schnittstelle) stellt ein typisches USB-Gerät dar. Das Gerät ist Full-Speed ​​(FS) und enthält eine einzige Konfiguration. Die Funktion des Geräts wird durch eine Schnittstelle beschrieben, die aus zwei Endpunkten für die Datenkommunikation besteht. Es wird eine Klasseninstanz erstellt, mit der Sie die gesamte Schnittstelle mit dem zugehörigen Endpunkt verwalten können.
Abbildung – Mehrere Klasseninstanzen – FS-Gerät 1 Konfiguration mit 1 Schnittstelle)

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

15/174

Überview

Der Code, der der Abbildung – Mehrere Klasseninstanzen – FS-Gerät (1 Konfiguration mit 1 Schnittstelle) entspricht, wird im Beispiel angezeigt.ampsiehe unten.
Example – Mehrere Klasseninstanzen – FS-Gerät (1 Konfiguration mit 1 Schnittstelle)

sl_status_t Status; uint8_t Klasse_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Klassenaktivierungsereignis verarbeiten. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Klassen-Deaktivierungsereignis verarbeiten. */ }

sl_usbd_XXXX_callbacks_t class_callbacks = {

(1)

.enable = app_usbd_XXXX_enable,

.disable = app_usbd_XXXX_disable

};

status = sl_usbd_XXXX_init();

(2)

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

Status = sl_usbd_XXXX_create_instance(&class_callbacks,

(3)

&class_0);

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

Status = sl_usbd_XXXX_zur_Konfiguration hinzufügen(Klasse_0, Konfiguration_0);

(4)

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

(1) Jede Klasse bietet eine Reihe von Callback-Funktionen für Geräteverbindungs-/Trennungsereignisse und für klassenspezifische Ereignisse. Das Callback-Strukturobjekt wird beim Erstellen der Klasseninstanz mit sl_usbd_XXXX_create_instance() als Argument übergeben.
Funktion.
(1) Initialisieren Sie die Klasse. Alle internen Variablen, Strukturen und Klassenports werden initialisiert. Beachten Sie, dass die Init()-Funktion in einigen Klassen andere Argumente annehmen kann.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

16/174

Überview
(2) Erstellen Sie die Klasseninstanz class_0. Die Funktion sl_usbd_XXXX_create_instance() weist eine mit class_0 verknüpfte Klassenkontrollstruktur zu. Abhängig von der Klasse kann sl_usbd_XXXX_create_instance() neben der Klassennummer zusätzliche Parameter haben, die klassenspezifische Informationen darstellen, die in der Klassenkontrollstruktur gespeichert sind. aaa (3) Fügen Sie die Klasseninstanz class_0 zur angegebenen Konfigurationsnummer config_0 hinzu. sl_usbd_XXXX_add_to_configuration() erstellt die Schnittstelle 0 und die zugehörigen IN- und OUT-Endpunkte. Infolgedessen umfasst die Klasseninstanz die Schnittstelle 0 und ihre Endpunkte. Jegliche Kommunikation über die Schnittstelle 0 verwendet die Klasseninstanznummer class_0. Abbildung – Mehrere Klasseninstanzen – FS-Gerät (2 Konfigurationen und mehrere Schnittstellen) stellt ein komplexeres Beispiel darampEin Full-Speed-Gerät besteht aus zwei Konfigurationen. Das Gerät verfügt über zwei Funktionen, die zur gleichen Klasse gehören, aber jede Funktion wird durch zwei Schnittstellen beschrieben und verfügt über ein Paar bidirektionaler Endpunkte. In diesem Beispielample, es werden zwei Klasseninstanzen erstellt. Jede Klasseninstanz ist mit einer Gruppe von Schnittstellen verknüpft, im Gegensatz zu Abbildung – Mehrere Klasseninstanzen – FS-Gerät (1 Konfiguration mit 1 Schnittstelle) und Abbildung – Mehrere Klasseninstanzen – FS-Gerät (2 Konfigurationen und mehrere Schnittstellen), wo die Klasseninstanz mit einer einzelnen Schnittstelle verknüpft war.
Abbildung – Mehrere Klasseninstanzen – FS-Gerät 2-Konfigurationen und mehrere Schnittstellen)

Der Code, der der Abbildung – Mehrere Klasseninstanzen – FS-Gerät (2 Konfigurationen und mehrere Schnittstellen) entspricht, wird im Beispiel angezeigt.ample unten. Die Fehlerbehandlung wird der Übersichtlichkeit halber weggelassen.
Example – Mehrere Klasseninstanzen – FS-Gerät 2 Konfigurationen und mehrere Schnittstellen)

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

17/174

Überview

sl_status_t Status; uint8_t Klasse_0; uint8_t Klasse_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
Status = sl_usbd_XXXX_zur_Konfiguration hinzufügen(Klasse_0, cfg_0); Status = sl_usbd_XXXX_zur_Konfiguration hinzufügen(Klasse_1, cfg_0);
Status = sl_usbd_XXXX_zur_Konfiguration hinzufügen(Klasse_0, cfg_1); Status = sl_usbd_XXXX_zur_Konfiguration hinzufügen(Klasse_1, cfg_1);

(1)
(2) (3)
(4) (5)
(6) (6)

(1) Initialisieren Sie die Klasse. Alle internen Variablen, Strukturen und Klassenports werden initialisiert.
(2) Erstellen Sie die Klasseninstanz class_0. Die Funktion sl_usbd_XXXX_create_instance() weist eine mit class_0 verknüpfte Klassenkontrollstruktur zu.
(3) Erstellen Sie die Klasseninstanz class_1. Die Funktion sl_usbd_XXXX_create_instance() weist eine weitere Klassenkontrollstruktur zu, die mit class_1 verknüpft ist.
(4) Fügen Sie die Klasseninstanz class_0 zur Konfiguration cfg_0 hinzu. sl_usbd_XXXX_add_to_configuration() erstellt die Schnittstellen 0, 1, alternative Schnittstellen und die zugehörigen IN- und OUT-Endpunkte. Die Klasseninstanznummer class_0 wird für die Datenkommunikation über Schnittstelle 0 oder 1 verwendet.
(5) Fügen Sie die Klasseninstanz class_1 zur Konfiguration cfg_0 hinzu. sl_usbd_XXXX_add_to_configuration() erstellt die Schnittstellen 2 und 3 sowie die zugehörigen IN- und OUT-Endpunkte. Die Klasseninstanznummer class_1 wird für die Datenkommunikation über Schnittstelle 2 oder Schnittstelle 3 verwendet.
(6) Fügen Sie dieselben Klasseninstanzen, class_0 und class_1, zur anderen Konfiguration, cfg_1, hinzu.
Jede Klasse definiert eine Struktur vom Typ sl_usbd_XXXX_callbacks_t. Ihr Zweck besteht darin, jeder Klasse einen Satz von Rückruffunktionen zuzuweisen, die bei Auftreten eines Ereignisses aufgerufen werden. Jede Klasse verfügt über zwei Rückruffunktionen. Diese sind in der folgenden Tabelle dargestellt.
Tabelle – Allgemeine Klassen-Rückruffunktionen

Felder Beschreibung .enable Wird aufgerufen, wenn die USB-Klasseninstanz erfolgreich aktiviert wurde. .disable Wird aufgerufen, wenn die USB-Klasseninstanz deaktiviert wurde.

Funktionssignatur void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

18/174

Überview
Überview
USB-Gerät CDC ACM-Klasse
USB-Gerät CDC-Basisklasse überview Ressourcenbedarf der CDC-ACM-Klasse des USB-Geräts vom Kern der CDC-ACM-Unterklasse überview Konfiguration der CDC-ACM-Klasse für USB-Geräte Programmierhandbuch für die CDC-ACM-Klasse für USB-Geräte
In diesem Abschnitt werden die Klasse Communications Device Class (CDC) und die zugehörige CDC-Unterklasse beschrieben, die vom USB-Gerätestapel von Silicon Labs unterstützt werden. Silicon Labs USB-Device unterstützt derzeit die Unterklasse Abstract Control Model (ACM), die häufig für die serielle Emulation verwendet wird.
CDC umfasst verschiedene Telekommunikations- und Netzwerkgeräte. Telekommunikationsgeräte umfassen analoge Modems, analoge und digitale Telefone, ISDN-Terminaladapter usw. Zum BeispielampZu den Netzwerkgeräten gehören ADSL- und Kabelmodems, Ethernet-Adapter und Hubs. CDC definiert ein Framework zur Kapselung bestehender Kommunikationsstandards wie V.250 (für Modems über das Telefonnetz) und Ethernet (für LAN-Geräte) über eine USB-Verbindung. Ein Kommunikationsgerät ist für die Geräteverwaltung, die Anrufverwaltung (falls erforderlich) und die Datenübertragung zuständig.
CDC definiert sieben Hauptgruppen von Geräten. Jede Gruppe gehört zu einem Kommunikationsmodell, das mehrere Unterklassen umfassen kann. Jede Gerätegruppe verfügt neben der CDC-Basisklasse über ein eigenes Spezifikationsdokument. Die sieben Gruppen sind:
Öffentliches Telefonnetz (PSTN), Geräte wie Sprachbandmodems, Telefone und serielle Emulationsgeräte. ISDN-Geräte (Integrated Services Digital Network), einschließlich Terminaladapter und Telefone. ECM-Geräte (Ethernet Control Model), einschließlich Geräte, die die IEEE 802-Familie unterstützen (z. B. Kabel- und ADSL-Modems, WLAN-Adapter). ATM-Geräte (Asynchronous Transfer Mode), einschließlich ADSL-Modems und andere an ATM-Netzwerke angeschlossene Geräte (Workstations, Router, LAN-Switches). WMC-Geräte (Wireless Mobile Communications), einschließlich Multifunktionshandgeräte zur Verwaltung von Sprach- und Datenkommunikation. EEM-Geräte (Ethernet Emulation Model), die Ethernet-Frame-Daten austauschen. NCM-Geräte (Network Control Model), einschließlich Hochgeschwindigkeitsnetzwerkgeräte (High Speed ​​Packet Access Modems, Line Terminal Equipment)
Das CDC und die zugehörige Unterklassenimplementierung entsprechen den folgenden Spezifikationen:
Universal Serial Bus, Klassendefinitionen für Kommunikationsgeräte, Revision 1.2, 3. November 2010. Universal Serial Bus, Kommunikation, Unterklasse für PSTN-Geräte, Revision 1.2, 9. Februar 2007.
USB-Gerät CDC-Basisklasse überview
Ein CDC-Gerät besteht aus den folgenden Schnittstellen zur Implementierung der Kommunikationsfähigkeit:
Communications Class Interface (CCI) ist für das Gerätemanagement und optional auch für das Anrufmanagement zuständig. Das
Die Geräteverwaltung ermöglicht die allgemeine Konfiguration und Steuerung des Geräts sowie die Benachrichtigung des Hosts über Ereignisse. Die Anrufverwaltung ermöglicht den Aufbau und die Beendigung von Anrufen. Die Anrufverwaltung kann über eine DCI gemultiplext werden. Eine CCI ist für alle CDC-Geräte obligatorisch. Sie identifiziert die CDC-Funktion durch Angabe des vom CDC-Gerät unterstützten Kommunikationsmodells. Die auf die CCI folgende(n) Schnittstelle(n) kann/können jede definierte USB-Schnittstelle sein, z. B. Audio oder eine herstellerspezifische Schnittstelle. Die herstellerspezifische Schnittstelle wird speziell durch eine DCI dargestellt.
Data Class Interface (DCI) ist für die Datenübertragung zuständig. Die gesendeten und/oder empfangenen Daten folgen keinem bestimmten
Format. Bei den Daten kann es sich um Rohdaten einer Kommunikationsleitung, Daten in einem proprietären Format usw. handeln. Alle DCIs, die dem CCI folgen, können als untergeordnete Schnittstellen betrachtet werden.
Ein CDC-Gerät muss mindestens eine CCI und keine oder mehrere DCIs haben. Eine CCI und eine untergeordnete DCI stellen zusammen eine Funktion für den Host bereit. Diese Funktion wird auch als Funktion bezeichnet. In einem CDC-Verbundgerät können mehrere

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

19/174

Überview
Funktionen. Daher würde das Gerät aus mehreren Sätzen von CCI und DCI(s) bestehen, wie in der Abbildung – CDC-Verbundgerät dargestellt.
Abbildung – CDC-Verbundgerät

Ein CDC-Gerät verwendet wahrscheinlich die folgende Kombination von Endpunkten:
Ein Paar von Steuer-IN- und OUT-Endpunkten, die als Standardendpunkt bezeichnet werden. Ein optionaler Bulk- oder Interrupt-IN-Endpunkt. Ein Paar von Bulk- oder isochronen IN- und OUT-Endpunkten. Beachten Sie, dass der USB-Gerätestapel von Silicon Labs derzeit keine isochronen Endpunkte unterstützt.
Die folgende Tabelle zeigt die Verwendung der verschiedenen Endpunkte und über welche Schnittstelle des CDC sie verwendet werden.
Tabelle – CDC-Endpunktnutzung

Endpunkt
Steuern Sie IN
Steuerung AUS
Interrupt oder Bulk IN Bulk oder isochron IN Bulk oder isochron
AUS

Richtung
Gerät-zu-Host
Host-to-Device
Gerät-zu-Host
Gerät-zu-Host
Host-to-Device

Schnittstellennutzung

CCI

Standardanfragen für Enumeration, klassenspezifische Anfragen, Geräte

Verwaltung und optional Anrufverwaltung.

CCI

Standardanfragen für Enumeration, klassenspezifische Anfragen, Geräte

Verwaltung und optional Anrufverwaltung.

CCI

Ereignisbenachrichtigungen, wie z. B. Klingelerkennung, Status der seriellen Leitung, Netzwerkstatus.

DCI

Kommunikation von Rohdaten oder formatierten Daten.

DCI

Kommunikation von Rohdaten oder formatierten Daten.

Die meisten Kommunikationsgeräte verwenden einen Interrupt-Endpunkt, um den Host über Ereignisse zu informieren. Isochrone Endpunkte sollten nicht für die Datenübertragung verwendet werden, wenn ein proprietäres Protokoll bei USB-Protokollfehlern auf eine erneute Datenübertragung angewiesen ist. Bei der isochronen Kommunikation kann es zwangsläufig zu Datenverlust kommen, da es keine Wiederholungsmechanismen gibt.
Die sieben wichtigsten Kommunikationsmodelle umfassen mehrere Unterklassen. Eine Unterklasse beschreibt, wie das Gerät die CCI zur Geräteverwaltung und Anrufverwaltung nutzen soll. Die folgende Tabelle zeigt alle möglichen Unterklassen und die zugehörigen Kommunikationsmodelle.
Tabelle – CDC-Unterklassen

Unterklasse
Direktes Liniensteuerungsmodell Abstraktes Steuerungsmodell

Kommunikationsmodell
Öffentliches Telefonnetz
Öffentliches Telefonnetz

ExampListe der Geräte, die diese Unterklasse verwenden
Modemgeräte, die direkt vom USB-Host gesteuert werden
Serielle Emulationsgeräte, Modemgeräte, die über einen seriellen Befehlssatz gesteuert werden

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

20/174

Überview

Unterklasse

Kommunikationsmodell

ExampListe der Geräte, die diese Unterklasse verwenden

Telefonsteuerungsmodell

Öffentliches Telefonnetz

Mehrkanal-Steuerungs-ISDN-Modell

CAPI-Steuerungsmodell ISDN

Ethernet-Netzwerk-ECM-Steuerungsmodell

ATM-Netzwerk

Geldautomat

Kontrollmodell

Modell zur Steuerung eines drahtlosen Handgeräts

WMC

Geräteverwaltung WMC

Mobiles Direktleitungsmodell

WMC

OBEX

WMC

Ethernet-Emulation EEM-Modell

Netzwerksteuerungsmodell

NCM

Sprachtelefoniegeräte
Basisanschlussadapter, Primäranschlussadapter, Telefone
Basisanschlussadapter, Primäranschlussadapter, Telefon-DOC-SIS-Kabelmodems, ADSL-Modems mit Unterstützung für PPPoE-Emulation, Wi-Fi-Adapter (IEEE 802.11-Familie), IEEE 802.3-Adapter, ADSL-Modems
Mobile Endgeräte, die eine Verbindung zu drahtlosen Geräten herstellen
Mobile Endgeräte zum Anschluss an drahtlose Geräte Mobile Endgeräte zum Anschluss an drahtlose Geräte
Mobile Endgeräte, die mit drahtlosen Geräten verbunden werden. Geräte, die Ethernet-Frames als nächste Transportschicht verwenden. Nicht für Routing- und Internetverbindungsgeräte vorgesehen. IEEE 802.3-Adapter, die Hochgeschwindigkeitsdatenbandbreite im Netzwerk übertragen.

Ressourcenbedarf der CDC-ACM-Klasse des USB-Geräts vom Kern

Jedes Mal, wenn Sie einer USB-Konfiguration über einen Aufruf der Funktion sl_usbd_cdc_acm_add_to_configuration() eine CDC ACM-Klasseninstanz hinzufügen, werden die folgenden Ressourcen vom Kern zugewiesen.

Ressource
Schnittstellen Alternative Schnittstellen Endpunkte Schnittstellengruppen

Menge
2 2 3 1

Beachten Sie, dass diese Zahlen pro Konfiguration gelten. Berücksichtigen Sie beim Einrichten Ihrer Konfigurationswerte SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY und SL_USBD_DESCRIPTOR_QUANTITY, zu wie vielen Konfigurationen die Klasse hinzugefügt wird. Für den Konfigurationswert SL_USBD_OPEN_ENDPOINTS_QUANTITY müssen Sie nur die Anzahl der benötigten Endpunkte für eine Klasseninstanz berücksichtigen, da Endpunkte nur geöffnet werden, wenn eine Konfiguration vom Host festgelegt wird.
USB-Gerät CDC ACM-Unterklasse überview

Die CDC-Basisklasse besteht aus einer Communications Class Interface (CCI) und einer Data Class Interface (DCI), die ausführlich in USB Device CDC Base Class Over besprochen werden.view Dieser Abschnitt beschreibt eine CCI vom Typ ACM. Sie besteht aus einem Standardendpunkt für das Verwaltungselement und einem Interrupt-Endpunkt für das Benachrichtigungselement. Ein Paar Bulk-Endpunkte wird verwendet, um nicht spezifizierte Daten über die DCI zu übertragen.
Die ACM-Unterklasse wird von zwei Arten von Kommunikationsgeräten verwendet:
Geräte, die AT-Befehle unterstützen (z. B. Voiceband-Modems). Serielle Emulationsgeräte, die auch als virtuelle COM-Port-Geräte bezeichnet werden.
Für die ACM-Unterklasse gibt es mehrere unterklassenspezifische Anforderungen. Diese ermöglichen die Steuerung und Konfiguration des Geräts. Die vollständige Liste und Beschreibung aller ACM-Anforderungen finden Sie in der Spezifikation

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

21/174

Überview Unterklasse für PSTN-Geräte, Revision 1.2, 9. Februar 2007=, Abschnitt 6.2.2.
Aus dieser Liste unterstützt die ACM-Unterklasse von Silicon Labs9 Folgendes:
Tabelle – Von Silicon Labs unterstützte ACM-Anfragen

Unterklasse Anforderungsbeschreibung

SetCommFeature GetCommFeature ClearCommFeature

Der Host sendet diese Anfrage, um die Einstellungen für eine bestimmte Kommunikationsfunktion zu steuern. Wird nicht für die serielle Emulation verwendet.
Der Host sendet diese Anfrage, um die aktuellen Einstellungen für eine bestimmte Kommunikationsfunktion abzurufen. Wird nicht für die serielle Emulation verwendet.
Der Host sendet diese Anforderung, um die Einstellungen für eine bestimmte Kommunikationsfunktion zu löschen. Wird nicht für die serielle Emulation verwendet.

Zeilencodierung festlegen

Der Host sendet diese Anfrage, um die ACM-Geräteeinstellungen zu konfigurieren: Baudrate, Anzahl der Stoppbits, Paritätstyp und Anzahl der Datenbits. Bei einer seriellen Emulation wird diese Anfrage automatisch von einem seriellen Terminal gesendet, wenn Sie die seriellen Einstellungen für einen offenen virtuellen COM-Port konfigurieren.

GetLineCoding

Der Host sendet diese Anfrage, um die aktuellen ACM-Einstellungen (Baudrate, Stoppbits, Parität, Datenbits) abzurufen. Für eine serielle Emulation senden serielle Terminals diese Anfrage automatisch beim Öffnen des virtuellen COM-Ports.

SetControlLineState: Der Host sendet diese Anfrage, um den Träger für Halbduplexmodems zu steuern und anzuzeigen, ob das Datenendgerät (DTE) bereit ist oder nicht. Bei der seriellen Emulation ist das DTE ein serielles Terminal. Bei bestimmten seriellen Terminals können Sie diese Anfrage mit den festgelegten Steuerelementen senden.

SetBreak

Der Host sendet diese Anforderung, um einen RS-232-Break zu generieren. Für eine serielle Emulation ermöglichen bestimmte serielle Terminals das Senden dieser Anforderung.

Die ACM-Unterklasse von Silicon Labs9 verwendet den Interrupt-IN-Endpunkt, um den Host über den aktuellen Status der seriellen Leitung zu informieren. Die serielle
Der Zeilenstatus ist eine Bitmap, die den Host über Folgendes informiert:

Daten werden wegen Überlauf verworfen Paritätsfehler Framing-Fehler Zustand der Ringsignalerkennung Zustand des Unterbrechungserkennungsmechanismus Zustand des Übertragungsträgers Zustand der Empfängerträgererkennung

Die Implementierung der ACM-Unterklasse von Silicon Labs9 entspricht der folgenden Spezifikation:
Universal Serial Bus, Kommunikation, Unterklasse für PSTN-Geräte, Revision 1.2, 9. Februar 2007.
CDC-ACM-Klassenkonfiguration für USB-Geräte

In diesem Abschnitt wird die Konfiguration der CDC ACM-Klasse (Communication Device Class, Abstract Control Model) erläutert. Es gibt zwei Gruppen von Konfigurationsparametern:
Anwendungsspezifische Konfigurationen der USB-Geräte-CDC-ACM-Klasse Instanzkonfigurationen der USB-Geräte-CDC-ACM-Klasse
USB-Gerät CDC ACM-Klasse Anwendungsspezifische Konfigurationen

CDC-Basisklasse ACM-Unterklasse
CDC-Basisklasse

Um das USB-Geräte-CDC-Klassenmodul von Silicon Labs zu verwenden, müssen Sie zunächst die CDC-Kompilierzeitkonfiguration #define-s entsprechend Ihren Anwendungsanforderungen anpassen. Sie sind im Header sl_usbd_core_config.h zusammengefasst. file im Abschnitt CDC. Ihr Zweck besteht darin, das USB-Gerätemodul darüber zu informieren, wie viele USB-CDC-Objekte zugewiesen werden sollen.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

22/174

Überview

Die folgende Tabelle beschreibt jedes in dieser Konfigurationsstruktur verfügbare Konfigurationsfeld.
Tabelle – CDC-Konfigurationsdefinitionen für USB-Geräte

Konfigurationsname
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

Beschreibung
Anzahl der Klasseninstanzen, die Sie über einen Aufruf der Funktion zuweisen
sl_usbd_cdc_acm_create_instance() .
Anzahl der Konfigurationen. ACM-Klasseninstanzen können zu einer oder mehreren AAAA-Konfigurationen hinzugefügt werden, siehe sl_usbd_cdc_acm_add_to_configuration().
Gesamtzahl der Datenschnittstellen (DCI) für alle CDC-Funktionen. Jede CDC ACM-Funktion, die der Funktion sl_usbd_cdc_acm_create_instance() hinzugefügt wurde, fügt die Datenschnittstelle hinzu.

Standardwert
2
1
2

ACM-Unterklasse
Die ACM-Unterklasse verfügt über eine in der folgenden Tabelle dargestellte Konfiguration zur Kompilierzeit.
Tabelle – USB-Gerät CDC ACM-Konfiguration definieren

Konfigurationsname
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY

Beschreibung
Konfiguriert die Anzahl der Unterklasseninstanzen, die Sie über einen Aufruf der
Funktion sl_usbd_cdc_acm_create_instance() .

Standardwert
2

Konfigurationen der CDC-ACM-Klasseninstanz für USB-Geräte

Dieser Abschnitt definiert die Konfigurationen im Zusammenhang mit den CDC ACM-Seriellenklasseninstanzen. Klasseninstanzerstellung, Zeilenstatusintervall, Anrufverwaltungsfunktionen, p_acm_callbacks
Erstellen von Klasseninstanzen

Um eine CDC ACM-Seriellklasseninstanz zu erstellen, rufen Sie die Funktion T als sl_usbd_cdc_acm_create_instance() auf. Diese Funktion benötigt drei Konfigurationsargumente, wie hier beschrieben.

line_state_interval
Dies ist das Intervall (in Millisekunden), in dem Ihre CDC ACM-Seriellklasseninstanz die Leitungsstatusbenachrichtigungen an den T aa-Host meldet. Dieser Wert muss eine Zweierpotenz sein (1, 2, 4, 8, 16 usw.).

call_mgmt_capabilities
Bitmap der Anrufverwaltungsfunktionen. Mögliche Werte der Bitmap sind wie folgt:

Wert (Bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI

Beschreibung
Das Gerät übernimmt die Anrufverwaltung selbst. Das Gerät kann Anrufverwaltungsinformationen über eine Datenklassenschnittstelle senden/empfangen.

p_acm_callbacks

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

23/174

Überview

aa M aa p_acm_callbacks ist ein Zeiger auf eine Struktur vom Typ sl_usbd_cdc_acm_callbacks_t . Sein Zweck besteht darin, der CDC AC Class einen Satz von Rückruffunktionen bereitzustellen, die beim Auftreten eines CDC ACM-Ereignisses aufgerufen werden. Nicht alle Rückrufe sind obligatorisch, und ein Nullzeiger ( NULL ) kann in der Strukturvariable „callbacks“ übergeben werden, wenn der Rückruf nicht benötigt wird. Die folgende Tabelle beschreibt jedes in dieser Konfigurationsstruktur verfügbare Konfigurationsfeld.
Tabelle – sl_usbd_cdc_acm _callbacks_t Konfigurationsstruktur

Felder

Beschreibung

.aktivieren

Wird aufgerufen, wenn die USB-Klasseninstanz aktiviert ist

erfolgreich.

.deaktivieren

Wird aufgerufen, wenn die USB-Klasseninstanz deaktiviert ist.

.line_control_changed Wird aufgerufen, wenn eine Änderung der Zeilensteuerung empfangen wird.

line_coding_changed Wird aufgerufen, wenn eine Änderung der Zeilencodierung empfangen wird.

Funktionssignatur
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t Unterklassennummer, uint8_t Ereignis, uint8_t Ereignis_ändert); bool app_usbd_cdc_acm_line_coding_changed(uint8_t Unterklassennummer, Unterklassennummer, sl_usbd_cdc_acm_line_coding_t
*p_line_coding

Siehe Abschnitt „Registrieren von Ereignisbenachrichtigungs-Rückrufen“ für Rückruffunktionen, z. B.ample.
Programmierhandbuch für die CDC ACM-Klasse des USB-Geräts

In diesem Abschnitt wird die Verwendung der CDC Abstract Control Model-Klasse erläutert. Initialisieren der CDC ACM-Klasse für USB-Geräte Hinzufügen einer Instanz der CDC ACM-Klasse für USB-Geräte zu Ihrem Gerät Kommunizieren mithilfe der CDC ACM-Klasse
Initialisieren der CDC ACM-Klasse des USB-Geräts

Um Ihrem Gerät die CDC ACM-Klassenfunktionalität hinzuzufügen, müssen Sie zunächst die CDC-Basisklasse und die ACM-Unterklasse initialisieren, indem Sie die Funktionen sl_usbd_cdc_init() und sl_usbd_cdc_acm_init() aufrufen. Das folgende Beispiel zeigt, wie Sie sl_usbd_cdc_init() und sl_usbd_cdc_acm_init() mit Standardargumenten aufrufen.

Example – Initialisierung der CDC ACM-Klasse

sl_status_t Status;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
Hinzufügen einer CDC ACM-Klasseninstanz für USB-Geräte zu Ihrem Gerät
Um Ihrem Gerät die CDC ACM-Klassenfunktionalität hinzuzufügen, müssen Sie eine Instanz erstellen und sie dann zu den Konfigurationen Ihres Geräts hinzufügen.
Erstellen einer CDC ACM-Klasseninstanz

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

24/174

Überview
Hinzufügen der CDC ACM-Klasseninstanz zu den Konfigurationen Ihres Geräts. Registrieren von Rückrufen für Ereignisbenachrichtigungen
Erstellen einer CDC ACM-Klasseninstanz
aa M aaa Erstellen Sie eine CDC AC-Klasseninstanz, indem Sie die Funktion sl_usbd_cdc_acm_create_instance() aufrufen. T aaa M aaa Das folgende Beispiel zeigt, wie Sie eine CDC AC-Klasseninstanz mit sl_usbd_cdc_acm_create_instance() erstellen.
Example – Erstellen einer CDC ACM-Funktion über sl_usbd_cdc_acm_create_instance()

uint8_t Unterklassennummer; sl_status_t Status;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
Hinzufügen der CDC ACM-Klasseninstanz zur/zu den Konfiguration(en) Ihres Geräts
Nachdem Sie eine CDC ACM-Klasseninstanz erstellt haben, können Sie sie einer Konfiguration hinzufügen, indem Sie die Funktion aufrufen
sl_usbd_cdc_acm_add_to_configuration() .
Das folgende Beispiel zeigt, wie sl_usbd_cdc_acm_add_to_configuration() aufgerufen wird.
Example – Aufruf von USBD ACM sl_usbd_cdc_acm_add_to_configuration()

sl_status_t Status;

Status = sl_usbd_cdc_acm_add_to_configuration(Unterklassennummer,

(1)

config_nbr_fs);

(2)

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

aaa (1) Klassennummer, die der von sl_usbd_cdc_acm_create_instance() zurückgegebenen Konfiguration hinzugefügt werden soll. (2) Konfigurationsnummer (hier wird sie einer Full-Speed-Konfiguration hinzugefügt).
Registrieren von Rückrufen für Ereignisbenachrichtigungen
Die CDC ACM Serial-Klasse kann Ihre Anwendung über Änderungen in der Zeilensteuerung oder Codierung über Benachrichtigungs-Callback-Funktionen informieren. Eine Callback-Funktionsstruktur kann bei der Erstellung der ACM-Instanz als Argument übergeben werden. Beachten Sie, dass diese Callbacks optional sind. Beispiel:ample – CDC ACM Callbacks Registration veranschaulicht die Verwendung der Callback-Registrierungsfunktionen. Beispielample – CDC ACM Callbacks Implementierung zeigt ein BeispielampDatei zur Implementierung der Rückruffunktionen.
Example – CDC ACM Callbacks-Registrierung

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

25/174

Überview

uint8_t Unterklassennummer; sl_status_t Status;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
Status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }
Example – CDC ACM Callbacks-Implementierung

bool app_usbd_cdc_acm_line_coding_changed (uint8_t

Unterklassennummer,

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t baudrate_new;

uint8_t parität_neu;

uint8_t stop_bits_new;

uint8_t data_bits_new;

/* TODO Neue Zeilencodierung anwenden.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Parity; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;

Rückgabe (wahr);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t Unterklassennummer, uint8_t Ereignis, uint8_t Ereignis_geändert)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;

/* TODO Neue Zeilensteuerung anwenden. */ rts_state = ((Ereignis & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((Ereignis_geändert & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((Ereignis & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((Ereignis_geändert & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((Ereignis & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}

(1) Es ist wichtig, dass diese Funktion „false“ zurückgibt, wenn die Zeilencodierung fehlgeschlagen ist. Andernfalls wird „true“ zurückgegeben.
Kommunikation mithilfe der CDC ACM-Klasse
Serienstatus
Leitungscodierung Leitungssteuerung

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

26/174

Überview

Leitungsstatus-Unterklasseninstanzkommunikation
Serienstatus
Zeilencodierung
Der USB-Host steuert die Leitungskodierung (Baudrate, Parität usw.) des CDC ACM-Geräts. Bei Bedarf ist die Anwendung für die Einstellung der Leitungskodierung verantwortlich. Zum Abrufen und Einstellen der aktuellen Leitungskodierung stehen zwei Funktionen zur Verfügung, wie in der folgenden Tabelle beschrieben.
Tabelle – CDC ACM-Leitungscodierungsfunktionen

Funktion
sl_usbd_cdc_acm_get_line_coding ()
sl_usbd_cdc_acm_s e t_line _co d ing ()

Beschreibung
Ihre Anwendung kann die aktuellen Zeilencodierungseinstellungen entweder vom Host mit SetLineCoding-Anfragen oder mit der Funktion sl_usbd_cdc_acm_set_line_coding() abrufen.
Ihre Anwendung kann die Zeilenkodierung festlegen. Der Host kann die Einstellungen mit der GetLineCoding-Anforderung abrufen.

Leitungssteuerung
Der USB-Host steuert die Leitungssteuerung (RTS- und DTR-Pins, Break-Signal usw.) des CDC ACM-Geräts. Bei Bedarf ist Ihre Anwendung für die Anwendung der Leitungssteuerung verantwortlich. Es steht eine Funktion zum Abrufen und Festlegen der aktuellen Leitungssteuerung zur Verfügung, wie in der folgenden Tabelle beschrieben.
Tabelle – CDC ACM-Leitungssteuerungsfunktionen

Funktion
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()

Ihre Anwendung kann den aktuellen, vom Host festgelegten Steuerleitungsstatus mit der SetControlLineState-Anforderung abrufen.

Leitungszustand
Der USB-Host ruft den Leitungsstatus in regelmäßigen Abständen ab. Ihre Anwendung muss den Leitungsstatus bei jeder Änderung aktualisieren. Bei Bedarf ist Ihre Anwendung für das Festlegen des Leitungsstatus verantwortlich. Zum Abrufen und Festlegen der aktuellen Leitungssteuerelemente stehen zwei Funktionen zur Verfügung, wie in der folgenden Tabelle beschrieben.
Tabelle – CDC ACM-Leitungsstatusfunktionen

Funktion
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()

Ihre Anwendung kann beliebige Leitungsstatusereignisse festlegen. Beim Festlegen des Leitungsstatus wird eine Interrupt-IN-Übertragung an den Host gesendet, um ihn über eine Änderung des seriellen Leitungsstatus zu informieren.
Die Anwendung kann zwei Ereignisse des Leitungsstatus löschen: Übertragungsträger und Empfängerträgererkennung. Alle anderen Ereignisse werden von der ACM-Unterklasse für serielle Emulation automatisch gelöscht.

Kommunikation zwischen Unterklasseninstanzen

Die ACM-Unterklasse von Silicon Labs bietet die folgenden Funktionen zur Kommunikation mit dem Host. Weitere Informationen zu den Parametern von functions9 finden Sie in der Referenz zu den CDC ACM-Unterklassenfunktionen.

Funktionsname
sl_usb d _cd c_acm_ lesen () sl_usb d _cd c_acm_schreiben ()

Betrieb
Empfängt Daten vom Host über einen Bulk-OUT-Endpunkt. Diese Funktion blockiert. Sendet Daten an den Host über einen Bulk-IN-Endpunkt. Diese Funktion blockiert.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

27/174

Überview

Tabelle – CDC ACM Kommunikations-API – Zusammenfassung: sl_usbd_cdc_acm_read() und sl_usbd_cdc_acm_write() ermöglichen synchrone Kommunikation, was bedeutet, dass die Übertragung blockiert ist. Mit anderen Worten: Beim Aufruf der Funktion blockiert die Anwendung, bis die Übertragung mit oder ohne Fehler abgeschlossen ist. Um ewiges Warten zu vermeiden, kann ein Timeout angegeben werden. Das BeispielampDie folgende Abbildung zeigt ein Lese- und SchreibbeispielampDatei, die Daten vom Host über den Bulk-OUT-Endpunkt empfängt und Daten über den Bulk-IN-Endpunkt an den Host sendet.
Auflistung – Serielles Lesen und Schreiben (Beispiel)ample

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

Status;

Status = sl_usbd_cdc_acm_read(Unterklassennummer,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

Status = sl_usbd_cdc_acm_write(Unterklassennummer,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

T aaaaa M (1) Die mit sl_usbd_cdc_acm_create_instance() erstellte Klasseninstanznummer bietet eine interne Referenz auf die AC-Unterklasse, um die Übertragung an den richtigen Bulk-OUT- oder -IN-Endpunkt weiterzuleiten. (2) Ihre Anwendung muss sicherstellen, dass der der Funktion bereitgestellte Puffer groß genug ist, um alle Daten aufzunehmen. Andernfalls können Synchronisierungsprobleme auftreten. (3) Um eine unendliche Blockierung zu vermeiden, geben Sie ein Timeout in Millisekunden an. Ein Wert von 809 lässt die Anwendungsaufgabe ewig warten. (4) Die Anwendung stellt den initialisierten Übertragungspuffer bereit.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

28/174

Überview
Überview

HID-Klasse für USB-Geräte

USB-Gerät HID-Klasse überview Ressourcenbedarf der HID-Klasse des USB-Geräts vom Kern Konfiguration der HID-Klasse des USB-Geräts Programmierhandbuch für die HID-Klasse des USB-Geräts Aufgabe „Periodische HID-Eingabeberichte“
In diesem Abschnitt wird die vom Silicon Labs USB Device unterstützte Human Interface Device (HID)-Klasse beschrieben.
Die HID-Klasse umfasst Geräte, die von Menschen zur Steuerung von Computervorgängen verwendet werden, wie Tastaturen, Mäuse, Zeigegeräte und Spielgeräte.
Die HID-Klasse kann auch in einem zusammengesetzten Gerät verwendet werden, das Bedienelemente wie Knöpfe, Schalter, Tasten und Schieberegler enthält. Zum BeispielampDie Steuerung von Audio, Stummschaltung und Lautstärke in einem Audio-Headset erfolgt über die HID-Funktion des Headsets. Die HID-Klasse kann Daten für beliebige Zwecke austauschen, indem sie lediglich Steuer- und Interruptübertragungen verwendet.
Die HID-Klasse ist eine der ältesten und am weitesten verbreiteten USB-Klassen. Alle gängigen Host-Betriebssysteme bieten einen nativen Treiber zur Verwaltung von HID-Geräten, weshalb eine Vielzahl herstellerspezifischer Geräte mit der HID-Klasse kompatibel ist. Diese Klasse umfasst auch verschiedene Ausgabegeräte wie LEDs, Audio, taktiles Feedback usw.
Die HID-Implementierung entspricht den folgenden Spezifikationen:
Geräteklassendefinition für Human Interface Devices (HID), 27.06.01, Version 1.11. Universal Serial Bus HID-Nutzungstabellen, 28.10.2004, Version 1.12.
USB-Gerät HID-Klasse überview
Überview
Ein HID-Gerät besteht aus den folgenden Endpunkten:
Ein Paar von Steuerungs-IN- und OUT-Endpunkten, die als Standardendpunkt bezeichnet werden. Ein Interrupt-IN-Endpunkt. Ein optionaler Interrupt-OUT-Endpunkt.
Die folgende Tabelle beschreibt die Verwendung der verschiedenen Endpunkte:
Tabelle – Verwendung von HID-Klassenendpunkten

Endpunktrichtungsverwendung

Steuern Sie IN
Kontrolle
AUS
Interrupt IN
Unterbrechen
AUS

Gerät-zu-Host
Host-to-Device
Gerät-zu-Host
Host-to-Device

Standardanforderungen für Aufzählung, klassenspezifische Anforderungen und Datenkommunikation (Eingabe, Funktionsberichte, die mit der Anforderung GET_REPORT an den Host gesendet werden). Standardanforderungen für Aufzählung, klassenspezifische Anforderungen und Datenkommunikation (Ausgabe, Funktionsberichte, die mit der Anforderung SET_REPORT vom Host empfangen werden). Datenkommunikation (Eingabe- und Funktionsberichte).
Datenkommunikation (Ausgabe- und Funktionsberichte).

Bericht

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

29/174

Überview

Ein Host und ein HID-Gerät tauschen Daten über Berichte aus. Ein Bericht enthält formatierte Daten, die Informationen über Steuerelemente und andere physische Einheiten des HID-Geräts enthalten. Ein Steuerelement kann vom Benutzer manipuliert werden und steuert einen Aspekt des Geräts. Zum BeispielampEin Steuerelement kann beispielsweise eine Taste einer Maus oder Tastatur, ein Schalter usw. sein. Andere Elemente informieren den Benutzer über den Status bestimmter Gerätefunktionen. Zum BeispielampBeispielsweise informieren LEDs auf einer Tastatur den Benutzer über die aktivierte Feststelltaste, den aktiven Ziffernblock usw.
Das Format und die Verwendung von Berichtsdaten werden vom Host durch Analyse des Inhalts eines Berichtsdeskriptors erfasst. Die Analyse des Inhalts erfolgt durch einen Parser. Der Berichtsdeskriptor beschreibt die von jedem Steuerelement eines Geräts bereitgestellten Daten. Er besteht aus Elementen, die Informationen über das Gerät enthalten und aus einem 1-Byte-Präfix und variabler Länge bestehen.
Daten. Weitere Informationen zum Elementformat finden Sie unter
1.11=, Abschnitt 5.6 und 6.2.2.
Es gibt drei Haupttypen von Artikeln:
Das Hauptelement definiert oder gruppiert bestimmte Arten von Datenfeldern.
Globales Element beschreibt die Dateneigenschaften eines Steuerelements.
Lokales Element beschreibt die Dateneigenschaften eines Steuerelements.
Jeder Artikeltyp wird durch verschiedene Funktionen definiert. Eine Artikelfunktion kann auch als tagEine Artikelfunktion kann als Unterartikel betrachtet werden, der zu einem der drei Hauptartikeltypen gehört. Die folgende Tabelle gibt einen kurzen Überblickview der Funktionen des Elements in jedem Elementtyp. Eine vollständige Beschreibung der Elemente in jeder Kategorie finden Sie unter
Tabelle – Funktionsbeschreibung des Artikels für jeden Artikeltyp

Artikel Artikeltyp Funktion

Beschreibung

Haupteingang

Beschreibt Informationen zu den von einer oder mehreren physischen Steuerungen bereitgestellten Daten.

Hauptausgabe Beschreibt die an das Gerät gesendeten Daten.

Hauptmerkmal

Beschreibt Gerätekonfigurationsinformationen, die an das Gerät gesendet oder von diesem empfangen werden und die das Gesamtverhalten des Geräts oder einer seiner Komponenten beeinflussen.

Zugehörige Elemente der Hauptsammlungsgruppe (Eingabe, Ausgabe oder Funktion).

Hauptende von Schließt eine Sammlung ab. Sammlung

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

30/174

Überview

Artikel Artikeltyp Funktion

Beschreibung

Globale Nutzungsseite

Identifiziert eine im Gerät verfügbare Funktion.

Global Logical Definiert die Untergrenze der gemeldeten Werte in logischen Einheiten. Minimum

Global Logical Definiert die Obergrenze der gemeldeten Werte in logischen Einheiten. Maximum

Global Physical Definiert die Untergrenze der gemeldeten Werte in physikalischen Einheiten, d. h. das logische Minimum, ausgedrückt in physikalischen Einheiten.

Global Physical Definiert die Obergrenze der gemeldeten Werte in physikalischen Einheiten, d. h. das logische Maximum, ausgedrückt in physikalischen Einheiten.

Globale Einheit

Gibt den Einerexponenten in Basis 10 an. Der Exponent reicht von -8 bis +7.

Exponent

Globale Einheit

Gibt die Einheit der gemeldeten Werte an. Beispielsweise Länge, Masse, Temperatureinheiten usw.

Globale Berichtsgröße

Gibt die Größe der Berichtsfelder in Bits an.

Globale Berichts-ID Gibt das Präfix an, das einem bestimmten Bericht hinzugefügt wurde.

Globale Berichtsanzahl

Gibt die Anzahl der Datenfelder für ein Element an.

Globaler Vorstoß

Platziert eine Kopie der globalen Elementstatustabelle auf dem CPU-Stapel.

Global Pop

Ersetzt die Elementstatustabelle durch die letzte Struktur aus dem Stapel.

Lokale Nutzung

Stellt einen Index dar, der eine bestimmte Verwendung innerhalb einer Verwendungsseite kennzeichnet. Er gibt die vom Hersteller empfohlene Verwendung für ein bestimmtes Steuerelement oder eine Gruppe von Steuerelementen an. Eine Verwendung liefert dem Anwendungsentwickler Informationen darüber, was ein Steuerelement tatsächlich misst.

Lokale Nutzung

Definiert die mit einem Array oder einer Bitmap verknüpfte Startverwendung.

Minimum

Lokale Nutzung

Definiert die Endverwendung, die einem Array oder einer Bitmap zugeordnet ist.

Maximal

Lokaler Bezeichner Bestimmt den Körperteil, der für ein Steuerelement verwendet wird. Der Index zeigt auf einen Bezeichner im physischen

Index

Deskriptor.

Lokaler Bezeichner Definiert den Index des Startbezeichners, der mit einem Array oder einer Bitmap verknüpft ist.

Lokaler Bezeichner Definiert den Index des Endbezeichners, der einem Array oder einer Bitmap zugeordnet ist. Maximal

Lokaler String-Index

Stringindex für einen Stringdeskriptor. Ermöglicht die Zuordnung eines Strings zu einem bestimmten Element oder Steuerelement.

Lokale Zeichenfolge

Gibt den ersten Stringindex an, wenn eine Gruppe von sequenziellen Strings den Steuerelementen in einem Array zugewiesen wird.

Minimum oder Bitmap.

Lokal Lokal

Zeichenfolgenmaximum
Trennzeichen

Gibt den letzten Zeichenfolgenindex an, wenn Steuerelementen in einem Array oder einer Bitmap eine Gruppe aufeinanderfolgender Zeichenfolgen zugewiesen wird.
Definiert den Anfang oder das Ende einer Reihe lokaler Elemente.

Die Daten eines Steuerelements müssen mindestens die folgenden Elemente definieren:
Eingabe, Ausgabe oder Funktion Hauptelemente Verwendung Lokales Element Verwendungsseite Globales Element Logisches Minimum Globales Element Logisches Maximum Globales Element Berichtsgröße Globales Element

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

31/174

Überview
Report Count Global item Die folgende Tabelle zeigt die Darstellung eines Mausberichtsdeskriptors aus der Sicht eines Host-HID-Parsers. Die Maus hat drei Tasten (links, rechts und Rad). Der im Beispiel dargestellte CodeampNachfolgend finden Sie eine Codeimplementierung, die dieser Mausberichtsdeskriptordarstellung entspricht.
Abbildung – Berichtsdeskriptorinhalt von einem Host-HID-Parser View

(1) Die Funktion der Verwendungsseite gibt die allgemeine Funktion des Geräts an. In diesem Beispielample, das HID-Gerät gehört zu einem
generische Desktop-Steuerung.
(2) Die Sammlung „Anwendung“ gruppiert Hauptelemente, die einen gemeinsamen Zweck haben und Anwendungen vertraut sein können. Im Diagramm besteht die Gruppe aus drei Hauptelementen „Eingabe“. Für diese Sammlung wird die Verwendung der Steuerelemente mit einer Maus vorgeschlagen, wie im Element „Verwendung“ angegeben. (3) Verschachtelte Sammlungen können verwendet werden, um Anwendungen detailliertere Informationen zur Verwendung eines einzelnen Steuerelements oder einer Gruppe von Steuerelementen zu geben. In diesem BeispielampDie in die Collection Application eingebettete Collection Physical besteht aus denselben drei Input-Elementen wie die Collection Application. Die Collection Physical wird für eine Reihe von Datenelementen verwendet, die an einem geometrischen Punkt gesammelte Datenpunkte darstellen. Im BeispielampBeispielsweise ist die vorgeschlagene Verwendung ein Zeiger, wie durch das Verwendungselement angegeben. Hier bezieht sich die Zeigerverwendung auf die Koordinaten der Mausposition und die Systemsoftware übersetzt die Mauskoordinaten in die Bewegung des Bildschirmcursors. (4) Verschachtelte Verwendungsseiten sind ebenfalls möglich und liefern weitere Einzelheiten zu einem bestimmten Aspekt innerhalb der allgemeinen Funktion des Geräts. In diesem Fall werden zwei Eingabeelemente gruppiert und entsprechen den Tasten der Maus. Ein Eingabeelement definiert die drei Tasten der Maus (rechts, links und Mausrad) hinsichtlich der Anzahl der Datenfelder für das Element (Element „Berichtsanzahl“), der Größe eines Datenfelds (Element „Berichtsgröße“) und der möglichen Werte für jedes Datenfeld (Elemente „Minimum und Maximum der Verwendung“, „Logisches Minimum und Maximum“). Das andere Eingabeelement ist eine 13-Bit-Konstante, mit der die Eingabeberichtsdaten an einer Byte-Grenze ausgerichtet werden können. Dieses Eingabeelement wird nur zum Auffüllen verwendet. (5) Eine weitere verschachtelte Verwendungsseite, die sich auf ein generisches Desktop-Steuerelement bezieht, wird für die Koordinaten der Mausposition definiert. Für diese Verwendungsseite beschreibt das Eingabeelement die Datenfelder, die der x- und y-Achse entsprechen, wie in den beiden Verwendungsfeldern angegeben.
Artikel.
Nach der Analyse des vorherigen Maus-Berichtsdeskriptors kann der HID-Parser des Hosts die vom Gerät mit einer Interrupt-IN-Übertragung oder als Antwort auf eine GET_REPORT-Anforderung gesendeten Eingabeberichtsdaten interpretieren. Die Eingabeberichtsdaten entsprechen dem Maus-Berichtsdeskriptor, der in der Abbildung – Berichtsdeskriptorinhalt eines Host-HID-Parsers dargestellt ist. View is

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

32/174

Überview

Die Gesamtgröße der Berichtsdaten beträgt 4 Byte. Verschiedene Berichtstypen können über denselben Endpunkt gesendet werden. Zur Unterscheidung der verschiedenen Berichtstypen wird dem Datenbericht ein 1-Byte-Präfix für die Berichts-ID hinzugefügt. Wenn im Beispiel eine Berichts-ID verwendet wurdeample des Mausberichts, die Gesamtgröße der Berichtsdaten beträgt 5 Byte.
Tabelle – An den Host gesendeter Eingabebericht, der dem Status einer 3-Tasten-Maus entspricht

Bit-Offset
0 1 2 3 16 24

Bitanzahl 1 1 1 13 8 8

Beschreibung Taste 1 (linke Taste). Taste 2 (rechte Taste). Taste 3 (Radtaste). Nicht verwendet. Position auf Achse X. Position auf Achse Y.

Ein physischer Deskriptor gibt den oder die Körperteile an, die ein oder mehrere Bedienelemente aktivieren. Eine Anwendung kann diese Information verwenden, um dem Bedienelement eines Geräts eine Funktionalität zuzuweisen. Ein physischer Deskriptor ist ein optionaler klassenspezifischer Deskriptor und bietet für die meisten Geräte nur einen geringen Nutzen. Siehe
Ressourcenbedarf der HID-Klasse des USB-Geräts vom Kern

Jedes Mal, wenn Sie einer USB-Konfiguration über einen Aufruf der Funktion sl_usbd_hid_add_to_configuration() eine HID-Klasseninstanz hinzufügen, werden die folgenden Ressourcen vom Kern zugewiesen.

Ressource
Schnittstellen Alternative Schnittstellen Endpunkte Schnittstellengruppen

Menge
1 1 1 (2, wenn Interrupt-OUT-Endpunkt aktiviert ist) 0

Beachten Sie, dass diese Zahlen pro Konfiguration gelten. Berücksichtigen Sie beim Einrichten Ihrer Konfigurationswerte SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY und SL_USBD_DESCRIPTOR_QUANTITY, zu wie vielen Konfigurationen die Klasse hinzugefügt wird. Für den Konfigurationswert SL_USBD_OPEN_ENDPOINTS_QUANTITY müssen Sie nur die Anzahl der benötigten Endpunkte für eine Klasseninstanz berücksichtigen, da Endpunkte nur geöffnet werden, wenn eine Konfiguration vom Host festgelegt wird.
HID-Klassenkonfiguration für USB-Geräte

Zur Konfiguration der HID-Klasse werden zwei Gruppen von Konfigurationsparametern verwendet:
Anwendungsspezifische Konfigurationen der USB-Geräte-HID-Klasse Instanzkonfigurationen der USB-Geräte-HID-Klasse
Anwendungsspezifische Konfigurationen der USB-Geräte-HID-Klasse

Um das HID-Klassenmodul des Silicon Labs USB-Geräts zu verwenden, passen Sie zunächst die HID-Konfigurationsdefinitionen zur Kompilierzeit entsprechend Ihren Anwendungsanforderungen an. Sie sind im Header sl_usbd_core_config.h zusammengefasst. file unter dem HID-Bereich. Sie können in zwei Abschnitte unterteilt werden: die Mengenkonfigurationen und die HID-Aufgabenkonfigurationen. Der Zweck der Mengenkonfigurationen besteht darin, das USB-Gerätemodul darüber zu informieren, wie viele USB-HID-Objekte zugewiesen werden sollen.
In der folgenden Tabelle werden die einzelnen Konfigurationsdefinitionen beschrieben.
Tabelle – Definitionen der HID-Konfiguration des USB-Geräts

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

33/174

Überview

Konfigurationsname
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_MENGE
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY

Beschreibung
Anzahl der Klasseninstanzen, die Sie über einen Aufruf der Funktion zuweisen
sl_usbd_hid_create_instance() .
Anzahl der Konfigurationen. HID-Klasseninstanzen können einer oder mehreren Konfigurationen hinzugefügt werden. Siehe auch die Funktion sl_usbd_hid_add_to_configuration(). Konfiguriert die Gesamtzahl der zuzuweisenden Berichts-IDs.
Konfiguriert die Gesamtzahl der zuzuweisenden Push/Pop-Elemente.
Der Timer-Task verarbeitet alle timerbasierten HID-Operationen. Mit dieser Konfiguration können Sie die Stapelgröße (in Bytes) festlegen. Priorität des HID-Tasks. Dies ist eine CMSIS-RTOS2-Priorität.

Standardwert
2 1 2 0 2048
osPriorityHigh

USB-Gerät HID-Klasseninstanzkonfigurationen Unterklasse zur Erstellung von Klasseninstanzen
Protokoll Ländercode
interval_in und interval_out p_hid_callback HID-Klassenberichtsdeskriptor Example Dieser Abschnitt definiert die Konfigurationen im Zusammenhang mit den HID-Klasseninstanzen.
Erstellen von Klasseninstanzen
Das Erstellen einer HID-Klasseninstanz erfolgt durch Aufrufen der Funktion aaa sl_usbd_hid_create_instance(), die mehrere Konfigurationsargumente verwendet, die unten beschrieben werden.
Unterklasse
Code der HID-Unterklasse. Mögliche Werte sind:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Ein HID-Gerät, das die Boot-Unterklasse verwendet, muss Standardberichtsformate verwenden. Weitere Informationen zu den Unterklassencodes finden Sie in Abschnitt 4.2 der HID-Spezifikationsrevision 1.11.
Protokoll
Vom HID-Gerät verwendetes Protokoll. Mögliche Werte sind:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Wenn Ihre HID-Funktion eine Maus ist, sollte das Protokoll auf SL_USBD_HID_PROTOCOL_MOUSE eingestellt werden. Wenn es sich um eine Tastatur handelt, sollte das Protokoll auf SL_USBD_HID_PROTOCOL_KBD eingestellt werden. Andernfalls sollte das Protokoll auf SL_USBD_HID_PROTOCOL_NONE eingestellt werden. Weitere Informationen zu den Unterklassencodes finden Sie in Abschnitt 4.3 der HID-Spezifikation Revision 1.11.
Ländercode
ID des Ländercodes. Mögliche Werte sind:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

34/174

Überview
SL_USBD_HID_LÄNDERCODE_ARABISCH SL_USBD_HID_LÄNDERCODE_BELGISCH SL_USBD_HID_LÄNDERCODE_KANADISCH_ZWEISPRACHIG SL_USBD_HID_LÄNDERCODE_KANADISCH_FRANZÖSISCH SL_USBD_HID_LÄNDERCODE_TSCHECHISCHE_REPUBLIK SL_USBD_HID_LÄNDERCODE_DÄNISCH SL_USBD_HID_LÄNDERCODE_FINNISCH SL_USBD_HID_LÄNDERCODE_FRANZÖSISCH SL_USBD_HID_LÄNDERCODE_GERMAN SL_USBD_HID_LÄNDERCODE_GRIECHISCH SL_USBD_HID_LÄNDERCODE_HEBRÄISCH SL_USBD_HID_LÄNDERCODE_UNGARN SL_USBD_HID_LÄNDERCODE_INTERNATIONAL SL_USBD_HID_LÄNDERCODE_ITALIENISCH SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_LATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AND SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL AND SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Der Ländercode gibt an, für welches Land die Hardware lokalisiert ist. Die meiste Hardware ist nicht lokalisiert, daher lautet die aaaav-Anzeige SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Tastaturen können das Feld jedoch verwenden, um die Sprache der Tastenkappen anzugeben.
Weitere Informationen zu den Ländercodes finden Sie in Abschnitt 6.2.1 der HID-Spezifikationsrevision 1.11.
interval_in und interval_out
interval_in und interval_out stellen das Abfrageintervall des IN-Interrupt-Endpunkts und des OUT-Interrupt-Endpunkts dar.
Dies stellt das Abfrageintervall des Endpunkts in Millisekunden dar. Die Einstellung dieses Werts hängt davon ab, wie häufig Ihr Gerät einen neuen Bericht für den Host generiert. Wenn beispielsweise alle 16 Millisekunden ein Bericht generiert wird, sollte das Intervall 16 oder weniger betragen.
Der Wert muss eine Zweierpotenz sein (1, 2, 4, 8, 16 usw.).
Ein interval_out-Wert wird ignoriert, wenn ctrl_rd_en auf true gesetzt ist.
p_hid_callback
aaaa p_hid_callback ist ein Zeiger auf eine Struktur vom Typ sl_usbd_hid_callbacks_t. Sein Zweck besteht darin, der HID-Klasse einen Satz von Rückruffunktionen bereitzustellen, die aufgerufen werden sollen, wenn ein HID-Ereignis eintritt.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

35/174

Überview

Nicht alle Rückrufe sind obligatorisch. Wenn der Rückruf nicht benötigt wird, kann ein Nullzeiger ( NULL ) in der Strukturvariable „Rückrufe“ übergeben werden. Die folgende Tabelle beschreibt jedes in dieser Konfigurationsstruktur verfügbare Konfigurationsfeld.
Tabelle – sl_usbd_hid_callbacks_t-Konfigurationsstruktur

Felder

Beschreibung

Funktionssignatur

.aktivieren .deaktivieren .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

Wird aufgerufen, wenn die USB-Klasseninstanz erfolgreich aktiviert wurde. Wird aufgerufen, wenn die USB-Klasseninstanz deaktiviert wurde.
Wird während der Erstellung der HID-Instanz aufgerufen, um Ihren Berichtsdeskriptor zu übergeben. Sie müssen für jede Ihrer HID-Funktionen einen Berichtsdeskriptor angeben. Der Berichtsdeskriptor gibt dem Host an, wie der vom Gerät gesendete regelmäßige Bericht analysiert werden soll. Das Schreiben eines eigenen Berichtsdeskriptors kann eine Herausforderung sein, deshalb gibt es einige Ressourcen, die Ihnen dabei helfen. Dies ist die einzige obligatorische Rückruffunktion. Wird während der Erstellung der HID-Instanz aufgerufen, um Ihren physischen Deskriptor zu übergeben. Der physische Deskriptor ist ein Deskriptor, der Informationen zu dem oder den spezifischen Teil(en) des menschlichen Körpers bereitstellt, die ein oder mehrere Steuerelement(e) aktivieren. Weitere Informationen zu physischen Deskriptoren finden Sie in Abschnitt 6.2.3 der HID-Spezifikation Revision 1.11. Der physische Deskriptor ist optional und wird meistens ignoriert. Der hier übergebene Puffer kann auf NULL und die Länge auf 0 gesetzt werden. Wird aufgerufen, wenn der Host einen Bericht wie in Ihrem Berichtsdeskriptor beschrieben festlegt (wenn er einen Bericht sendet).
Wird aufgerufen, wenn der Host einen Funktionsbericht anfordert, wie in Ihrem Berichtsdeskriptor beschrieben.
Wird aufgerufen, wenn der Host einen Funktionsbericht wie in Ihrem Berichtsdeskriptor beschrieben festlegt.

void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t Klassennummer, uint8_t Berichts-ID, uint8_t *p_report_buf, uint16_t Berichtslänge); void app_usbd_hid_get_feature_report(uint8_t Klassennummer, uint8_t Berichts-ID, uint8_t *p_report_buf, uint16_t Berichtslänge); void app_usbd_hid_set_feature_report(uint8_t Klassennummer, uint8_t Berichts-ID, uint8_t *p_report_buf, uint16_t Berichtslänge);

.get_protocol

Ruft das aktuell aktive Protokoll ab.

void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);

.set_protocol

Legt das aktuell aktive Protokoll fest.

void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);

HID-Klassenberichtsdeskriptor Example

HID-Klasse s von Silicon LabsampDie Anwendung bietet eineample eines Berichtsdeskriptors für eine einfache Maus. Die ExampDie folgende Datei zeigt einen Mausberichtsdeskriptor.
Example – Mausberichtsdeskriptor

statische uint8_t app_usbd_hid_report_desc[] = {

(1) (2)

SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE,

(3)

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

36/174

Überview

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)

SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,

SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_ABSOLUTE,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_RELATIVE,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Die Tabelle, die einen Mausberichtsdeskriptor darstellt, wird so initialisiert, dass jede Zeile einem kurzen Element entspricht. Letzteres besteht aus einem 1-Byte-Präfix und 1-Byte-Daten. Siehe viewed von einem Host-HID-Parser in Abbildung – Berichtsdeskriptorinhalt von einem Host-HID-Parser View.
(2) Es wird die Generic Desktop Usage Page verwendet.
(3) Innerhalb der allgemeinen Desktop-Nutzungsseite wird die Nutzung tag legt nahe, dass die Gruppe von Steuerelementen zur Steuerung einer Maus dient. Eine Maussammlung besteht normalerweise aus zwei Achsen (X und Y) und einer, zwei oder drei Tasten.
(4) Die Maussammlung wird gestartet.
(5) Innerhalb der Maussammlung ist eine Verwendung tag legt genauer nahe, dass die Maussteuerung zur Zeigersammlung gehört. Eine Zeigersammlung ist eine Sammlung von Achsen, die einen Wert generiert, um Benutzerabsichten an eine Anwendung zu richten, anzuzeigen oder darauf hinzuweisen.
(6) Die Zeigersammlung wird gestartet.
(7) Die Seite „Buttons Usage“ definiert ein Eingabeelement, das aus drei 1-Bit-Feldern besteht. Jedes 1-Bit-Feld repräsentiert jeweils die Maustaste 1, 2 und 3 und kann den Wert 0 oder 1 zurückgeben.
(8) Das Eingabeelement für die Schaltflächenverwendungsseite ist mit 13 weiteren Bits aufgefüllt.
(9) Eine weitere generische Desktop-Nutzungsseite wird zur Beschreibung der Mausposition mit den Achsen X und Y angezeigt. Das Eingabeelement besteht aus zwei 8-Bit-Feldern, deren Wert zwischen -127 und 127 liegen kann.
(10) Die Zeigersammlung ist geschlossen.
(11) Die Mäusesammlung ist geschlossen.
USB.org HID-Seite

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

37/174

Überview
Das USB Implementers Forum (USB-IF) bietet das Tool „HID Descriptor Tool“ sowie weitere Informationen zum Report-Deskriptor-Format. Weitere Informationen finden Sie unter http://www.usb.org/developers/hidpage/.
Programmierhandbuch für die HID-Klasse von USB-Geräten
In diesem Abschnitt wird die Verwendung der HID-Klasse erläutert. Initialisieren der HID-Klasse des USB-Geräts Hinzufügen einer Instanz der HID-Klasse des USB-Geräts zu Ihrem Gerät Kommunizieren mithilfe der HID-Klasse des USB-Geräts
Initialisieren der HID-Klasse des USB-Geräts
Um Ihrem Gerät die HID-Klassenfunktionalität hinzuzufügen, müssen Sie zunächst die Klasse initialisieren, indem Sie die Funktion sl_usbd_hid_init() aufrufen. Das BeispielampDie folgende Datei zeigt, wie sl_usbd_hid_init() mit Standardargumenten aufgerufen wird. Weitere Informationen zu den an sl_usbd_hid_init() zu übergebenden Konfigurationsargumenten finden Sie unter Anwendungsspezifische Konfigurationen der USB-Geräte-HID-Klasse.
Example – Aufruf von sl_usbd_hid_init()
sl_status_t Status;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
Hinzufügen einer USB-Geräte-HID-Klasseninstanz zu Ihrem Gerät
Um Ihrem Gerät die Funktionalität der HID-Klasse hinzuzufügen, müssen Sie eine Instanz erstellen und sie dann zu den Konfigurationen Ihres Geräts hinzufügen.
Erstellen einer HID-Klasseninstanz
Erstellen Sie eine HID-Klasseninstanz, indem Sie die Funktion sl_usbd_hid_create_instance() aufrufen. Das BeispielampDie folgende Datei zeigt, wie Sie mit sl_usbd_hid_create_instance() und Standardargumenten eine einfache Mausfunktion erstellen. Weitere Informationen zu den an sl_usbd_hid_create_instance() zu übergebenden Konfigurationsargumenten finden Sie unter Konfigurationen der HID-Klasseninstanz von USB-Geräten.
Example – Hinzufügen einer Mausfunktion über sl_usbd_hid_create_instance()

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

38/174

Überview
/* Globale Konstanten. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Lokale Variablen.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = Größe von (app_usbd_hid_mouse_report_desc); }
Status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, Größe von(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, true, &app_usbd_hid_callbacks, &class_nbr);
Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

39/174

Überview
/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */}
Hinzufügen der HID-Klasseninstanz zu den Konfigurationen Ihres Geräts Nachdem Sie eine HID-Klasseninstanz erstellt haben, können Sie sie einer Konfiguration hinzufügen, indem Sie die Funktion aufrufen
sl_usbd_hid_add_to_configuration() .
Der ExampDie folgende Datei zeigt, wie sl_usbd_hid_add_to_configuration() aufgerufen wird.
Example – Aufruf von sl_usbd_hid_add_to_configuration()

sl_status_t Status;

sl_usbd_hid_add_to_configuration(class_nbr,

(1)

config_nbr_fs); (2)

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

(1) Klassennummer, die der von sl_usbd_hid_create_instance() zurückgegebenen Konfiguration hinzugefügt werden soll. (2) Konfigurationsnummer (hier wird sie einer Full-Speed-Konfiguration hinzugefügt).
Kommunikation über die HID-Klasse des USB-Geräts
Klasseninstanzkommunikation Synchrone Kommunikation Klasseninstanzkommunikation Die HID-Klasse bietet die folgenden Funktionen zur Kommunikation mit dem Host.
Tabelle – Zusammenfassung der HID-Kommunikations-API

Funktionsname
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()

Vorgang: Empfängt Daten vom Host über den Interrupt-OUT-Endpunkt. Diese Funktion blockiert. Sendet Daten an den Host über den Interrupt-IN-Endpunkt. Diese Funktion blockiert.

Synchrone Kommunikation Synchrone Kommunikation bedeutet, dass die Übertragung blockiert ist. Beim Funktionsaufruf blockiert die Anwendung, bis die Übertragung mit oder ohne Fehler abgeschlossen ist. Um ewiges Warten zu vermeiden, kann ein Timeout angegeben werden. Das BeispielampDie folgende Abbildung zeigt einen Lese- und Schreibvorgang, der Daten vom Host über den Interrupt-OUT-Endpunkt empfängt und Daten über den Interrupt-IN-Endpunkt an den Host sendet.
Example – Synchrones HID-Lesen und -Schreiben

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

Status;

Status = sl_usbd_hid_read_sync(Klassennr.,

(1)

(void *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

40/174

Überview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */}
(1) Die von sl_usbd_hid_create_instance() erstellte Klasseninstanznummer stellt eine interne Referenz für die HID-Klasse bereit, um die Übertragung an den richtigen Interrupt-OUT- oder -IN-Endpunkt weiterzuleiten.
(2) Die Anwendung muss sicherstellen, dass der der Funktion zur Verfügung gestellte Puffer groß genug ist, um alle Daten aufzunehmen. Andernfalls können Synchronisationsprobleme auftreten. Intern wird der Lesevorgang entweder mit dem Kontroll-Endpunkt oder mit dem Interrupt-Endpunkt ausgeführt, abhängig vom beim Aufruf von sl_usbd_hid_create_instance() gesetzten Kontroll-Lese-Flag.
(3) Um eine unendliche Blockierung zu vermeiden, kann ein Timeout in Millisekunden angegeben werden. Ein Wert von 809 lässt die Anwendungsaufgabe ewig warten.
(4) Die Anwendung stellt den initialisierten Sendepuffer bereit.
HID-Aufgabe „Periodische Eingabeberichte“
Um Bandbreite zu sparen, kann der Host Berichte von einem Interrupt-IN-Endpunkt durch Begrenzung der Berichtshäufigkeit stummschalten. Dazu muss der Host die SET_IDLE-Anforderung senden. Die von Silicon Labs implementierte HID-Klasse enthält eine interne Task, die die Begrenzung der Berichtshäufigkeit berücksichtigt und auf einen oder mehrere Eingangsberichte angewendet werden kann. Abbildung „Task für periodische Eingangsberichte“ zeigt die Funktionsweise der Tasks für periodische Eingangsberichte.
Abbildung – Aufgabe „Periodische Eingabeberichte“

(1) Das Gerät empfängt eine SET_IDLE-Anforderung. Diese Anforderung gibt eine Leerlaufdauer für eine bestimmte Berichts-ID an. Weitere Informationen zur SET_IDLE-Anforderung finden Sie unter
(2) Eine Berichts-ID-Struktur (zugewiesen während der Initialisierungsphase der HID-Klasse) wird mit der Leerlaufdauer aktualisiert. Ein Leerlaufdauerzähler wird mit dem Leerlaufdauerwert initialisiert. Die Berichts-ID-Struktur wird am Ende einer verknüpften Liste mit Eingabeberichts-ID-Strukturen eingefügt. Der Leerlaufdauerwert wird in 4-ms-Einheiten ausgedrückt, was einen Bereich von 4 bis 1020 ms ergibt.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

41/174

Überview
Wenn die Leerlaufdauer kürzer ist als das Abfrageintervall des Interrupt-IN-Endpunkts, werden die Berichte im Abfrageintervall generiert.
(3) Alle 4 ms durchsucht der Task für periodische Eingabeberichte die ID-Liste der Eingabeberichte. Für jede Eingabeberichts-ID führt der Task eine von zwei möglichen Operationen aus. Die Dauer der Taskperiode entspricht der für die Leerlaufzeit verwendeten 4-ms-Einheit. Wenn vom Host keine SET_IDLE-Anfragen gesendet wurden, ist die ID-Liste der Eingabeberichte leer und der Task hat nichts zu verarbeiten. Der Task verarbeitet nur Berichts-IDs ungleich 0 und mit einer Leerlaufzeit größer als 0.
(4) Für eine gegebene Eingabeberichts-ID überprüft die Task, ob die Leerlaufzeit abgelaufen ist. Ist die Leerlaufzeit nicht abgelaufen, wird der Zähler dekrementiert und kein Eingabebericht an den Host gesendet.
(5) Wenn die Leerlaufdauer abgelaufen ist (d. h., der Leerlaufdauerzähler hat Null erreicht), wird ein Eingabebericht an den Host gesendet, indem die Funktion sl_usbd_hid_write_sync() über den Interrupt-IN-Endpunkt aufgerufen wird.
(6) Die vom Task gesendeten Eingabeberichtsdaten stammen aus einem internen Datenpuffer, der für jeden im Berichtsdeskriptor beschriebenen Eingabebericht reserviert ist. Ein Anwendungstask kann die Funktion sl_usbd_hid_write_sync() aufrufen, um einen Eingabebericht zu senden. Nach dem Senden der Eingabeberichtsdaten aktualisiert sl_usbd_hid_write_sync() den internen Puffer, der einer Eingabeberichts-ID zugeordnet ist, mit den gerade gesendeten Daten. Anschließend sendet der Task für regelmäßige Eingabeberichte nach jeder Leerlaufzeit und bis zum Aktualisieren der Daten im internen Puffer durch den Anwendungstask stets dieselben Eingabeberichtsdaten. Es gibt einen Sperrmechanismus, um eine Beschädigung der Eingabeberichts-ID-Daten zu verhindern, falls zum genauen Zeitpunkt der Übertragung durch den Task für regelmäßige Eingabeberichte eine Änderung erfolgt.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

42/174

Überview
Überview
USB-Gerät MSC-Klasse
USB-Gerät MSC-Klasse überview Ressourcenbedarf der MSC-Klasse des USB-Geräts vom Kern Konfiguration der MSC-Klasse des USB-Geräts Programmierhandbuch zur MSC-Klasse des USB-Geräts Speichertreiber der MSC-Klasse des USB-Geräts
Dieser Abschnitt beschreibt die vom Silicon Labs USB Device unterstützte Massenspeichergeräteklasse (MSC). MSC ist ein Protokoll, das die Übertragung von Informationen zwischen einem USB-Gerät und einem Host ermöglicht. Die übertragenen Informationen umfassen alles, was elektronisch gespeichert werden kann, wie z. B. ausführbare Programme, Quellcode, Dokumente, Bilder, Konfigurationsdaten oder andere Text- oder numerische Daten. Das USB-Gerät erscheint dem Host als externes Speichermedium und ermöglicht die Übertragung von files per Drag & Drop.
A file System definiert, wie die files sind in den Speichermedien organisiert. Die USB-Massenspeicherklassenspezifikation erfordert keine besonderen file System zur Verwendung auf konformen Geräten. Stattdessen bietet es eine einfache Schnittstelle zum Lesen und Schreiben von Datensektoren mithilfe des transparenten Befehlssatzes Small Computer System Interface (SCSI). Daher können Betriebssysteme das USB-Laufwerk wie eine Festplatte behandeln und es mit jedem formatieren file System, das ihnen gefällt.
Die USB-Massenspeichergeräteklasse unterstützt die folgenden zwei Transportprotokolle:
Bulk-Only Transport (BOT) Control/Bulk/Interrupt (CBI) Transport (wird nur für Diskettenlaufwerke verwendet)
Die Massenspeichergeräteklasse implementiert den transparenten SCSI-Befehlssatz ausschließlich unter Verwendung des BOT-Protokolls. Dies bedeutet, dass ausschließlich Massenendpunkte zur Übertragung von Daten und Statusinformationen verwendet werden. Die MSC-Implementierung unterstützt mehrere logische Einheiten.
Die MSC-Implementierung entspricht den folgenden Spezifikationen:
Universal Serial Bus-Massenspeicherklassenspezifikation überview, Revision 1.3, 5. September 2008. Universal Serial Bus Mass Storage Class Bulk-Only Transport, Revision 1.0, 31. September 1999.
USB-Gerät MSC aCl ss Overview
Protokollendpunkte Klassenanforderungen Small Computer System Interface (SCSI)
Protokoll
In diesem Abschnitt besprechen wir das Bulk-Only Transport (BOT)-Protokoll der Massenspeicherklasse. Das Bulk-Only Transport-Protokoll hat drei stages:
Der Befehlstransport Der Datentransport Der Statustransport
Massenspeicherbefehle werden vom Host über eine Struktur namens Command Block Wrapper (CBW) gesendet. Für Befehle, die einen Datentransport erfordern, stage, der Host versucht, die genaue Anzahl von Bytes vom Gerät zu senden oder zu empfangen, wie in den Längen- und Flag-Feldern des CBW angegeben. Nach dem Datentransport stage, der Host versucht, einen Command Status Wrapper (CSW) vom Gerät zu empfangen, der den Status des Befehls sowie alle Datenreste (falls vorhanden) detailliert beschreibt.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

43/174

Überview
beliebig). Für Befehle, die keinen Datentransport beinhalten stage, der Host versucht, das CSW direkt nach dem Senden des CBW zu empfangen. Das Protokoll ist in der Abbildung – MSC-Protokoll detailliert beschrieben.
Abbildung – MSC-Protokoll

Endpunkte
Auf der Geräteseite besteht das MSC gemäß der BOT-Spezifikation aus den folgenden Endpunkten: Ein Paar von Control-IN- und OUT-Endpunkten, die als Standardendpunkte bezeichnet werden. Ein Paar von Bulk-IN- und OUT-Endpunkten.
Die folgende Tabelle zeigt die verschiedenen Verwendungsmöglichkeiten der Endpunkte.
Tabelle – MSC-Endpunktnutzung

Endpunkt
Steuerung EIN Steuerung AUS Bulk EIN Bulk AUS

Richtung
Gerät zu Host, Host zu Gerät, Gerät zu Host, Host zu Gerät

Verwendung
Enumeration und MSC-klassenspezifische Anfragen Enumeration und MSC-klassenspezifische Anfragen Senden von CSW und Daten Empfangen von CBW und Daten

Klassenanfragen
Für das MSC BOT-Protokoll gibt es zwei definierte Steuerungsanforderungen. Diese Anforderungen und ihre Beschreibungen sind in der folgenden Tabelle aufgeführt.

Tabelle – Massenspeicherklassenanforderungen

Klassenanfragen
Nur Massenspeicher zurücksetzen

Beschreibung
Mit dieser Anforderung wird das Massenspeichergerät und die zugehörige Schnittstelle zurückgesetzt. Diese Anforderung bereitet das Gerät auf den Empfang des nächsten Befehlsblocks vor.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

44/174

Überview

Klassenanfragen

Beschreibung

Get Max Diese Anfrage wird verwendet, um die höchste vom Gerät unterstützte logische Einheitennummer (LUN) zurückzugeben. Zum Beispielample, a

LUN

Gerät mit LUN 0 und LUN 1 gibt den Wert 1 zurück. Ein Gerät mit einer einzelnen logischen Einheit gibt 0 zurück oder blockiert die

Anfrage. Der maximale Rückgabewert ist 15.

Kleine Computersystemschnittstelle SCSI

Auf der Ebene der Programmierschnittstelle implementiert das MSC-Gerät eines der Standard-Speichermedien-Kommunikationsprotokolle wie SCSI und SFF-8020i (ATAPI). Die Programmierschnittstelle gibt an, welches Protokoll implementiert ist, und unterstützt das Host-Betriebssystem beim Laden des passenden Gerätetreibers für die Kommunikation mit dem USB-Speichergerät. SCSI ist das am häufigsten verwendete Protokoll für USB-MSC-Speichergeräte. Wir bieten eine Implementierung für die MSC-SCSI-Unterklasse, die unsere GSDK-Benutzer sofort nutzen können.
SCSI ist ein Standard für die Kommunikation zwischen Computern und Peripheriegeräten. Diese Standards umfassen Befehle, Protokolle sowie elektrische und optische Schnittstellen. Speichergeräte, die andere Hardwareschnittstellen wie USB verwenden, nutzen SCSI-Befehle, um Geräte-/Hostinformationen abzurufen, den Gerätebetrieb zu steuern und Datenblöcke auf dem Speichermedium zu übertragen.
SCSI-Befehle decken eine Vielzahl von Gerätetypen und Funktionen ab. Daher benötigen Geräte eine Teilmenge dieser Befehle. Im Allgemeinen sind die folgenden Befehle für die grundlegende Kommunikation erforderlich:
ANFRAGE LESEKAPAZITÄT(10) LESEN(10) ANFORDERUNG ERKENNUNG TESTEINHEIT BEREIT SCHREIBEN(10)
Ressourcenbedarf der MSC-Klasse des USB-Geräts vom Core

Jedes Mal, wenn Sie einer USB-Konfiguration über die Funktion sl_usbd_msc_add_to_configuration() eine MSC-Klasseninstanz hinzufügen, werden die folgenden Ressourcen vom Kern zugewiesen.

Ressource
Schnittstellen Alternative Schnittstellen Endpunkte Schnittstellengruppen

Menge
1 1 2 0

Beachten Sie, dass diese Zahlen pro Konfiguration gelten. Berücksichtigen Sie beim Einrichten Ihrer Konfigurationswerte SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY und SL_USBD_DESCRIPTOR_QUANTITY, zu wie vielen Konfigurationen die Klasse hinzugefügt wird. Für den Konfigurationswert SL_USBD_OPEN_ENDPOINTS_QUANTITY müssen Sie nur die Anzahl der benötigten Endpunkte für eine Klasseninstanz berücksichtigen, da Endpunkte nur geöffnet werden, wenn eine Konfiguration vom Host festgelegt wird.
MSC-Klassenkonfiguration für USB-Geräte

Zur Konfiguration der MSC-Klasse werden zwei Gruppen von Konfigurationsparametern verwendet:
Anwendungsspezifische Konfigurationen der USB-Geräte-MSC-Klasse Konfiguration der logischen Einheit der USB-Geräte-MSC-Klasse
Anwendungsspezifische Konfigurationen der USB-Geräte-MSC-Klasse

Klassenkonfigurationen zur Kompilierzeit Erstellung von Klasseninstanzen

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

45/174

Überview

Klassenkonfigurationen zur Kompilierzeit
Die MSC-Klasse und die SCSI-Unterklasse des USB-Geräts von Silicon Labs können zur Kompilierzeit über #defines in der Datei sl_usbd_core_config.h konfiguriert werden. file.
Tabelle – Allgemeine Konfigurationskonstanten

Konfigurationsname

Beschreibung

SL_USBD_MSC_CLASS_INST Anzahl der Klasseninstanzen, die Sie über einen Aufruf der Funktion zuweisen

ANCE_QUANTITY

sl_usbd_msc_scsi_create_instance() .

SL_USBD_MSC_CONFIGURA Nummer der Konfiguration, zu der eine Klasseninstanz über einen Aufruf der

TION_QUANTITY

Funktion sl_usbd_msc_scsi_add_to_configuration() .

SL_USBD_MSC_LUN_QUANT Anzahl der logischen Einheiten pro Klasseninstanz, die Sie über einen Aufruf der

ITÄT

Funktion sl_usbd_msc_scsi_lun_add() .

SL_USBD_MSC_SCSI_64_BIT Aktiviert oder deaktiviert die Unterstützung für logische Blockadressen (LBA) von 64 Bit.
_LBA_EN

SL_USBD_MSC_DATA_BUFF Größe des Datenpuffers pro Klasseninstanz in Bytes ER_SIZE

Standardwert
2
1
2
0
512

Erstellen von Klasseninstanzen
Das Erstellen einer MSC-SCSI-Klasseninstanz für USB-Geräte erfolgt durch Aufrufen der Funktion sl_usbd_msc_scsi_create_instance(). Diese Funktion verwendet ein Konfigurationsargument, das unten beschrieben wird.
p_scsi_callbacks
p_scsi_callbacks ist ein Zeiger auf eine Konfigurationsstruktur vom Typ sl_usbd_msc_scsi_callbacks_t . Zusätzlich zu den üblichen USB-Geräteklassen-Callbacks „Connect“/„Disconnect“ stellt es der MSC-Klasse optionale Callback-Funktionen zur Verfügung, die aufgerufen werden, wenn ein Ereignis auf der logischen Einheit auftritt. Wenn keine Callbacks benötigt werden, kann ein Nullzeiger ( NULL ) an dieses Argument übergeben werden.
Die folgende Tabelle beschreibt jedes in dieser Konfigurationsstruktur verfügbare Konfigurationsfeld.
Tabelle – sl_usbd_msc_scsi_callbacks_t-Konfigurationsstruktur

Felder

Beschreibung

.aktivieren

Wird aufgerufen, wenn die USB-Klasseninstanz erfolgreich aktiviert wurde.

.disable Wird aufgerufen, wenn die USB-Klasseninstanz deaktiviert ist.

.host_eject Funktion, die aufgerufen wird, wenn eine logische Einheit vom Host ausgeworfen wird.

Funktionssignatur
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);

Konfiguration der logischen Einheit der MSC-Klasse des USB-Geräts

Das Hinzufügen einer logischen Einheit zu einer MSC-Klasseninstanz erfolgt durch Aufruf der Funktion sl_usbd_msc_lun_add() . Diese Funktion verwendet ein Konfigurationsargument, das unten beschrieben wird.

p_lu_info

p_lu_info ist ein Zeiger auf eine Struktur vom Typ sl_usbd_msc_scsi_lun_info_t . Sein Zweck besteht darin, der MSC-Klasse die Informationen zur logischen Einheit bereitzustellen.
Die folgende Tabelle beschreibt jedes in dieser Konfigurationsstruktur verfügbare Konfigurationsfeld.

Tabelle – sl_usbd_msc_scsi_lun_info_t-Konfigurationsstruktur

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

46/174

Überview

Feld

Beschreibung

Feld
.scsi_lun_api_p tr

Beschreibung
Zeiger auf die Medientreiber-API, die diese logische Einheit verarbeitet. Weitere Informationen zu Speichertreibern finden Sie unter Speichertreiber der MSC-Klasse für USB-Geräte.

.ve nd o r_id _ p tr
.Produkt-ID_ptr
.Produktrevisionsebene .ist_nur lesbar

Zeiger auf eine Zeichenfolge, die die Herstellerkennung der logischen Einheit enthält. Die maximale Länge der Zeichenfolge beträgt 8 Zeichen. Zeiger auf eine Zeichenfolge, die die Produktkennung der logischen Einheit enthält. Die maximale Länge der Zeichenfolge beträgt 16 Zeichen. Produktrevisionsebene.
Flag, das angibt, ob die logische Einheit vom Standpunkt des view des Hosts ( true ) oder nicht ( false ).

Programmierhandbuch für die MSC-Klasse des USB-Geräts

In diesem Abschnitt wird die Verwendung der MSC-Klasse erläutert.
Initialisieren der MSC-Klasse des USB-Geräts Hinzufügen einer Instanz der MSC-SCSI-Klasse des USB-Geräts zu Ihrem Gerät Handhabung logischer Einheiten der MSC-Klasse des USB-Geräts
Initialisieren der MSC-Klasse des USB-Geräts

Um Ihrem Gerät die Funktionalität der MSC-SCSI-Klasse hinzuzufügen, initialisieren Sie zunächst die MSC-Basisklasse und die SCSI-Unterklasse, indem Sie die Funktionen sl_usbd_msc_init() und sl_usbd_msc_scsi_init() aufrufen.
Der ExampDie folgende Datei zeigt, wie sl_usbd_msc_init() und sl_usbd_msc_scsi_init() aufgerufen werden.

Example – Aufruf von sl_usbd_msc_init() und sl_usbd_msc_scsi_init()

sl_status_t Status;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}
Hinzufügen einer USB-Geräte-MSC-SCSI-Klasseninstanz zu Ihrem Gerät
Um Ihrem Gerät die MSC SCSI-Klassenfunktionalität hinzuzufügen, erstellen Sie zunächst eine Instanz und fügen Sie diese dann Ihrer Gerätekonfiguration hinzu. Sie müssen Ihrer Instanz mindestens eine logische Einheit hinzufügen.
Erstellen einer MSC SCSI-Klasseninstanz
Erstellen Sie eine MSC SCSI-Klasseninstanz, indem Sie die Funktion sl_usbd_msc_scsi_create_instance() aufrufen.
Der ExampDie folgende Datei zeigt, wie sl_usbd_msc_scsi_create_instance() mit Standardargumenten aufgerufen wird. Weitere Informationen zu den an sl_usbd_msc_scsi_create_instance() zu übergebenden Konfigurationsargumenten finden Sie unter Anwendungsspezifische Konfigurationen der USB-Geräte-MSC-Klasse.
Example – Aufruf von sl_usbd_msc_scsi_create_instance()

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

47/174

Überview

uint8_t Klassennummer; sl_status_t Status;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }
Hinzufügen der MSC-Klasseninstanz zur/zu den Konfiguration(en) Ihres Geräts
Nachdem Sie eine MSC-Klasseninstanz erstellt haben, können Sie diese einer Konfiguration hinzufügen, indem Sie die Funktion
sl_usbd_msc_add_to_configuration() .
Der ExampDie folgenden Informationen zeigen, wie sl_usbd_msc_scsi_add_to_configuration() mit Standardargumenten aufgerufen wird.
Example – Aufruf von sl_usbd_ msc_scsi_add_to_configuration()

sl_status_t Status;

Status = sl_usbd_msc_scsi_add_to_configuration(class_nbr,

(1)

config_nbr_fs);

(2)

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

(1) Klassennummer, die der von sl_usbd_msc_scsi_create_instance() zurückgegebenen Konfiguration hinzugefügt werden soll. (32) Konfigurationsnummer (hier wird sie einer Full-Speed-Konfiguration hinzugefügt).
Handhabung logischer Einheiten der MSC-Klasse des USB-Geräts
Hinzufügen einer logischen Einheit Anschließen/Trennen eines Speichermediums
Hinzufügen einer logischen Einheit
Wenn Sie Ihrer MSC SCSI-Klasseninstanz eine logische Einheit hinzufügen, muss diese an ein Speichermedium (RAMDisk, SD-Karte, Flash-Speicher usw.) gebunden sein. Die MSC-Klasse verwendet einen Speichertreiber zur Kommunikation mit Speichermedien. Dieser Treiber muss beim Hinzufügen der logischen Einheit bereitgestellt werden.
Der ExampDie folgende Datei zeigt, wie eine logische Einheit über sl_usbd_msc_scsi_lun_add() hinzugefügt wird.
Example – Hinzufügen einer logischen Einheit über sl_usbd_msc_scsi_lun_add()

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

48/174

Überview

sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_status_t

Status;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.vendor_id_ptr

= „Silicon Labs“;

lu_info.product_id_ptr

= „Blockgerät example”;

lu_info.product_revision_level = 0x1000u;

lu_info.is_read_only

= falsch;

status = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }

Anschließen/Entfernen eines Speichermediums
Nachdem die logische Einheit hinzugefügt wurde, muss ein Speichermedium angeschlossen werden, um vom Host aus verfügbar zu sein. Die MSC-Klasse bietet zwei Funktionen zur Steuerung der Speichermedienzuordnung zur logischen Einheit: sl_usbd_msc_scsi_lun_attach() und sl_usbd_msc_scsi_lun_detach() . Mit diesen Funktionen können Sie das Entfernen eines Speichergeräts emulieren, um bei Bedarf den Zugriff von der eingebetteten Anwendung wiederherzustellen.
Der ExampDie folgende Datei zeigt, wie die Funktionen sl_usbd_msc_scsi_lun_attach() und sl_usbd_msc_scsi_lun_detach() verwendet werden.
Example – Medien anhängen/abhängen

sl_status_t Status;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}

(1)

status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); if (status ! SL_STATUS_OK) {
/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}

(2)

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) if (status ! SL_STATUS_OK) {
/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */
}

(3)

(1) Ab diesem Moment ist das Speichermedium zugänglich, wenn das MSC-Gerät mit einem Host verbunden ist.
(2) Wenn das MSC-Gerät mit einem Host verbunden ist, wird das Medium nun als nicht verfügbar angezeigt. Ab diesem Zeitpunkt können über die eingebettete Anwendung Vorgänge auf dem Medium ausgeführt werden.
(3) Wenn das MSC-Gerät mit dem Host verbunden ist, wird das Speichermedium erneut als verbunden angezeigt.
USB-Geräte-MSC-Klassenspeichertreiber
Das USB-Gerät MSC Class benötigt einen Speichertreiber, um mit einem Speichermedium kommunizieren zu können. Silicon Labs bietet derzeit keine Treiber an.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

49/174

Überview
TPY aa Die Treiber-AI wird durch typedef sl_usbd_msc_scsi_lun_api_t definiert. Unser sl_usbd_msc_scsi_lun_api_t v ri ble muss in aaaaaaaaa Ihr sl_usbd_msc_scsi_lun_info_t v ri ble, p ssed s rgument aufgenommen werden, wenn Sie die logische Einheit mit sl_usbd_msc_scsi_lun_add() addieren. Weitere Informationen zu den Strukturen finden Sie im Abschnitt USB-Gerät MSC SCSI API. Die Implementierung des Speichertreibers kann so einfach sein wie ein Array von Sektoren im RAM. Die typische Sektorgröße (d. h. Blockgröße) beträgt 512 für Massenspeichergeräte und 2048 für CD-ROMs.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

50/174

Überview
Überview
USB-Geräteherstellerklasse
USB-Geräteherstellerklasse überview Ressourcenbedarf der USB-Geräte-Vendor-Klasse aus der Core-Konfiguration der USB-Geräte-Vendor-Klasse Programmierhandbuch für die USB-Geräte-Vendor-Klasse Mit der Vendor-Klasse können Sie herstellerspezifische Geräte erstellen, die ein proprietäres Protokoll implementieren können. Für die Datenübertragung zwischen Host und Gerät benötigt sie ein Paar Bulk-Endpunkte. Bulk-Übertragungen eignen sich gut für die Übertragung großer Mengen unstrukturierter Daten und ermöglichen durch die Verwendung eines Fehlererkennungs- und Wiederholungsmechanismus einen zuverlässigen Datenaustausch. Neben Bulk-Endpunkten kann die Vendor-Klasse auch ein optionales Paar Interrupt-Endpunkte verwenden. Die Vendor-Klasse kann auf jedem Betriebssystem verwendet werden, sofern es über einen Treiber zur Verarbeitung der Vendor-Klasse verfügt. Je nach Betriebssystem kann der Treiber nativ oder herstellerspezifisch sein. Unter Microsoft Windows® beispielsweise interagiert Ihre Anwendung mit dem WinUSB-Treiber von Microsoft, um mit dem Herstellergerät zu kommunizieren.
USB-Geräteherstellerklasse überview
Abbildung – Allgemeine Architektur zwischen Windows-Host und Vendor-Klasse zeigt die allgemeine Architektur zwischen Host und Gerät unter Verwendung der Vendor-Klasse. In diesem Beispielample, das Host-Betriebssystem ist MS Windows.
Abbildung – Allgemeine Architektur zwischen MS Windows-Host und Vendor-Klasse

Unter MS Windows kommuniziert die Anwendung über eine USB-Bibliothek mit dem Gerät des Herstellers. Bibliotheken wie libusb bieten eine API zur Verwaltung eines Geräts und der zugehörigen Pipes sowie zur Kommunikation mit dem Gerät über Steuerungs-, Bulk- und Interrupt-Endpunkte.
Auf der Geräteseite besteht die Vendor-Klasse aus den folgenden Endpunkten:
Ein Paar von IN- und OUT-Endpunkten für die Steuerung, die als Standardendpunkt bezeichnet werden. Ein Paar von IN- und OUT-Endpunkten für die Massenverarbeitung.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

51/174

Überview

Ein Paar Interrupt-IN- und -OUT-Endpunkte. Dieses Paar ist optional. Die folgende Tabelle zeigt die Verwendung der verschiedenen Endpunkte:
Tabelle – Verwendung von Endpunkten der Anbieterklasse

Endpunktrichtung

Steuern Sie IN
Kontrolle
AUS
Bulk IN

Gerät-zu-Host
>Host-to-device
Gerät-zu-Host

Bulk OUT
Interrupt IN
Unterbrechen
AUS

Host-to-Device
Gerät-zu-Host
Host-to-Device

Verwendung
Standardanforderungen für Aufzählungen und anbieterspezifische Anforderungen.
Standardanforderungen für Aufzählungen und anbieterspezifische Anforderungen.
Rohdatenkommunikation. Daten können gemäß einem proprietären Protokoll strukturiert werden.
Rohdatenkommunikation. Daten können gemäß einem proprietären Protokoll strukturiert werden.
Rohdatenkommunikation oder -benachrichtigung. Daten können gemäß einem proprietären Protokoll strukturiert werden. Rohdatenkommunikation oder -benachrichtigung. Daten können gemäß einem proprietären Protokoll strukturiert werden.

Die Geräteanwendung kann Bulk- und Interrupt-Endpunkte verwenden, um Daten an den Host zu senden oder von diesem zu empfangen. Sie kann nur den Standardendpunkt verwenden, um herstellerspezifische Anfragen des Hosts zu dekodieren. Die Standardanfragen werden intern von der Core-Schicht des Silicon Labs USB-Geräts verwaltet.
Ressourcenbedarf der USB-Geräteanbieterklasse vom Kern

Jedes Mal, wenn Sie einer Konfiguration über die Funktion sl_usbd_vendor_add_to_configuration() eine Instanz der Vendor-Klasse hinzufügen, werden die folgenden Ressourcen vom Kern zugewiesen.

Ressource
Schnittstellen Alternative Schnittstellen Endpunkte Schnittstellengruppen

Menge
1 1 2 (4, wenn Sie Interrupt-Endpunkte aktiviert haben) 0

Beachten Sie, dass diese Zahlen pro Konfiguration gelten. Berücksichtigen Sie beim Einrichten Ihrer Konfigurationswerte SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY und SL_USBD_DESCRIPTOR_QUANTITY, zu wie vielen Konfigurationen die Klasse hinzugefügt wird. Für den Konfigurationswert SL_USBD_OPEN_ENDPOINTS_QUANTITY müssen Sie nur die Anzahl der benötigten Endpunkte für eine Klasseninstanz berücksichtigen, da Endpunkte nur geöffnet werden, wenn eine Konfiguration vom Host festgelegt wird.
Konfiguration der USB-Geräteherstellerklasse

Zum Konfigurieren der Vendor-Klasse werden zwei Gruppen von Konfigurationsparametern verwendet:
Anwendungsspezifische Konfigurationen der USB-Geräteanbieterklasse Instanzkonfigurationen der USB-Geräteanbieterklasse
Anwendungsspezifische Konfigurationen der USB-Geräteanbieterklasse
Um das USB-Geräte-Vendor-Klassenmodul von Silicon Labs zu verwenden, passen Sie zunächst die Vendor-Konfigurationsdefinitionen zur Kompilierzeit entsprechend Ihren Anwendungsanforderungen an. Sie sind im Header sl_usbd_core_config.h zusammengefasst. file unter dem Abschnitt „Anbieter“. Der Zweck der Mengenkonfiguration besteht darin, das USB-Gerätemodul darüber zu informieren, wie viele USB-Anbieterobjekte zugewiesen werden sollen.
In der folgenden Tabelle werden die einzelnen Konfigurationsdefinitionen beschrieben.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

52/174

Überview

Tabelle – Konfigurationsdefinitionen des USB-Geräteanbieters

Konfigurationsname

Beschreibung

Standardwert

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Anzahl der Klasseninstanzen, die Sie über einen Aufruf der Funktion sl_usbd_vendor_create_instance() zuweisen.

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Anzahl der Konfigurationen. Vendor-Klasseninstanzen können über einen Aufruf der Funktion sl_usbd_vendor_add_to_configuration() zu einer oder mehreren Konfigurationen hinzugefügt werden.

Konfigurationen der USB-Geräteanbieterklasseninstanz

In diesem Abschnitt werden die Konfigurationen für die Instanzen der Vendor-Klasse definiert.
Klasseninstanzerstellung intr_en Intervall p_vendor_callbacks
Erstellen von Klasseninstanzen

Das Erstellen einer Instanz der Vendor-Klasse erfolgt durch Aufrufen der Funktion sl_usbd_vendor_create_instance() , die drei unten beschriebene Konfigurationsargumente akzeptiert.

intr_de
Boolescher Wert, der angibt, ob ein Paar Interrupt-Endpunkte hinzugefügt werden soll oder nicht.

Wert
wahr falsch

Beschreibung
Ein Paar IN/OUT-Endpunkte wird hinzugefügt und der eingebetteten Anwendung zur Verfügung gestellt. Es wird kein Interrupt-Endpunkt hinzugefügt. Es ist nur ein Paar Bulk-IN/OUT-Endpunkte verfügbar.

Intervall
Wenn Sie intr_en auf true setzen, können Sie das Abfrageintervall der Interrupt-Endpunkte (in Millisekunden) angeben. Wenn Sie intr_en auf false setzen, können Sie das Intervall auf 0 setzen, da es von der Klasse ignoriert wird.
p_vendor_callbacks
p_vendor_callbacks ist ein Zeiger auf eine Strukturvariable für Rückruffunktionen, die Sie zur Verarbeitung klassenspezifischer Steuerungsanforderungen angeben können. Wenn Sie keine klassenspezifischen Anforderungen verwenden oder Benachrichtigungen aktivieren/deaktivieren möchten, können Sie dies auf NULL setzen.
Der ExampDie folgende Datei enthält die erwartete Signatur Ihres klassenspezifischen Anforderungshandlers.
Example – Signatur der klassenspezifischen Anforderungsfunktion

void app_usbd_vendor_req_handle(uint8_t

Klassennummer, (1)

const sl_usbd_setup_req_t *p_setup_req); (2)

sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};

(1) Instanznummer der Anbieterklasse.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

53/174

Überview

(2) Zeiger auf eine empfangene Setup-Anforderung vom Host.
Programmierhandbuch für USB-Geräteanbieterklassen
In diesem Abschnitt wird die Verwendung der Vendor-Klasse erläutert. Initialisieren der USB-Geräte-Vendor-Klasse Hinzufügen einer USB-Geräte-Vendor-Klasse-Instanz zu Ihrem Gerät Kommunizieren mithilfe der USB-Geräte-Vendor-Klasse
Initialisieren der USB-Geräteherstellerklasse
Um Ihrem Gerät eine Vendor Class-Funktionalität hinzuzufügen, initialisieren Sie zunächst die Klasse, indem Sie die Funktion USBD_Vendor_Init() aufrufen. Die ExampDie folgende Datei zeigt, wie sl_usbd_vendor_init() aufgerufen wird.
Example – Aufruf von sl_usbd_vendor_init()

sl_status_t Status;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */ }
Hinzufügen einer USB Device Vendor Class Instance zu Ihrem Gerät
Um Ihrem Gerät die Funktionalität der Anbieterklasse hinzuzufügen, müssen Sie zuerst eine Instanz erstellen und sie dann der/den Konfiguration(en) Ihres Geräts hinzufügen.
Erstellen einer Vendor-Class-Instanz Hinzufügen der Vendor-Class-Instanz zur/zu den Konfiguration(en) Ihres Geräts
Erstellen einer Vendor-Klasseninstanz
Erstellen Sie eine Vendor-Klasseninstanz, indem Sie die Funktion sl_usbd_vendor_create_instance() aufrufen. Die ExampDie folgende Datei zeigt, wie sl_usbd_vendor_create_instance() mit Standardargumenten aufgerufen wird. Weitere Informationen zu den an sl_usbd_vendor_create_instance() zu übergebenden Konfigurationsargumenten finden Sie unter Konfigurationen der USB-Geräte-Anbieterklasse-Instanz.
Example – Aufruf von sl_usbd_vendor_create_instance()

uint8_t Klassennummer; sl_status_t Status;

status = sl_usbd_vendor_create_instance(false,

(1)

0u,

(2)

app_usbd_vendor_callback_functions, (3)

&class_nbr);

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

(1) Keine Interrupt-Endpunkte mit dieser Klasseninstanz. (2) Intervall wird ignoriert, da Interrupt-Endpunkte deaktiviert sind.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

54/174

Überview

(3) Callback-Funktion, die Teil Ihrer Anwendung ist und herstellerspezifische Klassenanforderungen verarbeitet. Weitere Informationen finden Sie unter Kommunikation über die USB-Geräte-Herstellerklasse. Hinzufügen der Herstellerklasseninstanz zu den Gerätekonfigurationen Nachdem Sie eine Herstellerklasseninstanz erstellt haben, können Sie diese einer Konfiguration hinzufügen, indem Sie die Funktion USBD_Vendor_ConfigAdd() aufrufen. Die ExampDie folgende Datei zeigt, wie sl_usbd_vendor_add_to_configuration() mit Standardargumenten aufgerufen wird.
Example – Aufruf von sl_usbd_vendor_add_to_configuration()

sl_status_t Status;

Status = sl_usbd_vendor_add_to_configuration(class_nbr,

(1)

config_nbr_fs);

(2)

if (status ! SL_STATUS_OK) {

/* Ein Fehler ist aufgetreten. Hier sollte eine Fehlerbehandlung hinzugefügt werden. */

}

(1) Klassennummer, die der von sl_usbd_vendor_create_instance() zurückgegebenen Konfiguration hinzugefügt werden soll. (2) Konfigurationsnummer (hier wird sie einer Full-Speed-Konfiguration hinzugefügt).
Kommunikation mithilfe der USB-Geräteanbieterklasse
Allgemeine synchrone Kommunikation Asynchrone Kommunikation Vendor-Anfrage Allgemeines Die Vendor-Klasse bietet die folgenden Funktionen zur Kommunikation mit dem Host. Weitere Informationen zu den Parametern der Funktion finden Sie unter USB Device Vendor API.
Tabelle – Zusammenfassung der API für die Lieferantenkommunikation

Funktionsname
sl_usb d _v e nd o r_ re ad _b ulk_sy nc() sl_usb d _v e nd o r_write _b ulk_sy nc() sl_usb d _v e nd o r_ re ad _b ulk_asy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_sy nc() sl_usb d _v e nd o r_write _inte rrup t_sy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_asy nc
()
sl_usb d _v e nd o r_write _inte rrup t_asy nc
()

Operation Receives data from host through bulk OUT endpoint. This function is blocking. Sends data to host through bulk IN endpoint. This function is blocking. Receives data from host through bulk OUT endpoint. This function is non-blocking. Sends data to host through bulk IN endpoint. This function is non-blocking. Receives data from host through interrupt OUT endpoint. This function is blocking. Sends data to host through interrupt IN endpoint. This function is blocking. Receives data from host through interrupt OUT endpoint. This function is non-
Blockierung.
Sends data to host through interrupt IN endpoint. This function is non-blocking.

The vendor requests are also another way to communicate with the host. When managing vendor requests sent by the host, the application can receive or send data from or to the host using the control endpoint; you will need to provide an application callback passed as a parameter of sl_usbd_vendor_create_instance() . Synchronous Communication

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

55/174

Überview

Synchronous communication means that the transfer is blocking. When a function is called, the application blocks until the transfer completes with or without an error. A timeout can be specified to avoid waiting forever. The example below shows a read and write that receives data from the host using the bulk OUT endpoint and sends data to the host using the bulk IN endpoint.
Example – Synchronous Bulk Read and Write

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

Status;

status = sl_usbd_vendor_read_bulk_sync(class_nbr,

(1)

(void *)&rx_buf[0],

(2)

2u,

0u,

(3)

&xfer_len);

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(4)

2u,

0u,

(3)

false,

(5)

&xfer_len);

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

(1) The class instance number created with sl_usbd_vendor_create_instance() provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint.
(2) The application must ensure that the buffer provided to the function is large enough to accommodate all the data. Otherwise, synchronization issues might happen.
(3) In order to avoid an infinite blocking situation, a timeout expressed in milliseconds can be specified. A value of 809 makes the application task wait forever.
(4) Die Anwendung stellt den initialisierten Sendepuffer bereit.
(5) If this flag is set to true , and the transfer length is multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of the transfer.
The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_sync() and sl_usbd_vendor_write_interrupt_sync() , is similar to bulk endpoint communication functions presented in Example – Synchronous Bulk Read and Write.
Asynchrone Kommunikation
Asynchronous communication means that the transfer is non-blocking. When a function is called, the application passes the transfer information to the device stack and does not block. Other application processing can be done while the transfer is in progress over the USB bus. Once the transfer has completed, a callback function is called by the device stack to inform the application about the transfer completion. The example below shows asynchronous read and write.
Example – Asynchronous Bulk Read and Write

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

56/174

Überview

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

sl_status_t

Status;

status = sl_usbd_vendor_read_bulk_async(class_nbr,

(void *)&rx_buf[0],

(2)

2u,

app_usbd_vendor_rx_completed,

NULL);

(4)

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2u,

app_usbd_vendor_tx_completed,

Null

(4)

false);

(6)

if (status ! SL_STATUS_OK) {

/* $$$$ Behandeln Sie den Fehler. */

}

}

(1) (3)
(1) (3)

static void app_usbd_vendor_rx_completed(uint8_t class_nbr,

(3)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

if (status ! SL_STATUS_OK) {

/* $$$$ Do some processing. */

} anders {

/* $$$$ Behandeln Sie den Fehler. */

}

}

static void app_usbd_vendor_tx_completed(uint8_t class_nbr,

(3)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

if (status ! SL_STATUS_OK) {

/* $$$$ Do some processing. */

} anders {

/* $$$$ Behandeln Sie den Fehler. */

}

}

(1) The class instance number provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint. (2) The application must ensure that the buffer provided is large enough to accommodate all the data. Otherwise, there may be synchronization issues. (3) The application provides a callback function pointer passed as a parameter. Upon completion of the transfer, the device stack calls this callback function so that the application can finalize the transfer by analyzing the transfer result. For instance, on completion of a read operation, the application might perform processing on the received data. Upon write completion, the application can indicate if the write was successful and how many bytes were sent.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

57/174

Überview
(4) An argument associated with the callback can be also passed. Then in the callback context, some private information can be retrieved. (5) The application provides the initialized transmit buffer. (6) If this flag is set to true , and the transfer length is a multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of transfer. The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_async() and sl_usbd_vendor_write_interrupt_async() , is similar to the bulk endpoint communication functions presented in Example Asynchronous Bulk Read and Write.
Vendor Request
The USB 2.0 specification defines three types of requests: standard, class, and vendor. All standard requests are handled directly by the core layer, while class requests are managed by the proper associated class. Vendor requests can be processed by the vendor class. To process vendor requests, you must provide an application callback as a parameter of sl_usbd_vendor_create_instance() . After a vendor request is received by the USB device, it must be decoded properly. The example below shows vendor request decoding. Certain requests may be required to receive from or send to the host during the data stage of a control transfer. If no data stage is present, you only have to decode the Setup packet. This example shows the three types of data stage management: no data, data OUT and data IN.
Example – Vendor Request Decoding

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

58/174

Überview

#define APP_VENDOR_REQ_NO_DATA

OS-Version:

#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u

#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u

#define APP_VENDOR_REQ_DATA_BUF_SIZE

50 U

static uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];

static bool app_usbd_vendor_req (uint8_t

class_nbr,

const sl_usbd_setup_req_t *p_setup_req)

(1)

{

bool valid;

sl_status_t Status;

uint16_t req_len;

uint32_t xfer_len;

(void)class_nbr;

switch(p_setup_req->bRequest) { case APP_VENDOR_REQ_NO_DATA: valid = true; break;

(2) (3)

case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:

(4)

req_len = p_setup_req->wLength;

if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {

// Not enough room to receive data.

return (false);

}

// Receive data via Control OUT EP. // Wait transfer completion forever. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); if (status ! SL_STATUS_OK) { valid = false; } else { valid = true; } break;

case APP_VENDOR_REQ_SEND_DATA_TO_HOST:

(5)

req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;

// Fill buf with a pattern. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
req_len);

// Send data via Control IN EP. // Wait transfer completion forever. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); if (status ! SL_STATUS_OK) { valid = DEF_FAIL; } else { valid = DEF_OK; } break;

Standard:

(6)

// Request is not supported.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

59/174

Überview

valid =true;break;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Not enough room to receive data.return(false);}// Receive data via Control OUT EP.// Wait transfer completion forever. status =sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(status ! SL_STATUS_OK){ valid =false;}else{ valid =true;}break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Fill buf with a pattern.Mem_Set((void *)&AppVendorReqBuf[0u],’A’,
req_len);// Send data via Control IN EP.// Wait transfer completion forever. status =sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,false,&xfer_len);if(status ! SL_STATUS_OK){ valid = DEF_FAIL;}else{ valid = DEF_OK;}break;
default:(6)// Request is not supported. valid = DEF_FAIL;break;}return(valid);}

(1) The core will pass the Setup packet content to your application. The structure sl_usbd_setup_req_t contains the same fields as defined by the USB 2.0 specification (refer to section “9.3 USB Device Requests” of the specification for more details):

typedef-Struktur {

uint8_t bmRequestType; /* Characteristics of request.

*/

uint8_t bRequest; /* Specific request.

*/

uint16_t wValue; /* Varies according to request.

*/

uint16_t wIndex; /* Varies according to request; typically used as index.*/

uint16_t wLength; /* Transfer length if data stage anwesend.

*/

} sl_usbd_setup_req_t;

(2) Determine the request. You may use a switch statement if you are using different requests. In this example, there are three different requests corresponding to the three types of the data stage: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST, and APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) If no data stage is present, you only need to decode the other fields. The presence of a data stage or not is indicated by the field wLength being non-null or null.
(4) If the host sends data to the device, you must call the function sl_usbd_core_read_control_sync() . The buffer provided should be able to contain up to wLength bytes. If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(5) If the host receives data from the device, you must call the function sl_usbd_core_write_control_sync() . If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(6) In this example, all requests not recognized are marked by returning false to the core. This one will stall the data or status stage of the control transfer indicating to the host that the request is not supported.
The host sends vendor requests through a host vendor application. USb libraries, such as libusb, can be used to help you develop your custom host vendor application.

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

60/174

API-Dokumentation
API-Dokumentation
API-Dokumentation
Liste der Module
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API

Beschreibung
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

61/174

USB Device API
USB Device API
USB Device API
USB Device API.
Module
USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
Module
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funktionen

sl_status_t sl_status_t
sl_status_t sl_status_t sl_status_t
sl_status_t
sl_status_t
sl_status_t
sl_status_t sl_status_t sl_status_t sl_status_t sl_status_t

a sl_usbd_cdc_ cm_init(void)
GLOBAL VARIABLES.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Add a new instance of the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_ dd_to_configur tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
Add a CDC ACM subclass class instance into USB device configuration.
a a sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Get the CDC ACM serial emulation subclass enable state.
a a a sl_usbd_cdc_ cm_re d(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Receive data on the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_re d_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Receive data on the CDC ACM serial emulation subclass asynchronously.
a a sl_usbd_cdc_ cm_write(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Send data on the CDC ACM serial emulation subclass.
a a a sl_usbd_cdc_ cm_write_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Send data on the CDC ACM serial emulation subclass asynchronously.
a a a sl_usbd_cdc_ cm_get_line_control_st te(uint8_t subcl ss_nbr, uint8_t *p_line_ctrl)
Return the state of control lines.
a a a sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Get the current state of the line coding.
a a a sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Set a new line coding.
a a a sl_usbd_cdc_ cm_set_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Set a line state event(s).
a a a a sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Clear a line state event(s).

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

63/174

USB Device ACM API
Makros
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODUL.
#define SL_USBD_CDC_ACM_PARITY_NONE 0u
PORT SETTINGS DEFINES.
#define SL_USBD_CDC_ACM_PARITY_ODD 1u #define SL_USBD_CDC_ACM_PARITY_EVEN 2u #define SL_USBD_CDC_ACM_PARITY_MARK 3u #define SL_USBD_CDC_ACM_PARITY_SPACE 4u #define SL_USBD_CDC_ACM_STOP_BIT_1 0u #define SL_USBD_CDC_ACM_STOP_BIT_1_5 1u #define SL_USBD_CDC_ACM_STOP_BIT_2 2u #define SL_USBD_CDC_ACM_CTRL_BREAK 0 01u
LINE EVENTS FLAGS DEFINES.
#define SL_USBD_CDC_ACM_CTRL_RTS 0 02u #define SL_USBD_CDC_ACM_CTRL_DTR 0 04u #define SL_USBD_CDC_ACM_STATE_DCD 0 01u #define SL_USBD_CDC_ACM_STATE_DSR 0 02u #define SL_USBD_CDC_ACM_STATE_BREAK 0 04u #define SL_USBD_CDC_ACM_STATE_RING 0 08u #define SL_USBD_CDC_ACM_STATE_FRAMING 0 10u #define SL_USBD_CDC_ACM_STATE_PARITY 0 20u #define SL_USBD_CDC_ACM_STATE_OVERUN 0 40u #define SL_USBD_CDC_ACM_CALL_MGMT_DEV 0 01u
CALL MANAGEMENT CAPABILITIES.
#define SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI 0 02u #define SL_USBD_CDC_ACM_CALL_MGMT_DATA_OVER_DCI 0 02u | 0 01u)
Function Documentation
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (void )
GLOBAL VARIABLES. Parameters
Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

64/174

USB Device ACM API

Typ
Leere

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
Rückgaben

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Beschreibung

sl_usbd_cdc_acm_create_instance

sl_status_t sl_usbd_cdc_acm_create_instance (uint16_t line_state_interval, uint16_t call_mgmt_capabilities, sl_usbd_cdc_acm_callbacks_t * p_acm_callbacks, uint8_t * p_subclass_nbr)

Add a new instance of the CDC ACM serial emulation subclass.
Parameter

Typ
uint16_t
uint16_t

Direction Argument Name

Beschreibung

N / A

line_state_interval Line state notification interval in milliseconds (value must

be a power of 2).

N / A

call_mgmt_capabilities Call Management Capabilities bitmap. OR’ed of the

following flags:

SL_USBD_CDC_ACM_CALL_MGMT_DEV Device handles call management itself. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Device can send/receive call management information over a Data Class interface.

sl_usbd_cdc_acm_callbacks_t N/A
*

uint8_t *

N / A

p_acm_callbacks p_subclass_nbr

Optional pointers to callback functions to be called on various events.
Param to variable that will receive CDC ACM serial emulation subclass instance number.

Rückgaben

Return SL_STATUS_OK on success or another SL_STATUS code on failure.

sl_usbd_cdc_acm_add_to_configuration

sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t subclass_nbr, uint8_t config_nbr)

Add a CDC ACM subclass class instance into USB device configuration.
Parameter

Typ
uint8_t uint8_t

Direction N/A N/A

Argument Name
subclass_nbr config_nbr

Description CDC ACM serial emulation subclass instance number. Configuration index to add new test class interface to.

Rückgaben

Copyright © 2025 Silicon Laboratories. Alle Rechte vorbehalten.

65/174

USB Device ACM API
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

sl_usbd_cdc_acm_is_enabled

sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)

Get the CDC ACM serial emulation subclass enable state.
Parameter

Typ

Richtung

Argument Name

Beschreibung

uint8_t N/A

subclass_nbr CDC ACM serial emulation subclass instance number.

bool * N/A

p_enabled

Boolean to a variable that will receive enable status. The variable is set to true, CDC ACM serial emulation is enabled. The va

Dokumente / Ressourcen

SILICON LABS USB Device Stack [pdf] Bedienungsanleitung
USB Device Stack, Device Stack, Stack

Verweise

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *