Zásobník zařízení USB
Specifikace
- USB verze: 1.5.1
- Datum vydání: 21. července 2025
- Verze sady SDK Simplicity: 2025.6.1
Konec produktuview
Sada USB zařízení od společnosti Silicon Labs poskytuje všestranné a
snadno použitelné USB připojení pro projekty IoT, které usnadňuje
komunikace mezi síťovými koprocesory a hostiteli.
Vlastnosti
- Efektivní stack USB zařízení
- Ideální pro IoT projekty
- Podpora komunikace mezi síťovými koprocesory a
hostitelé
Návod k použití produktu
Konfigurace zařízení USB
Nakonfigurujte nastavení zařízení USB podle vašeho projektu
požadavky v části Konfigurace zařízení USB
v dokumentaci.
Průvodce programováním USB zařízení
Řiďte se Průvodcem programováním USB zařízení, abyste pochopili, jak
programovat a interagovat se zařízením USB pro různé účely
aplikací.
Třídy zařízení USB
Sekce Třídy zařízení USB poskytuje přehledview různých
třídy jako CDC ACM, HID, MSC SCSI a Vendor Class. Vyberte
vhodnou třídu na základě funkčnosti vašeho zařízení.
Odstraňování problémů se zařízením USB
Pokud narazíte na jakékoli problémy s USB zařízením, podívejte se na
Sekce Odstraňování problémů se zařízením USB s řešeními a laděním
tipy.
USB hostitelský systém Microsoft Windows
Pokud používáte zařízení USB s operačním systémem Microsoft Windows
Hostitel, ujistěte se, že dodržujete pokyny uvedené v
dokumentace pro bezproblémovou integraci.
FAQ
Otázka: Jaké jsou některé běžné exampméně zařízení, která mohu použít
tento USB stack?
A: Stack USB umožňuje sestavovat zařízení, jako například
Adaptéry USB-sériový port, myši nebo klávesnice, vyměnitelná úložiště
zařízení a vlastní zařízení.
Otázka: Existují nějaké specifické softwarové požadavky pro použití tohoto
Zásobník USB zařízení?
A: Kompatibilní software zahrnuje Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (Sbírka kompilátorů GNU),
IAR Embedded Workbench pro ARM a IAR EWARM.
Univerzální sériová sběrnice USB
Univerzální sériová sběrnice USB
USB přesview Nadview
Poznámky k vydání USB
Specifikace a funkceview
Konfigurace zařízení USB skončilaview
Průvodce programováním USB zařízeníview
Třídy zařízení USB nadview CDC ACM třída nadview Třída HID nadview Třída MSC SCSI Overview Třída dodavatele nadview
Dokumentace k rozhraní USB API Rozhraní API pro zařízení USB ACM rozhraní API pro zařízení USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t Rozhraní API pro CDC zařízení USB a sl_usbd_cdc_subcl ss_driver_t Rozhraní API pro jádro zařízení USB
sl_usbd_device_config_t sl_usbd_setup_req_t
API HID pro zařízení USB sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t Rozhraní MSC rozhraní API pro zařízení USB
sl_usbd_msc_subcl ss_driver_t Rozhraní API pro MSC SCSI zařízení USB
sl_usbd_msc_scsi_callbacks_t
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
1/174
Univerzální sériová sběrnice USB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API dodavatele USB zařízení sl_usbd_vendor_callbacks_t
Dokumentace API Řešení problémů se zařízením USB
Nadview USB hostitelský systém Microsoft Windows
Nadview
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
2/174
Nadview
Nadview
Zařízení USB
USB je jedno z nejúspěšnějších komunikačních rozhraní v historii počítačových systémů a je de facto standardem pro připojení počítačových periferií. Stack USB Device Stack od Silicon Labs je modul USB zařízení navržený speciálně pro vestavěné systémy. Byl od základu vytvořen s ohledem na kvalitu, škálovatelnost a spolehlivost společnosti Silicon Labs a prošel přísným ověřovacím procesem, aby splňoval specifikaci USB 2.0. Tato dokumentace popisuje, jak inicializovat, spustit a používat stack USB Device Stack od Silicon Labs. Vysvětluje různé konfigurační hodnoty a jejich použití. Obsahuje také podrobný popis...view technologie, typy možností konfigurace, implementační postupy a např.ampméně typického použití pro každou dostupnou třídu.
Abychom vám pomohli rychle pochopit koncepty USB, dokumentace obsahuje mnoho příkladů...ampUSB se základními funkcemi. Tyto examples vám poskytnou framework, který vám umožní rychle sestavovat zařízení. Tyto exampzahrnují:
Adaptér USB-sériový port (třída komunikačních zařízení) Myš nebo klávesnice (třída zařízení s rozhraním HID) Vyměnitelné paměťové zařízení (třída velkokapacitních paměťových zařízení) Vlastní zařízení (třída dodavatele)
Následuje konecview sekcí dokumentace:
Specifikace a funkce Konfigurace zařízení USB Průvodce programováním zařízení USB Třídy zařízení USB
Třída CDC ACM Třída HID Třída MSC Třída SCSI Třída dodavatele Řešení problémů se zařízením USB Operační systém Microsoft Windows Hostitel USB
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
3/174
USB
USB
USB verze 1.5.1 21. července 2025 – Poznámky k vydání
Verze sady SDK Simplicity 2025.6.1
Efektivní sada USB zařízení od společnosti Silicon Labs nabízí všestranné a snadno použitelné připojení USB, ideální pro projekty IoT, včetně komunikace mezi síťovými koprocesory a hostiteli. Klikněte zde pro zobrazení dřívějších verzí.
Shrnutí vydání
Klíčové funkce | Změny API | Opravy chyb | Aktivace čipu
Klíčové vlastnosti
Pouze změny základní platformy.
Změny API
Žádný.
Opravy chyb
Žádný.
Povolení čipu
Žádný.
Klíčové vlastnosti
Nové funkce | Vylepšení | Odstraněné funkce | Zastaralé funkce
Nové funkce
Žádný.
Vylepšení
Pouze změny základní platformy.
Odstraněné funkce
Žádný.
Zastaralé funkce
Žádný.
Změny API
Nová API | Upravená API | Odstraněná API | Zastaralá API
Nová API
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
4/174
USB
Žádný.
Upravená API
Žádný.
Odstraněná API
Žádný.
Zastaralá API
Žádný.
Opravy chyb
Žádný.
Povolení čipu
Žádný.
Aplikace Přampzměny
Nový Přamples | Upravený Examples | Odstraněno Examples | Zastaralé Examples
Nový Přamples
Žádný.
Upraveno Přamples
Žádný.
Odstraněn Přamples
Žádný.
Zastaralé Examples
Žádný.
Dopad změn ve vydání
Prohlášení o dopadu | Průvodce migrací
Prohlášení o dopadu
Žádný.
Průvodce migrací
Žádný.
Známé problémy a omezení
Žádný.
Použití této verze
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
5/174
USB
Co obsahuje tato verze? | Kompatibilní software | Instalace a použití | Nápověda a zpětná vazba
Co je ve vydání?
Aplikace USB Device Stack Examples
Kompatibilní software
Software
Simplicity SDK Simplicity Studio Simplicity Commander GCC (kolekce kompilátorů GNU) IAR Embedded Workbench pro ARM IAR EWARM
Kompatibilní verze nebo varianta
2025.6.0 5.11.0 1.18.2 (součástí Simplicity Studio) 12.2.1 (součástí Simplicity Studio) 9.40.1 (součástí Simplicity Studio)
Instalace a použití
Chcete-li nastartovat svůj vývoj, podívejte se na naše:
Průvodce programováním USB zařízení. Dokumentace API.
Informace o integraci služby Secure Vault naleznete v části Secure Vault.
Na review Oznámení o zabezpečení a softwarových doporučeních a správa předvoleb oznámení:
ò Přejděte na https://community.silabs.com/. ó Přihlaste se pomocí svých přihlašovacích údajů. ô Klikněte na svého profesionálafile ikona v pravém horním rohu stránky.
õ V rozbalovací nabídce vyberte možnost Oznámení. ö V části Oznámení přejděte na kartu Oznámení mých produktů, kdeview historické bezpečnostní a softwarové poradenství
oznámení
÷ Chcete-li spravovat své preference, použijte kartu Spravovat oznámení, kde si můžete přizpůsobit, které aktualizace produktů a upozornění chcete
dostávat.
Doporučená nastavení konfigurace naleznete zde.
Chcete-li se dozvědět více o softwaru v této verzi, nahlédněte do naší online dokumentace.
Nápověda a zpětná vazba
Kontaktujte podporu Silicon Labs. Chcete-li k získání odpovědí použít náš nástroj Ask AI, podívejte se do vyhledávacího pole v horní části této stránky.
Poznámka: Funkce Zeptejte se AI je experimentální.
Získejte pomoc od naší komunity vývojářů.
Zásady uvolňování a údržby sady SDK
Viz naše Zásady pro vydávání a údržbu SDK.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
6/174
Nadview
Nadview
Specifikace
Splňuje požadavky „specifikace univerzální sériové sběrnice, revize 2.0“. Implementuje „oznámení o změně technického popisu asociace rozhraní (ECN)“. Typy přenosů
Třídy USB pro hromadné přerušení (Control Bulk Interrupt) Třída komunikačního zařízení (CDC) Abstraktní model řízení (ACM) Zařízení s rozhraním pro lidský interface (HID) Třída velkokapacitního úložiště (MSC) Rámec tříd specifických pro dodavatele
Vlastnosti
Škálovatelné tak, aby zahrnovalo pouze požadované funkce a minimalizovalo tak nároky na paměť. Podporuje plnou rychlost (12 Mbit/s). Podporuje kompozitní (multifunkční) zařízení. Podporuje zařízení s více konfiguracemi. Podporuje funkce pro úsporu energie přes USB (uspání a obnovení provozu zařízení). Kompletní integrace třídy Mass Storage do operačního systému Micrium. File Systémový modul vyvinutý s abstrakční vrstvou CMSIS-RTOS2, aby mohl fungovat s různými operačními systémy. Silicon Labs GSDK je dodáván s porty pro FreeRTOS a Micrium OS.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
7/174
Nadview
Nadview
Konfigurace zařízení USB
Tato část popisuje, jak nakonfigurovat USB zařízení Silicon Labs. Existují tři skupiny konfiguračních parametrů:
Konfigurace jádra zařízení USB Konfigurace informací o zařízení USB Konfigurace hardwaru zařízení USB
Konfigurace jádra zařízení USB
USB zařízení od Silicon Labs lze konfigurovat během kompilace pomocí sady #defines umístěných v souboru sl_usbd_core_config.h. fileUSB Device používá #defines, pokud je to možné, protože umožňuje škálování velikosti kódu a dat během kompilace na základě povolených funkcí. To umožňuje upravit velikost paměti pouze pro čtení (ROM) a paměti s náhodným přístupem (RAM) zařízení Silicon Labs USB Device na základě požadavků vaší aplikace.
Doporučeno: Spusťte proces konfigurace s výchozími hodnotami (zvýrazněny tučně).
Níže uvedené sekce jsou uspořádány podle pořadí v konfiguraci šablony. file, sl_usbd_core_config.h.
Konfigurace základních tříd
Konfigurace jádra
Tabulka – Konstanty konfigurace jádra zařízení USB
Konstanta Popis
Výchozí hodnota
VELIKOST ZÁSOBNÍKU SL_USBD_TA SK
Konfiguruje velikost zásobníku v bajtech pro základní úlohu USBD.
4096
SL_USBD_TA SK_PRIORIT Y
Konfiguruje prioritu základní úlohy USBD. Jedná se o prioritu CMSIS-RTOS2.
Vysoká priorita os
SL_USBD_A AUTOMATICKÉ_STARTOVÁNÍ_USB_ZAŘÍZENÍ E
Pokud je tato možnost povolena, zařízení USB se automaticky spustí po spuštění jádra a první úloha jádra USBD bude naplánována. Pokud je tato možnost zakázána, aplikace bude muset zavolat sl_usbd_core_start_device(), až bude připravena k detekci hostitelem USB.
SL_USBD_C Celkový počet konfigurací, které budou přidány pomocí funkce sl_usbd_add_configuration().
1
Funkce ONFIGURATI.
ON_QUANTI
TY
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
8/174
Nadview
Konstantní
SL_USBD _ROZHRANÍ_QU ANTITY
SL_USBD _ALT_INT_ERFACE_ KVANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITA
SL_USBD _POPISY
PTOR_Q
UANTITY
SL_USBD _ŘETĚZEC _MNOŽSTVÍ
TY
SL_USBD _OPEN_E NDPOIN TS_QUANTITY
Popis Celkový počet rozhraní USB, která mají být přidána pro všechny vaše konfigurace. To do značné míry závisí na použité třídě (třídách). Další informace o tom, kolik rozhraní instance třídy vyžaduje, naleznete v části „Potřeby zdrojů z jádra“ vaší třídy (tříd).
Celkový počet alternativních rozhraní USB, která mají být přidána pro všechny vaše konfigurace. To do značné míry závisí na použité třídě (třídách). Tato hodnota musí být vždy rovna nebo větší než SL_USBD_INTERFACE_QUANTITY. Další informace o tom, kolik alternativních rozhraní instance třídy vyžaduje, naleznete v části „Potřeby zdrojů z jádra“ vaší třídy (tříd).
Celkový počet skupin rozhraní USB, které budou přidány pro všechny vaše konfigurace. To do značné míry závisí na použité třídě (třídách). Další informace o tom, kolik skupin rozhraní vyžaduje instanci třídy, naleznete v části „Potřeby zdrojů z jádra“ vaší třídy (tříd).
Celkový počet deskriptorů koncových bodů, které budou přidány pro všechny vaše konfigurace. To do značné míry závisí na použité třídě (třídách). Další informace o tom, kolik deskriptorů koncových bodů instance třídy vyžaduje, naleznete v části „Počet koncových bodů“ v části „Potřeba zdrojů z jádra“ vaší třídy (tříd). Upozorňujeme, že řídicí koncové body zde není nutné brát v úvahu. Celkový počet řetězců USB. Nastavením množství na nulu se funkce deaktivuje. Deaktivace této hodnoty způsobí, že zařízení nebude ukládat žádné řetězce popisu USB předávané z aplikace. To znamená, že hostitel nebude moci načíst řetězce popisu (například výrobce a název produktu). Celkový počet otevřených koncových bodů na konfiguraci. Zařízení vyžaduje alespoň dva otevřené koncové body pro přenosy řízení, ale musíte také přidat koncové body použité (tříd) třídy (tříd). Další informace o tom, kolik otevřených koncových bodů instance třídy vyžaduje, naleznete v části „Počet koncových bodů“ v části „Potřeba zdrojů z jádra“ vaší třídy (tříd).
Výchozí hodnota
10
2
20 30 20
Konfigurace tříd
Třídy mají specifické konfigurace pro kompilaci. Další informace naleznete v části Třídy zařízení USB.
Konfigurace informací o zařízení USB
Konfigurace souboru sl_usbd_device_config.h file přeskupuje definice #define-s během kompilace pro nastavení základních informací o vašem zařízení, jako je ID dodavatele/produktu, řetězce zařízení atd. Níže uvedená tabulka popisuje každou konfiguraci informací dostupnou v této konfiguraci. file.
Tabulka – Definice konfigurace informací o zařízení USB
Konstantní
SL_USBD_DEVIC E_VENDOR_ID
SL_USB_ZAŘÍZENÍ E_PRODUCT_ID
Popis Vaše identifikační číslo dodavatele, jak ho sdělilo fórum USB Implementers Forum. Další informace o tom, jak získat ID dodavatele, naleznete na adrese http://www.usb.org/developers/vendor/. Vaše identifikační číslo produktu.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
9/174
Nadview
Konstantní
Popis
SL_USBD_DEVICE_RELEASE Číslo verze vašeho zařízení. _NUMBER
SL_USBD_DEVICE_MANUFA Řetězec popisující výrobce vašeho zařízení. Tato konfigurace je ignorována, pokud
CTURER_STRING
Konfigurace SL_USBD_STRING_QUANTITY je nastavena na 0.
SL_USBD_DEVICE_PRODUC Řetězec popisující váš produkt. Tato konfigurace je ignorována, pokud je konfigurace
T_STRING
SL_USBD_STRING_QUANTITY je nastaveno na 0.
SL_USBD_DEVICE_SERIAL_N Řetězec obsahující sériové číslo vašeho zařízení. Tato konfigurace je ignorována, pokud
UMBER_STRING
Konfigurace SL_USBD_STRING_QUANTITY je nastavena na 0.
SL_USBD_DEVICE_LANGUA Identifikační číslo jazyka řetězců vašeho zařízení. Možné hodnoty jsou:
GE_ID
– SL_USBD_LANG_ID_ARABIC_SAUDI_ARÁBIA
– 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
Tato konfigurace je ignorována, pokud je konfigurace SL_USBD_STRING_QUANTITY nastavena na 0.
Konfigurace hardwaru zařízení USB
V závislosti na používaném zařízení Silicon Labs budete pravděpodobně muset nakonfigurovat pin a port GPIO pro signál USB VBUS Sense. Definice konfigurace jsou v hlavičce sl_usbd_hardware_config.h. file.
Konstantní
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Popis
Port GPIO pro signál USB VBUS Sense na vaší desce. Pin GPIO pro signál USB VBUS Sense na vaší desce.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
10/174
Nadview
Nadview
Průvodce programováním USB zařízení
Tato část vysvětluje, jak používat modul USB zařízení.
Počáteční nastavení modulu USB zařízení
Tato část popisuje základní kroky potřebné k inicializaci modulu USB zařízení a k přidání, přípravě a spuštění zařízení. Inicializace modulu USB zařízení Inicializace jádra USB zařízení Inicializace rozhraní ACl (ACl ss) Přidání USB zařízení Vytvoření USB zařízení Přidání konfigurace (konfigurací) Přidání funkce (funkcí) USB Spuštění USB zařízení
Funkce pro zachycení událostí
Inicializace modulu USB zařízení
Inicializace jádra zařízení USB
Začněte inicializací jádra modulu zařízení B voláním funkce sl_usbd_core_init(). Níže uvedený příklad ukazuje volání sl_usbd_core_init().
Example – Volání sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Inicializace třídy(y)
Po inicializaci jádra modulu USB zařízení je nutné inicializovat každou třídu, kterou chcete použít. Další informace naleznete v části „Průvodce programováním“ vašeho ACL seznamu (spisů).
Sestavení USB zařízení
Přidávání konfigurací
Po úspěšné inicializaci zařízení můžete začít přidávat funkce USB, počínaje novou konfigurací. Zařízení musí mít alespoň jednu konfiguraci. Chcete-li přidat konfiguraci (konfigurace), zavolejte funkci sl_usbd_core_dd_configuration(). Tato funkce musí být volána pro každou konfiguraci, kterou chcete přidat. PříkladampNíže uvedený obrázek ukazuje, jak přidat plnou rychlost.
Example – Přidání konfigurace (konfigurací) do vašeho zařízení
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
11/174
Nadview
stav sl_status_t; uint8_t config_nbr_fs;
/* Přidávání plnorychlostní konfigurace do zařízení. */
stav = sl_usbd_core_add_configuration(0,
/* Žádné speciální atributy pro konfiguraci. */
100u,
/* Maximální spotřeba energie: 100 mA.
*/
RYCHLOST_USB_ZAŘÍZENÍ_SL_PLNÁ,
/* Konfigurace s plnou rychlostí.
*/
„Konfigurace přidání Ex“ampkonfigurace pro plnou rychlost
&config_nbr_fs);
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Přidání funkcí USB
Po úspěšném přidání alespoň jedné konfigurace do zařízení můžete přidat rozhraní a koncové body. Každá třída USB má své vlastní požadavky, pokud jde o typ rozhraní a koncových bodů, množství a další parametry. Silicon Labs USB Device přidává rozhraní a koncové body do tříd, které nabízí.
Z vaší aplikace můžete vytvořit instanci třídy USB a přidat ji do konfigurace. Další informace o konceptu instancí tříd zařízení USB naleznete v části Třídy zařízení USB. Upozorňujeme, že můžete vytvořit instance a přidat do konfigurace mnoho různých instancí tříd, a vytvořit tak multifunkční (kompozitní) zařízení.
BývalýampNíže uvedený obrázek ukazuje, jak vytvořit instanci třídy a přidat ji do konfigurace.
Example – Přidání instance třídy do vašeho zařízení
stav sl_status_t; uint8_t číslo_třídy;
/* Vytvořte instanci třídy, kterou chcete použít.*/ /* V závislosti na třídě může mít tato funkce více argumentů. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
/* Přidání instance třídy do konfigurace Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Číslo třídy vrácené funkcí sl_usbd_ _create_instance. */
config_nbr_fs); /* Číslo konfigurace vrácené funkcí sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Spuštění USB zařízení
Ve výchozím nastavení bude zařízení automaticky spuštěno úlohou jádra USB zařízení po dokončení inicializace zařízení a spuštění jádra. Chcete-li ovládat, kdy se zařízení spustí a stane se viditelným pro USB hostitel, použijte konfigurační příkaz SL_USBD_AUTO_START_USB_DEVICE k deaktivaci funkce automatického spuštění. Pokud je tato funkce deaktivována, můžete zařízení po sestavení/přípravě spustit a zviditelnit pro USB hostitele voláním funkce sl_usbd_core_start_device().
BývalýampNíže uvedený obrázek ukazuje, jak spustit zařízení pomocí funkce sl_usbd_core_start_device().
Example – Spuštění zařízení
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
12/174
Nadview
stav sl_status_t;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Funkce pro zachycení událostí
Jádrový modul USB Device nabízí dvě slabé funkce pro zapojení, které můžete ve své aplikaci předefinovat. Jejich účelem je upozornit na události sběrnice a konfigurace.
Tabulka – Funkce pro zachycení událostí USB
Událost
Popis
Autobus
Voláno, když dojde k události USB Bus
Konfigurace Voláno, když dojde k události konfigurace USB
Podpis funkce
void sl_usbd_on_bus_event(událost sl_usbd_bus_event_t); void sl_usbd_on_config_event(událost sl_usbd_config_event_t, uint8_t config_nbr);
Example – Funkce pro zachycení událostí
void sl_usbd_on_bus_event(událost sl_usbd_bus_event_t) { switch(událost) { case SL_USBD_EVENT_BUS_CONNECT:
// voláno, když je USB kabel vložen do hostitelského řadiče break;
case SL_USBD_EVENT_BUS_DISCONNECT: // voláno při odpojení USB kabelu od hostitelského řadiče break;
case SL_USBD_EVENT_BUS_RESET: // voláno, když hostitel odešle příkaz reset break;
case SL_USBD_EVENT_BUS_SUSPEND: // voláno, když hostitel odešle příkaz k pozastavení break;
case SL_USBD_EVENT_BUS_RESUME: // voláno, když hostitel odešle příkaz probuzení break;
výchozí: přerušení; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t událost, uint8_t config_nbr) { switch(událost) { case SL_USBD_EVENT_CONFIG_SET:
// voláno, když hostitel nastaví přerušení konfigurace;
case SL_USBD_EVENT_CONFIG_UNSET: // voláno, když je konfigurace zrušena break;
výchozí: přerušení; } }
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
13/174
Nadview
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
14/174
Nadview
Nadview
Třídy zařízení USB
Třídy USB dostupné v Silicon Labs USB Device sdílejí některé společné vlastnosti. Tato část vysvětluje tyto vlastnosti a jejich interakce s jádrovou vrstvou.
Více informací o konkrétní třídě naleznete v následujících odkazech:
Třída CDC ACM Třída HID Třída MSC Třída SCSI Třída dodavatele
O instancích tříd
Třídy USB dostupné v třídě USB Device implementují koncept instancí tříd. Instance třídy představuje jednu funkci v rámci zařízení. Funkce může být popsána jedním rozhraním nebo skupinou rozhraní a patří do určité třídy.
Každá implementace třídy USB má některé společné konfigurace a funkce, založené na konceptu instance třídy. Běžné konfigurace a funkce jsou uvedeny v tabulce níže. V názvu sloupce „Konstanty nebo funkce“ lze zástupný symbol XXXX nahradit názvem třídy: CDC, HID, MSC, CDC_ACM nebo VENDOR (pro názvy funkcí „Vendor“).
Tabulka – Konstanty a funkce související s konceptem více instancí tříd
Konstanta nebo funkce
SL_USBD_XXXX_CL ASS_INS MNOŽSTVÍ_TANCÍ
MNOŽSTVÍ_KONFIGURACE_SL_USBD_XXXX
sl_usb d _XXXX_create _instance ()
sl_usbd_XXXX_add_to_conf iguration()
Popis
Konfiguruje maximální počet instancí třídy.
Konfiguruje maximální počet konfigurací. Během inicializace třídy bude vytvořená instance třídy přidána do jedné nebo více konfigurací. Vytvoří novou instanci třídy.
Přidá existující instanci třídy do zadané konfigurace zařízení.
Z hlediska implementace kódu třída deklaruje lokální globální proměnnou, která obsahuje řídicí strukturu třídy. Tato řídicí struktura třídy je asociována s jednou instancí třídy a bude obsahovat specifické informace pro správu instance třídy.
Následující obrázky znázorňují několik případových scénářů. Každý obrázek obsahuje příklad kóduampcož odpovídá danému scénáři.
Obrázek – Více instancí třídy – Zařízení FS (1 konfigurace s 1 rozhraním) představuje typické zařízení USB. Zařízení je Full-Speed (FS) a obsahuje jednu konfiguraci. Funkce zařízení je popsána jedním rozhraním složeným z dvojice koncových bodů pro datovou komunikaci. Je vytvořena jedna instance třídy, která vám umožní spravovat celé rozhraní s přidruženým koncovým bodem.
Obrázek – Více instancí třídy – Konfigurace zařízení FS 1 s 1 rozhraním)
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
15/174
Nadview
Kód odpovídající obrázku – Více instancí tříd – Zařízení FS (1 konfigurace s 1 rozhraním) je zobrazen v příkladu.ample níže.
Example – Více instancí třídy – Konfigurace zařízení FS 1 s 1 rozhraním)
stav sl_status_t; uint8_t třída_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Zpracování události povolení třídy. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Zpracování události zakázání třídy. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
stav = sl_usbd_XXXX_init();
(2)
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
stav = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&třída_0);
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
stav = sl_usbd_XXXX_add_to_configuration(třída_0, konfigurace_0);
(4)
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
(1) Každá třída nabízí sadu funkcí zpětného volání pro události připojení/odpojení zařízení a pro události specifické pro danou třídu. Objekt struktury zpětného volání se předává jako argument při vytváření instance třídy pomocí sl_usbd_XXXX_create_instance().
funkce.
(1) Inicializujte třídu. Budou inicializovány všechny interní proměnné, struktury a porty třídy. Upozorňujeme, že funkce Init() v některých třídách může přijímat jiné argumenty.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
16/174
Nadview
(2) Vytvořte instanci třídy s názvem class_0. Funkce sl_usbd_XXXX_create_instance() alokuje strukturu řízení třídy asociovanou s class_0. V závislosti na třídě může mít sl_usbd_XXXX_create_instance() kromě čísla třídy další parametry, které představují informace specifické pro třídu uložené v struktuře řízení třídy. aaa (3) Přidejte instanci třídy class_0 k zadanému číslu konfigurace config_0. sl_usbd_XXXX_add_to_configuration() vytvoří rozhraní 0 a jeho přidružené koncové body IN a OUT. V důsledku toho instance třídy zahrnuje rozhraní 0 a jeho koncové body. Veškerá komunikace prováděná na rozhraní 0 bude používat číslo instance třídy class_0. Obrázek – Více instancí třídy – Zařízení FS (2 konfigurace a více rozhraní) představuje složitější příklad.amptj. Zařízení s plnou rychlostí se skládá ze dvou konfigurací. Zařízení má dvě funkce, které patří do stejné třídy, ale každá funkce je popsána dvěma rozhraními a má dvojici obousměrných koncových bodů. V tomto příkladuamptj. vytvoří se dvě instance třídy. Každá instance třídy je přidružena ke skupině rozhraní, na rozdíl od Obrázku – Více instancí tříd – Zařízení FS (1 konfigurace s 1 rozhraním) a Obrázku – Více instancí tříd – Zařízení FS (2 konfigurace a více rozhraní), kde byla instance třídy přidružena k jednomu rozhraní.
Obrázek – Více instancí tříd – Konfigurace zařízení FS 2 a více rozhraní)
Kód odpovídající obrázku – Více instancí tříd – Zařízení FS (2 konfigurace a více rozhraní) je zobrazen v příkladu.ampníže. Ošetření chyb je pro přehlednost vynecháno.
Example – Více instancí tříd – Konfigurace zařízení FS 2 a více rozhraní)
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
17/174
Nadview
stav sl_status_t; uint8_t třída_0; uint8_t třída_1;
stav = sl_usbd_XXXX_init();
stav = sl_usbd_XXXX_create_instance(&třída_0); stav = sl_usbd_XXXX_create_instance(&třída_1);
status = sl_usbd_XXXX_add_to_configuration(třída_0, cfg_0); status = sl_usbd_XXXX_add_to_configuration(třída_1, cfg_0);
status = sl_usbd_XXXX_add_to_configuration(třída_0, cfg_1); status = sl_usbd_XXXX_add_to_configuration(třída_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Inicializujte třídu. Budou inicializovány veškeré interní proměnné, struktury a porty třídy.
(2) Vytvořte instanci třídy class_0. Funkce sl_usbd_XXXX_create_instance() alokuje řídicí strukturu třídy asociovanou s class_0.
(3) Vytvořte instanci třídy class_1. Funkce sl_usbd_XXXX_create_instance() alokuje další řídicí strukturu třídy spojenou s class_1.
(4) Přidejte instanci třídy class_0 do konfigurace cfg_0. Funkce sl_usbd_XXXX_add_to_configuration() vytvoří rozhraní 0, rozhraní 1, alternativní rozhraní a související koncové body IN a OUT. Číslo instance třídy class_0 bude použito pro veškerou datovou komunikaci na rozhraní 0 nebo rozhraní 1.
(5) Přidejte instanci třídy class_1 do konfigurace cfg_0. Funkce sl_usbd_XXXX_add_to_configuration() vytvoří rozhraní 2, rozhraní 3 a jejich přidružené koncové body IN a OUT. Číslo instance třídy class_1 bude použito pro veškerou datovou komunikaci na rozhraní 2 nebo rozhraní 3.
(6) Přidejte stejné instance tříd, class_0 a class_1, do druhé konfigurace, cfg_1.
Každá třída definuje strukturu typu sl_usbd_XXXX_callbacks_t. Jejím účelem je poskytnout každé třídě sadu callback funkcí, které se volají při výskytu události. V každé třídě jsou přítomny dvě callback funkce. Jsou uvedeny v tabulce níže.
Tabulka – Běžné funkce zpětného volání tříd
Pole Popis .enable Voláno, když je instance třídy USB úspěšně povolena. .disable Voláno, když je instance třídy USB zakázána.
Podpis funkce void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
18/174
Nadview
Nadview
Třída ACM zařízení USB CDC
Základní třída CDC zařízení USB nadview Potřeby zdrojů třídy CDC ACM pro zařízení USB od jádra podtřídy CDC ACM zařízení USBview Konfigurace třídy ACM pro zařízení USB CDC – Průvodce programováním třídy ACM pro zařízení USB CDC
Tato část popisuje třídu Communications Device Class (CDC) a související podtřídu CDC podporovanou sadou USB Device od společnosti Silicon Labs. Silicon Labs USB-Device v současné době podporuje podtřídu Abstract Control Model (ACM), která se běžně používá pro emulaci sériového portu.
CDC zahrnuje různá telekomunikační a síťová zařízení. Mezi telekomunikační zařízení patří analogové modemy, analogové a digitální telefony, ISDN terminálové adaptéry atd. NapříkladampMezi síťová zařízení patří ADSL a kabelové modemy, ethernetové adaptéry a rozbočovače. CDC definuje rámec pro zapouzdření stávajících standardů komunikačních služeb, jako je V.250 (pro modemy přes telefonní síť) a Ethernet (pro zařízení lokální sítě), pomocí USB připojení. Komunikační zařízení má na starosti správu zařízení, správu hovorů v případě potřeby a přenos dat.
CDC definuje sedm hlavních skupin zařízení. Každá skupina patří do modelu komunikace, který může zahrnovat několik podtříd. Každá skupina zařízení má kromě základní třídy CDC svůj vlastní specifikační dokument. Těchto sedm skupin je:
Veřejná telefonní síť (PSTN), zařízení včetně modemů s hlasovým pásmem, telefonů a zařízení pro sériovou emulaci. Zařízení sítě s integrovanými službami (ISDN), včetně terminálových adaptérů a telefonů. Zařízení s modelem řízení Ethernetu (ECM), včetně zařízení podporujících rodinu IEEE 802 (např. kabelové a ADSL modemy, WiFi adaptéry). Zařízení s asynchronním přenosovým režimem (ATM), včetně ADSL modemů a dalších zařízení připojených k sítím ATM (pracovní stanice, routery, LAN přepínače). Zařízení pro bezdrátovou mobilní komunikaci (WMC), včetně multifunkčních komunikačních zařízení používaných ke správě hlasové a datové komunikace. Zařízení s modelem emulace Ethernetu (EEM), která si vyměňují data v rámci Ethernetu. Zařízení s modelem řízení sítě (NCM), včetně vysokorychlostních síťových zařízení (modemy pro vysokorychlostní paketový přístup, linková terminálová zařízení).
Implementace CDC a související podtřídy splňuje následující specifikace:
Univerzální sériová sběrnice, Definice tříd pro komunikační zařízení, Revize 1.2, 3. listopadu 2010. Univerzální sériová sběrnice, Komunikace, Podtřída pro zařízení PSTN, Revize 1.2, 9. února 2007.
Základní třída CDC zařízení USB nadview
Zařízení CDC se skládá z následujících rozhraní pro implementaci komunikačních schopností:
Rozhraní komunikační třídy (CCI) je zodpovědné za správu zařízení a volitelně i za správu hovorů.
Správa zařízení umožňuje obecnou konfiguraci a ovládání zařízení a upozorňování na události hostiteli. Správa hovorů umožňuje sestavování a ukončování hovorů. Správa hovorů může být multiplexována prostřednictvím DCI. CCI je povinné pro všechna zařízení CDC. Identifikuje funkci CDC specifikací komunikačního modelu podporovaného zařízením CDC. Rozhraní (rozhraní) následující za CCI může (mohou) být jakékoli definované rozhraní třídy USB, například audio nebo rozhraní specifické pro dodavatele. Rozhraní specifické pro dodavatele je reprezentováno konkrétně DCI.
Rozhraní datové třídy (DCI) je zodpovědné za přenos dat. Přenášená a/nebo přijímaná data se neřídí specifickým
formát. Data mohou být nezpracovaná data z komunikační linky, data v proprietárním formátu atd. Všechna rozhraní DCI následující za CCI lze považovat za podřízená rozhraní.
Zařízení CDC musí mít alespoň jeden CCI a žádný nebo více DCI. Jeden CCI a jakýkoli podřízený DCI společně poskytují hostiteli funkci. Tato schopnost se také označuje jako funkce. V kompozitním zařízení CDC můžete mít několik...
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
19/174
Nadview
funkce. Zařízení by se proto skládalo z několika sad CCI a DCI, jak je znázorněno na obrázku – Kompozitní zařízení CDC.
Obrázek – Kompozitní zařízení CDC
Zařízení CDC pravděpodobně použije následující kombinaci koncových bodů:
Dvojice řídicích koncových bodů IN a OUT, nazývaná výchozí koncový bod. Volitelný koncový bod IN pro hromadné přenosy nebo přerušení. Dvojice koncových bodů IN a OUT pro hromadné přenosy nebo izochronní přenosy. Upozorňujeme, že zásobník zařízení USB Silicon Labs v současné době izochronní koncové body nepodporuje.
Níže uvedená tabulka ukazuje použití různých koncových bodů a to, kterým rozhraním CDC jsou používány.
Tabulka – Použití koncových bodů CDC
Koncový bod
Ovládání IN
Ovládání OUT
Přerušení nebo hromadné IN Hromadné nebo izochronní IN Hromadné nebo izochronní
VEN
Směr
Zařízení-hostitel
Host-to-device
Zařízení-hostitel
Zařízení-hostitel
Host-to-device
Využití rozhraní
CCI
Standardní požadavky na výčet, požadavky specifické pro třídu, zařízení
správa a volitelně správa hovorů.
CCI
Standardní požadavky na výčet, požadavky specifické pro třídu, zařízení
správa a volitelně správa hovorů.
CCI
Upozornění na události, jako je detekce zvonění, stav sériové linky, stav sítě.
DCI
Komunikace surových nebo formátovaných dat.
DCI
Komunikace surových nebo formátovaných dat.
Většina komunikačních zařízení používá koncový bod přerušení k upozornění hostitele na události. Izochronní koncové body by se neměly používat pro přenos dat, pokud proprietární protokol v případě chyb protokolu USB spoléhá na opakovaný přenos dat. Izochronní komunikace může ze své podstaty vést ke ztrátě dat, protože nemá žádné mechanismy pro opakovaný přenos.
Sedm hlavních modelů komunikace zahrnuje několik podtříd. Podtřída popisuje způsob, jakým by zařízení mělo používat CCI pro správu zařízení a správu hovorů. Níže uvedená tabulka ukazuje všechny možné podtřídy a komunikační modely, do kterých patří.
Tabulka – Podtřídy CDC
Podtřída
Model přímého řízení Abstraktní model řízení
Komunikační model
PSTN
PSTN
Example zařízení používající tuto podtřídu
Modemová zařízení přímo ovládaná hostitelem USB
Zařízení pro emulaci sériového portu, modemová zařízení ovládaná pomocí sady sériových příkazů
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
20/174
Nadview
Podtřída
Komunikační model
Example zařízení používající tuto podtřídu
Model telefonního ovládání
PSTN
Vícekanálový řídicí model ISDN
Model řízení CAPI ISDN
Řídicí model ECM pro ethernetové sítě
Síťování bankomatů
bankomat
Model řízení
Model bezdrátového ovládání ručním ovladačem
WMC
Správa zařízení WMC
Model mobilní přímé linky
WMC
OBEX
WMC
Model EEM pro emulaci Ethernetu
Model ovládání sítě
NCM
Zařízení pro hlasovou telefonii
Adaptéry terminálů pro základní tarif, adaptéry terminálů pro primární tarif, telefony
Terminální adaptéry pro základní tarif, terminálové adaptéry pro primární tarif, telefony, kabelové modemy DOC-SIS, ADSL modemy s podporou emulace PPPoE, Wi-Fi adaptéry (řada IEEE 802.11), adaptéry IEEE 802.3, ADSL modemy
Mobilní koncová zařízení připojující se k bezdrátovým zařízením
Mobilní koncová zařízení připojující se k bezdrátovým zařízením Mobilní koncová zařízení připojující se k bezdrátovým zařízením
Mobilní koncová zařízení připojující se k bezdrátovým zařízením Zařízení používající ethernetové rámce jako další vrstvu přenosu. Není určeno pro směrování a připojení k internetu. Adaptéry IEEE 802.3 přenášející vysokorychlostní datovou šířku pásma v síti.
Potřeby zdrojů třídy CDC ACM pro zařízení USB od jádra
Pokaždé, když přidáte instanci třídy CDC ACM do konfigurace USB voláním funkce sl_usbd_cdc_acm_add_to_configuration(), budou z jádra alokovány následující zdroje.
Zdroj
Rozhraní Alternativní rozhraní Koncové body Skupiny rozhraní
Množství
2 2 3 1
Všimněte si, že tato čísla platí pro každou konfiguraci. Při nastavování konfiguračních hodnot SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY a SL_USBD_DESCRIPTOR_QUANTITY nezapomeňte vzít v úvahu, kolik konfigurací bude třída přidána. U konfigurační hodnoty SL_USBD_OPEN_ENDPOINTS_QUANTITY platí, že protože koncové body se otevírají pouze tehdy, když hostitel nastaví konfiguraci, stačí vzít v úvahu pouze počet potřebných koncových bodů pro instanci třídy.
Zařízení USB CDC ACM Podtřída Overview
Základní třída CDC se skládá z rozhraní komunikační třídy (CCI) a rozhraní datové třídy (DCI), které jsou podrobně popsány v části Základní třída CDC pro zařízení USB.view Tato část pojednává o CCI typu ACM. Skládá se z výchozího koncového bodu pro prvek správy a koncového bodu přerušení pro prvek oznámení. Dvojice hromadných koncových bodů se používá k přenosu nespecifikovaných dat přes DCI.
Podtřída ACM je používána dvěma typy komunikačních zařízení:
Zařízení podporující AT příkazy (například modemy s hlasovým pásmem). Zařízení pro emulaci sériového portu, která se také nazývají zařízení virtuálního COM portu.
Pro podtřídu ACM existuje několik specifických požadavků na podtřídu. Ty vám umožňují ovládat a konfigurovat zařízení. Úplný seznam a popis všech požadavků ACM naleznete ve specifikaci.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
21/174
Nadview Podtřída pro zařízení PSTN, revize 1.2, 9. února 2007=, oddíl 6.2.2.
Z tohoto seznamu podtřída Silicon Labs9 ACM podporuje následující:
Tabulka – Požadavky ACM podporované společností Silicon Labs
Popis požadavku podtřídy
NastavitCommFeatureZískatCommFeatureVymazatCommFeature
Hostitel odesílá tento požadavek za účelem ovládání nastavení dané komunikační funkce. Nepoužívá se pro emulaci sériového portu.
Hostitel odesílá tento požadavek, aby získal aktuální nastavení pro danou komunikační funkci. Nepoužívá se pro emulaci sériového portu.
Hostitel odešle tento požadavek k vymazání nastavení dané komunikační funkce. Nepoužívá se pro emulaci sériového portu.
SetLineCoding
Hostitel odešle tento požadavek pro konfiguraci nastavení zařízení ACM: přenosová rychlost, počet stop bitů, typ parity a počet datových bitů. V případě emulace sériového portu je tento požadavek automaticky odesílán sériovým terminálem pokaždé, když konfigurujete sériová nastavení pro otevřený virtuální COM port.
GetLineCoding
Hostitel odešle tento požadavek, aby získal aktuální nastavení ACM (přenosová rychlost, stop bity, parita, datové bity). V případě emulace sériového portu odešlou sériové terminály tento požadavek automaticky při otevírání virtuálního COM portu.
SetControlLineState Hostitel odešle tento požadavek pro řízení nosné u poloduplexních modemů a indikaci, zda je datové terminálové zařízení (DTE) připraveno či nikoli. V případě sériové emulace je DTE sériový terminál. Pro sériovou emulaci některé sériové terminály umožňují odeslat tento požadavek s nastavenými ovládacími prvky.
SetBreak
Hostitel odešle tento požadavek pro generování přerušení ve stylu RS-232. Pro emulaci sériového rozhraní některé sériové terminály umožňují odeslat tento požadavek.
Podtřída ACM v Silicon Labs9 používá koncový bod interrupt IN k upozornění hostitele na aktuální stav sériové linky. Sériová linka
Stav linky je bitmapa informující hostitele o:
Data zahozena z důvodu přetečení, chyby parity, chyby rámování, stavu detekce vyzváněcího signálu, stavu mechanismu detekce přerušení, stavu vysílací nosné, stavu detekce nosné přijímače.
Implementace podtřídy ACM v Silicon Labs9 splňuje následující specifikaci:
Univerzální sériová sběrnice, komunikace, podtřída pro zařízení PSTN, revize 1.2, 9. února 2007.
Konfigurace třídy ACM CDC zařízení USB
Tato část popisuje, jak nakonfigurovat třídu CDC ACM (Communication Device Class, Abstract Control Model). Existují dvě skupiny konfiguračních parametrů:
Konfigurace specifické pro aplikaci zařízení USB CDC ACM Konfigurace instancí třídy USB CDC ACM
Konfigurace specifické pro aplikaci zařízení USB CDC ACM Class
Základní třída CDC Podtřída ACM
Základní třída CDC
Nejprve, abyste mohli používat modul třídy CDC pro USB zařízení od Silicon Labs, budete muset upravit konfiguraci CDC během kompilace #define-s podle potřeb vaší aplikace. Jsou přeskupeny v záhlaví sl_usbd_core_config.h. file v sekci CDC. Jejich účelem je informovat modul USB zařízení o tom, kolik objektů USB CDC má alokovat.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
22/174
Nadview
Níže uvedená tabulka popisuje jednotlivá konfigurační pole dostupná v této konfigurační struktuře.
Tabulka – Definice konfigurace CDC zařízení USB
Název konfigurace
SL_USBD_CDC_CL JAKO MNOŽSTVÍ_INSTANCE
SL_USBD_CDC_KONFIGURACE_MNOŽSTVÍ
TY
MNOŽSTVÍ_DAT_RAZÍRÁNÍ_SL_USBD_CDC
TY
Popis
Počet instancí třídy, které alokujete voláním funkce
sl_usbd_cdc_acm_create_instance() .
Počet konfigurací. Instance třídy ACM lze přidat do jedné nebo více konfigurací aaaa pomocí funkce sl_usbd_cdc_acm_add_to_configuration().
Celkový počet datových rozhraní (DCI) pro všechny funkce CDC. Každá funkce CDC ACM přidaná k funkci sl_usbd_cdc_acm_create_instance() přidá datové rozhraní.
Výchozí hodnota
2
1
2
Podtřída ACM
Podtřída ACM má jednu konfiguraci pro kompilaci, která je uvedena v tabulce níže.
Tabulka – Definice konfigurace ACM CDC zařízení USB
Název konfigurace
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Popis
Konfiguruje počet instancí podtřídy, které budete alokovat voláním metody
funkce sl_usbd_cdc_acm_create_instance().
Výchozí hodnota
2
Konfigurace instancí třídy ACM CDC pro zařízení USB
Tato část definuje konfigurace související s instancemi sériové třídy CDC ACM. Vytvoření instance třídy, stav linky, interval volání, možnosti správy p_acm_callbacks.
Vytvoření instance třídy
Chcete-li vytvořit instanci sériové třídy CDC ACM, zavolejte funkci T a sl_usbd_cdc_acm_create_instance(). Tato funkce má tři konfigurační argumenty, jak je popsáno zde.
interval_stavu_řádky
Toto je interval (v milisekundách), ve kterém bude vaše instance sériové třídy CDC ACM hlásit oznámení o stavu linky hostiteli T aa. Tato hodnota musí být mocninou dvojky (1, 2, 4, 8, 16 atd.).
možnosti_řízení_volání
Bitmapa možností správy volání. Možné hodnoty bitmapy jsou následující:
Hodnota (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Popis
Zařízení si samo spravuje hovory. Zařízení může odesílat/přijímat informace o správě hovorů přes rozhraní datové třídy.
p_acm_callbacks
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
23/174
Nadview
aa M aa p_acm_callbacks je ukazatel na strukturu typu sl_usbd_cdc_acm_callbacks_t. Jeho účelem je poskytnout třídě CDC AC sadu funkcí zpětného volání, které se mají volat, když dojde k události CDC ACM. Ne všechna zpětná volání jsou povinná a v proměnné struktury callbacks lze předat nulový ukazatel (NULL), pokud zpětné volání není potřeba. Níže uvedená tabulka popisuje jednotlivá konfigurační pole dostupná v této konfigurační struktuře.
Tabulka – Konfigurační struktura sl_usbd_cdc_acm _callbacks_t
Pole
Popis
.umožnit
Voláno, když je povolena instance třídy USB.
úspěšně.
.zakázat
Voláno, když je instance třídy USB zakázána.
.line_control_changed Voláno, když je přijata změna řízení linky.
line_coding_changed Voláno, když je přijata změna kódování linky.
Podpis funkce
void app_usbd_cdc_acm_enable(uint8_t podtřída_nbr);
void app_usbd_cdc_acm_disable(uint8_t podtřída_číslo);
void app_usbd_cdc_acm_line_control_changed(uint8_t podtřída_nbr, uint8_t událost, uint8_t událost_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t podtřída_nbr, subtřída_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Viz část Registrace zpětných volání upozornění na události pro funkce zpětného volání např.ample.
Průvodce programováním třídy CDC ACM pro zařízení USB
Tato část vysvětluje, jak používat třídu CDC Abstract Control Model. Inicializace třídy CDC ACM zařízení USB. Přidání instance třídy CDC ACM zařízení USB. Komunikace pomocí třídy CDC ACM.
Inicializace třídy ACM CDC zařízení USB
Chcete-li do zařízení přidat funkcionalitu třídy CDC ACM, musíte nejprve inicializovat základní třídu CDC a podtřídu ACM spuštěním funkcí sl_usbd_cdc_init() a sl_usbd_cdc_acm_init(). Níže uvedený příklad ukazuje, jak volat sl_usbd_cdc_init() a sl_usbd_cdc_acm_init() pomocí výchozích argumentů.
Example – Inicializace třídy CDC ACM
stav sl_status_t;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Přidání instance třídy CDC ACM pro zařízení USB do vašeho zařízení
Chcete-li do zařízení přidat funkce třídy CDC ACM, musíte nejprve vytvořit instanci a poté ji přidat do konfigurace (konfigurací) zařízení.
Vytvoření instance třídy CDC ACM
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
24/174
Nadview
Přidání instance třídy CDC ACM do konfigurace(í) vašeho zařízení a registrace zpětných volání oznámení událostí
Vytvoření instance třídy CDC ACM
Vytvořte instanci třídy CDC AC voláním funkce sl_usbd_cdc_acm_create_instance(). Níže uvedený příklad ukazuje, jak vytvořit instanci třídy CDC AC pomocí sl_usbd_cdc_acm_create_instance().
Example – Vytvoření funkce CDC ACM pomocí sl_usbd_cdc_acm_create_instance()
uint8_t podtřída_nbr; stav_sl_status_t;
stav = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &číslo_podtřídy);
pokud (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Přidání instance třídy CDC ACM do konfigurace(í) vašeho zařízení
Po vytvoření instance třídy CDC ACM ji můžete přidat do konfigurace voláním funkce
sl_usbd_cdc_acm_add_to_configuration() .
Níže uvedený příklad ukazuje, jak volat funkci sl_usbd_cdc_acm_add_to_configuration().
Example – Volání funkce USBD ACM sl_usbd_cdc_acm_add_to_configuration()
stav sl_status_t;
stav = sl_usbd_cdc_acm_add_to_configuration(číslo_podtřídy,
(1)
config_nbr_fs);
(2)
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
aaa (1) Číslo třídy ss, které se má přidat do konfigurace vrácené funkcí sl_usbd_cdc_acm_create_instance(). (2) Číslo konfigurace (zde se přidává do konfigurace s plnou rychlostí).
Registrace zpětných volání oznámení o událostech
Třída CDC ACM Serial může vaši aplikaci upozornit na jakékoli změny v řízení linky nebo kódování prostřednictvím funkcí zpětného volání oznámení. Strukturu funkcí zpětného volání lze předat jako argument během vytváření instance ACM. Upozorňujeme, že tato zpětná volání jsou volitelná. Např.ample – Registrace zpětných volání CDC ACM ilustruje použití funkcí registrace zpětných volání. Příkladample – Implementace zpětných volání CDC ACM ukazuje exampimplementace funkcí zpětného volání.
Example – Registrace zpětných volání CDC ACM
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
25/174
Nadview
uint8_t podtřída_nbr; stav_sl_status_t;
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, };
stav = 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, sli_subclass_nbr);
pokud (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Example – Implementace zpětných volání CDC ACM
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
číslo_podtřídy,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t nová přenosová rychlost;
uint8_t parita_nová;
uint8_t stop_bits_new;
uint8_t data_bits_new;
/* Úkol Použití nového kódování linky.*/ 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;
vrátit (pravda);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t podtřída_číslo, uint8_t událost, uint8_t událost_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* Úkol Použití nového ovládání linky. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}
(1) Je důležité vrátit této funkci hodnotu false, pokud selhalo použití řádkového kódování. V opačném případě vraťte hodnotu true.
Komunikace pomocí třídy CDC ACM
Stav sériového čísla
Kódování linky Ovládání linky
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
26/174
Nadview
Komunikace instancí podtřídy stavu linky
Stav sériového čísla
Linkové kódování
Hostitel USB řídí kódování linky (přenosová rychlost, parita atd.) zařízení CDC ACM. V případě potřeby je za nastavení kódování linky zodpovědná aplikace. K dispozici jsou dvě funkce pro načtení a nastavení aktuálního kódování linky, jak je popsáno v tabulce níže.
Tabulka – Funkce kódování linky CDC ACM
Funkce
sl_usbd_cdc_acm_ge t_line _co d ing ()
sl_usbd_cdc_acm_se t_line _co d ing ()
Popis
Vaše aplikace může získat aktuální nastavení kódování řádků buď z hostitele pomocí požadavků SetLineCoding, nebo pomocí funkce sl_usbd_cdc_acm_set_line_coding().
Vaše aplikace může nastavit kódování linky. Hostitel může nastavení načíst pomocí požadavku GetLineCoding.
Ovládání linky
Hostitel USB řídí řízení linky (piny RTS a DTR, signál přerušení atd.) zařízení CDC ACM. V případě potřeby je za použití ovládacích prvků linky zodpovědná vaše aplikace. K dispozici je funkce pro načtení a nastavení aktuálních ovládacích prvků linky, jak je popsáno v tabulce níže.
Tabulka – Funkce řízení linky CDC ACM
Funkce
sl_usb d _cd c_acm_ge e t_line _contr o l_state ()
Vaše aplikace může získat aktuální stav řídicí linky nastavený hostitelem pomocí požadavku SetControlLineState.
Stav čáry
Hostitel USB pravidelně načítá stav linky. Vaše aplikace musí stav linky aktualizovat pokaždé, když se změní. V případě potřeby je za nastavení stavu linky zodpovědná vaše aplikace. Pro načtení a nastavení aktuálních ovládacích prvků linky jsou k dispozici dvě funkce, jak je popsáno v tabulce níže.
Tabulka – Funkce stavu linky CDC ACM
Funkce
sl_usb d _cd c_acm_set _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Vaše aplikace může nastavit libovolnou událost stavu linky. Při nastavování stavu linky je hostiteli odesláno přerušení IN, které informuje o změně stavu sériové linky.
Aplikace dokáže vymazat dvě události stavu linky: detekci nosné vysílané frekvence a detekci nosné frekvence přijímané frekvence. Všechny ostatní události jsou automaticky vymazány podtřídou sériové emulace ACM.
Komunikace s instancemi podtřídy
Podtřída ACM od Silicon Labs nabízí následující funkce pro komunikaci s hostitelem. Více informací o parametrech functions9 naleznete v referenční příručce k funkcím podtřídy ACM od CDC.
Název funkce
sl_usb d _cd c_acm_ read () sl_usb d _cd c_acm_write ()
Operace
Přijímá data z hostitele přes koncový bod hromadného příjmu (OUT). Tato funkce blokuje. Odesílá data hostiteli přes koncový bod hromadného příjmu (IN). Tato funkce blokuje.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
27/174
Nadview
Tabulka – Souhrn komunikačního API CDC ACM aaaaa sl_usbd_cdc_acm_read() a sl_usbd_cdc_acm_write() zajišťují synchronní komunikaci, což znamená, že přenos blokuje. Jinými slovy, po volání funkce se aplikace zablokuje, dokud není přenos dokončen s chybou nebo bez ní. Lze zadat časový limit, aby se zabránilo věčnému čekání.ampníže uvedený příklad ukazuje čtení a zápisampsoubor, který přijímá data z hostitele pomocí koncového bodu bulk OUT a odesílá data do hostitele pomocí koncového bodu bulk IN.
Výpis – Sériové čtení a zápis Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
délka_xferu;
sl_status_t
postavení;
stav = sl_usbd_cdc_acm_read(číslo_podtřídy,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&dél_xferu);
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
stav = sl_usbd_cdc_acm_write(číslo_podtřídy,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&dél_xferu);
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
T aaaaa M (1) Číslo instance třídy ss vytvořené pomocí sl_usbd_cdc_acm_create_instance() poskytuje interní odkaz na podtřídu AC pro směrování přenosu do správného koncového bodu OUT nebo IN. (2) Vaše aplikace musí zajistit, aby vyrovnávací paměť poskytnutá funkci byla dostatečně velká pro pojmutí všech dat. Jinak může dojít k problémům se synchronizací. (3) Abyste se vyhnuli nekonečnému blokování, zadejte časový limit vyjádřený v milisekundách. Hodnota 809 způsobí, že úloha aplikace bude čekat věčně. (4) Aplikace poskytuje inicializovanou vyrovnávací paměť pro přenos.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
28/174
Nadview
Nadview
Třída HID zařízení USB
Třída HID zařízení USB nadview Potřeby zdrojů třídy HID pro zařízení USB z jádra Konfigurace třídy HID pro zařízení USB Programovací příručka pro třídu HID pro zařízení USB Úloha Periodické vstupní zprávy HID
Tato část popisuje třídu zařízení s rozhraním Human Interface Device (HID) podporovanou zařízením USB od společnosti Silicon Labs.
Třída HID zahrnuje zařízení používaná lidmi k ovládání počítačových operací, jako jsou klávesnice, myši, polohovací zařízení a herní konzole.
Třídu HID lze také použít v kompozitním zařízení, které obsahuje ovládací prvky, jako jsou knoflíky, přepínače, tlačítka a posuvníky. NapříkladampOvládání hlasitosti, ztlumení zvuku a ovládání zvuku v audio headsetu je řízeno funkcí HID headsetu. Třída HID si může vyměňovat data pro jakýkoli účel pouze s využitím řídicích a přerušovacích přenosů.
Třída HID je jednou z nejstarších a nejpoužívanějších tříd USB. Všechny hlavní hostitelské operační systémy poskytují nativní ovladač pro správu zařízení HID, a proto s třídou HID pracuje řada zařízení specifických pro různé dodavatele. Tato třída také zahrnuje různé typy výstupních položek, jako jsou LED diody, zvuk, hmatová zpětná vazba atd.
Implementace HID splňuje následující specifikace:
Definice třídy zařízení pro zařízení s rozhraním Human Interface (HID), 27. 6. 01, verze 1.11. Tabulky použití univerzální sériové sběrnice HID, 28. 10. 2004, verze 1.12.
Třída HID zařízení USB nadview
Nadview
Zařízení HID se skládá z následujících koncových bodů:
Dvojice řídicích koncových bodů IN a OUT nazývaných výchozí koncový bod, koncový bod interrupt IN a volitelný koncový bod interrupt OUT.
Níže uvedená tabulka popisuje použití různých koncových bodů:
Tabulka – Použití koncových bodů třídy HID
Použití směru koncového bodu
Ovládání IN
Řízení
VEN
Přerušení VSTUP
Přerušit
VEN
Zařízení-hostitel
Host-to-device
Zařízení-hostitel
Host-to-device
Standardní požadavky na výčet, požadavky specifické pro třídu a datovou komunikaci (vstup, hlášení o funkcích odeslaná hostiteli s požadavkem GET_REPORT). Standardní požadavky na výčet, požadavky specifické pro třídu a datovou komunikaci (výstup, hlášení o funkcích přijatá z hostitele s požadavkem SET_REPORT). Datová komunikace (vstup a hlášení o funkcích).
Datová komunikace (výstupní a funkční zprávy).
Zpráva
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
29/174
Nadview
Hostitel a zařízení HID si vyměňují data pomocí sestav. Sestava obsahuje formátovaná data s informacemi o ovládacích prvcích a dalších fyzických entitách zařízení HID. Ovládací prvek je manipulovatelný uživatelem a ovládá určitý aspekt zařízení. NapříkladampOvládací prvek může být například tlačítko na myši nebo klávesnici, přepínač atd. Jiné entity informují uživatele o stavu určitých funkcí zařízení. NapříkladampLED diody na klávesnici informují uživatele o zapnutém Caps Locku, aktivní numerické klávesnici atd.
Hostitel chápe formát a použití dat sestavy analýzou obsahu deskriptoru sestavy. Analýzu obsahu provádí analyzátor. Deskriptor sestavy popisuje data poskytovaná každým ovládacím prvkem v zařízení. Skládá se z položek, které jsou informacemi o zařízení a sestávají z 1bajtového prefixu a proměnné délky.
data. Více informací o formátu položky naleznete v
1.11=, oddíl 5.6 a 6.2.2.
Existují tři hlavní typy položek:
Hlavní položka definuje nebo seskupuje určité typy datových polí.
Globální položka popisuje datové charakteristiky ovládacího prvku.
Lokální položka popisuje datové charakteristiky ovládacího prvku.
Každý typ položky je definován různými funkcemi. Funkce položky může být také nazývána tagFunkci položky lze chápat jako podpoložku, která patří k jednomu ze tří hlavních typů položek. Níže uvedená tabulka poskytuje stručný přehledview funkcí položky v každém typu položky. Úplný popis položek v každé kategorii naleznete
Tabulka – Popis funkce položky pro každý typ položky
Položka Typ položky Funkce
Popis
Hlavní vstup
Popisuje informace o datech poskytovaných jedním nebo více fyzickými ovládacími prvky.
Hlavní výstup Popisuje data odeslaná do zařízení.
Hlavní rys
Popisuje informace o konfiguraci zařízení odesílané do zařízení nebo přijímané ze zařízení, které ovlivňují celkové chování zařízení nebo jedné z jeho součástí.
Související položky hlavní skupiny kolekcí (vstup, výstup nebo prvek).
Hlavní Konec Zavře kolekci. Kolekce
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
30/174
Nadview
Položka Typ položky Funkce
Popis
Stránka globálního využití
Identifikuje funkci dostupnou v rámci zařízení.
Globální logická Definuje dolní limit hlášených hodnot v logických jednotkách. Minimum
Globální logická Definuje horní limit hlášených hodnot v logických jednotkách. Maximální
Globální fyzikální Definuje dolní limit hlášených hodnot ve fyzikálních jednotkách, tj. Logické minimum Minimum vyjádřené ve fyzikálních jednotkách.
Globální fyzikální Definuje horní limit hlášených hodnot ve fyzikálních jednotkách, tj. Logické maximum Maximum vyjádřené ve fyzikálních jednotkách.
Globální jednotka
Označuje exponent jednotky v desítkové soustavě. Exponent se pohybuje od -8 do +7.
Exponent
Globální jednotka
Označuje jednotku uváděných hodnot. Například jednotky délky, hmotnosti, teploty atd.
Globální velikost sestavy
Určuje velikost polí sestavy v bitech.
Globální ID sestavy Označuje prefix přidaný ke konkrétní sestavě.
Globální počet hlášení
Označuje počet datových polí pro položku.
Globální tlak
Umístí kopii globální tabulky stavů položek na zásobník CPU.
Globální pop
Nahradí tabulku stavů položek poslední strukturou ze zásobníku.
Místní použití
Představuje index pro označení konkrétního použití v rámci stránky použití. Označuje dodavatelem doporučené použití pro konkrétní ovládací prvek nebo skupinu ovládacích prvků. Použití poskytuje vývojáři aplikace informace o tom, co ovládací prvek skutečně měří.
Místní použití
Definuje počáteční použití spojené s polem nebo bitmapou.
Minimální
Místní použití
Definuje koncové použití spojené s polem nebo bitmapou.
Maximum
Lokální označení Určuje část těla použitou pro ovládací prvek. Index odkazuje na označení ve fyzickém
Index
deskriptor.
Lokální označení Definuje index počátečního označení přidruženého k poli nebo bitmapě. Minimum
Lokální označení Definuje index koncového označení přidruženého k poli nebo bitmapě.
Lokální index řetězců
Index řetězce pro deskriptor řetězce. Umožňuje přidružení řetězce ke konkrétní položce nebo ovládacímu prvku.
Lokální řetězec
Určuje první index řetězce při přiřazování skupiny sekvenčních řetězců ovládacím prvkům v poli.
Minimální nebo bitmapový obrázek.
Místní Místní
Maximální počet řetězců
Oddělovač
Určuje index posledního řetězce při přiřazování skupiny sekvenčních řetězců ovládacím prvkům v poli nebo bitmapě.
Definuje začátek nebo konec sady lokálních položek.
Data řídicího systému musí definovat alespoň následující položky:
Vstup, výstup nebo funkce Hlavní položky Použití Lokální položka Použití Stránka Globální položka Logické minimum Globální položka Logické maximum Globální položka Velikost sestavy Globální položka
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
31/174
Nadview
Globální položka počtu hlášení Níže uvedená tabulka ukazuje reprezentaci obsahu deskriptoru hlášení myši z pohledu hostitelského analyzátoru HID. Myš má tři tlačítka (levé, pravé a kolečko). Kód uvedený v příkladuampNíže uvedený kód odpovídá této reprezentaci deskriptoru hlášení myši.
Obrázek – Obsah deskriptoru hlášení z analyzátoru HID hostitele View
(1) Funkce položky Stránka použití specifikuje obecnou funkci zařízení. V tomto příkladuampnapř. zařízení HID patří k
obecné ovládání plochy.
(2) Kolekce Aplikace seskupuje hlavní položky, které mají společný účel a mohou být aplikacím známé. V diagramu se skupina skládá ze tří hlavních položek Vstup. Pro tuto kolekci se jako ovládací prvky doporučuje myš, jak je naznačeno položkou Použití. (3) Vnořené kolekce lze použít k poskytnutí dalších podrobností o použití jednoho ovládacího prvku nebo skupiny ovládacích prvků aplikacím. V tomto příkladuampFyzikální objekt kolekce, vnořený do aplikace kolekce, se skládá ze stejných tří vstupních položek, které tvoří aplikaci kolekce. Fyzikální objekt kolekce se používá pro sadu datových položek, které představují datové body shromážděné v jednom geometrickém bodě. V příkladuampNapř. doporučené použití je ukazatel, jak je naznačeno položkou Použití. Zde se použití ukazatele vztahuje k souřadnicím polohy myši a systémový software převede souřadnice myši do pohybu kurzoru na obrazovce. (4) Možné jsou také vnořené stránky použití, které poskytují více podrobností o určitém aspektu v rámci obecné funkce zařízení. V tomto případě jsou seskupeny dvě položky Vstupy, které odpovídají tlačítkům myši. Jedna položka Vstup definuje tři tlačítka myši (pravé, levé a kolečko) z hlediska počtu datových polí pro položku (položka Počet hlášení), velikosti datového pole (položka Velikost hlášení) a možných hodnot pro každé datové pole (položky Minimum a Maximum použití, Logické minimum a Maximum). Druhá položka Vstup je 13bitová konstanta, která umožňuje zarovnání dat vstupní hlášení na hranici bajtů. Tato položka Vstup se používá pouze pro účely doplňování. (5) Pro souřadnice polohy myši je definována další vnořená stránka použití odkazující na generický ovládací prvek na ploše. Pro tuto stránku použití popisuje položka Vstup datová pole odpovídající osám x a y, jak je specifikováno dvěma položkami Použití.
položky.
Po analýze předchozího obsahu deskriptoru hlášení myši je analyzátor HID hostitele schopen interpretovat vstupní data hlášení odeslaná zařízením s přerušením IN přenosu nebo v reakci na požadavek GET_REPORT. Vstupní data hlášení odpovídající deskriptoru hlášení myši jsou znázorněna na obrázku – Obsah deskriptoru hlášení z analyzátoru HID hostitele. View is
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
32/174
Nadview
je uvedeno v tabulce níže. Celková velikost dat reportu je 4 bajty. Přes stejný koncový bod lze odesílat různé typy reportů. Pro účely rozlišení různých typů reportů je k datovému reportu přidán 1bajtový prefix ID reportu. Pokud bylo v exampV případě hlášení myši by celková velikost dat hlášení byla 5 bajtů.
Tabulka – Vstupní zpráva odeslaná hostiteli a odpovídající stavu třítlačítkové myši
Bit Offset
0 1 2 3 16 24
Počet bitů 1 1 1 13 8 8
Popis Tlačítko 1 (levé tlačítko). Tlačítko 2 (pravé tlačítko). Tlačítko 3 (tlačítko kolečka). Nepoužívá se. Pozice na ose X. Pozice na ose Y.
Fyzický deskriptor označuje část nebo části těla určené k aktivaci ovládacího prvku nebo ovládacích prvků. Aplikace může tyto informace použít k přiřazení funkce ovládacímu prvku zařízení. Fyzický deskriptor je volitelný deskriptor specifický pro danou třídu a většina zařízení má z jeho použití jen malý přínos. Viz
Potřeby zdrojů třídy HID pro zařízení USB od jádra
Pokaždé, když přidáte instanci třídy HID do konfigurace USB voláním funkce sl_usbd_hid_add_to_configuration(), budou z jádra alokovány následující zdroje.
Zdroj
Rozhraní Alternativní rozhraní Koncové body Skupiny rozhraní
Množství
1 1 1 (2, pokud je povolen koncový bod přerušení OUT) 0
Všimněte si, že tato čísla platí pro každou konfiguraci. Při nastavování konfiguračních hodnot SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY a SL_USBD_DESCRIPTOR_QUANTITY nezapomeňte vzít v úvahu, kolik konfigurací bude třída přidána. U konfigurační hodnoty SL_USBD_OPEN_ENDPOINTS_QUANTITY platí, že protože koncové body se otevírají pouze tehdy, když hostitel nastaví konfiguraci, stačí vzít v úvahu pouze počet potřebných koncových bodů pro instanci třídy.
Konfigurace třídy HID zařízení USB
Pro konfiguraci třídy HID se používají dvě skupiny konfiguračních parametrů:
Konfigurace specifické pro aplikaci třídy HID zařízení USB Konfigurace instancí třídy HID zařízení USB
Konfigurace specifické pro aplikaci pro třídu HID zařízení USB
Nejprve, chcete-li použít modul třídy HID pro USB zařízení od Silicon Labs, upravte definice konfigurace HID během kompilace podle potřeb vaší aplikace. Jsou přeskupeny v záhlaví sl_usbd_core_config.h. file v sekci HID. Lze je rozdělit do dvou sekcí, konfigurace množství a konfigurace úloh HID. Účelem konfigurace množství je informovat modul USB zařízení o tom, kolik objektů USB HID má alokovat.
Níže uvedená tabulka popisuje jednotlivé definice konfigurace.
Tabulka – Definice konfigurace HID zařízení USB
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
33/174
Nadview
Název konfigurace
Množství_instance_SL_USBD_HID_CL ASS_I
MNOŽSTVÍ_KONFIGURACE_SL_USBD_HID
SL_USBD_HID_REPORT_ ID_MNOŽSTVÍ
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Popis
Počet instancí třídy, které alokujete voláním funkce
sl_usbd_hid_create_instance() .
Počet konfigurací. Instance třídy HID lze přidat do jedné nebo více konfigurací aaaa pomocí funkce sl_usbd_hid_add_to_configuration(). Konfiguruje celkový počet ID sestav, které mají být alokovány.
Konfiguruje celkový počet položek Push/Pop, které se mají alokovat.
Úloha časovače zpracovává všechny operace HID založené na časovači. Tato konfigurace umožňuje nastavit velikost zásobníku (v počtu bajtů). Priorita úlohy HID. Toto je priorita CMSIS-RTOS2.
Výchozí hodnota
2 1 2 0 2048
Vysoká priorita os
Konfigurace instancí třídy HID zařízení USB Podtřída pro vytváření instancí třídy
protokol kód_země
interval_in a interval_out p_hid_callback Deskriptor třídy HID pro reporty ExampTato část definuje konfigurace související s instancemi třídy HID.
Vytvoření instance třídy
Vytvoření instance třídy HID se provádí voláním funkce sl_usbd_hid_create_instance(), která má několik konfiguračních argumentů popsaných níže.
podtřída
Kód podtřídy HID. Možné hodnoty jsou:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Zařízení HID, které používá podtřídu boot, musí používat standardní formáty hlášení. Další informace o kódech podtříd naleznete v části 4.2 specifikace HID revize 1.11.
protokol
Protokol používaný zařízením HID. Možné hodnoty jsou:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Pokud je vaší funkcí HID myš, měl by být protokol nastaven na SL_USBD_HID_PROTOCOL_MOUSE. Pokud se jedná o klávesnici, měl by být nastaven na SL_USBD_HID_PROTOCOL_KBD. V opačném případě by měl být protokol nastaven na SL_USBD_HID_PROTOCOL_NONE. Více informací o kódech podtříd viz kapitola 4.3 specifikace HID revize 1.11.
kód_země
ID kódu země. Možné hodnoty jsou:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
34/174
Nadview
SL_USBD_HID_KÓD_ZEMĚ_ARABIC SL_USBD_HID_KÓD_ZEMĚ_BELGIC SL_USBD_HID_KÓD_ZEMĚ_KANADSKÁ_DVOJJAZYČNÁ SL_USBD_HID_KÓD_ZEMĚ_KANADSKÁ_FRANCOUZŠTINA SL_USBD_HID_KÓD_ZEMĚ_ČESKÁ_REPUBLIKA SL_USBD_HID_KÓD_ZEMĚ_DÁNSKÁ SL_USBD_HID_KÓD_ZEMĚ_FINSKÁ SL_USBD_HID_KÓD_ZEMĚ_FRANCOUZŠTINA SL_USBD_HID_KÓD_ZEMĚ_NĚMČINA SL_USBD_HID_KÓD_ZEMĚ_ŘECKÁ SL_USBD_HID_KÓD_ZEMĚ_HEBREJŠTINA SL_USBD_HID_KÓD_ZEMĚ_MAĎARSKO SL_USBD_HID_KÓD_ZEMĚ_MEZINÁRODNÍ SL_USBD_HID_KÓD_ZEMĚ_ITALŠTINA SL_USBD_HID_COUNTRY_CODE_JAPONSKO_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREJŠTINA SL_USBD_HID_COUNTRY_CODE_L AMERIKA SL_USBD_HID_COUNTRY_CODE_NIZOZEMSKO A NIZOZEMSKO SL_USBD_HID_COUNTRY_CODE_NORSKO SL_USBD_HID_COUNTRY_CODE_PERŠSKO_PERSKÉ SL_USBD_HID_COUNTRY_CODE_POLSKO A SL_USBD_HID_COUNTRY_CODE_PORTUGALŠTINA SL_USBD_HID_COUNTRY_CODE_RUSKO SL_USBD_HID_COUNTRY_CODE_SLOVENSKO SL_USBD_HID_COUNTRY_CODE_ŠPANĚLŠTINA SL_USBD_HID_COUNTRY_CODE_ŠVÉDSKO SL_USBD_HID_COUNTRY_CODE_ŠVÝCARSKÉ_FRANCOUZŠTINA SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL A 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
Kód země identifikuje zemi, pro kterou je hardware lokalizován. Většina hardwaru lokalizována není, a proto by tato chyba měla být SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Klávesnice však mohou toto pole použít k označení jazyka kláves.
Více informací o kódech zemí naleznete v části 6.2.1 specifikace HID, revize 1.11.
interval_vstup a interval_výstup
interval_in a interval_out představují interval dotazování koncového bodu přerušení IN a koncového bodu přerušení OUT.
Toto představuje interval dotazování koncového bodu v milisekundách. Nastavení této hodnoty závisí na tom, jak často je vaše zařízení náchylné k vygenerování nové sestavy pro hostitele. Pokud se například sestava generuje každých 16 milisekund, interval by měl být 16 nebo méně.
Hodnota musí být mocninou čísla 2 (1, 2, 4, 8, 16 atd.).
Pokud je proměnná interval_out nastavena na hodnotu true, je ignorována.
p_hid_callback
aaaa p_hid_callback je ukazatel na strukturu typu sl_usbd_hid_callbacks_t. Jeho účelem je poskytnout třídě HID sadu callback funkcí, které se mají volat při výskytu události HID.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
35/174
Nadview
Ne všechna zpětná volání jsou povinná a v proměnné struktury callbacks lze předat nulový ukazatel (NULL), pokud zpětné volání není potřeba. Níže uvedená tabulka popisuje jednotlivá konfigurační pole dostupná v této konfigurační struktuře.
Tabulka – konfigurační struktura sl_usbd_hid_callbacks_t
Pole
Popis
Podpis funkce
.povolit .zakázat .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Voláno, když je instance třídy USB úspěšně povolena. Voláno, když je instance třídy USB zakázána.
Voláno během vytváření instance HID k předání deskriptoru reportu. Pro každou z vašich funkcí HID musíte zadat deskriptor reportu. Deskriptor reportu indikuje hostiteli, jak má být analyzována periodická reportová zpráva, kterou bude zařízení odesílat. Psaní vlastního deskriptoru reportu může být náročné, a proto existuje několik zdrojů, které vám s tím pomohou. Toto je jediná povinná funkce zpětného volání. Voláno během vytváření instance HID k předání fyzického deskriptoru. Fyzický deskriptor je deskriptor, který poskytuje informace o konkrétní části nebo částech lidského těla, které aktivují ovládací prvek nebo ovládací prvky. Další informace o fyzických deskriptorech naleznete v části 6.2.3 specifikace HID revize 1.11. Fyzický deskriptor je volitelný a většinou se ignoruje. Vyrovnávací paměť předávaná zde může být nastavena na NULL a délka na 0. Voláno, když hostitel nastaví report, jak je popsáno ve vašem deskriptoru reportu (když odesílá report).
Voláno, když hostitel požaduje sestavu funkcí, jak je popsáno v deskriptoru sestavy.
Voláno, když hostitel nastaví sestavu funkcí, jak je popsáno v deskriptoru sestavy.
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 class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Načte aktuálně aktivní protokol.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Nastaví aktuálně aktivní protokol.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Deskriptor hlášení třídy HID Example
Třída HID od Silicon Labsampaplikace poskytuje exampdeskriptoru sestavy pro jednoduchou myš. PříkladampNíže uvedený obrázek ukazuje deskriptor hlášení myši.
Example – Deskriptor hlášení myši
statický 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. Všechna práva vyhrazena.
36/174
Nadview
SL_USBD_HID_HLAVNÍ_KOLEKCE +1, SL_USBD_HID_KOLEKCE_APLIKACE,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_HLAVNÍ_KOLEKCE +1, SL_USBD_HID_KOLEKCE_FYZICKÁ,(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_HLAVNÍ_VSTUP +1, SL_USBD_HID_HLAVNÍ_DATA |
SL_USBD_HID_HLAVNÍ_PROMĚNNÁ |
SL_USBD_HID_HLAVNÍ_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_HLAVNÍ_VSTUP +1, SL_USBD_HID_HLAVNÍ_KONSTANT,(9)
SL_USBD_HID_GLOBÁLNÍ_PÁJČKA_POUŽITÍ +1, SL_USBD_HID_POUŽITÍ_PÁJČKA_OBECNÉ_OVLÁDÁNÍ_PLOCHY,
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_HLAVNÍ_VSTUP +1, SL_USBD_HID_HLAVNÍ_DATA |
SL_USBD_HID_HLAVNÍ_PROMĚNNÁ |
SL_USBD_HID_HLAVNÍ_RELATIVNÍ,
SL_USBD_HID_HLAVNÍ_KONEC SBÍRKY,(10)
SL_USBD_HID_HLAVNÍ_KONECKOLEKCE
(11)};
(1) Tabulka reprezentující deskriptor hlášení myši je inicializována tak, že každý řádek odpovídá krátké položce. Ta je tvořena 1bajtovým prefixem a 1bajtovými daty. Viz viewed hostitelským HID parserem na obrázku – Obsah deskriptoru hlášení z hostitelského HID parseru View.
(2) Používá se generická stránka pro používání plochy.
(3) Na stránce Generické využití počítače je využití tag naznačuje, že skupina ovládacích prvků slouží k ovládání myši. Kolekce myší se obvykle skládá ze dvou os (X a Y) a jednoho, dvou nebo tří tlačítek.
(4) Sběr myší je zahájen.
(5) V rámci kolekce myší je použití tag konkrétněji naznačuje, že ovládací prvky myši patří do kolekce ukazatelů. Kolekce ukazatelů je kolekce os, která generuje hodnotu pro směrování, indikaci nebo ukazování uživatelských záměrů k aplikaci.
(6) Je spuštěna kolekce ukazatelů.
(7) Stránka Použití tlačítek definuje vstupní položku složenou ze tří 1bitových polí. Každé 1bitové pole představuje tlačítko myši 1, 2 a 3 a může vracet hodnotu 0 nebo 1.
(8) Vstupní položka pro stránku Použití tlačítek je doplněna o 13 dalších bitů.
(9) Pro popis polohy myši pomocí os X a Y je uvedena další generická stránka použití plochy. Vstupní položka se skládá ze dvou 8bitových polí, jejichž hodnota může být v rozmezí -127 až 127.
(10) Kolekce ukazatelů je uzavřena.
(11) Sbírka myší je uzavřena.
Stránka HID na USB.org
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
37/174
Nadview
Fórum implementátorů USB (USB-IF) nabízí nástroj s názvem „HID Descriptor Tool“ spolu s dalšími informacemi o formátu deskriptoru sestav. Více informací naleznete na adrese http://www.usb.org/developers/hidpage/.
Průvodce programováním třídy HID pro zařízení USB
Tato část vysvětluje, jak používat třídu HID. Inicializace třídy HID zařízení USB Přidání instance třídy HID zařízení USB do zařízení Komunikace pomocí třídy HID zařízení USB
Inicializace třídy HID zařízení USB
Chcete-li do zařízení přidat funkcionalitu třídy HID, musíte nejprve inicializovat třídu voláním funkce sl_usbd_hid_init(). PříkladampNíže uvedený text ukazuje, jak volat funkci sl_usbd_hid_init() s použitím výchozích argumentů. Další informace o konfiguračních argumentech, které se mají předat funkci sl_usbd_hid_init(), naleznete v části Konfigurace specifické pro aplikaci pro třídu USB Device HID.
Example – Volání sl_usbd_hid_init()
stav sl_status_t;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Přidání instance třídy HID pro zařízení USB do vašeho zařízení
Chcete-li do zařízení přidat funkce třídy HID, musíte nejprve vytvořit instanci a poté ji přidat do konfigurace (konfigurací) zařízení.
Vytvoření instance třídy HID
Vytvořte instanci třídy HID voláním funkce sl_usbd_hid_create_instance(). PříkladampNíže uvedený obrázek ukazuje, jak vytvořit jednoduchou funkci myši pomocí funkce sl_usbd_hid_create_instance() s použitím výchozích argumentů. Více informací o konfiguračních argumentech, které se mají předat funkci sl_usbd_hid_create_instance(), naleznete v části Konfigurace instancí třídy USB Device HID.
Example – Přidání funkce myši pomocí sl_usbd_hid_create_instance()
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
38/174
Nadview
/* Globální konstanty. */ 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_HLAVNÍ_KOLEKCE + 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 };
/* Lokální proměnné.*/ 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)číslo_třídy;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
stav = 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, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, true, &app_usbd_hid_callbacks, &class_nbr);
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
39/174
Nadview
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. *
Přidání instance třídy HID do konfigurace(í) vašeho zařízení Po vytvoření instance třídy HID ji můžete přidat do konfigurace voláním funkce
sl_usbd_hid_add_to_configuration() .
BývalýampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_hid_add_to_configuration().
Example – Volání funkce sl_usbd_hid_add_to_configuration()
stav sl_status_t;
sl_usbd_hid_add_to_configuration(číslo_třídy,
(1)
config_nbr_fs); (2)
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
(1) Číslo třídy, které se má přidat do konfigurace vrácené funkcí sl_usbd_hid_create_instance(). (2) Číslo konfigurace (zde se přidává do konfigurace Full-Speed).
Komunikace pomocí zařízení USB třídy HID
Komunikace s instancí třídy Synchronní komunikace Komunikace s instancí třídy Třída HID nabízí následující funkce pro komunikaci s hostitelem.
Tabulka – Souhrn komunikačního API HID
Název funkce
sl_usb d _hid _ read ad _sy nc() sl_usb d _hid _write _sy nc()
Operace Přijímá data z hostitele přes koncový bod přerušení OUT. Tato funkce je blokující. Odesílá data do hostitele přes koncový bod přerušení IN. Tato funkce je blokující.
Synchronní komunikace Synchronní komunikace znamená, že přenos blokuje. Po volání funkce se aplikace zablokuje, dokud není přenos dokončen s chybou nebo bez chyby. Lze zadat časový limit, aby se zabránilo věčnému čekání.ampNíže uvedený obrázek ukazuje čtení a zápis, který přijímá data z hostitele pomocí koncového bodu přerušení OUT a odesílá data do hostitele pomocí koncového bodu přerušení IN.
Example – Synchronní čtení a zápis HID
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
délka_xferu;
sl_status_t
postavení;
stav = sl_usbd_hid_read_sync(číslo_třídy,
(1)
(neplatný *)rx_buf,
(2)
2u,
0u,
(3)
&dél_xferu);
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
40/174
Nadview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. *
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. *
(1) Číslo instance třídy vytvořené pomocí sl_usbd_hid_create_instance() poskytuje interní referenci pro třídu HID pro směrování přenosu do správného koncového bodu OUT nebo IN přerušení.
(2) Aplikace musí zajistit, aby vyrovnávací paměť poskytnutá funkci byla dostatečně velká pro veškerá data. Jinak může dojít k problémům se synchronizací. Interně se operace čtení provádí buď s řídicím koncovým bodem, nebo s koncovým bodem přerušení, v závislosti na příznaku čtení řídicího bodu nastaveném při volání sl_usbd_hid_create_instance().
(3) Aby se zabránilo nekonečnému blokování, lze zadat časový limit vyjádřený v milisekundách. Hodnota 809 způsobí, že úloha aplikace bude čekat věčně.
(4) Aplikace poskytuje inicializovaný přenosový buffer.
Úloha periodických vstupních hlášení HID
Pro úsporu šířky pásma má hostitel možnost umlčet hlášení z koncového bodu přerušení IN omezením frekvence hlášení. K tomu musí hostitel odeslat požadavek SET_IDLE. Třída HID implementovaná společností Silicon Labs obsahuje interní úlohu, která respektuje omezení frekvence hlášení, jež můžete použít pro jedno nebo více vstupních hlášení. Obrázek Úloha periodických vstupních hlášení znázorňuje fungování úloh periodických vstupních hlášení.
Obrázek – Úloha periodických vstupních hlášení
(1) Zařízení obdrží požadavek SET_IDLE. Tento požadavek určuje dobu nečinnosti pro dané ID hlášení. Další podrobnosti o požadavku SET_IDLE naleznete v
(2) Struktura ID hlášení (přidělená během fáze inicializace třídy HID) je aktualizována o dobu nečinnosti. Čítač doby nečinnosti je inicializován hodnotou doby nečinnosti. Struktura ID hlášení je vložena na konec propojeného seznamu obsahujícího vstupní struktury ID hlášení. Hodnota doby nečinnosti je vyjádřena v jednotkách 4 ms, což dává rozsah 4 až 1020 ms.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
41/174
Nadview
Pokud je doba nečinnosti kratší než interval dotazování koncového bodu přerušení IN, sestavy se generují v intervalu dotazování.
(3) Každé 4 ms prochází úloha periodických vstupních sestav seznam ID vstupních sestav. Pro každé ID vstupní sestavy úloha provede jednu ze dvou možných operací. Délka trvání periody úlohy odpovídá 4ms jednotce použité pro dobu nečinnosti. Pokud hostitel neodeslal žádné požadavky SET_IDLE, seznam ID vstupních sestav je prázdný a úloha nemá co zpracovat. Úloha zpracovává pouze ID sestav, která jsou jiná než 0 a s dobou nečinnosti větší než 0.
(4) Pro dané ID vstupní sestavy úloha ověří, zda uplynula doba nečinnosti. Pokud doba nečinnosti neuplynula, hodnota čítače se sníží a hostiteli se neodešle žádná vstupní sestava.
(5) Pokud doba nečinnosti uplynula (tj. čítač doby nečinnosti dosáhl nuly), je vstupní hlášení odesláno hostiteli voláním funkce sl_usbd_hid_write_sync() přes koncový bod interrupt IN.
(6) Vstupní data sestavy odesílaná úlohou pocházejí z interní datové vyrovnávací paměti alokované pro každou vstupní sestavu popsanou v deskriptoru sestavy. Aplikační úloha může zavolat funkci sl_usbd_hid_write_sync() pro odeslání vstupní sestavy. Po odeslání vstupních dat sestavy funkce sl_usbd_hid_write_sync() aktualizuje interní vyrovnávací paměť přidruženou k ID vstupní sestavy o právě odeslaná data. Úloha periodických vstupních sestav poté vždy odesílá stejná vstupní data sestavy po uplynutí každé doby nečinnosti a dokud aplikační úloha neaktualizuje data ve vnitřní vyrovnávací paměti. Existuje určitý mechanismus blokování, který zabraňuje poškození dat ID vstupní sestavy v případě, že k úpravě dojde v přesném čase přenosu provedeném úlohou periodických vstupních sestav.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
42/174
Nadview
Nadview
Třída MSC zařízení USB
Třída MSC zařízení USB nadview Potřeby zdrojů třídy MSC pro zařízení USB z jádra Konfigurace třídy MSC pro zařízení USB Programovací příručka pro třídu MSC pro zařízení USB Ovladače úložiště třídy MSC pro zařízení USB
Tato část popisuje třídu velkokapacitních paměťových zařízení (MSC) podporovanou zařízením Silicon Labs USB Device. MSC je protokol, který umožňuje přenos informací mezi zařízením USB a hostitelem. Přenášené informace jsou cokoli, co lze elektronicky uložit, například spustitelné programy, zdrojový kód, dokumenty, obrázky, konfigurační data nebo jiná textová či číselná data. Zařízení USB se hostiteli jeví jako externí paměťové médium, které umožňuje přenos filepomocí funkce drag and drop.
A file systém definuje, jak filejsou uspořádány v paměťovém médiu. Specifikace třídy velkokapacitního úložiště USB nevyžaduje žádné zvláštní file systém určený pro použití na kompatibilních zařízeních. Místo toho poskytuje jednoduché rozhraní pro čtení a zápis sektorů dat pomocí transparentní sady příkazů SCSI (Small Computer System Interface). Operační systémy tak mohou s USB diskem zacházet jako s pevným diskem a mohou jej formátovat pomocí libovolného file systém, který se jim líbí.
Třída velkokapacitních paměťových zařízení USB podporuje dva transportní protokoly:
Transport pouze pro hromadný transport (BOT) a řídicí/hromadný/přerušovací transport (CBI) (používá se pouze pro disketové mechaniky)
Třída velkokapacitních paměťových zařízení implementuje transparentní sadu příkazů SCSI pouze s použitím protokolu BOT, což znamená, že k přenosu dat a informací o stavu budou použity pouze hromadné koncové body. Implementace MSC podporuje více logických jednotek.
Implementace MSC splňuje následující specifikace:
Specifikace třídy velkokapacitního úložiště Universal Serial Bus (USB)view, Revize 1.3 5. září 2008. Universal Serial Bus Mass Storage Class Bulk-Only Transport, Revize 1.0 31. září 1999.
Zařízení USB MSC aCl ss Overview
Koncové body protokolu Požadavky tříd Rozhraní SCSI (Small Computer System Interface)
Protokol
V této části se budeme zabývat protokolem Bulk-Only Transport (BOT) třídy Mass Storage. Protokol Bulk-Only Transport má třitages:
Přenos příkazů Přenos dat Přenos stavu
Příkazy pro hromadné úložiště jsou odesílány hostitelem prostřednictvím struktury zvané Command Block Wrapper (CBW). Pro příkazy vyžadující přenos dattagE.g. hostitel se pokusí odeslat nebo přijmout přesný počet bajtů ze zařízení, jak je specifikováno v polích délky a příznaku CBW. Po dokončení přenosu dattaghostitel se pokusí od zařízení přijmout zprávu Command Status Wrapper (CSW), která podrobně popisuje stav příkazu a také případné zbytky dat (pokud ano).
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
43/174
Nadview
libovolný). Pro příkazy, které neobsahují přenos dattagE. hostitel se pokusí přijmout CSW ihned po odeslání CBW. Protokol je podrobně popsán na obrázku – Protokol MSC.
Obrázek – Protokol MSC
Koncové body
Na straně zařízení se v souladu se specifikací BOT skládá MSC z následujících koncových bodů: Dvojice řídicích koncových bodů IN a OUT, nazývaných výchozí koncový bod. Dvojice hromadných koncových bodů IN a OUT.
Níže uvedená tabulka ukazuje různá použití koncových bodů.
Tabulka – Využití koncového bodu MSC
Koncový bod
Řídicí vstup Řídicí výstup Hromadný vstup Hromadný výstup
Směr
Zařízení k hostiteli Hostitel k zařízení Zařízení k hostiteli Hostitel k zařízení
Používání
Výčet a požadavky specifické pro třídu MSC Výčet a požadavky specifické pro třídu MSC Odeslání CSW a dat Příjem CBW a dat
Žádosti o kurz
Pro protokol MSC BOT jsou definovány dva řídicí požadavky. Tyto požadavky a jejich popisy jsou podrobně popsány v tabulce níže.
Tabulka – Požadavky na třídy velkokapacitního úložiště
Žádosti o kurz
Obnovení hromadného úložiště
Popis
Tento požadavek se používá k resetování velkokapacitního paměťového zařízení a jeho přidruženého rozhraní. Tento požadavek připraví zařízení k přijetí dalšího bloku příkazů.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
44/174
Nadview
Žádosti o kurz
Popis
Get Max Tento požadavek se používá k vrácení nejvyššího čísla logické jednotky (LUN) podporovaného zařízením. Napříkladample, a
LUN
Zařízení s LUN 0 a LUN 1 vrátí hodnotu 1. Zařízení s jednou logickou jednotkou vrátí 0 nebo zablokuje
požadavek. Maximální vrácená hodnota je 15.
Rozhraní malého počítačového systému SCSI
Na úrovni programovacího rozhraní implementuje zařízení MSC jeden ze standardních komunikačních protokolů pro úložná média, jako je SCSI a SFF-8020i (ATAPI). „Programovací rozhraní“ specifikuje, který protokol je implementován, a pomáhá hostitelskému operačnímu systému načíst vhodný ovladač zařízení pro komunikaci s úložným zařízením USB. SCSI je nejběžnější protokol používaný s úložnými zařízeními USB MSC. Poskytujeme implementaci pro podtřídu MSC SCSI, kterou mohou naši uživatelé GSDK používat ihned po instalaci.
SCSI je sada standardů pro zpracování komunikace mezi počítači a periferními zařízeními. Tyto standardy zahrnují příkazy, protokoly, elektrická rozhraní a optická rozhraní. Paměťová zařízení, která používají jiná hardwarová rozhraní, jako je USB, používají příkazy SCSI pro získávání informací o zařízení/hostiteli a pro řízení činnosti zařízení a přenos bloků dat v paměťovém médiu.
Příkazy SCSI pokrývají širokou škálu typů a funkcí zařízení, a proto zařízení potřebují podmnožinu těchto příkazů. Obecně jsou pro základní komunikaci nezbytné následující příkazy:
DOTAZ KAPACITA ČTENÍ(10) ČTENÍ(10) POŽADAVEK TEST SNÍMÁNÍ JEDNOTKA PŘIPRAVENA K ZÁPISU(10)
Potřeby zdrojů třídy MSC pro zařízení USB od jádra
Pokaždé, když přidáte instanci třídy MSC do konfigurace USB pomocí funkce sl_usbd_msc_add_to_configuration(), budou z jádra alokovány následující zdroje.
Zdroj
Rozhraní Alternativní rozhraní Koncové body Skupiny rozhraní
Množství
1 1 2 0
Všimněte si, že tato čísla platí pro každou konfiguraci. Při nastavování konfiguračních hodnot SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY a SL_USBD_DESCRIPTOR_QUANTITY nezapomeňte vzít v úvahu, kolik konfigurací bude třída přidána. U konfigurační hodnoty SL_USBD_OPEN_ENDPOINTS_QUANTITY platí, že protože koncové body se otevírají pouze tehdy, když hostitel nastaví konfiguraci, stačí vzít v úvahu pouze počet potřebných koncových bodů pro instanci třídy.
Konfigurace třídy MSC zařízení USB
Pro konfiguraci třídy MSC se používají dvě skupiny konfiguračních parametrů:
Konfigurace specifické pro aplikaci třídy MSC zařízení USB Konfigurace logické jednotky třídy MSC zařízení USB
Konfigurace specifické pro aplikaci pro zařízení USB MSC
Konfigurace třídy za kompilace Vytvoření instance třídy
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
45/174
Nadview
Konfigurace třídy za kompilace
Třída MSC a podtřída SCSI od Silicon Labs USB Device jsou konfigurovatelné během kompilace pomocí #defines umístěných v souboru sl_usbd_core_config.h. file.
Tabulka – Generické konfigurační konstanty
Název konfigurace
Popis
SL_USBD_MSC_CLASS_INST Počet instancí třídy, které alokujete voláním funkce
MNOŽSTVÍ_ANCE
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA Číslo konfigurace, do které lze přidat instanci třídy voláním metody
MNOŽSTVÍ_CION
funkce sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Počet logických jednotek na instanci třídy, které přidáte voláním funkce
ITY
funkce sl_usbd_msc_scsi_lun_add().
SL_USBD_MSC_SCSI_64_BIT Povoluje nebo zakazuje podporu pro 64bitovou adresu logických bloků (LBA).
_LBA_EN
SL_USBD_MSC_DATA_BUFF Velikost datové vyrovnávací paměti na instanci třídy v bajtech ER_SIZE
Výchozí hodnota
2
1
2
0
512
Vytvoření instance třídy
Vytvoření instance třídy USB Device MSC SCSI se provádí voláním funkce sl_usbd_msc_scsi_create_instance(). Tato funkce přijímá jeden konfigurační argument, který je popsán níže.
p_scsi_callbacks
p_scsi_callbacks je ukazatel na konfigurační strukturu typu sl_usbd_msc_scsi_callbacks_t. Kromě běžných zpětných volání třídy USB zařízení connect/disconnect poskytuje třídě MSC sadu volitelných funkcí zpětného volání, které se volají, když dojde k události na logické jednotce. Pokud nejsou potřeba žádná zpětná volání, lze tomuto argumentu předat nulový ukazatel (NULL).
Níže uvedená tabulka popisuje jednotlivá konfigurační pole dostupná v této konfigurační struktuře.
Tabulka – konfigurační struktura sl_usbd_msc_scsi_callbacks_t
Pole
Popis
.umožnit
Voláno, když je instance třídy USB úspěšně povolena.
.disable Voláno, když je instance třídy USB zakázána.
.host_eject Funkce volána při vysunutí logické jednotky z hostitele.
Podpis funkce
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);
Konfigurace logické jednotky třídy MSC zařízení USB
Přidání logické jednotky do instance třídy MSC se provádí voláním funkce sl_usbd_msc_lun_add(). Tato funkce přijímá jeden konfigurační argument, který je popsán níže.
p_lu_info
p_lu_info je ukazatel na strukturu typu sl_usbd_msc_scsi_lun_info_t. Jejím účelem je poskytnout informace o logické jednotce třídě MSC.
Níže uvedená tabulka popisuje jednotlivá konfigurační pole dostupná v této konfigurační struktuře.
Tabulka – Konfigurační struktura sl_usbd_msc_scsi_lun_info_t
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
46/174
Nadview
Pole
Popis
Pole
.scsi_lun_api_p tr
Popis
Ukazatel na rozhraní API ovladače média, které bude tuto logickou jednotku zpracovávat. Další informace o ovladačích úložišť naleznete v části Ovladače úložišť třídy USB Device MSC.
.ve nd o r_id _ p tr
.product_id_ptr
.product_revize_úroveň .is_read_only
Ukazatel na řetězec, který obsahuje identifikaci dodavatele logické jednotky. Maximální délka řetězce je 8 znaků. Ukazatel na řetězec, který obsahuje identifikaci produktu logické jednotky. Maximální délka řetězce je 16 znaků. Úroveň revize produktu.
Příznak, který označuje, zda by logická jednotka měla být z pohledu view hostitele (pravda) nebo ne (nepravda).
Průvodce programováním třídy MSC pro zařízení USB
Tato část vysvětluje, jak používat třídu MSC.
Inicializace třídy MSC zařízení USB Přidání instance třídy MSC zařízení USB do zařízení Třída MSC zařízení USB Zpracování logických jednotek
Inicializace třídy MSC zařízení USB
Chcete-li do zařízení přidat funkcionalitu třídy MSC SCSI, nejprve inicializujte základní třídu MSC a podtřídu SCSI voláním funkcí sl_usbd_msc_init() a sl_usbd_msc_scsi_init().
BývalýampNíže uvedený obrázek ukazuje, jak volat funkce sl_usbd_msc_init() a sl_usbd_msc_scsi_init().
Example – Volání sl_usbd_msc_init() a sl_usbd_msc_scsi_init()
stav sl_status_t;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
Přidání instance třídy MSC SCSI pro USB zařízení do vašeho zařízení
Chcete-li do zařízení přidat funkce třídy MSC SCSI, nejprve vytvořte instanci a poté ji přidejte do konfigurace (konfigurací) zařízení. Do instance musíte přidat alespoň jednu logickou jednotku.
Vytvoření instance třídy MSC SCSI
Vytvořte instanci třídy MSC SCSI voláním funkce sl_usbd_msc_scsi_create_instance().
BývalýampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_msc_scsi_create_instance() s použitím výchozích argumentů. Další informace o konfiguračních argumentech, které se mají předat funkci sl_usbd_msc_scsi_create_instance(), naleznete v části Konfigurace specifické pro aplikaci pro třídu USB Device MSC.
Example – Volání sl_usbd_msc_scsi_create_instance()
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
47/174
Nadview
uint8_t class_nbr; stav sl_status_t;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
stav = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
pokud (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Přidání instance třídy MSC do konfigurace(í) vašeho zařízení
Po vytvoření instance třídy MSC ji můžete přidat do konfigurace voláním funkce
sl_usbd_msc_add_to_configuration() .
BývalýampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_msc_scsi_add_to_configuration() s použitím výchozích argumentů.
Example – Volání funkce sl_usbd_msc_scsi_add_to_configuration()
stav sl_status_t;
stav = sl_usbd_msc_scsi_add_to_configuration(číslo_třídy,
(1)
config_nbr_fs);
(2)
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
(1) Číslo třídy, které se má přidat do konfigurace vrácené funkcí sl_usbd_msc_scsi_create_instance(). (32) Číslo konfigurace (zde se přidává do konfigurace s plnou rychlostí).
Zpracování logických jednotek třídy MSC zařízení USB
Přidání logické jednotky Připojení/odpojení paměťového média
Přidání logické jednotky
Při přidávání logické jednotky do instance třídy MSC SCSI musí být tato jednotka vázána na paměťové médium (RAMDisk, SD karta, flash paměť atd.). Třída MSC používá ovladač úložiště pro komunikaci s paměťovým médiem. Tento ovladač bude nutné dodat při přidávání logické jednotky.
BývalýampNíže uvedený obrázek ukazuje, jak přidat logickou jednotku pomocí funkce sl_usbd_msc_scsi_lun_add().
Example – Přidání logické jednotky pomocí sl_usbd_msc_scsi_lun_add()
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
48/174
Nadview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
postavení;
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
= „blokové zařízení example“;
lu_info.product_revision_level = 0x1000u;
lu_info.je_pouze_čtení
= nepravda;
stav = sl_usbd_msc_scsi_lun_add(číslo_třídy, &lu_info, &lu_object_ptr);
pokud (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Připojení/odpojení paměťového média
Po přidání logické jednotky musí být připojeno paměťové médium, aby bylo k dispozici ze strany hostitele. Třída MSC nabízí dvě funkce pro řízení přidružení paměťového média k logické jednotce: sl_usbd_msc_scsi_lun_attach() a sl_usbd_msc_scsi_lun_detach(). Tyto funkce umožňují emulovat odebrání paměťového zařízení, abyste v případě potřeby znovu získali přístup z vestavěné aplikace.
BývalýampNíže uvedený obrázek ukazuje, jak použít funkce sl_usbd_msc_scsi_lun_attach() a sl_usbd_msc_scsi_lun_detach().
Example – Připojení/odpojení média
stav sl_status_t;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
…
(1)
stav = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
…
(2)
stav = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
…
(3)
(1) Od tohoto okamžiku, pokud je zařízení MSC připojeno k hostiteli, je paměťové médium přístupné.
(2) Pokud je zařízení MSC připojeno k hostiteli, médium se nyní zobrazí jako nedostupné. V tomto okamžiku lze s médiem provádět operace z integrované aplikace.
(3) Pokud je zařízení MSC připojeno k hostiteli, paměťové médium se opět zobrazí jako připojené.
Ovladače zařízení pro úložiště třídy USB MSC
Zařízení USB třídy MSC potřebuje pro komunikaci s paměťovým médiem ovladač úložiště. Společnost Silicon Labs v současné době ovladače nenabízí.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
49/174
Nadview
Ovladač TPY aa je definován parametrem typedef sl_usbd_msc_scsi_lun_api_t. Váš atribut sl_usbd_msc_scsi_lun_api_t musí být zahrnut do vašeho atributu sl_usbd_msc_scsi_lun_info_t, což je argument ssed při přidávání logické jednotky pomocí sl_usbd_msc_scsi_lun_add(). Více informací o strukturách naleznete v části USB Device MSC SCSI API. Implementace ovladače úložiště může být jednoduchá jako pole sektorů v paměti RAM. Typická velikost sektoru (tj. velikost bloku) je 512 pro velkokapacitní paměťová zařízení a 2048 pro CD-ROM.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
50/174
Nadview
Nadview
Třída dodavatele USB zařízení
Třída dodavatele USB zařízení nadview Potřeby zdrojů pro třídu dodavatele zařízení USB z jádra Konfigurace třídy dodavatele zařízení USB Programovací příručka pro třídu dodavatele zařízení USB Třída dodavatele umožňuje vytvářet zařízení specifická pro dodavatele, která mohou implementovat proprietární protokol. Pro přenos dat mezi hostitelem a zařízením se spoléhá na dvojici hromadných koncových bodů. Hromadné přenosy jsou vhodné pro přenos velkého množství nestrukturovaných dat a poskytují spolehlivou výměnu dat pomocí mechanismu detekce chyb a opakování. Kromě hromadných koncových bodů může třída dodavatele také používat volitelný pár koncových bodů přerušení. S třídou dodavatele může pracovat jakýkoli operační systém (OS) za předpokladu, že operační systém má ovladač pro zpracování třídy dodavatele. V závislosti na operačním systému může být ovladač nativní nebo specifický pro dodavatele. Například v systému Microsoft Windows® vaše aplikace interaguje s ovladačem WinUSB poskytovaným společností Microsoft pro komunikaci se zařízením dodavatele.
Třída dodavatele USB zařízení nadview
Obrázek – Obecná architektura mezi hostitelem systému Windows a třídou Vendor ukazuje obecnou architekturu mezi hostitelem a zařízením pomocí třídy Vendor. V tomto příkladuamptj. hostitelským operačním systémem je MS Windows.
Obrázek – Obecná architektura mezi hostitelem MS Windows a třídou dodavatele
Na straně MS Windows aplikace komunikuje se zařízením dodavatele interakcí s knihovnou USB. Knihovny, jako například libusb, nabízejí API pro správu zařízení a jeho přidružených kanálů a pro komunikaci se zařízením prostřednictvím řídicích, hromadných a přerušovacích koncových bodů.
Na straně zařízení se třída Vendor skládá z následujících koncových bodů:
Dvojice řídicích koncových bodů IN a OUT nazývaných výchozí koncový bod. Dvojice hromadných koncových bodů IN a OUT.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
51/174
Nadview
Dvojice koncových bodů přerušení IN a OUT. Tato dvojice je volitelná. Níže uvedená tabulka ukazuje použití různých koncových bodů:
Tabulka – Použití koncových bodů třídy dodavatelů
Směr koncového bodu
Ovládání IN
Řízení
VEN
Hromadné VLOŽENÍ
Zařízení-hostitel
>Hostitel-zařízení
Zařízení-hostitel
Hromadné VYDÁNÍ
Přerušení VSTUP
Přerušit
VEN
Host-to-device
Zařízení-hostitel
Host-to-device
Používání
Standardní požadavky na výčet a požadavky specifické pro dodavatele.
Standardní požadavky na výčet a požadavky specifické pro dodavatele.
Komunikace surových dat. Data lze strukturovat podle proprietárního protokolu.
Komunikace surových dat. Data lze strukturovat podle proprietárního protokolu.
Komunikace nebo oznámení na základě nezpracovaných dat. Data mohou být strukturována podle proprietárního protokolu. Komunikace nebo oznámení na základě nezpracovaných dat. Data mohou být strukturována podle proprietárního protokolu.
Aplikace zařízení může k odesílání a přijímání dat do hostitele nebo z něj používat koncové body pro hromadné zpracování a přerušení. K dekódování požadavků specifických pro dodavatele odeslaných hostitelem může použít pouze výchozí koncový bod. Standardní požadavky jsou interně spravovány vrstvou Core zařízení Silicon Labs USB.
Potřeby zdrojů třídy dodavatelů USB zařízení od jádra
Pokaždé, když přidáte instanci třídy dodavatele do konfigurace pomocí funkce sl_usbd_vendor_add_to_configuration(), budou z jádra alokovány následující zdroje.
Zdroj
Rozhraní Alternativní rozhraní Koncové body Skupiny rozhraní
Množství
1 1 2 (4, pokud jste povolili koncové body přerušení) 0
Všimněte si, že tato čísla platí pro každou konfiguraci. Při nastavování konfiguračních hodnot SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY a SL_USBD_DESCRIPTOR_QUANTITY nezapomeňte vzít v úvahu, kolik konfigurací bude třída přidána. U konfigurační hodnoty SL_USBD_OPEN_ENDPOINTS_QUANTITY platí, že protože koncové body se otevírají pouze tehdy, když hostitel nastaví konfiguraci, stačí vzít v úvahu pouze počet potřebných koncových bodů pro instanci třídy.
Konfigurace třídy dodavatele zařízení USB
Pro konfiguraci třídy Dodavatel se používají dvě skupiny konfiguračních parametrů:
Konfigurace specifické pro aplikaci třídy dodavatele zařízení USB Konfigurace instancí třídy dodavatele zařízení USB
Konfigurace specifické pro aplikaci podle třídy dodavatelů USB zařízení
Nejprve, chcete-li použít modul třídy Vendor USB zařízení od Silicon Labs, upravte definice konfigurace Vendor během kompilace podle potřeb vaší aplikace. Jsou přeskupeny v záhlaví sl_usbd_core_config.h. file v sekci Dodavatel. Účelem konfigurace množství je informovat modul USB zařízení o tom, kolik objektů USB Dodavatel má alokovat.
Níže uvedená tabulka popisuje jednotlivé definice konfigurace.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
52/174
Nadview
Tabulka – Definice konfigurace dodavatele zařízení USB
Název konfigurace
Popis
Výchozí hodnota
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Počet instancí třídy, které alokujete voláním funkce sl_usbd_vendor_create_instance().
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Počet konfigurací. Instance třídy dodavatele lze přidat do jedné nebo více konfigurací voláním funkce sl_usbd_vendor_add_to_configuration().
Konfigurace instancí třídy dodavatele USB zařízení
Tato část definuje konfigurace související s instancemi třídy Vendor.
Vytvoření instance třídy intr_en interval p_vendor_callbacks
Vytvoření instance třídy
Vytvoření instance třídy Vendor se provádí voláním funkce sl_usbd_vendor_create_instance(), která přijímá tři konfigurační argumenty popsané níže.
intr_en
Logická hodnota, která indikuje, zda má být přidána dvojice koncových bodů přerušení, či nikoli.
Hodnota
pravda nepravda
Popis
Bude přidána dvojice koncových bodů IN/OUT a zpřístupněna vestavěné aplikaci. Nebude přidán žádný koncový bod přerušení. K dispozici bude pouze dvojice koncových bodů Bulk IN/OUT.
interval
Pokud nastavíte intr_en na hodnotu true, můžete zadat interval dotazování koncových bodů přerušení (v milisekundách). Pokud nastavíte intr_en na hodnotu false, můžete nastavit interval na 0, protože jej bude třídou ignorován.
p_vendor_callbacks
p_vendor_callbacks je ukazatel na strukturní proměnnou callback funkcí, kterou můžete zadat pro zpracování požadavků na řízení specifických pro danou třídu. Pokud nepoužíváte žádné požadavky specifické pro danou třídu nebo potřebujete povolit/zakázat oznámení, můžete ji nastavit na NULL.
BývalýampNíže uvedený soubor obsahuje očekávaný podpis obslužné rutiny požadavků specifických pro vaši třídu.
Example – Podpis funkce požadavku specifického pro třídu
void app_usbd_vendor_req_handle(uint8_t)
třída_číslo, (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) Číslo instance třídy dodavatele.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
53/174
Nadview
(2) Ukazatel na přijatý požadavek na nastavení od hostitele.
Průvodce programováním třídy dodavatelů USB zařízení
Tato část vysvětluje, jak používat třídu Vendor. Inicializace třídy USB Device Vendor Přidání instance třídy USB Device Vendor do zařízení Komunikace pomocí třídy USB Device Vendor
Inicializace třídy dodavatele USB zařízení
Chcete-li do zařízení přidat funkci třídy dodavatele, nejprve inicializujte třídu voláním funkce USBD_Vendor_Init(). PříkladampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_vendor_init().
Example – Volání sl_usbd_vendor_init()
stav sl_status_t;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */ }
Přidání instance třídy dodavatele USB zařízení do vašeho zařízení
Chcete-li do zařízení přidat funkce třídy dodavatele, musíte nejprve vytvořit instanci a poté ji přidat do konfigurace (konfigurací) zařízení.
Vytvoření instance třídy dodavatele Přidání instance třídy dodavatele do konfigurace(í) vašeho zařízení
Vytvoření instance třídy dodavatele
Vytvořte instanci třídy Vendor voláním funkce sl_usbd_vendor_create_instance(). PříkladampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_vendor_create_instance() s použitím výchozích argumentů. Další informace o konfiguračních argumentech, které se mají předat funkci sl_usbd_vendor_create_instance(), naleznete v části Konfigurace instancí třídy dodavatelů zařízení USB.
Example – Volání sl_usbd_vendor_create_instance()
uint8_t class_nbr; stav sl_status_t;
stav = sl_usbd_vendor_create_instance(false,
(1)
0u,
(2)
app_usbd_vendor_callback_functions, (3)
&číselník_třídy);
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
(1) U této instance třídy nejsou k dispozici žádné koncové body přerušení. (2) Interval je ignorován, protože koncové body přerušení jsou zakázány.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
54/174
Nadview
(3) Funkce zpětného volání, která je součástí vaší aplikace a zpracovává požadavky na třídy specifické pro dodavatele. Další informace naleznete v části Komunikace pomocí třídy dodavatele zařízení USB. Přidání instance třídy dodavatele do konfigurace (konfigurací) vašeho zařízení Po vytvoření instance třídy dodavatele ji můžete přidat do konfigurace voláním funkce USBD_Vendor_ConfigAdd(). ExampNíže uvedený obrázek ukazuje, jak volat funkci sl_usbd_vendor_add_to_configuration() s použitím výchozích argumentů.
Example – Volání funkce sl_usbd_vendor_add_to_configuration()
stav sl_status_t;
stav = sl_usbd_vendor_add_to_configuration(číslo_třídy,
(1)
config_nbr_fs);
(2)
pokud (stav ! SL_STATUS_OK) {
/* Došlo k chybě. Zde by mělo být přidáno ošetření chyb. */
}
(1) Číslo třídy, které se má přidat do konfigurace vrácené funkcí sl_usbd_vendor_create_instance(). (2) Číslo konfigurace (zde se přidává do konfigurace Full-Speed).
Komunikace pomocí třídy dodavatele USB zařízení
Obecná synchronní komunikace Asynchronní komunikace Požadavek dodavatele Obecné Třída Vendor nabízí následující funkce pro komunikaci s hostitelem. Další podrobnosti o parametrech funkce naleznete v části API dodavatele zařízení USB.
Tabulka – Souhrn rozhraní API pro komunikaci s dodavateli
Název funkce
sl_usb d _v e nd o r_ read ad _bulk_sy nc() sl_usb d _v e nd o r_write _bulk_sy nc() sl_usb d _v e nd o r_ read ad _bulk_asy nc() sl_usb d _v e nd o r_ write _bulk_asy nc() sl_usb d _v e nd o r_ read 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_ read ad _inte rrup t_asy nc
()
sl_usb d _ve nd o r_write _inte rrup t_asy nc
()
Operace Přijímá data z hostitele přes koncový bod bulk OUT. Tato funkce blokuje. Odesílá data do hostitele přes koncový bod bulk IN. Tato funkce blokuje. Přijímá data z hostitele přes koncový bod bulk OUT. Tato funkce neblokuje. Odesílá data do hostitele přes koncový bod bulk IN. Tato funkce neblokuje. Přijímá data z hostitele přes koncový bod interrupt OUT. Tato funkce blokuje. Odesílá data do hostitele přes koncový bod interrupt IN. Tato funkce blokuje. Přijímá data z hostitele přes koncový bod interrupt OUT. Tato funkce neblokuje.
blokování.
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. Všechna práva vyhrazena.
55/174
Nadview
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
délka_xferu;
sl_status_t
postavení;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&dél_xferu);
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
false,
(5)
&dél_xferu);
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
(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) Aplikace poskytuje inicializovaný přenosový buffer.
(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.
Asynchronní komunikace
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. Všechna práva vyhrazena.
56/174
Nadview
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
postavení;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
NULA,
(4)
false);
(6)
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Ošetření chyby. */
}
}
(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)
{
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} jinak {
/* $$$$ Ošetření chyby. */
}
}
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)
{
pokud (stav ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} jinak {
/* $$$$ Ošetření chyby. */
}
}
(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. Všechna práva vyhrazena.
57/174
Nadview
(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. Všechna práva vyhrazena.
58/174
Nadview
#define APP_VENDOR_REQ_NO_DATA
0x01u
#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
50u
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;
stav sl_status_t;
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;
výchozí:
(6)
// Request is not supported.
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
59/174
Nadview
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 struct {
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 přítomný.
*/
} 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. Všechna práva vyhrazena.
60/174
Dokumentace API
Dokumentace API
Dokumentace API
Seznam modulů
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
Popis
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. Všechna práva vyhrazena.
61/174
USB Device API
USB Device API
USB Device API
USB Device API.
Moduly
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. Všechna práva vyhrazena.
62/174
USB Device ACM API
USB Device ACM API
USB Device ACM API
USB Device CDC ACM API.
Moduly
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funkce
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. Všechna práva vyhrazena.
63/174
USB Device ACM API
Makra
#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. Všechna práva vyhrazena.
64/174
USB Device ACM API
Typ
prázdnota
Direction N/A
Argument Name
MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS
Initialize the CDC ACM serial emulation subclass.
Návraty
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
Popis
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.
Parametry
Typ
uint16_t
uint16_t
Direction Argument Name
Popis
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.
Návraty
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.
Parametry
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.
Návraty
Copyright © 2025 Silicon Laboratories. Všechna práva vyhrazena.
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.
Parametry
Typ
Směr
Argument Name
Popis
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
Dokumenty / zdroje
![]() |
SILICON LABS USB Device Stack [pdfNávod k obsluze USB Device Stack, Device Stack, Stack |