Pila di dispositivi USB
Specificazioni
- Versione USB: 1.5.1
- Data di uscita: 21 di lugliu di u 2025
- Versione di u SDK di Simplicity: 2025.6.1
Product Overview
U stack di dispositivi USB di Silicon Labs furnisce versatile è
Cunnessione USB faciule d'utilizà per i prughjetti IoT, chì facilita
cumunicazione trà i coprocessori di rete è l'ospiti.
Features
- Stack di dispositivi USB efficiente
- Ideale per i prughjetti IoT
- Supportu per a cumunicazione trà i coprocessori di rete è
ospiti
Istruzzioni per l'usu di u produttu
Cunfigurazione di u dispusitivu USB
Cunfigurà i paràmetri di u dispusitivu USB secondu u vostru prugettu
esigenze riferendusi à a sezzione di Cunfigurazione di u Dispositivu USB
in a documentazione.
Guida di prugrammazione di dispositivi USB
Segui a Guida di Programmazione di Dispositivi USB per capisce cumu fà
prugramma è interagisce cù u dispusitivu USB per diversi
applicazioni.
Classi di dispositivi USB
A sezzione Classi di Dispositivi USB furnisce una panoramicaview di sfarenti
classi cum'è CDC ACM, HID, MSC SCSI, è Vendor Class. Sceglite u
classa adatta basata annantu à a funziunalità di u vostru dispusitivu.
Risoluzione di i prublemi di i dispositivi USB
Sè avete qualchì prublema cù u dispusitivu USB, riferitevi à u
Sezione di risoluzione di i prublemi di i dispositivi USB per suluzioni è debugging
cunsiglii.
Host USB di u sistema operativu Microsoft Windows
Sè vo aduprate u dispusitivu USB cù un sistema operativu Microsoft Windows
Ospite, assicuratevi di seguità e linee guida furnite in u
documentazione per una integrazione senza soluzione di continuità.
FAQ
Q: Chì sò alcuni ex cumuniampmenu di dispusitivi chì possu custruisce aduprendu
sta pila USB?
A: A pila USB vi permette di custruisce dispositivi cum'è
Adattatori USB-seriali, topi o tastiere, memoria amovibile
dispusitivi, è dispusitivi persunalizati.
D: Ci sò esigenze software specifiche per aduprà questu
Pila di dispositivi USB?
A: U software cumpatibile include Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (A cullezzione di cumpilatori GNU),
IAR Embedded Workbench per ARM, è IAR EWARM.
USB di Bus Seriale Universale
USB di Bus Seriale Universale
USB Overview Overview
Note di versione USB
Specifiche è caratteristiche sopraview
Cunfigurazione di u dispusitivu USB finitaview
Guida di prugrammazione di dispositivi USBview
Classi di dispositivi USB Overview Classe CDC ACM Finitaview Classe HID Finitaview Classe SCSI MSC Overview Classe di Venditore Finitaview
Documentazione di l'API USB API di u dispusitivu USB API ACM di u dispusitivu USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t API CDC di u dispusitivu USB a sl_usbd_cdc_subcl ss_driver_t API Core di u dispusitivu USB
sl_usbd_device_config_t sl_usbd_setup_req_t
una API HID di dispositivi USB sl_usbd_cl ss_driver_t
API MSC di u dispusitivu USB sl_usbd_hid_callbacks_t
una API SCSI MSC di u dispusitivu USB sl_usbd_msc_subcl ss_driver_t
sl_usbd_msc_scsi_callbacks_t
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
1/174
USB di Bus Seriale Universale
un sl_usbd_msc_scsi_lun_pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API di u venditore di dispositivi USB sl_usbd_vendor_callbacks_t
Documentazione API Risoluzione di i prublemi di i dispositivi USB
Overview Host USB di u sistema operativu Microsoft Windows
Overview
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
2/174
Overview
Overview
Dispositivu USB
L'USB hè una di l'interfacce di cumunicazione più riesciute in a storia di i sistemi informatichi è hè u standard de facto per a cunnessione di periferiche di l'urdinatore. U stack di dispositivi USB di Silicon Labs hè un modulu di dispositivu USB cuncipitu specificamente per i sistemi integrati. Custruitu da zero cù a qualità, a scalabilità è l'affidabilità di Silicon Labs, hè statu sottumessu à un rigorosu prucessu di validazione per rispettà a specificazione USB 2.0. Questa documentazione descrive cumu inizializà, avvià è aduprà u stack di dispositivi USB di Silicon Labs. Spiega i vari valori di cunfigurazione è i so usi. Include ancu una panoramica...view di a tecnulugia, i tipi di pussibilità di cunfigurazione, e procedure d'implementazione è l'esempiiampmenu d'usu tipicu per ogni classa dispunibile.
Per aiutà vi à capisce rapidamente i cuncetti USB, a ducumentazione presenta parechji esempi.ampmenu di USB cù funzioni basiche. Quessi exampI le vi furnisceranu un quadru chì vi permette di custruisce dispositivi rapidamente. Quessi exampi include:
Adattatore USB-seriale (Classe di dispositivi di cumunicazione) Mouse o tastiera (Classe di dispositivi di interfaccia umana) Dispositivu di almacenamiento amovibile (Classe di almacenamiento di massa) Dispositivu persunalizatu (Classe di fornitore)
U seguitu hè finituview di e sezzioni di documentazione:
Specifiche è Funzioni Cunfigurazione di Dispositivi USB Guida di Programmazione di Dispositivi USB Classi di Dispositivi USB
CDC Classe ACM Classe HID Classe MSC SCSI Classe di u fornitore Risoluzione di i prublemi di i dispositivi USB Sistema operativu Microsoft Windows Host USB
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
3/174
USB
USB
Versione USB 1.5.1 21 di lugliu di u 2025 - Note di versione
Versione 2025.6.1 di u SDK di Simplicity
L'efficiente pila di dispositivi USB di Silicon Labs offre una cunnessione USB versatile è faciule da aduprà, ideale per i prughjetti IoT, cumprese a cumunicazione trà i coprocessori di rete è l'ospiti. Cliccate quì per e versioni precedenti.
Riassuntu di Rilasciu
Funziunalità Chjave | Cambiamenti API | Correzioni di Bug | Attivazione di Chip
Funzioni chjave
Solu i cambiamenti di piattaforma sottostante.
Cambiamenti API
Nimu.
Correzioni di bug
Nimu.
Attivazione di chip
Nimu.
Funzioni chjave
Nove Funziunalità | Migliuramenti | Funziunalità Eliminate | Funziunalità Obsolete
Funzioni novi
Nimu.
Enhancements
Solu i cambiamenti di piattaforma sottostante.
Funziunalità eliminate
Nimu.
Funzioni obsolete
Nimu.
Cambiamenti API
API nove | API mudificate | API eliminate | API obsolete
Nove API
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
4/174
USB
Nimu.
API mudificate
Nimu.
API eliminate
Nimu.
API obsolete
Nimu.
Correzioni di bug
Nimu.
Attivazione di chip
Nimu.
Applicazione Exampi cambiamenti
Novu Examples | Ex Mudificatuamples | Ex eliminatuamples | Ex deprecatuamples
Novu Examples
Nimu.
Ex mudificatuamples
Nimu.
Eliminatu Examples
Nimu.
Ex deprecatuamples
Nimu.
Impattu di i cambiamenti di versione
Dichjarazioni d'Impattu | Guida di Migrazione
Dichjarazioni d'impattu
Nimu.
Guida di migrazione
Nimu.
Problemi cunnisciuti è Limitazioni
Nimu.
Utilizendu sta versione
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
5/174
USB
Chì ci hè in a versione? | Software cumpatibile | Installazione è usu | Aiutu è feedback
Chì ci hè in a Liberazione ?
Applicazione di Stack di Dispositivi USB Examples
Software compatible
Software
SDK di Simplicity Simplicity Studio Simplicity Commander GCC A cullezzione di compilatori GNU) IAR Embedded Workbench per ARM IAR EWARM
Versione o Variante Compatibile
2025.6.0 5.11.0 1.18.2 (furnitu cù Simplicity Studio) 12.2.1 (furnitu cù Simplicity Studio) 9.40.1 (furnitu cù Simplicity Studio)
Installazione è usu
Per inizià u vostru sviluppu, vedi u nostru:
Guida di prugrammazione di dispositivi USB. Documentazione API.
Per infurmazioni nantu à l'integrazione di Secure Vault, vede Secure Vault.
À review Notificazioni di Cunsiglii di Sicurezza è Software è gestione di e vostre preferenze di notificazione:
Andate à https://community.silabs.com/. Cunnettatevi cù e vostre credenziali di contu. Cliccate nant'à u vostru contu prufessiunale.file icona in l'angulu in cima à diritta di a pagina.
Selezziunate Notificazioni da u menù a tendina. In a sezzione Notificazioni, andate à a tabulazione Notificazioni di i mo prudutti perview Cunsiglii storichi di Sicurezza è Software
notificazioni
÷ Per gestisce e vostre preferenze, aduprate a tabulazione Gestisce Notificazioni per persunalizà l'aghjurnamenti di u produttu è l'avvisi chì vulete
riceve.
Per i paràmetri di cunfigurazione cunsigliati, vede quì.
Per sapenne di più nantu à u software in questa versione, immergetevi in a nostra ducumentazione in linea.
Aiutu è Feedback
Cuntattate l'assistenza di Silicon Labs. Per aduprà u nostru strumentu Ask AI per ottene risposte, vede u campu di ricerca in cima di sta pagina.
Nota: Ask AI hè sperimentale.
Uttene aiutu da a nostra cumunità di sviluppatori.
Pulitica di Liberazione è Mantenimentu di SDK
Vede a nostra Politica di liberazione è mantenimentu di SDK.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
6/174
Overview
Overview
Specificazioni
Conforme à a "Revisione 2.0 di a specificazione di u Bus Serial Universal" Implementa a "Notifica di Cambiamentu Ingegneristicu di u Descrittore di l'Associazione di l'Interfaccia (ECN)" Tipi di trasferimentu
Classi USB di Cuntrollu di l'Interruzzione di Massa Classe di Dispositivi di Comunicazione (CDC) Modellu di Cuntrollu Astrattu (ACM) Dispositivu di Interfaccia Umana (HID) Classe di Archiviazione di Massa (MSC) Quadru di classe specificu di u fornitore
Features
Scalabile per include solu e funzioni necessarie per minimizà l'ingombru di memoria Supporta Full-speed (12 Mbit/s) Supporta dispositivi cumposti (multifunzione) Supporta dispositivi multi-cunfigurazione Supporta funzionalità di risparmiu energeticu USB (suspensione è ripresa di dispositivi) Integrazione cumpleta di Mass Storage Class in Micrium OS File Modulu di sistema sviluppatu cù u stratu d'astrazione CMSIS-RTOS2 per pudè funziunà cù diversi sistemi operativi. Silicon Labs GSDK vene cun porte di sistemi operativi FreeRTOS è Micrium.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
7/174
Overview
Overview
Cunfigurazione di u dispusitivu USB
Questa sezione discute cumu cunfigurà u dispusitivu USB Silicon Labs. Ci sò trè gruppi di parametri di cunfigurazione, cum'è seguita:
Cunfigurazione di u Core di u Dispositivu USB Cunfigurazione di l'Infurmazioni di u Dispositivu USB Cunfigurazione di l'Hardware di u Dispositivu USB
Cunfigurazione di u Core di u Dispositivu USB
U dispusitivu USB di Silicon Labs pò esse cunfiguratu à u mumentu di a compilazione via un inseme di #defines situati in u schedariu sl_usbd_core_config.h. fileU dispusitivu USB usa #defines quandu hè pussibule perchè permettenu di scalà e dimensioni di u codice è di i dati à u mumentu di a compilazione secondu e funzioni chì sò abilitate. Questu permette di aghjustà l'impronte di a memoria di sola lettura (ROM) è di a memoria à accessu aleatoriu (RAM) di u dispusitivu USB di Silicon Labs secondu i requisiti di a vostra applicazione.
Cunsigliatu: Principià u prucessu di cunfigurazione cù i valori predefiniti (evidenziati in neru).
E sezzioni quì sottu sò urganizate secondu l'ordine in a cunfigurazione di u mudellu file, sl_usbd_core_config.h.
Configurazione di e classi di cunfigurazione principale
Cunfigurazione core
Tavula - Custanti di Cunfigurazione di u Core di u Dispositivu USB
Descrizzione Custante
Valore predeterminatu
SL_USBD_TA SK_STACK_ DIMENSIONE
Configura a dimensione di a pila in byte di u compitu core USBD
4096
SL_USBD_TA SK_PRIORITÀ Y
Configura a priorità di u compitu core USBD. Questa hè una priorità CMSIS-RTOS2.
osPrioritàAlta
SL_USBD_A UTO_START _USB_DEVIC E
Sè attivatu, u dispusitivu USB serà avviatu automaticamente una volta chì u kernel hè avviatu è chì quellu compitu di u core USBD hè pianificatu per a prima volta. Sè disattivatu, a vostra applicazione duverà chjamà sl_usbd_core_start_device() quandu hè pronta per esse rilevata da l'ospite USB.
SL_USBD_C U numeru tutale di cunfigurazioni chì saranu aghjunte via sl_usbd_add_configuration()
1
Funzione ONFIGURATI.
ON_QUANTI
TY
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
8/174
Overview
Custante
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITÀ
SL_USBD _DESCRIZIONE
PTOR_Q
UANTITÀ
SL_USBD _STRINGA _QUANTITA
TY
SL_USBD _OPEN_E NDPOIN TS_QUANTITÀ
Descrizzione U numeru tutale d'interfacce USB da aghjunghje per tutte e vostre cunfigurazioni. Questu dipende assai da a(e) classe(i) aduprata(e). Per più infurmazioni nantu à quante interfacce richiede una istanza di classe, riferitevi à a sezione "Bisogni di risorse da u core" di a(e) vostra(e) classe(i).
U numeru tutale d'interfacce USB alternative da aghjunghje per tutte e vostre cunfigurazioni. Questu dipende assai da a(e) classe(i) aduprata(e). Stu valore deve esse sempre uguale o più grande di SL_USBD_INTERFACE_QUANTITY. Per più infurmazioni nantu à quante interfacce alternative richiede una istanza di classe, riferitevi à a sezione "Bisogni di risorse da u Core" di a(e) vostra(e) classe(i).
U numeru tutale di gruppi d'interfaccia USB chì saranu aghjunti per tutte e vostre cunfigurazioni. Questu dipende assai da a(e) classe(i) aduprata(e). Per più infurmazioni nantu à quanti gruppi d'interfaccia richiedenu una istanza di classe, riferitevi à a sezione "Bisogni di risorse da u Core" di a(e) vostra(e) classe(i).
U numeru tutale di descrittori di endpoint chì saranu aghjunti per tutte e vostre cunfigurazioni. Questu dipende assai da a(e) classe(i) aduprata(e). Per più infurmazioni nantu à quanti descrittori di endpoint richiede una istanza di classe, riferitevi à "Numeru di endpoint" in a sezione "Bisogni di risorse da u Core" di a(e) vostra(e) classe(i). Nutate bè chì i endpoint di cuntrollu ùn anu micca bisognu di esse cunsiderati quì. U numeru tutale di stringhe USB. L'impostazione di a quantità à zeru disabiliterà a funzione. Disattivà questu farà chì u dispusitivu ùn almaceni alcuna stringa di descrizzione USB passata da l'applicazione. Questu significa chì l'host ùn puderà micca recuperà e stringhe di descrizzione (cum'è u fabricatore è u nome di u produttu). U numeru tutale di endpoint aperti per cunfigurazione. Un dispusitivu richiede almenu dui endpoint aperti per i trasferimenti di cuntrollu, ma duvete ancu aghjunghje i endpoint di a(e) classe(i) aduprata(e). Per più infurmazioni nantu à quanti endpoint aperti richiede una istanza di classe, riferitevi à "Numeru di endpoint" in a sezione "Bisogni di risorse da u Core" di a(e) vostra(e).
Valore predeterminatu
10 10
2
20 30 20
Cunfigurazione di e classi
E classi anu cunfigurazioni specifiche in tempu di compilazione. Per più infurmazioni, riferitevi à e Classi di Dispositivi USB.
Cunfigurazione di l'infurmazioni di u dispusitivu USB
A cunfigurazione sl_usbd_device_config.h file raggruppa #define-s in tempu di compilazione per definisce l'infurmazioni basiche riguardu à u vostru dispositivu, cum'è l'ID di u venditore/produttu, e stringhe di u dispositivu, ecc. A tavula sottu descrive ogni definizione di cunfigurazione d'infurmazioni dispunibule in questa cunfigurazione. file.
Tavula - Definizione di a Cunfigurazione di l'Infurmazioni di u Dispositivu USB
Custante
ID_VENDITORE_ELETTRONICA_SL_USBD_DEVIC
ID_di_produttu_di_dispositivu_SL_USBD
Descrizzione U vostru numeru d'identificazione di u venditore cum'è furnitu da u Forum di l'Implementatori USB. Per più infurmazioni nantu à cumu pudete ottene un ID di venditore, vede http://www.usb.org/developers/vendor/. U vostru numeru d'identificazione di u produttu.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
9/174
Overview
Custante
Descrizzione
SL_USBD_DEVICE_RELEASE Numeru di versione di u vostru dispusitivu. _NUMBER
SL_USBD_DEVICE_MANUFA Stringa chì descrive u fabricatore di u vostru dispositivu. Sta cunfigurazione hè ignorata quandu
CTURER_STRING
A cunfigurazione SL_USBD_STRING_QUANTITY hè impostata à 0.
SL_USBD_DEVICE_PRODUC Stringa chì descrive u vostru pruduttu. Sta cunfigurazione hè ignorata quandu a cunfigurazione
T_STRING
SL_USBD_STRING_QUANTITY hè impostu à 0.
SL_USBD_DEVICE_SERIAL_N Stringa chì cuntene u numeru di serie di u vostru dispositivu. Sta cunfigurazione hè ignorata quandu
NUMERU_STRINGA
A cunfigurazione SL_USBD_STRING_QUANTITY hè impostata à 0.
SL_USBD_DEVICE_LANGUA Numeru d'identificazione di a lingua di e stringhe di u vostru dispositivu. I valori pussibuli sò:
ID_GE
– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA
– SL_USBD_LANG_ID_CHINESE_TAIWAN
– SL_USBD_LANG_ID_INGLESE_US
– SL_USBD_LANG_ID_INGLESE_RU
– SL_USBD_LANG_ID_FRANCESE
– SL_USBD_LANG_ID_GERMAN
– SL_USBD_LANG_ID_GRECCU
– SL_USBD_LANG_ID_ITALIANU
– SL_USBD_LANG_ID_PORTUGUESE
– SL_USBD_LANG_ID_SANSKRIT
Questa cunfigurazione hè ignorata quandu a cunfigurazione SL_USBD_STRING_QUANTITY hè impostata à 0.
Cunfigurazione di l'hardware di u dispusitivu USB
Sicondu u dispusitivu Silicon Labs chì utilizate, averete forse u pin GPIO è u portu da cunfigurà per u signale USB VBUS Sense. E definizioni di cunfigurazione sò in l'intestazione sl_usbd_hardware_config.h. file.
Custante
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Descrizzione
Porta GPIO per u signale USB VBUS Sense nantu à a vostra scheda. Pin GPIO per u signale USB VBUS Sense nantu à a vostra scheda.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
10/174
Overview
Overview
Guida di prugrammazione di dispositivi USB
Questa sezione spiega cumu aduprà u modulu di dispusitivu USB.
Cunfigurazione iniziale di u modulu di dispusitivu USB
Questa sezione descrive i passi basi richiesti per inizializà u modulu di u dispositivu USB è per aghjunghje, preparà è avvià un dispositivu. Inizializazione di u Modulu di u Dispositivu USB Inizializazione di u Core di u Dispositivu USB Inizializazione di l'aCl ss(es) Aggiunta di u vostru Dispositivu USB Custruzzione di u vostru Dispositivu USB Aggiunta di Cunfigurazione(i) Aggiunta di Funzione(i) USB Avvio di u vostru Dispositivu USB
Funzioni di Hook di l'Eventu
Inizializazione di u Modulu di Dispositivu USB
Inizializazione di u Core di u Dispositivu USB
Cuminciate per inizializà u core di u modulu di u dispusitivu B chjamendu a funzione sl_usbd_core_init(). L'esempiu quì sottu mostra a chjama di sl_usbd_core_init().
Example – Chjama di sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Inizializazione di a(e) classe(i)
Dopu chì u core di u modulu di u dispusitivu USB hè statu inizializatu, duvete inizializà ogni classe chì avete intenzione di utilizà. Vede a sezione "Guida di prugrammazione" di u vostru acl ss(es) per più infurmazioni.
Custruisce u vostru dispositivu USB
Aghjunghjendu cunfigurazione(i)
Dopu avè inizializatu cù successu u vostru dispositivu, pudete cumincià à aghjunghje e funzioni USB, cuminciendu cù una nova cunfigurazione. Un dispositivu deve avè almenu una cunfigurazione. Per aghjunghje una o più cunfigurazioni, chjamate a funzione sl_usbd_core_dd_configuration(). Questa funzione deve esse chjamata per ogni cunfigurazione chì vulete aghjunghje. L'exampQuì sottu mostra cumu aghjunghje un Full-speed.
Example – Aghjunghjendu cunfigurazione(i) à u vostru dispusitivu
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
11/174
Overview
sl_status_t statutu; uint8_t config_nbr_fs;
/* Aghjunghjendu una cunfigurazione à piena velocità à u dispusitivu. */
statutu = sl_usbd_core_add_configuration(0,
/* Nisun attributu particulare à a cunfigurazione. */
100u,
/* Cunsumu massimu di putenza: 100mA.
*/
SL_USBD_DEVICE_SPEED_FULL,
/* Cunfigurazione à piena velocità.
*/
"Aghjunghje Ex di cunfigurazione"ampa cunfigurazione à piena velocità",
&config_nbr_fs);
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Aghjunghjendu Funzioni USB
Dopu avè aghjuntu cù successu almenu una cunfigurazione à u vostru dispusitivu, pudete aghjunghje l'interfacce è i punti finali à u vostru dispusitivu. Ogni classa USB hà i so bisogni in termini di tipu d'interfaccia è di punti finali, quantità è altri parametri. U dispusitivu USB di Silicon Labs aghjusta interfacce è punti finali in e classi chì offre.
Da a vostra applicazione, pudete creà una istanza di una classa USB è aghjunghje la à una cunfigurazione. Per più infurmazioni nantu à u cuncettu di l'istanze di classa di dispositivi USB, vede Classi di dispositivi USB. Nutate bè chì pudete creà una istanza è aghjunghje parechje istanze di classa diverse à una cunfigurazione per creà un dispositivu multifunzione (cumpostu).
L'exampA pagina quì sottu mostra cumu creà una istanza di classe è aghjunghjela à una cunfigurazione.
Example – Aghjunghjendu una istanza di classe à u vostru dispositivu
sl_status_t statutu; uint8_t numeru_di_classe;
/* Crea una istanza di a classa chì vulete aduprà.*/ /* Nutate bè chì, secondu a classa, sta funzione pò avè più argumenti. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
/* Aghjunghje l'istanza di a classa à a cunfigurazione Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Numeru di classa restituitu da sl_usbd_ _creà_istanza. */
config_nbr_fs); /* Numeru di cunfigurazione restituitu da sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Avvia u vostru dispositivu USB
Per difettu, u dispusitivu serà avviatu automaticamente da u compitu core di u dispusitivu USB dopu chì l'inizializazione di u dispusitivu hè cumpletata è u kernel hè avviatu. Per cuntrullà quandu u dispusitivu hè avviatu è diventa visibile da l'host USB, aduprate a cunfigurazione definita SL_USBD_AUTO_START_USB_DEVICE per disattivà a funzione di avviu automaticu. Quandu hè disattivata, dopu avè custruitu/preparatu u vostru dispusitivu, pudete avviallu è rende lu visibile à l'host USB chjamendu a funzione sl_usbd_core_start_device().
L'exampU schedariu quì sottu mostra cumu avvià u vostru apparechju cù a funzione sl_usbd_core_start_device().
Example – Avvia u vostru dispositivu
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
12/174
Overview
statutu sl_status_t;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Funzioni di Hook di l'Eventu
U modulu core di u dispusitivu USB offre duie funzioni di hook debuli chì pudete ridefinisce in a vostra applicazione. U so scopu hè di notificà quandu si verificanu eventi di bus è di cunfigurazione.
Tavula – Funzioni di Hook di l'Eventu USB
Avvenimentu
Descrizzione
Bus
Chjamatu quandu si verifica un avvenimentu di u Bus USB
Cunfigurazione chjamata quandu si verifica un avvenimentu di cunfigurazione USB
Firma di funzione
void sl_usbd_on_bus_event(sl_usbd_bus_event_t eventu); void sl_usbd_on_config_event(sl_usbd_config_event_t eventu, uint8_t config_nbr);
Example – Funzioni di Hook di l'Eventu
void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { switch (event) { case SL_USBD_EVENT_BUS_CONNECT:
// chjamatu quandu u cavu USB hè inseritu in un controller host break;
casu SL_USBD_EVENT_BUS_DISCONNECT: // chjamatu quandu u cavu USB hè cacciatu da una pausa di u controller host;
casu SL_USBD_EVENT_BUS_RESET: // chjamatu quandu l'ospite manda u cumandamentu di reset break;
casu SL_USBD_EVENT_BUS_SUSPEND: // chjamatu quandu l'ospite manda u cumandamentu di suspension break;
casu SL_USBD_EVENT_BUS_RESUME: // chjamatu quandu l'ospite manda u cumandamentu di sveglia break;
predefinitu: pausa; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t eventu, uint8_t config_nbr) { switch (eventu) { casu SL_USBD_EVENT_CONFIG_SET:
// chjamatu quandu l'ospite stabilisce una pausa di cunfigurazione;
case SL_USBD_EVENT_CONFIG_UNSET: // chjamatu quandu una cunfigurazione ùn hè micca impostata break;
predefinitu: pausa; } }
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
13/174
Overview
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
14/174
Overview
Overview
Classi di dispositivi USB
E classi USB dispunibili in Silicon Labs USB Device spartenu alcune caratteristiche cumuni. Questa sezione spiega queste caratteristiche è e so interazioni cù u stratu core.
Per più infurmazione nantu à una classa specifica, vede u seguente:
Classe CDC ACM Classe HID Classe MSC SCSI Classe di u fornitore
À propositu di l'istanze di classe
E classi USB dispunibili in USB Device implementanu u cuncettu di istanze di classe. Una istanza di classe rapprisenta una funzione in un dispositivu. A funzione pò esse descritta da una interfaccia o da un gruppu d'interfacce è appartene à una classe specifica.
Ogni implementazione di classe USB hà alcune cunfigurazioni è funzioni in cumunu, basate annantu à u cuncettu d'istanza di classe. E cunfigurazioni è e funzioni cumuni sò presentate in a tavula sottu. In u titulu di a colonna "Custanti o Funzione", u segnapostu XXXX pò esse rimpiazzatu da u nome di a classe: CDC, HID, MSC, CDC_ACM o VENDOR (Vendor per i nomi di e funzioni).
Tavula - Custanti è Funzioni Relative à u Cuncettu di Istanze di Classe Multiple
Custante o Funzione
SL_USBD_XXXX_CL ASS_INST TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_creà _istanza ()
sl_usbd_XXXX_add_to_conf iguration()
Descrizzione
Configura u numeru massimu d'istanze di classe.
Configura u numeru massimu di cunfigurazioni. Durante l'inizializazione di a classa, una istanza di classa creata serà aghjunta à una o più cunfigurazioni. Crea una nova istanza di classa.
Aghjusta una istanza di classe esistente à a cunfigurazione di u dispusitivu specificatu.
In termini d'implementazione di u codice, a classa dichjarerà una variabile glubale lucale chì cuntene una struttura di cuntrollu di classa. Sta struttura di cuntrollu di classa hè assuciata à una istanza di classa è cuntenerà informazioni specifiche per gestisce l'istanza di classa.
E figure seguenti mostranu parechji scenarii di casu. Ogni figura include un codice exampchì currisponde à u scenariu di casu.
Figura – Istanze di Classe Multiple – U Dispositivu FS (1 Cunfigurazione cù 1 Interfaccia) rapprisenta un dispositivu USB tipicu. U dispositivu hè Full-Speed (FS) è cuntene una sola cunfigurazione. A funzione di u dispositivu hè descritta da una interfaccia cumposta da una coppia di endpoint per a cumunicazione di dati. Una istanza di classe hè creata è vi permetterà di gestisce l'intera interfaccia cù u so endpoint assuciatu.
Figura – Istanze di Classe Multiple – Cunfigurazione di u Dispositivu FS 1 cù 1 Interfaccia)
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
15/174
Overview
U codice currispundente à a Figura - Istanze di Classe Multiple - Dispositivu FS (1 Cunfigurazione cù 1 Interfaccia) hè mostratu in l'esempiuample sottu.
Example – Istanze di Classe Multiple – Cunfigurazione di u Dispositivu FS 1 cù 1 Interfaccia)
sl_status_t statutu; uint8_t class_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Gestisce l'eventu d'attivazione di a classe. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Gestisce l'eventu di disattivazione di a classe. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.attivà = app_usbd_XXXX_attivà,
.disattivà = app_usbd_XXXX_disattivà
};
statutu = sl_usbd_XXXX_init();
(2)
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
statutu = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&class_0);
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
statutu = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
(1) Ogni classe offre un inseme di funzioni di callback per l'eventi di cunnessione/disconnessione di u dispositivu è per l'eventi specifichi di a classe. L'ughjettu di struttura di callback hè passatu cum'è argumentu quandu si crea l'istanza di classe cù sl_usbd_XXXX_create_instance()
funzione.
(1) Inizializà a classa. Tutte e variabili interne, e strutture è i porti di classa saranu inizializati. Nutate bè chì a funzione Init() in certe classi pò piglià altri argumenti.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
16/174
Overview
(2) Crea l'istanza di classe, chì hè class_0. A funzione sl_usbd_XXXX_create_instance() attribuisce una struttura di cuntrollu di classe assuciata à class_0. Sicondu a classe, sl_usbd_XXXX_create_instance() pò avè parametri supplementari in più di u numeru di classe chì rapprisentanu l'infurmazioni specifiche di a classe almacenate in a struttura di cuntrollu di classe. aaa (3) Aghjunghjite l'istanza di classe, class_0, à u numeru di cunfigurazione specificatu, config_0. sl_usbd_XXXX_add_to_configuration() creerà l'interfaccia 0 è i so punti finali IN è OUT assuciati. Di cunsiguenza, l'istanza di classe include l'interfaccia 0 è i so punti finali. Ogni cumunicazione fatta nantu à l'interfaccia 0 aduprerà u numeru d'istanza di classe, class_0. Figura - Istanze di Classe Multiple - U Dispositivu FS (2 Cunfigurazioni è Interfacce Multiple) rapprisenta un esempiu più cumplessu.ampvale à dì. Un dispusitivu à piena velocità hè cumpostu da duie cunfigurazioni. U dispusitivu hà duie funzioni chì appartenenu à a listessa classa, ma ogni funzione hè descritta da duie interfacce è hà una coppia di punti finali bidirezionali. In questu esempiuampie, duie istanze di classe sò create. Ogni istanza di classe hè assuciata à un gruppu d'interfacce à u cuntrariu di Figura - Istanze di Classe Multiple - Dispositivu FS (1 Configurazione cù 1 Interfaccia) è Figura - Istanze di Classe Multiple - Dispositivu FS (2 Configurazioni è Interfacce Multiple) induve l'istanza di classe era assuciata à una sola interfaccia.
Figura – Istanze di Classe Multiple – Configurazioni di u Dispositivu FS 2 è Interfacce Multiple
U codice currispundente à a Figura - Istanze di Classe Multiple - Dispositivu FS (2 Configurazioni è Interfacce Multiple) hè mostratu in l'esempiuampquì sottu. A gestione di l'errore hè omessa per chiarezza.
Example – Istanze di Classe Multiple – Configurazioni di u Dispositivu FS 2 è Interfacce Multiple)
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
17/174
Overview
sl_status_t statutu; uint8_t class_0; uint8_t class_1;
statutu = sl_usbd_XXXX_init();
statutu = sl_usbd_XXXX_create_instance(&class_0); statutu = sl_usbd_XXXX_create_instance(&class_1);
statutu = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); statutu = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
statutu = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); statutu = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Inizializà a classa. Ogni variabile interna, struttura è portu di classa serà inizializata.
(2) Crea l'istanza di classa, class_0. A funzione sl_usbd_XXXX_create_instance() alloca una struttura di cuntrollu di classa assuciata à class_0.
(3) Crea l'istanza di classa, class_1. A funzione sl_usbd_XXXX_create_instance() attribuisce un'altra struttura di cuntrollu di classa assuciata à class_1.
(4) Aghjunghjite l'istanza di classa, class_0, à a cunfigurazione, cfg_0. sl_usbd_XXXX_add_to_configuration() creerà l'interfaccia 0, l'interfaccia 1, l'interfacce alternative, è i punti finali IN è OUT assuciati. U numeru d'istanza di classa, class_0, serà utilizatu per qualsiasi cumunicazione di dati nantu à l'interfaccia 0 o l'interfaccia 1.
(5) Aghjunghjite l'istanza di classa, class_1, à a cunfigurazione, cfg_0. sl_usbd_XXXX_add_to_configuration() creerà l'interfaccia 2, l'interfaccia 3 è i so punti finali IN è OUT assuciati. U numeru d'istanza di classa, class_1, serà utilizatu per qualsiasi cumunicazione di dati nantu à l'interfaccia 2 o l'interfaccia 3.
(6) Aghjunghjite e listesse istanze di classe, class_0 è class_1, à l'altra cunfigurazione, cfg_1.
Ogni classa definisce una struttura di tipu sl_usbd_XXXX_callbacks_t. U so scopu hè di dà à ogni classa un inseme di funzioni di callback da chjamà quandu si verifica un avvenimentu. Dui funzioni di callback sò presenti in ogni classa. Sò presentate in a tavula quì sottu.
Tavula – Funzioni di Callback di Classe Cumuna
Campi Descrizzione .enable Chjamatu quandu l'istanza di classe USB hè attivata currettamente. .disable Chjamatu quandu l'istanza di classe USB hè disattivata.
Firma di funzione void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
18/174
Overview
Overview
Dispositivu USB CDC Classe ACM
Dispositivu USB CDC Classe Base Overview Bisogni di risorse di a classe CDC ACM di u dispositivu USB da u core Dispositivu USB CDC ACM Sottoclasse Overview Cunfigurazione di a Classe CDC ACM di u Dispositivu USB Guida di Programmazione di a Classe CDC ACM di u Dispositivu USB
Questa sezione descrive a classa Communications Device Class (CDC) è a sottuclassa CDC assuciata supportata da a pila USB Device di Silicon Labs. Silicon Labs USB-Device supporta attualmente a sottuclassa Abstract Control Model (ACM), chì hè cumunemente aduprata per l'emulazione seriale.
U CDC include diversi dispositivi di telecomunicazione è di rete. I dispositivi di telecomunicazione includenu modem analogichi, telefoni analogichi è digitali, adattatori di terminale ISDN, ecc. Per esempiuampVale à dì, i dispusitivi di rete cuntenenu modem ADSL è via cavo, adattatori Ethernet è hub. CDC definisce un quadru per incapsulà i standard di servizii di cumunicazione esistenti, cum'è V.250 (per i modem nantu à a rete telefonica) è Ethernet (per i dispusitivi di rete lucale), utilizendu un ligame USB. Un dispusitivu di cumunicazione hè incaricatu di a gestione di i dispusitivi, di a gestione di e chjamate quandu hè necessariu è di a trasmissione di dati.
CDC definisce sette gruppi principali di dispositivi. Ogni gruppu appartene à un mudellu di cumunicazione, chì pò include parechje sottoclassi. Ogni gruppu di dispositivi hà u so propiu documentu di specificazione in più di a classe di basa CDC. I sette gruppi sò:
Rete Telefonica Pubblica Commutata (PSTN), dispositivi cumpresi modem à banda vocale, telefoni è dispositivi di emulazione seriale. Dispositivi di Rete Digitale à Servizi Integrati (ISDN), cumpresi adattatori di terminale è telefoni. Dispositivi Ethernet Control Model (ECM), cumpresi dispositivi chì supportanu a famiglia IEEE 802 (es.: modem via cavo è ADSL, adattatori WiFi). Dispositivi in Modalità di Trasferimentu Assincrona (ATM), cumpresi modem ADSL è altri dispositivi cunnessi à e reti ATM (stazioni di travagliu, router, switch LAN). Dispositivi di Comunicazioni Mobili Wireless (WMC), cumpresi dispositivi di cumunicazione multifunzione utilizati per gestisce e cumunicazioni vocali è dati. Dispositivi Ethernet Emulation Model (EEM) chì scambianu dati inquadrati in Ethernet. Dispositivi Network Control Model (NCM), cumpresi dispositivi di rete à alta velocità (modem High Speed Packet Access, Line Terminal Equipment)
U CDC è l'implementazione di a sottuclasse assuciata sò conformi à e seguenti specificazioni:
Universal Serial Bus, Definizioni di Classe per Dispositivi di Comunicazione, Revisione 1.2, 3 di Nuvembre 2010. Universal Serial Bus, Comunicazioni, Sottoclasse per Dispositivi PSTN, Revisione 1.2, 9 di Febbraiu 2007.
Dispositivu USB CDC Classe Base Overview
Un dispusitivu CDC hè cumpostu da e seguenti interfacce per implementà a capacità di cumunicazione:
L'Interfaccia di Classe di Comunicazione (CCI) hè rispunsevule di a gestione di i dispositivi è, opcionalmente, di a gestione di e chjamate.
A gestione di i dispusitivi permette a cunfigurazione generale è u cuntrollu di u dispusitivu è a notificazione di l'eventi à l'ospite. A gestione di e chjame permette a creazione è a terminazione di e chjame. A gestione di e chjame pò esse multiplexata per mezu di un DCI. Un CCI hè ubligatoriu per tutti i dispusitivi CDC. Identifica a funzione CDC specificendu u mudellu di cumunicazione supportatu da u dispusitivu CDC. L'interfaccia (o l'interfacie) chì seguitanu u CCI ponu esse qualsiasi interfaccia di classe USB definita, cum'è Audio o una interfaccia specifica di u venditore. L'interfaccia specifica di u venditore hè rapprisentata specificamente da un DCI.
L'Interfaccia di Classe di Dati (DCI) hè rispunsevule di a trasmissione di dati. I dati trasmessi è/o ricevuti ùn seguitanu micca un specificu
furmatu. I dati ponu esse dati grezzi da una linea di cumunicazione, dati chì seguitanu un furmatu pruprietariu, ecc. Tutti i DCI chì seguitanu u CCI ponu esse visti cum'è interfacce subordinate.
Un dispusitivu CDC deve avè almenu un CCI è zero o più DCI. Un CCI è qualsiasi DCI subordinatu inseme furniscenu una funzione à l'ospite. Sta capacità hè ancu chjamata funzione. In un dispusitivu cumpostu CDC, pudete avè parechji
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
19/174
Overview
funzioni. Dunque, u dispusitivu saria cumpostu da parechji insemi di CCI è DCI(s) cum'è mostratu in a Figura - Dispositivu Cumpostu CDC.
Figura – Dispositivu cumpostu CDC
Un dispositivu CDC hè prubabile d'utilizà a seguente cumbinazione di punti finali:
Una coppia di punti finali di cuntrollu IN è OUT chjamati punti finali predefiniti. Un puntu finale IN bulk o interrupt opzionale. Una coppia di punti finali IN è OUT bulk o isocroni. Nutate bè chì a pila di dispositivi USB di Silicon Labs ùn supporta micca attualmente i punti finali isocroni.
A tavula quì sottu mostra l'usu di i sfarenti endpoint è da quale interfaccia di u CDC sò aduprati.
Tavula – Usu di u puntu finale di u CDC
Endpoint
Cuntrolla IN
Control OUT
Interruzzione o in massa IN In massa o isocronu IN In massa o isocronu
OUT
Direzzione
Dispositivu-à-ospite
Ospite à dispusitivu
Dispositivu-à-ospite
Dispositivu-à-ospite
Ospite à dispusitivu
Usu di l'interfaccia
CCI
Richieste standard per l'enumerazione, richieste specifiche di classe, dispositivi
gestione, è facultativamente gestione di chjamate.
CCI
Richieste standard per l'enumerazione, richieste specifiche di classe, dispositivi
gestione, è facultativamente gestione di chjamate.
CCI
Notificazione d'eventi, cum'è a rilevazione di l'anellu, u statu di a linea seriale, u statu di a rete.
DCI
Cumunicazione di dati grezzi o furmattati.
DCI
Cumunicazione di dati grezzi o furmattati.
A maiò parte di i dispusitivi di cumunicazione utilizanu un puntu finale d'interruzzione per notificà l'ospite di l'eventi. I punti finali isocroni ùn devenu micca esse aduprati per a trasmissione di dati quandu un protocolu pruprietariu si basa nantu à a ritrasmissione di dati in casu d'errori di protocolu USB. A cumunicazione isocrona pò intrinsecamente perde dati postu chì ùn hà micca meccanismi di ripetizione.
I sette mudelli principali di cumunicazione includenu parechje sottuclassi. Una sottuclasse descrive u modu in cui u dispusitivu deve aduprà u CCI per gestisce a gestione di u dispusitivu è a gestione di e chjamate. A tavula sottu mostra tutte e pussibili sottuclassi è u mudellu di cumunicazione à u quale appartenenu.
Tavula – Sottoclassi CDC
Sottoclasse
Modellu di Cuntrollu di Linea Diretta Modellu di Cuntrollu Astrattu
Modellu di cumunicazione
PSTN
PSTN
Example di Dispositivi chì Utilizanu Questa Sottoclasse
Dispositivi modem cuntrullati direttamente da l'ospite USB
Dispositivi d'emulazione seriale, dispositivi modem cuntrullati per mezu di un inseme di cumandamenti seriali
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
20/174
Overview
Sottoclasse
Modellu di cumunicazione
Example di Dispositivi chì Utilizanu Questa Sottoclasse
Modellu di cuntrollu di u telefunu
PSTN
Modellu ISDN di cuntrollu multicanale
Modellu di cuntrollu CAPI ISDN
Modellu di cuntrollu ECM di rete Ethernet
Rete ATM
ATM
Mudellu di cuntrollu
Modellu di cuntrollu di u telefuninu senza filu
WMC
Gestione di Dispositivi WMC
Modellu di Linea Diretta Mobile
WMC
OBEX
WMC
Modellu EEM di Emulazione Ethernet
Mudellu di cuntrollu di a rete
NCM
Dispositivi di telefonia vocale
Adattatori di terminale à tariffa basica, adattatori di terminale à tariffa primaria, telefoni
Adattatori di terminale à tariffa basica, adattatori di terminale à tariffa primaria, telefoni, modem via cavo DOC-SIS, modem ADSL chì supportanu l'emulazione PPPoE, adattatori Wi-Fi (famiglia IEEE 802.11), adattatori IEEE 802.3, modem ADSL
Apparecchi terminali mobili chì si cunnettanu à dispositivi senza filu
Apparecchiature terminali mobili chì si cunnettanu à dispositivi senza filu Apparecchiature terminali mobili chì si cunnettanu à dispositivi senza filu
Apparecchi terminali mobili chì si cunnettanu à dispositivi wireless Dispositivi chì utilizanu frame Ethernet cum'è u prossimu stratu di trasportu. Ùn hè micca destinatu à i dispositivi di routing è di cunnessione Internet Adattatori IEEE 802.3 chì trasportanu larghezza di banda di dati à alta velocità in rete
Dispositivu USB CDC ACM Class Resource Needs from Core
Ogni volta chì aghjunghjite una istanza di classe CDC ACM à una cunfigurazione USB via una chjama à a funzione sl_usbd_cdc_acm_add_to_configuration(), e risorse seguenti saranu allocate da u core.
Risorsa
Interfacce Interfacce alternative Punti finali Gruppi d'interfaccia
Quantità
2 2 3 1
Nutate bè chì sti numeri sò per cunfigurazione. Quandu cunfigurate i vostri valori di cunfigurazione SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY è SL_USBD_DESCRIPTOR_QUANTITY, ùn vi scurdate di tene contu di quante cunfigurazioni a classa serà aghjunta. Per u valore di cunfigurazione SL_USBD_OPEN_ENDPOINTS_QUANTITY, postu chì i punti finali sò aperti solu quandu una cunfigurazione hè stabilita da l'ospite, basta à tene contu di u numeru di punti finali necessarii per una istanza di classa.
Sottoclasse CDC ACM di u dispusitivu USB Overview
A classa di basa CDC hè cumposta da una Interfaccia di Classe di Comunicazione (CCI) è una Interfaccia di Classe di Dati (DCI), chì hè discussa in dettagliu in USB Device CDC Base Class Over.view Questa sezione discute un CCI di tipu ACM. Si compone di un endpoint predefinitu per l'elementu di gestione è un endpoint d'interruzione per l'elementu di notificazione. Una coppia di endpoint in massa hè aduprata per trasmette dati micca specificati nantu à u DCI.
A sottuclasse ACM hè aduprata da dui tipi di dispusitivi di cumunicazione:
Dispositivi chì supportanu cumandamenti AT (per esempiu, modem à banda vocale). Dispositivi di emulazione seriale chì sò ancu chjamati dispositivi di porta COM virtuale.
Ci sò parechje richieste specifiche di sottuclasse per a sottuclasse ACM. Vi permettenu di cuntrullà è cunfigurà u dispusitivu. A lista cumpleta è a descrizzione di tutte e richieste ACM si ponu truvà in a specificazione.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
21/174
Overview Sottoclasse per i dispositivi PSTN, revisione 1.2, 9 di ferraghju 2007=, sezione 6.2.2.
Da sta lista, a sottuclasse ACM di Silicon Labs9 supporta i seguenti elementi:
Tavula – Richieste ACM supportate da Silicon Labs
Descrizzione di a dumanda di sottuclasse
SetCommFeature GetCommFeature ClearCommFeature
L'ospite manda sta dumanda per cuntrullà i paràmetri per una data funzione di cumunicazione. Ùn hè micca adupratu per l'emulazione seriale.
L'ospite manda sta dumanda per ottene i paràmetri attuali per una data funzione di cumunicazione. Ùn hè micca adupratu per l'emulazione seriale.
L'ospite manda sta dumanda per sguassà i paràmetri per una data funzione di cumunicazione. Ùn hè micca adupratu per l'emulazione seriale.
SetLineCoding
L'ospite manda sta dumanda per cunfigurà i paràmetri di u dispusitivu ACM: velocità di trasmissione, numeru di bit di stop, tipu di parità è numeru di bit di dati. Per una emulazione seriale, sta dumanda hè mandata automaticamente da un terminale seriale ogni volta chì cunfigurate i paràmetri seriali per una porta COM virtuale aperta.
GetLineCoding
L'ospite manda sta dumanda per ottene i paràmetri ACM attuali (velocità di trasmissione, bit di stop, parità, bit di dati). Per una emulazione seriale, i terminali seriali mandanu sta dumanda automaticamente durante l'apertura di a porta COM virtuale.
SetControlLineState L'ospite manda sta dumanda per cuntrullà a portante per i modem half-duplex è indicà chì l'Equipaggiamentu Terminale di Dati (DTE) hè prontu o micca. In u casu di l'emulazione seriale, u DTE hè un terminale seriale. Per una emulazione seriale, certi terminali seriali permettenu di mandà sta dumanda cù i cuntrolli impostati.
SetBreak
L'ospite manda sta dumanda per generà una pausa di stile RS-232. Per una emulazione seriale, certi terminali seriali permettenu di mandà sta dumanda.
A sottuclasse ACM di Silicon Labs9 usa l'endpoint d'interruzzione IN per notificà l'ospite di u statu attuale di a linea seriale. A seriale
U statu di a linea hè una mappa di bit chì informa l'ospite nantu à:
Dati scartati per via di un sovraccaricu Errore di parità Errore di framing Statu di a rilevazione di u signale di l'anellu Statu di u mecanismu di rilevazione di l'interruzzione Statu di a portante di trasmissione Statu di a rilevazione di a portante di u ricevitore
L'implementazione di a sottuclasse ACM di Silicon Labs9 hè cunforme à a specificazione seguente:
Bus seriale universale, cumunicazioni, sottuclasse per i dispusitivi PSTN, revisione 1.2, 9 di ferraghju 2007.
Cunfigurazione di a Classe CDC ACM di u Dispositivu USB
Questa sezione discute cumu cunfigurà a Classe CDC ACM (Classe di Dispositivi di Comunicazione, Modellu di Cuntrollu Astrattu). Ci sò dui gruppi di parametri di cunfigurazione:
Dispositivu USB CDC ACM Class Configurazioni specifiche di l'applicazione Dispositivu USB CDC ACM Class Configurazioni di l'istanza
Cunfigurazioni specifiche di l'applicazione di a classe CDC ACM di u dispositivu USB
Sottoclasse ACM di a Classe di Base CDC
Classe di Base CDC
Prima, per aduprà u modulu di classa CDC di u dispusitivu USB di Silicon Labs, duverete adattà a cunfigurazione di compilazione CDC #define-s secondu i bisogni di a vostra applicazione. Sò raggruppati in l'intestazione sl_usbd_core_config.h. file sottu à a sezzione CDC. U so scopu hè di informà u modulu di u dispusitivu USB di quanti oggetti USB CDC deve assignà.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
22/174
Overview
A tavula quì sottu descrive ogni campu di cunfigurazione dispunibule in questa struttura di cunfigurazione.
Tavula - Definizione di a cunfigurazione CDC di u dispusitivu USB
Nome di cunfigurazione
SL_USBD_CDC_CL AS S_INSTANCE_QUANTITÀ
SL_USBD_CDC_CONF IGURAZIONE_QUANTITA
TY
SL_USBD_CDC_DATA _INTERFACCIA_QUANTI
TY
Descrizzione
Numeru d'istanze di classe chì attribuirete via una chjama à a funzione
sl_usbd_cdc_acm_create_instance().
Numeru di cunfigurazioni. L'istanze di a classa ACM ponu esse aghjunte à una o più cunfigurazioni aaaa via c ll à sl_usbd_cdc_acm_add_to_configuration().
Numeru tutale d'interfacce di dati (DCI) per tutte e funzioni CDC. Ogni funzione CDC ACM aghjunta à a funzione sl_usbd_cdc_acm_create_instance() aghjunghjerà un'interfaccia di dati.
Valore predeterminatu
2
1
2
Sottoclasse ACM
A sottuclasse ACM hà una cunfigurazione in tempu di compilazione mostrata in a tabella sottu.
Tavula - Definizione di a cunfigurazione CDC ACM di u dispusitivu USB
Nome di cunfigurazione
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Descrizzione
Configura u numeru d'istanze di sottuclasse chì attribuirete via una chjama à u
funzione sl_usbd_cdc_acm_create_instance().
Valore predeterminatu
2
Configurazioni di l'istanza di classe CDC ACM di u dispositivu USB
Questa sezione definisce e cunfigurazioni relative à l'istanze di classe seriale CDC ACM. Creazione di l'istanza di classe intervallu di statu di linea capacità di gestione di chjama p_acm_callbacks
Creazione di l'istanza di classe
Per creà una istanza di classe seriale CDC ACM, chjamate a funzione Ta sl_usbd_cdc_acm_create_instance(). Sta funzione hà trè argumenti di cunfigurazione, cum'è descrittu quì.
intervallu_di_statu_di_linea
Questu hè l'intervallu (in millisecondi) chì a vostra istanza di classe seriale CDC ACM signalerà e notificazioni di statu di linea à l'ospite T aa. Stu valore deve esse una putenza di dui (1, 2, 4, 8, 16, ecc.).
capacità_di_chjama_di_gestione
Bitmap di e capacità di gestione di e chjamate. I valori pussibuli di u bitmap sò i seguenti:
Valore (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Descrizzione
U dispusitivu gestisce ellu stessu a gestione di e chjamate. U dispusitivu pò mandà/riceve infurmazioni di gestione di e chjamate per via di una interfaccia di Classe di Dati.
p_acm_callbacks
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
23/174
Overview
p_acm_callbacks hè un puntatore à una struttura di tipu sl_usbd_cdc_acm_callbacks_t. U so scopu hè di dà à u CDC AC Cl ss un inseme di funzioni di callback da chjamà quandu si verifica un avvenimentu CDC ACM. Micca tutte e callback sò obbligatorie è un puntatore nullu (NULL) pò esse passatu in a variabile di struttura di callback quandu a callback ùn hè micca necessaria. A tabella sottu descrive ogni campu di cunfigurazione dispunibule in questa struttura di cunfigurazione.
Tavula – Struttura di cunfigurazione sl_usbd_cdc_acm _callbacks_t
Campi
Descrizzione
.attivà
Chjamatu quandu l'istanza di classe USB hè attivata
cun successu.
.disattivà
Chjamatu quandu l'istanza di classe USB hè disattivata.
.line_control_changed Chjamatu quandu si riceve un cambiamentu di cuntrollu di linea.
line_coding_changed Chjamatu quandu si riceve un cambiamentu di codificazione di linea.
Firma di funzione
void app_usbd_cdc_acm_enable(uint8_t sottuclasse_nbr);
void app_usbd_cdc_acm_disable(uint8_t sottuclasse_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t sottuclasse_nbr, uint8_t eventu, uint8_t eventu_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t sottuclasse_nbr, sottuclasse_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Vede a sezione Registrazione di richiami di notificazione d'eventi per e funzioni di richiami, per esempiuample.
Guida di prugrammazione di a classe CDC ACM di u dispusitivu USB
Questa sezione spiega cumu aduprà a classa CDC Abstract Control Model. Inizializazione di a classa CDC ACM di u dispusitivu USB Aggiunta di una istanza di classa CDC ACM di u dispusitivu USB à u vostru dispusitivu Cumunicà cù a classa CDC ACM
Inizializazione di a Classe CDC ACM di u Dispositivu USB
Per aghjunghje a funziunalità di a classa CDC ACM à u vostru dispusitivu, duvete prima inizializà a classa di basa CDC è a sottuclassa ACM eseguendu e funzioni sl_usbd_cdc_init() è sl_usbd_cdc_acm_init(). L'esempiu quì sottu mostra cumu chjamà sl_usbd_cdc_init() è sl_usbd_cdc_acm_init() aduprendu argumenti predefiniti.
Example – Inizializazione di a Classe CDC ACM
statutu sl_status_t;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Aghjunghjendu una istanza di classe CDC ACM di un dispositivu USB à u vostru dispositivu
Per aghjunghje a funziunalità di a classa CDC ACM à u vostru dispusitivu, duvete creà una istanza, dopu aghjunghje la à a(e) cunfigurazione(i) di u vostru dispusitivu.
Creazione di una istanza di classe CDC ACM
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
24/174
Overview
Aghjunghjendu l'istanza di classe CDC ACM à a cunfigurazione (e) di u vostru dispositivu Registrazione di richiami di notificazione di eventi
Creazione di una istanza di classe CDC ACM
Crea l'istruzione di classe CDC AC chjamendu a funzione sl_usbd_cdc_acm_create_instance(). L'esempiu quì sottu mostra cumu creà l'istruzione di classe CDC AC via sl_usbd_cdc_acm_create_instance().
Example – Creazione di una funzione CDC ACM via sl_usbd_cdc_acm_create_instance()
uint8_t sottuclasse_nbr; sl_status_t statutu;
statutu = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Aghjunghjendu l'istanza di classe CDC ACM à a cunfigurazione (o e cunfigurazioni) di u vostru dispositivu
Dopu avè creatu una istanza di classa CDC ACM, pudete aghjunghjela à una cunfigurazione chjamendu a funzione
sl_usbd_cdc_acm_add_to_configuration().
L'esempiu quì sottu mostra cumu chjamà sl_usbd_cdc_acm_add_to_configuration().
Example – Chjama à USBD ACM sl_usbd_cdc_acm_add_to_configuration()
statutu sl_status_t;
statutu = sl_usbd_cdc_acm_add_to_configuration(nùmeru_di_sottuclasse,
(1)
config_nbr_fs);
(2)
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
aaa (1) Numeru di Cl ss da aghjunghje à a cunfigurazione restituita da sl_usbd_cdc_acm_create_instance(). (2) Numeru di cunfigurazione (quì aghjunghjendulu à una cunfigurazione Full-Speed).
Registrazione di richiami di notificazione d'eventi
A classa CDC ACM Serial pò notificà à a vostra applicazione qualsiasi cambiamentu in u cuntrollu di linea o in a codificazione via funzioni di callback di notificazione. Una struttura di funzioni di callback pò esse passata cum'è argumentu durante a creazione di l'istanza ACM. Nutate bè chì questi callback sò facultativi. Es.ample – CDC ACM Callbacks Registration illustra l'usu di e funzioni di registrazione di callback. Es.ample – L'implementazione di i callback CDC ACM mostra un exampl'implementazione di e funzioni di callback.
Example – Registrazione di richiami CDC ACM
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
25/174
Overview
uint8_t sottuclasse_nbr; sl_status_t statutu;
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, };
statutu = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Example – Implementazione di i richiami CDC ACM
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
sottuclasse_nbr,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t baudrate_new;
uint8_t parità_nova;
uint8_t stop_bits_novu;
uint8_t dati_bits_novi;
/* TODO Applicà a nova codificazione di linea.*/ 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;
ritornu (veru);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t sottuclasse_nbr, uint8_t eventu, uint8_t eventu_cambiatu)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool rk_state; bool rk_state_changed;
/* TODO Applicà un novu cuntrollu di linea. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? veru : falsu; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? veru : falsu; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? veru : falsu; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? veru : falsu; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? veru : falsu; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? veru : falsu;
}
(1) Hè impurtante di rinvià falsu à sta funzione s'è l'applicazione di a codificazione di linea hà fiascatu. Altrimenti, rinviate veru.
Cumunicà cù a classa CDC ACM
Statu di serie
Codificazione di linea Cuntrollu di linea
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
26/174
Overview
Cumunicazione di l'istanza di a sottoclasse di u statu di linea
Statu di serie
Codificazione di linea
L'ospite USB cuntrolla a codificazione di linea (velocità di trasmissione, parità, ecc.) di u dispusitivu CDC ACM. Quandu hè necessariu, l'applicazione hè rispunsevule di l'impostazione di a codificazione di linea. Ci sò duie funzioni furnite per recuperà è impostà a codificazione di linea attuale, cum'è descrittu in a tabella sottu.
Tavula – Funzioni di codificazione di linea CDC ACM
Funzione
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()
Descrizzione
A vostra applicazione pò ottene i paràmetri di codificazione di linea attuali sia da l'ospite cù e richieste SetLineCoding sia cù a funzione sl_usbd_cdc_acm_set_line_coding().
A vostra applicazione pò definisce a codificazione di linea. L'ospite pò recuperà i paràmetri cù a dumanda GetLineCoding.
Controlu di Linea
L'ospite USB cuntrolla u cuntrollu di linea (pin RTS è DTR, signale di pausa, ecc.) di u dispusitivu CDC ACM. Quandu hè necessariu, a vostra applicazione hè rispunsevule di l'applicazione di i cuntrolli di linea. Una funzione hè furnita per recuperà è cunfigurà i cuntrolli di linea attuali, cum'è descrittu in a tabella sottu.
Tavula – Funzioni di cuntrollu di linea CDC ACM
Funzione
sl_usb d _cd c_acm_g e t_line _cuntrollu di u statu di l ()
A vostra applicazione pò ottene u statu attuale di a linea di cuntrollu impostu da l'ospite cù a dumanda SetControlLineState.
State Line
L'ospite USB recupera u statu di a linea à intervalli regulari. A vostra applicazione deve aghjurnà u statu di a linea ogni volta chì cambia. Quandu hè necessariu, a vostra applicazione hè rispunsevule di l'impostazione di u statu di a linea. Dui funzioni sò furnite per recuperà è impostà i cuntrolli di linea attuali, cum'è descrittu in a tabella sottu.
Tavula – Funzioni di statu di linea CDC ACM
Funzione
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
A vostra applicazione pò definisce qualsiasi avvenimentu di statu di linea. Mentre si definisce u statu di a linea, un trasferimentu d'interruzzione IN hè mandatu à l'ospite per informallu di un cambiamentu in u statu di a linea seriale.
L'applicazione pò sguassà dui eventi di u statu di a linea: a rilevazione di a portante di trasmissione è di a portante di u ricevitore. Tutti l'altri eventi sò autosguassati da a sottuclasse di emulazione seriale ACM.
Cumunicazione d'istanza di sottuclasse
A sottuclasse ACM di Silicon Labs offre e seguenti funzioni per cumunicà cù l'ospite. Per più dettagli nantu à i parametri functions9, vede a riferenza di e Funzioni di a Sottoclasse ACM di CDC.
Nome di a funzione
sl_usb d _cd c_acm_ leghje () sl_usb d _cd c_acm_write ()
Operazione
Riceve dati da l'ospite per mezu di un endpoint bulk OUT. Sta funzione hè bloccante. Manda dati à l'ospite per mezu di un endpoint bulk IN. Sta funzione hè bloccante.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
27/174
Overview
Tavula – Riassuntu di l'API di cumunicazione CDC ACM aaaaa sl_usbd_cdc_acm_read() è sl_usbd_cdc_acm_write() furniscenu una cumunicazione sincrona, ciò chì significa chì u trasferimentu hè bluccante. In altre parolle, quandu si chjama a funzione, l'applicazione si blocca finu à chì u trasferimentu sia cumpletu cù o senza errore. Un timeout pò esse specificatu per evità d'aspittà per sempre. L'exampQuì sottu mostra un esempiu di lettura è scritturaample chì riceve dati da l'ospite aduprendu u puntu finale bulk OUT è manda dati à l'ospite aduprendu u puntu finale bulk IN.
Lista - Lettura è Scrittura Seriale Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statutu;
statutu = sl_usbd_cdc_acm_read(nùmeru_di_sottuclasse,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
statutu = sl_usbd_cdc_acm_write(nùmeru_di_sottuclasse,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
T aaaaa M (1) U numeru d'istanza di a classa creata cù sl_usbd_cdc_acm_create_instance() furnisce un riferimentu internu à a sottuclasse AC per indirizzà u trasferimentu à u puntu finale OUT o IN di bulk adattatu. (2) A vostra applicazione deve assicurà chì u buffer furnitu à a funzione sia abbastanza grande per accoglie tutti i dati. Altrimenti, puderanu accade prublemi di sincronizazione. (3) Per evità una situazione di bloccu infinitu, specificate un timeout espressu in millisecondi. Un valore di 809 face chì u compitu di l'applicazione aspetti per sempre. (4) L'applicazione furnisce u buffer di trasmissione inizializatu.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
28/174
Overview
Overview
Dispositivu USB Classe HID
Dispositivu USB HID Class Overview Bisogni di risorse di a classe HID di u dispositivu USB da u core Cunfigurazione di a classe HID di u dispositivu USB Guida di prugrammazione di a classe HID di u dispositivu USB Rapporti d'ingressu periodichi HID Compitu
Questa sezione descrive a classa di dispositivi d'interfaccia umana (HID) supportata da i dispositivi USB di Silicon Labs.
A classa HID include i dispusitivi utilizati da l'omu per cuntrullà l'operazioni di l'urdinatore, cum'è tastiere, topi, dispusitivi di puntamentu è dispusitivi di ghjocu.
A classa HID pò ancu esse aduprata in un dispositivu cumpostu chì cuntene cuntrolli cum'è manopole, interruttori, buttoni è sliders. Per esempiuampI cuntrolli di sonu, silenziu è vulume in un auriculare audio sò cuntrullati da a funzione HID di l'auriculare. A classa HID pò scambià dati per qualsiasi scopu aduprendu solu trasferimenti di cuntrollu è interruzzione.
A classa HID hè una di e classi USB più antiche è più aduprate. Tutti i principali sistemi operativi host furniscenu un driver nativu per gestisce i dispositivi HID, hè per quessa chì una varietà di dispositivi specifichi di u venditore funzionanu cù a classa HID. Sta classa include ancu vari tipi di elementi di output cum'è LED, audio, feedback tattile, ecc.
L'implementazione HID hè conforme à e seguenti specifiche:
Definizione di a Classe di Dispositivi per i Dispositivi di Interfaccia Umana (HID), 27/6/01, Versione 1.11. Tabelle d'Usu HID di u Bus Serial Universale, 28/10/2004, Versione 1.12.
Dispositivu USB HID Class Overview
Overview
Un dispusitivu HID hè cumpostu da i seguenti endpoints:
Una coppia di punti finali di cuntrollu IN è OUT chjamati punti finali predefiniti Un puntu finale di interruzione IN Un puntu finale di interruzione OUT opzionale
A tavula quì sottu descrive l'usu di i diversi endpoints:
Tavula – Usu di i punti finali di a classe HID
Usu di a Direzzione di u Puntu Finale
Cuntrolla IN
Cuntrolla
OUT
Interruzzione IN
Interruzzione
OUT
Dispositivu-à-ospite
Ospite à dispusitivu
Dispositivu-à-ospite
Ospite à dispusitivu
Richieste standard per l'enumerazione, richieste specifiche di classe è cumunicazione di dati (Input, rapporti di funzionalità mandati à l'host cù a richiesta GET_REPORT). Richieste standard per l'enumerazione, richieste specifiche di classe è cumunicazione di dati (Output, rapporti di funzionalità ricevuti da l'host cù a richiesta SET_REPORT). Cumunicazione di dati (rapporti d'input è di funzionalità).
Cumunicazione di dati (rapporti di output è di funzionalità).
Rapportu
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
29/174
Overview
Un host è un dispusitivu HID scambianu dati aduprendu rapporti. Un rapportu cuntene dati furmattati chì furniscenu informazioni nantu à i cuntrolli è altre entità fisiche di u dispusitivu HID. Un cuntrollu hè manipulabile da l'utente è gestisce un aspettu di u dispusitivu. Per esempiuampPer esempiu, un cuntrollu pò esse un buttone nantu à un mouse o una tastiera, un interruttore, ecc. Altre entità informanu l'utente nantu à u statu di certe caratteristiche di u dispusitivu. Per esempiuampper esempiu, i LED nantu à una tastiera avvisanu l'utilizatore di u bloccu maiuscule attivatu, di u tastierinu numericu attivu, ecc.
U furmatu è l'usu di i dati di un rapportu sò capiti da l'ospite analizendu u cuntenutu di un descrittore di rapportu. L'analisi di u cuntenutu hè fatta da un parser. U descrittore di rapportu descrive i dati furniti da ogni cuntrollu in un dispositivu. Hè cumpostu da elementi chì sò pezzi d'infurmazione nantu à u dispositivu è consistenu in un prefissu di 1 byte è una lunghezza variabile.
dati. Per più dettagli nantu à u furmatu di l'articulu, riferitevi à
1.11=, sezzione 5.6 è 6.2.2.
Ci sò trè tippi principali d'articuli:
L'elementu principale definisce o raggruppa certi tipi di campi di dati.
L'elementu glubale descrive e caratteristiche di i dati di un cuntrollu.
L'elementu lucale descrive e caratteristiche di i dati di un cuntrollu.
Ogni tipu d'articulu hè definitu da diverse funzioni. Una funzione d'articulu pò ancu esse chjamata tagUna funzione d'articulu pò esse vista cum'è un sottuarticulu chì appartene à unu di i trè tipi principali d'articuli. A tavula quì sottu furnisce una breve panoramica.view di e funzioni di l'articulu9 in ogni tipu d'articulu. Per una descrizzione cumpleta di l'articuli in ogni categuria, vede
Tavula - Descrizzione di a funzione di l'articulu per ogni tipu d'articulu
Articulu Tipu d'articulu Funzione
Descrizzione
Input principale
Descrive l'infurmazioni nantu à i dati furniti da unu o più cuntrolli fisichi.
Output principale Descrive i dati mandati à u dispusitivu.
Funzione principale
Descrive l'infurmazioni di cunfigurazione di u dispusitivu mandate à o ricevute da u dispusitivu chì influenzanu u cumpurtamentu generale di u dispusitivu o di unu di i so cumpunenti.
Elementi cunnessi à u gruppu di cullezzione principale (Input, Output o Feature).
Fine principale di Chiude una cullezzione. Cullizzioni
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
30/174
Overview
Articulu Tipu d'articulu Funzione
Descrizzione
Pagina d'usu glubale
Identifica una funzione dispunibile in u dispusitivu.
Logicu Globale Definisce u limite inferiore di i valori riportati in unità logiche. Minimu
Logicu Globale Definisce u limite superiore di i valori riportati in unità logiche. Massimu
Fisicu Globale Definisce u limite inferiore di i valori riportati in unità fisiche, vale à dì u Minimu Logicu Minimu espressu in unità fisiche.
Fisicu Globale Definisce u limite superiore di i valori riportati in unità fisiche, vale à dì u Massimu Massimu Logicu espressu in unità fisiche.
Unità Globale
Indica l'esponente unitariu in basa 10. L'esponente varieghja da -8 à +7.
Esponente
Unità Globale
Indica l'unità di i valori riportati. Per esempiu, unità di lunghezza, massa, temperatura, ecc.
Dimensione di u rapportu glubale
Indica a dimensione di i campi di u rapportu in bit.
ID di u rapportu globale Indica u prefissu aghjuntu à un rapportu particulare.
Conte di Rapporti Globali
Indica u numeru di campi di dati per un articulu.
Spinta Globale
Piazza una copia di a tavula di statu di l'elementi glubale nantu à a pila di a CPU.
Pop Globale
Rimpiazza a tavula di statu di l'elementu cù l'ultima struttura di a pila.
Usu lucale
Rapprisenta un indice per designà un Usu specificu in una Pagina d'Usu. Indica l'usu suggeritu da u venditore per un cuntrollu specificu o un gruppu di cuntrolli. Un usu furnisce informazioni à un sviluppatore d'applicazione nantu à ciò chì un cuntrollu misura in realtà.
Usu lucale
Definisce l'usu iniziale assuciatu à un array o à una bitmap.
Minimu
Usu lucale
Definisce l'usu finale assuciatu à un array o à una bitmap.
Massimu
Designatore lucale Determina a parte di u corpu aduprata per un cuntrollu. L'indice punta à un designatore in u Fisicu
Indice
descrittore.
Designatore lucale Definisce l'indice di u designatore iniziale assuciatu à un array o bitmap. Minimu
Designatore lucale Definisce l'indice di u designatore finale assuciatu à un array o bitmap. Massimu
Indice di stringa lucale
Indice di stringa per un descrittore di stringa. Permette di associà una stringa cù un elementu o cuntrollu particulare.
Stringa lucale
Specifica l'indice di a prima stringa quandu si assigna un gruppu di stringhe sequenziali à i cuntrolli in un array
Minimu o bitmap.
Locale Locale
Stringa Massima
Delimitatore
Specifica l'ultimu indice di stringa quandu si assigna un gruppu di stringhe sequenziali à i cuntrolli in un array o bitmap.
Definisce l'iniziu o a fine di un inseme d'elementi lucali.
I dati di un cuntrollu devenu definisce almenu i seguenti elementi:
Input, Output o Funzionalità Elementi principali Usu Elementu lucale Usu Pagina Elementu globale Minimu logicu Elementu globale Massimu logicu Elementu globale Dimensione di u rapportu Elementu globale
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
31/174
Overview
Elementu Globale di u Conte di Rapporti A tavula sottu mostra a rapprisentazione di un cuntenutu di descrittore di Rapporti di u Mouse da a perspettiva di un parser HID host. U mouse hà trè buttoni (sinistra, diritta è rota). U codice presentatu in l'exampQuì sottu hè una implementazione di codice currispondente à sta rapprisentazione di u descrittore di Report di u mouse.
Figura - Rapportu di u cuntenutu di u descrittore da un parser HID host View
(1) A funzione di l'elementu Pagina d'Usu specifica a funzione generale di u dispusitivu. In questu esempiuampvale à dì, u dispusitivu HID appartene à un
cuntrollu di desktop genericu.
(2) L'Applicazione di Cullezzione raggruppa elementi principali chì anu un scopu cumunu è ponu esse familiari à l'applicazioni. In u diagrama, u gruppu hè cumpostu da trè elementi principali d'ingressu. Per sta cullezzione, l'usu suggeritu per i cuntrolli hè un mouse cum'è indicatu da l'elementu Usage. (3) E cullezzione annidate ponu esse aduprate per dà più dettagli nantu à l'usu di un unicu cuntrollu o gruppu di cuntrolli per l'applicazioni. In questu esempiuampVale à dì, a Cullizzioni Fisica, annidata in l'Applicazione di Cullizzioni, hè cumposta da i stessi trè elementi d'Input chì formanu l'Applicazione di Cullizzioni. A Cullizzioni Fisica hè aduprata per un inseme d'elementi di dati chì rapprisentanu punti di dati raccolti in un puntu geometricu. In l'esempiuampPer esempiu, l'usu suggeritu hè un puntatore cum'è indicatu da l'elementu Usage. Quì l'usu di u puntatore si riferisce à e coordinate di pusizione di u mouse è u software di u sistema traducerà e coordinate di u mouse in u muvimentu di u cursore di u schermu. (4) E pagine d'usu annidate sò ancu pussibuli è furniscenu più dettagli nantu à un certu aspettu in a funzione generale di u dispusitivu. In questu casu, dui elementi Input sò raggruppati è currispondenu à i buttoni di u mouse. Un elementu Input definisce i trè buttoni di u mouse (destra, sinistra è rota) in termini di numeru di campi di dati per l'elementu (elementu Report Count), dimensione di un campu di dati (elementu Report Size) è valori pussibuli per ogni campu di dati (elementi Usu Minimu è Massimu, elementi Logicu Minimu è Massimu). L'altru elementu Input hè una costante di 13 bit chì permette à i dati di u rapportu Input di esse allineati nantu à un cunfine di byte. Questu elementu Input hè utilizatu solu per scopi di imbottitura. (5) Un'altra pagina d'usu annidata chì si riferisce à un cuntrollu di desktop genericu hè definita per e coordinate di pusizione di u mouse. Per questa pagina d'usu, l'elementu Input descrive i campi di dati currispondenti à l'assi x è y cum'è specificatu da i dui Usage.
articuli.
Dopu avè analizatu u cuntenutu precedente di u descrittore di Report di u mouse, l'analizzatore HID di l'ospite hè capace di interpretà i dati di u rapportu d'ingressu mandati da u dispusitivu cù un trasferimentu IN d'interruzzione o in risposta à una dumanda GET_REPORT. I dati di u rapportu d'ingressu currispondenti à u descrittore di Report di u mouse sò mostrati in a Figura - Cuntenutu di u descrittore di Report da un analizzatore HID di l'ospite View is
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
32/174
Overview
cum'è mostratu in a tavula sottu. A dimensione tutale di i dati di u rapportu hè di 4 byte. Diversi tipi di rapporti ponu esse mandati nantu à u listessu endpoint. Per distingue i diversi tipi di rapporti, un prefissu ID di rapportu di 1 byte hè aghjuntu à u rapportu di dati. Sè un ID di rapportu hè statu utilizatu in l'exampIn u rapportu di u mouse, a dimensione tutale di i dati di u rapportu seria di 5 byte.
Tavula - Rapportu d'entrata mandatu à l'ospite è currispundente à u statu di un mouse à 3 buttoni
Bit Offset
0 1 2 3 16 24
Numeru di bit 1 1 1 13 8 8
Descrizzione Buttone 1 (buttone sinistro). Buttone 2 (buttone dritto). Buttone 3 (buttone rota). Micca utilizatu. Posizione nantu à l'asse X. Posizione nantu à l'asse Y.
Un descrittore fisicu indica a parte o e parti di u corpu destinate à attivà un cuntrollu o cuntrolli. Un'applicazione pò aduprà sta infurmazione per assignà una funziunalità à u cuntrollu di un dispositivu. Un descrittore fisicu hè un descrittore opzionale specificu di a classe è a maiò parte di i dispositi anu pocu guadagnu per aduprà lu. Riferitevi à
Bisogni di risorse di classe HID di u dispositivu USB da Core
Ogni volta chì aghjunghjite una istanza di classe HID à una cunfigurazione USB via una chjama à a funzione sl_usbd_hid_add_to_configuration(), e risorse seguenti saranu allocate da u core.
Risorsa
Interfacce Interfacce alternative Punti finali Gruppi d'interfaccia
Quantità
1 1 1 (2 s'è u puntu finale di l'interruzzione OUT hè attivatu) 0
Nutate bè chì sti numeri sò per cunfigurazione. Quandu cunfigurate i vostri valori di cunfigurazione SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY è SL_USBD_DESCRIPTOR_QUANTITY, ùn vi scurdate di tene contu di quante cunfigurazioni a classa serà aghjunta. Per u valore di cunfigurazione SL_USBD_OPEN_ENDPOINTS_QUANTITY, postu chì i punti finali sò aperti solu quandu una cunfigurazione hè stabilita da l'ospite, basta à tene contu di u numeru di punti finali necessarii per una istanza di classa.
Cunfigurazione di a Classe HID di u Dispositivu USB
Dui gruppi di parametri di cunfigurazione sò aduprati per cunfigurà a classa HID:
Configurazioni specifiche di l'applicazione di a classe HID di u dispositivu USB Configurazioni di l'istanza di a classe HID di u dispositivu USB
Configurazioni specifiche di l'applicazione di a classe HID di u dispositivu USB
Prima, per aduprà u modulu di classe HID di u dispusitivu USB di Silicon Labs, aghjustate e definizioni di cunfigurazione in tempu di compilazione HID secondu i bisogni di a vostra applicazione. Sò raggruppati in l'intestazione sl_usbd_core_config.h. file sottu à a sezzione HID. Puderanu esse divisi in duie sezzioni, e cunfigurazioni di quantità è e cunfigurazioni di l'attività HID. U scopu di e cunfigurazioni di quantità hè di informà u modulu di u dispusitivu USB di quanti oggetti USB HID deve assignà.
A tavula quì sottu descrive ogni cunfigurazione definita.
Tavula - Definizione di a cunfigurazione HID di u dispusitivu USB
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
33/174
Overview
Nome di cunfigurazione
SL_USBD_HID_CL ASS_ISTANZA_QUANTITÀ
SL_USBD_HID_CONFIGURAZIONE_QUANTITÀ
SL_USBD_HID_REPORT_ ID_QUANTITY
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Descrizzione
Numeru d'istanze di classe chì attribuirete via una chjama à a funzione
sl_usbd_hid_create_instance().
Numeru di cunfigurazioni. L'istanze di classe HID ponu esse aghjunte à una o più cunfigurazioni aaaa via a funzione sl_usbd_hid_add_to_configuration(). Configura u numeru tutale di ID di rapportu da assignà.
Configura u numeru tutale d'elementi Push/Pop da assignà.
U compitu di u timer gestisce tutte l'operazioni HID basate nantu à u timer. Questa cunfigurazione vi permette di definisce a dimensione di a pila (in numeru di byte). Priurità di u compitu HID. Questa hè una priurità CMSIS-RTOS2.
Valore predeterminatu
2 1 2 0 2048
osPrioritàAlta
Configurazioni di l'istanza di a classe HID di u dispusitivu USB Sottoclasse di creazione di l'istanza di a classe
codice_di_paese_di_protocolu
interval_in è interval_out p_hid_callback Descrittore di Rapportu di Classe HID EsempiuampQuesta sezione definisce e cunfigurazioni relative à l'istanze di classe HID.
Creazione di l'istanza di classe
A creazione di una istanza di classe HID si face chjamendu a funzione aaa sl_usbd_hid_create_instance(), chì usa parechji argumenti di cunfigurazione chì sò descritti quì sottu.
sottuclasse
Codice di a sottuclasse HID. I valori pussibuli sò:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Un dispusitivu HID chì usa a sottuclasse d'avvio deve aduprà furmati di rapportu standard. Per più infurmazioni nantu à i codici di sottuclasse, vede a sezione 4.2 di a revisione 1.11 di a specificazione HID.
protocolu
Protocolu utilizatu da u dispusitivu HID. I valori pussibuli sò:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Sè a vostra funzione HID hè un mouse, u protocolu deve esse impostu à SL_USBD_HID_PROTOCOL_MOUSE. S'ellu hè una tastiera, deve esse impostu à SL_USBD_HID_PROTOCOL_KBD. Altrimenti, u protocolu deve esse impostu à SL_USBD_HID_PROTOCOL_NONE. Per più infurmazioni nantu à i codici di sottuclasse, vede a sezione 4.3 di a revisione 1.11 di a specificazione HID.
codice_di_paese
ID di u codice di paese. I valori pussibuli sò:
SL_USBD_HID_CODICE_DI_PAESE_NON_SUPPORTATU
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
34/174
Overview
SL_USBD_HID_CODICE_DI_PAESE_ARABU SL_USBD_HID_CODICE_DI_PAESE_BELGA SL_USBD_HID_CODICE_DI_PAESE_CANADIANU_BILINGUE SL_USBD_HID_CODICE_DI_PAESE_CANADIANU_FRENCHE SL_USBD_HID_CODICE_DI_REPUBBLICA CECA SL_USBD_HID_CODICE_DI_PAESE_DANESE SL_USBD_HID_CODICE_DI_FINLANDESE SL_USBD_HID_CODICE_DI_FRENCHE SL_USBD_HID_CODICE_DI_PAESE_TEDESCU SL_USBD_HID_CODICE_DI_GRECU SL_USBD_HID_CODICE_DI_EBRACU SL_USBD_HID_CODICE_DI_UNGHERIA SL_USBD_HID_CODICE_DI_INTERNAZIUNALE SL_USBD_HID_CODICE_DI_ITALIANU SL_USBD_HID_CODICE_DI_PAESE_GIAPPONE_KATAKANA SL_USBD_HID_CODICE_DI_PAESE_COREANA SL_USBD_HID_CODICE_DI_PAESE_LATINA_AMERICANA SL_USBD_HID_CODICE_DI_PAESE_NETHERLANDESE È_OLANDESE SL_USBD_HID_CODICE_DI_PAESE_NORVEGESE SL_USBD_HID_CODICE_DI_PERSIANU_FARSI SL_USBD_HID_CODICE_DI_PAESE_PULONIANA È SL_USBD_HID_CODICE_DI_PAESE_PORTUGUESE SL_USBD_HID_CODICE_DI_RUSSIA SL_USBD_HID_CODICE_DI_SLOVACCHIA SL_USBD_HID_CODICE_DI_SPAGNOLA SL_USBD_HID_CODICE_DI_SVEDESE SL_USBD_HID_CODICE_DI_SVIZZERA_FRANCESE SL_USBD_HID_CODICE_PAESE_SVIZZERA_TEDESCA SL_USBD_HID_CODICE_PAESE_SVIZZERA È SL_USBD_HID_CODICE_PAESE_TAIWAN SL_USBD_HID_CODICE_PAESE_TURCU_Q SL_USBD_HID_CODICE_PAESE_UK SL_USBD_HID_CODICE_PAESE_US SL_USBD_HID_CODICE_PAESE_YUG OSL AVIA SL_USBD_HID_CODICE_PAESE_TURCU_F
U codice di paese identifica u paese per u quale hè lucalizatu l'hardware. A maiò parte di l'hardware ùn hè micca lucalizatu è dunque questu valore seria SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Tuttavia, i tastieri ponu aduprà u campu per indicà a lingua di i tasti.
Per più infurmazioni nantu à i codici di paese, vede a sezione 6.2.1 di a revisione 1.11 di a specificazione HID.
intervallu_in è intervallu_out
interval_in è interval_out rapprisentanu l'intervallu di polling di u puntu finale di l'interruzzione IN è di u puntu finale di l'interruzzione OUT.
Questu rapprisenta l'intervallu di polling di u puntu finale, in millisecondi. L'impostazione di stu valore dipende da a frequenza cù a quale u vostru dispositivu hè suscettibile di generà un novu rapportu per l'ospite. Per esempiu, se un rapportu hè generatu ogni 16 millisecondi, l'intervallu deve esse 16 o menu.
U valore deve esse una putenza di 2 (1, 2, 4, 8, 16, ecc.).
Un valore interval_out hè ignoratu se ctrl_rd_en hè impostu à veru.
p_hid_callback
aaaa p_hid_callback hè un puntatore à una struttura di tipu sl_usbd_hid_callbacks_t. U so scopu hè di dà à a Cl ss HID un inseme di funzioni di callback da chjamà quandu si verifica un avvenimentu HID.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
35/174
Overview
Micca tutti i callback sò ubligatorii è un puntatore nullu (NULL) pò esse passatu in a variabile di struttura di callback quandu u callback ùn hè micca necessariu. A tavula sottu descrive ogni campu di cunfigurazione dispunibule in questa struttura di cunfigurazione.
Tavula – Struttura di cunfigurazione sl_usbd_hid_callbacks_t
Campi
Descrizzione
Firma di funzione
.attivà .disattivà .ottene_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Chjamatu quandu l'istanza di classe USB hè attivata cù successu. Chjamatu quandu l'istanza di classe USB hè disattivata.
Chjamatu durante a creazione di l'istanza HID per passà u vostru descrittore di rapportu. Per ognuna di e vostre funzioni HID, duvete furnisce un descrittore di rapportu. U descrittore di rapportu indica à l'ospite cumu u rapportu periodicu chì serà mandatu da u dispusitivu deve esse analizatu. Scrive u vostru propiu descrittore di rapportu pò esse difficiule, è hè per quessa chì ci sò alcune risorse per aiutà. Questa hè l'unica funzione di callback ubligatoria. Chjamatu durante a creazione di l'istanza HID per passà u vostru descrittore fisicu. U descrittore fisicu hè un descrittore chì furnisce informazioni nantu à a parte o parti specifiche di u corpu umanu chì attivanu un cuntrollu o cuntrolli. Per più infurmazioni nantu à i descrittori fisichi, vede a sezione 6.2.3 di a revisione 1.11 di a specificazione HID. U descrittore fisicu hè facultativu è a maiò parte di u tempu hè ignoratu. U buffer passatu quì pò esse impostu à NULL è a lunghezza impostata à 0. Chjamatu quandu l'ospite imposta un rapportu cum'è descrittu in u vostru descrittore di rapportu (quandu manda un rapportu).
Chjamatu quandu l'ospite dumanda un rapportu di funzionalità cum'è descrittu in u vostru descrittore di rapportu.
Chjamatu quandu l'ospite definisce un rapportu di funzione cum'è descrittu in u vostru descrittore di rapportu.
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);
.ottene_protocolu
Recupera u protocolu attivu attuale.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Definisce u protocolu attivu attuale.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Descrittore di Rapportu di Classe HID Example
Classi HID di Silicon LabsampL'applicazione furnisce un esempiuampesempiu di un descrittore di rapportu per un mouse simplice. L'esempiuampA figura sottu mostra un descrittore di rapportu di mouse.
Example – Descrittore di Rapportu di Topu
staticu 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. Tutti i diritti riservati.
36/174
Overview
SL_USBD_HID_COLLEZIONE_PRINCIPALE +1, SL_USBD_HID_COLLEZIONE_APPLICAZIONE,(4)
SL_USBD_HID_USU_LUCALE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_CULLEZZIONE_PRINCIPALE +1, SL_USBD_HID_CULLEZZIONE_FISICA,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABILE |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABILE |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_ENDCOLLECTION,(10)
SL_USBD_HID_MAIN_ENDCOLLECTION
(11)};
(1) A tavula chì rapprisenta un descrittore di rapportu di mouse hè inizializata in modu tale chì ogni linea currisponde à un elementu cortu. Quest'ultimu hè furmatu da un prefissu di 1 byte è una dati di 1 byte. Riferitevi à viewed da un parser HID host in Figura - Segnalà u cuntenutu di u descrittore da un parser HID host View.
(2) A Pagina d'Usu Genericu di u Desktop hè aduprata.
(3) In a pagina d'usu genericu di u desktop, l'usu tag suggerisce chì u gruppu di cuntrolli hè per cuntrullà un mouse. Una cullezzione di mouse hè tipicamente cumposta da dui assi (X è Y) è unu, dui o trè buttoni.
(4) A cullezzione di topi hè cuminciata.
(5) In a cullezzione di topi, un usu tag suggerisce più specificamente chì i cuntrolli di u mouse appartenenu à a cullezzione di puntatori. Una cullezzione di puntatori hè una cullezzione d'assi chì genera un valore per dirige, indicà o puntà l'intenzioni di l'utente versu una applicazione.
(6) A cullezzione di puntatori hè iniziata.
(7) A pagina d'usu di i buttoni definisce un elementu d'input cumpostu da trè campi di 1 bit. Ogni campu di 1 bit rapprisenta rispettivamente i buttoni 1, 2 è 3 di u mouse è pò restituisce un valore di 0 o 1.
(8) L'elementu d'input per a pagina d'usu di i buttoni hè riempitu cù 13 altri bit.
(9) Un'altra Pagina Generica d'Usu di u Desktop hè indicata per discrive a pusizione di u mouse cù l'assi X è Y. L'elementu Input hè cumpostu da dui campi di 8 bit chì u so valore pò esse trà -127 è 127.
(10) A cullezzione di puntatori hè chjusa.
(11) A cullezzione di topi hè chjusa.
Pagina HID di USB.org
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
37/174
Overview
U Forum di l'Implementatori USB (USB-IF) furnisce un strumentu chjamatu "HID Descriptor Tool" inseme cù altre informazioni nantu à u furmatu di u descrittore di u rapportu. Vede http://www.usb.org/developers/hidpage/ per più infurmazioni.
Guida di Programmazione di Dispositivi USB Classe HID
Questa sezione spiega cumu aduprà a classa HID. Inizializazione di a classa HID di u dispusitivu USB Aggiunta di una istanza di classa HID di u dispusitivu USB à u vostru dispusitivu Cumunicà cù a classa HID di u dispusitivu USB
Inizializazione di a Classe HID di u Dispositivu USB
Per aghjunghje a funziunalità di a Classe HID à u vostru dispositivu, duvete prima inizializà a classe chjamendu a funzione sl_usbd_hid_init(). L'exampA sezione quì sottu mostra cumu chjamà sl_usbd_hid_init() aduprendu argumenti predefiniti. Per più infurmazioni nantu à l'argumenti di cunfigurazione da passà à sl_usbd_hid_init(), vede Configurazioni specifiche di l'applicazione di a classe HID di dispositivi USB.
Example – Chjama di sl_usbd_hid_init()
statutu sl_status_t;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Aghjunghjendu una istanza di classe HID di un dispositivu USB à u vostru dispositivu
Per aghjunghje a funziunalità di a classa HID à u vostru dispusitivu, duvete creà una istanza, dopu aghjunghjela à a(e) cunfigurazione(i) di u vostru dispusitivu.
Creazione di una istanza di classe HID
Crea una istanza di classe HID chjamendu a funzione sl_usbd_hid_create_instance(). L'esempiuampA sezione quì sottu mostra cumu creà una funzione di mouse simplice via sl_usbd_hid_create_instance() aduprendu argumenti predefiniti. Per più infurmazioni nantu à l'argumenti di cunfigurazione da passà à sl_usbd_hid_create_instance(), vede Configurazioni di l'istanza di classe HID di u dispositivu USB.
Example – Aghjunghjendu una funzione di u mouse via sl_usbd_hid_create_instance()
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
38/174
Overview
/* Custanti glubali. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Variabili lucali.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void) class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
statutu = 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, veru, &app_usbd_hid_callbacks, &class_nbr);
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
39/174
Overview
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. *
Aghjunghjendu l'istanza di classe HID à a cunfigurazione (e) di u vostru dispositivu Dopu avè creatu una istanza di classe HID, pudete aghjunghjela à una cunfigurazione chjamendu a funzione
sl_usbd_hid_add_to_configuration().
L'exampA pagina quì sottu mostra cumu chjamà sl_usbd_hid_add_to_configuration().
Example – Chjama di sl_usbd_hid_add_to_configuration()
statutu sl_status_t;
sl_usbd_hid_add_to_configuration(class_nbr,
(1)
cunfig_nbr_fs); (2)
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
(1) Numeru di classe da aghjunghje à a cunfigurazione restituita da sl_usbd_hid_create_instance(). (2) Numeru di cunfigurazione (quì aghjunghjendulu à una cunfigurazione Full-Speed).
Cumunicà cù a classa HID di u dispusitivu USB
Cumunicazione d'istanza di classe Cumunicazione sincrona Cumunicazione d'istanza di classe A classe HID offre e seguenti funzioni per cumunicà cù l'ospite.
Tavula – Riassuntu di l'API di cumunicazione HID
Nome di a funzione
sl_usb d _hid _ leghje ad _sy nc() sl_usb d _hid _scrive _sy nc()
Operazione Riceve dati da l'ospite per mezu di u puntu finale di l'interruzione OUT. Sta funzione hè bloccante. Manda dati à l'ospite per mezu di u puntu finale di l'interruzione IN. Sta funzione hè bloccante.
Cumunicazione sincrona A cumunicazione sincrona significa chì u trasferimentu hè bluccante. À a chjama di funzione, l'applicazione si blocca finu à chì u trasferimentu sia cumpletatu cù o senza errore. Un timeout pò esse specificatu per evità d'aspittà per sempre. L'exampA figura quì sottu mostra una lettura è scrittura chì riceve dati da l'ospite utilizendu u puntu finale di l'interruzione OUT è manda dati à l'ospite utilizendu u puntu finale di l'interruzione IN.
Example – Lettura è scrittura HID sincrona
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statutu;
statutu = sl_usbd_hid_read_sync(class_nbr,
(1)
(vuotu *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
40/174
Overview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. *
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. *
(1) U numeru d'istanza di classe creatu da sl_usbd_hid_create_instance() furnisce una riferenza interna per a classe HID per indirizzà u trasferimentu à u puntu finale d'interruzzione OUT o IN adattatu.
(2) L'applicazione deve assicurà chì u buffer furnitu à a funzione sia abbastanza grande per accoglie tutti i dati. Altrimenti, puderanu accade prublemi di sincronizazione. Internamente, l'operazione di lettura hè fatta sia cù u puntu finale di cuntrollu sia cù u puntu finale di interruzzione, secondu u flag di lettura di cuntrollu impostatu quandu si chjama sl_usbd_hid_create_instance().
(3) Per evità una situazione di bloccu infinitu, si pò specificà un timeout espressu in millisecondi. Un valore di 809 face chì u compitu di l'applicazione aspetti per sempre.
(4) L'applicazione furnisce u buffer di trasmissione inizializatu.
Compitu di i rapporti d'input periodichi HID
Per risparmià larghezza di banda, l'ospite hà a capacità di silenzià i rapporti da un endpoint d'interruzzione IN limitendu a frequenza di rapportu. Per fà questu, l'ospite deve mandà a dumanda SET_IDLE. A classa HID implementata da Silicon Labs cuntene un compitu internu chì rispetta a limitazione di frequenza di rapportu chì pudete applicà à unu o parechji rapporti d'input. A Figura Periodic Input Reports Task mostra u funziunamentu di i compiti di rapporti d'input periodichi.
Figura - Compitu di i rapporti d'input periodichi
(1) U dispusitivu riceve una dumanda SET_IDLE. Sta dumanda specifica una durata di inattività per un ID di rapportu datu. Per più dettagli nantu à a dumanda SET_IDLE, vede
(2) Una struttura ID di rapportu (attribuita durante a fase d'inizializazione di a classe HID) hè aghjurnata cù a durata di inattività. Un contatore di durata di inattività hè inizializatu cù u valore di durata di inattività. A struttura ID di rapportu hè inserita à a fine di una lista ligata chì cuntene strutture ID di rapporti d'entrata. U valore di durata di inattività hè espressu in unità di 4 ms chì dà un intervallu da 4 à 1020 ms.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
41/174
Overview
Sè a durata di inattività hè inferiore à l'intervallu di polling di u puntu finale di l'interruzione IN, i rapporti sò generati à l'intervallu di polling.
(3) Ogni 4 ms, u compitu di rapportu d'input periodicu naviga in a lista di l'ID di i rapporti d'input. Per ogni ID di rapportu d'input, u compitu esegue una di e duie operazioni pussibuli. A durata di u periodu di u compitu currisponde à l'unità di 4 ms aduprata per a durata di inattività. Se nisuna dumanda SET_IDLE hè stata mandata da l'ospite, a lista di l'ID di i rapporti d'input hè viota è u compitu ùn hà nunda da processà. U compitu processa solu l'ID di rapportu chì sò diffirenti da 0 è cù una durata di inattività più grande di 0.
(4) Per un ID di rapportu d'input datu, u compitu verifica s'è a durata d'inattività hè scaduta. S'è a durata d'inattività ùn hè micca scaduta, u contatore hè decrementatu è nisun rapportu d'input hè mandatu à l'ospite.
(5) Sè a durata di inattività hè scaduta (vale à dì, u contatore di durata di inattività hà righjuntu zeru), un rapportu d'entrata hè mandatu à l'ospite chjamendu a funzione sl_usbd_hid_write_sync() via u puntu finale di l'interruzzione IN.
(6) I dati di u rapportu d'input mandati da u compitu venenu da un buffer di dati internu assignatu per ogni rapportu d'input discrittu in u descrittore di Report. Un compitu d'applicazione pò chjamà a funzione sl_usbd_hid_write_sync() per mandà un rapportu d'input. Dopu avè mandatu i dati di u rapportu d'input, sl_usbd_hid_write_sync() aghjurnà u buffer internu assuciatu à un ID di rapportu d'input cù i dati appena mandati. Dopu, u compitu di rapporti d'input periodichi manda sempre i stessi dati di rapportu d'input dopu ogni durata di inattività trascorsa è finu à chì u compitu d'applicazione aghjurnà i dati in u buffer internu. Ci hè un mecanismu di bloccu per evità a curruzzione di i dati di l'ID di u rapportu d'input in casu di una mudificazione chì si faci à u mumentu esattu di a trasmissione fatta da u compitu di rapportu d'input periodichi.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
42/174
Overview
Overview
Dispositivu USB Classe MSC
Dispositivu USB MSC Class Overview Bisogni di risorse di a classe MSC di u dispositivu USB da u core Cunfigurazione di a classe MSC di u dispositivu USB Guida di prugrammazione di a classe MSC di u dispositivu USB Driver di almacenamentu di a classe MSC di u dispositivu USB
Questa sezione descrive a classa di dispositivi di almacenamiento di massa (MSC) supportati da Silicon Labs USB Device. MSC hè un protocolu chì permette u trasferimentu di informazioni trà un dispositivu USB è un host. L'infurmazioni trasferite sò tuttu ciò chì pò esse almacenatu elettronicamente, cum'è prugrammi eseguibili, codice surghjente, documenti, immagini, dati di cunfigurazione, o altri dati di testu o numerichi. U dispositivu USB appare cum'è un supportu di almacenamiento esternu à l'host, chì permette u trasferimentu di files via drag and drop.
A file u sistema definisce cumu fileI supporti di almacenamiento sò urganizati. A specificazione di a classe di almacenamiento di massa USB ùn richiede micca alcuna specificazione particulare. file sistema da aduprà nantu à i dispusitivi cunfurmità. Invece, furnisce una interfaccia simplice per leghje è scrive settori di dati aduprendu u set di cumandamenti trasparenti Small Computer System Interface (SCSI). Cusì, i sistemi operativi ponu trattà a chjave USB cum'è un discu duru, è ponu furmattalla cù qualsiasi file sistema chì li piace.
A classa di dispositivi di almacenamiento di massa USB supporta dui protocolli di trasportu, cum'è seguita:
Trasportu di cuntrollu/interruzzione in massa (CBI) di trasportu solu in massa (BOT) (utilizatu solu per i dischetti)
A classa di dispositivi di almacenamiento di massa implementa u set di cumandamenti trasparenti SCSI utilizendu solu u protocolu BOT, ciò chì significa chì solu i punti finali in massa saranu utilizati per trasmette dati è informazioni di statu. L'implementazione MSC supporta parechje unità logiche.
L'implementazione MSC hè in cunfurmità cù e seguenti specifiche:
Specificazione di a classe di almacenamiento di massa di bus seriale universale (USB)view, Revisione 1.3 5 settembre 2008. Trasportu solu in massa di classe di almacenamiento di massa di bus seriale universale, Revisione 1.0 31 settembre 1999.
Dispositivu USB MSC aCl ss Overview
Richieste di Classe di Punti Finali di Protocollu SCSI (Small Computer System Interface)
Protocolu
In questa sezione, discuteremu u protocolu Bulk-Only Transport (BOT) di a Classe di Archiviazione di Massa. U protocolu Bulk-Only Transport hà trè stages:
U Trasportu di Cumandamenti U Trasportu di Dati U Trasportu di Statu
I cumandamenti di almacenamentu di massa sò mandati da l'ospite per mezu di una struttura chjamata Command Block Wrapper (CBW). Per i cumandamenti chì necessitanu un trasportu di datitage.g., l'ospite pruverà à mandà o riceve u numeru esattu di byte da u dispusitivu cum'è specificatu da i campi di lunghezza è di bandiera di u CBW. Dopu à u trasportu di datitage.g., l'ospite prova à riceve un Command Status Wrapper (CSW) da u dispusitivu chì detalla u statu di u cumandamentu è ancu qualsiasi residu di dati (se
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
43/174
Overview
qualsiasi). Per i cumandamenti chì ùn includenu micca un trasportu di datitage.g., l'ospite prova à riceve u CSW direttamente dopu à l'inviu di CBW. U protocolu hè detallatu in a Figura - Protocolu MSC.
Figura – Protocolu MSC
Endpoints
Da u latu di u dispusitivu, in cunfurmità cù a specificazione BOT, l'MSC hè cumpostu da i seguenti punti finali: Una coppia di punti finali IN è OUT di cuntrollu chjamati punti finali predefiniti. Una coppia di punti finali IN è OUT di massa.
A tavula quì sottu indica i sfarenti usi di i punti finali.
Tavula – Usu di u puntu finale MSC
Endpoint
Cuntrollu IN Cuntrollu OUT Ingrossu IN Ingrossu OUT
Direzzione
Dispositivu à host Ospite à dispositivu Dispositivu à host Ospite à dispositivu
Usu
Enumerazione è richieste specifiche di classe MSC Enumerazione è richieste specifiche di classe MSC Mandate CSW è dati Ricevete CBW è dati
Richieste di Classe
Ci sò duie richieste di cuntrollu definite per u protocolu MSC BOT. Queste richieste è e so descrizzioni sò dettagliate in a tabella sottu.
Tavula – Richieste di Classe di Archiviazione di Massa
Richieste di Classe
Reset di l'archiviazione di massa solu in massa
Descrizzione
Questa dumanda hè aduprata per resettà u dispusitivu di almacenamentu di massa è a so interfaccia assuciata. Questa dumanda prepara u dispusitivu per riceve u prossimu bloccu di cumandamenti.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
44/174
Overview
Richieste di Classe
Descrizzione
Ottene Max Questa dumanda hè aduprata per restituisce u numeru di unità logica (LUN) più altu supportatu da u dispusitivu. Per esempiuample, a
LUN
Un dispositivu cù LUN 0 è LUN 1 restituirà un valore di 1. Un dispositivu cù una sola unità logica restituirà 0 o bluccherà u
dumanda. U valore massimu chì pò esse restituitu hè 15.
Interfaccia di sistema SCSI per picculi computer
À u livellu di l'interfaccia di prugrammazione, u dispusitivu MSC implementa unu di i protokolli standard di cumunicazione di supporti di almacenamentu, cum'è SCSI è SFF-8020i (ATAPI). L'"Interfaccia di Prugrammazione" specifica quale protokollu hè implementatu, è aiuta u sistema operativu ospitante à caricà u driver di dispusitivu adattatu per cumunicà cù u dispusitivu di almacenamentu USB. SCSI hè u protokollu più cumunu utilizatu cù i dispusitivi di almacenamentu USB MSC. Fornemu una implementazione per a sottuclasse MSC SCSI chì i nostri utilizatori GSDK ponu aduprà fora di a scatula.
SCSI hè un inseme di standard per a gestione di a cumunicazione trà l'urdinatori è i dispositivi periferichi. Questi standard includenu cumandamenti, protokolli, interfacce elettriche è interfacce ottiche. I dispositivi di almacenamiento chì utilizanu altre interfacce hardware, cum'è USB, utilizanu cumandamenti SCSI per ottene informazioni nantu à u dispositivu/host è cuntrullà u funziunamentu di u dispositivu è trasferisce blocchi di dati in i supporti di almacenamiento.
I cumandamenti SCSI coprenu una vasta gamma di tipi è funzioni di dispositivi è, per quessa, i dispositivi anu bisognu di un sottoinsieme di sti cumandamenti. In generale, i cumandamenti seguenti sò necessarii per a cumunicazione basica:
RICHIESTA CAPACITÀ DI LETTURA (10) LETTURA (10) RICHIESTA RILEVAMENTU UNITÀ DI TEST PRONTA SCRITTURA (10)
Bisogni di risorse di a classe MSC di u dispositivu USB da Core
Ogni volta chì aghjunghjite una istanza di classe MSC à una cunfigurazione USB via a funzione sl_usbd_msc_add_to_configuration(), e risorse seguenti saranu allocate da u core.
Risorsa
Interfacce Interfacce alternative Punti finali Gruppi d'interfaccia
Quantità
1 1 2 0
Nutate bè chì sti numeri sò per cunfigurazione. Quandu cunfigurate i vostri valori di cunfigurazione SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY è SL_USBD_DESCRIPTOR_QUANTITY, ùn vi scurdate di tene contu di quante cunfigurazioni a classa serà aghjunta. Per u valore di cunfigurazione SL_USBD_OPEN_ENDPOINTS_QUANTITY, postu chì i punti finali sò aperti solu quandu una cunfigurazione hè stabilita da l'ospite, basta à tene contu di u numeru di punti finali necessarii per una istanza di classa.
Cunfigurazione di a Classe MSC di u Dispositivu USB
Dui gruppi di parametri di cunfigurazione sò aduprati per cunfigurà a classa MSC:
Configurazioni specifiche di l'applicazione di a classe MSC di u dispositivu USB Configurazione di l'unità logica di a classe MSC di u dispositivu USB
Configurazioni specifiche di l'applicazione di a classe MSC di u dispositivu USB
Configurazioni in tempu di compilazione di e classi Creazione di istanze di classe
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
45/174
Overview
Configurazioni di a classa in tempu di compilazione
A classa MSC è a sottuclassa SCSI di i dispositivi USB di Silicon Labs sò cunfigurabili à u mumentu di a compilazione via #defines situati in u schedariu sl_usbd_core_config.h. file.
Tavula – Custanti di cunfigurazione generiche
Nome di cunfigurazione
Descrizzione
SL_USBD_MSC_CLASS_INST Numeru d'istanze di classe chì assignerete via una chjama à a funzione
QUANTITÀ_NANCE
sl_usbd_msc_scsi_create_instance().
SL_USBD_MSC_CONFIGURA Numeru di cunfigurazione à quale una istanza di classe pò esse aghjunta via una chjama à u
QUANTITÀ_ZIONE
funzione sl_usbd_msc_scsi_add_to_configuration().
SL_USBD_MSC_LUN_QUANT Numeru di unità logiche per istanza di classe chì aghjunghjerete via una chjama à u
ITY
funzione sl_usbd_msc_scsi_lun_add().
SL_USBD_MSC_SCSI_64_BIT Attiva o disattiva u supportu per l'indirizzu di bloccu logicu (LBA) di 64 bit.
_LBA_EN
SL_USBD_MSC_DATA_BUFF Dimensione di u buffer di dati per istanza di classe in byte ER_SIZE
Valore predeterminatu
2
1
2
0
512
Creazione di l'istanza di classe
A creazione di una istanza di classe SCSI MSC di un dispositivu USB si face chjamendu a funzione sl_usbd_msc_scsi_create_instance(). Sta funzione piglia un argumentu di cunfigurazione chì hè discrittu quì sottu.
p_scsi_callbacks
p_scsi_callbacks hè un puntatore à una struttura di cunfigurazione di tipu sl_usbd_msc_scsi_callbacks_t. In più di e funzioni di callback cumuni di a classa di dispositivi USB connect/disconnect, furnisce à a classa MSC un inseme di funzioni di callback opzionali chì sò chjamate quandu un avvenimentu si verifica nantu à l'unità logica. Un puntatore nullu (NULL) pò esse passatu à questu argumentu se ùn sò necessarie callback.
A tavula quì sottu descrive ogni campu di cunfigurazione dispunibule in questa struttura di cunfigurazione.
Tavula – Struttura di cunfigurazione sl_usbd_msc_scsi_callbacks_t
Campi
Descrizzione
.attivà
Chjamatu quandu l'istanza di classe USB hè attivata currettamente.
.disable Chjamatu quandu l'istanza di classe USB hè disattivata.
Funzione .host_eject chjamata quandu una unità logica hè espulsa da l'ospite.
Firma di funzione
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_mscsi_disable(uint8_t class_nbr); void app_usbd_mscsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
Cunfigurazione di l'unità logica di a classe MSC di u dispusitivu USB
L'aghjunta di una unità logica à una istanza di classe MSC si face chjamendu a funzione sl_usbd_msc_lun_add(). Sta funzione piglia un argumentu di cunfigurazione chì hè discrittu quì sottu.
p_lu_info
p_lu_info hè un puntatore à una struttura di tipu sl_usbd_msc_scsi_lun_info_t. U so scopu hè di furnisce l'infurmazioni nantu à l'unità logica à a classa MSC.
A tavula quì sottu descrive ogni campu di cunfigurazione dispunibule in questa struttura di cunfigurazione.
Tavula – Struttura di cunfigurazione sl_usbd_msc_scsi_lun_info_t
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
46/174
Overview
Campu
Descrizzione
Campu
.scsi_lun_api_p tr
Descrizzione
Puntatore à l'API di u driver multimediale chì gestiscerà sta unità logica. Vede Driver di almacenamiento di classe MSC di dispositivi USB per più infurmazioni nantu à i driver di almacenamiento.
.ve nd o r_id _ p tr
.id_di_produttu_ptr
.livellu di rivisione di u pruduttu .hè solu lettura
Puntatore à una stringa chì cuntene l'identificazione di u venditore di l'unità logica. A lunghezza massima di a stringa hè di 8 caratteri. Puntatore à una stringa chì cuntene l'identificazione di u produttu di l'unità logica. A lunghezza massima di a stringa hè di 16 caratteri. Livellu di revisione di u produttu.
Bandiera chì indica s'è l'unità logica deve esse vista cum'è letta solu da u puntu di view di l'ospite (veru) o micca (falsu).
Guida di Programmazione di Dispositivi USB Classe MSC
Questa sezione spiega cumu aduprà a classa MSC.
Inizializazione di a Classe MSC di u Dispositivu USB Aggiunta di una Istanza di Classe SCSI MSC di u Dispositivu USB à u vostru Dispositivu Gestione di l'Unità Logica di a Classe MSC di u Dispositivu USB
Inizializazione di a Classe MSC di u Dispositivu USB
Per aghjunghje a funziunalità di a classa MSC SCSI à u vostru dispusitivu, inizializate prima a classa di basa MSC è a sottuclassa SCSI chjamendu a funzione sl_usbd_msc_init() è sl_usbd_msc_scsi_init().
L'exampA pagina quì sottu mostra cumu chjamà sl_usbd_msc_init() è sl_usbd_msc_scsi_init().
Example – Chjama di sl_usbd_msc_init() è sl_usbd_msc_scsi_init()
statutu sl_status_t;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
Aghjunghjendu una istanza di classe SCSI MSC di un dispositivu USB à u vostru dispositivu
Per aghjunghje a funziunalità di a classa MSC SCSI à u vostru dispusitivu, prima create una istanza, dopu aghjunghjitela à a(e) cunfigurazione(i) di u vostru dispusitivu. Duvete aghjunghje almenu una unità logica à a vostra istanza.
Creazione di una istanza di classe SCSI MSC
Crea una istanza di classe MSC SCSI chjamendu a funzione sl_usbd_msc_scsi_create_instance().
L'exampA sezione quì sottu mostra cumu chjamà sl_usbd_msc_scsi_create_instance() aduprendu argumenti predefiniti. Per più infurmazioni nantu à l'argumenti di cunfigurazione da passà à sl_usbd_msc_scsi_create_instance(), vede Configurazioni specifiche di l'applicazione di a classe MSC di i dispositivi USB.
Example – Chjama di sl_usbd_msc_scsi_create_instance()
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
47/174
Overview
uint8_t class_nbr; sl_status_t statutu;
sl_usbd_mscsi_callbacks_t app_usbd_mscsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
statutu = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Aghjunghjendu l'istanza di classe MSC à a cunfigurazione (o e cunfigurazioni) di u vostru dispositivu
Dopu avè creatu una istanza di classa MSC, pudete aghjunghjela à una cunfigurazione chjamendu a funzione
sl_usbd_msc_add_to_configuration().
L'exampQuì sottu mostra cumu chjamà sl_usbd_msc_scsi_add_to_configuration() aduprendu argumenti predefiniti.
Example – Chjama di sl_usbd_msc_scsi_add_to_configuration()
statutu sl_status_t;
statutu = sl_usbd_msc_scsi_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
(1) Numeru di classe da aghjunghje à a cunfigurazione restituita da sl_usbd_msc_scsi_create_instance(). (32) Numeru di cunfigurazione (quì aghjunghjendulu à una cunfigurazione Full-Speed).
Gestione di l'unità logica di classe MSC di u dispositivu USB
Aghjunghje una unità logica Attaccà/Staccà un supportu di almacenamentu
Aghjunghje una unità logica
Quandu si aghjusta una unità logica à a vostra istanza di classa MSC SCSI, deve esse ligata à un supportu di almacenamentu (RAMDisk, carta SD, memoria flash, ecc.). A classa MSC usa un driver di almacenamentu per cumunicà cù i supporti di almacenamentu. Stu driver duverà esse furnitu quandu si aghjusta l'unità logica.
L'exampA figura quì sottu mostra cumu aghjunghje una unità logica via sl_usbd_msc_scsi_lun_add().
Example – Aghjunghjendu una Unità Logica via sl_usbd_msc_scsi_lun_add()
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
48/174
Overview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
statutu;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= «Laboratorii di Silicon»;
lu_info.product_id_ptr
= "dispositivu di bloccu examp"le";
lu_info.livellu_di_revisione_di_u_produttu = 0x1000u;
lu_info.hè_solu_lettura
= falsu;
statutu = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Attaccà/Staccà un Supportu di Memoria
Dopu chì l'unità logica hè stata aghjunta, un supportu di almacenamentu deve esse attaccatu per esse dispunibule da u latu host. A classa MSC offre duie funzioni per cuntrullà l'associazione di i supporti di almacenamentu à l'unità logica: sl_usbd_msc_scsi_lun_attach() è sl_usbd_msc_scsi_lun_detach(). Queste funzioni permettenu di emulà a rimuzione di un dispositivu di almacenamentu per pudè ricuperà l'accessu da l'applicazione integrata se necessariu.
L'exampA pagina quì sottu mostra cumu aduprà a funzione sl_usbd_msc_scsi_lun_attach() è sl_usbd_msc_scsi_lun_detach().
Example – Attaccamentu/Staccamentu di i Media
statutu sl_status_t;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
…
(1)
statutu = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); s'è (statutu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
…
(2)
statutu = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) s'è (statutu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
…
(3)
(1) Da questu mumentu, se u dispusitivu MSC hè cunnessu à un host, u supportu di almacenamentu hè accessibile.
(2) Sè u dispusitivu MSC hè cunnessu à un host, u supportu apparirà avà cum'è indisponibile. In questu mumentu, l'operazioni ponu esse realizate nantu à u supportu da l'applicazione integrata.
(3) Di novu, se u dispusitivu MSC hè cunnessu à l'ospite, u supportu di almacenamentu apparirà cum'è cunnessu.
Driver di almacenamiento di classe MSC per dispositivi USB
U dispusitivu USB Class MSC hà bisognu di un driver di almacenamentu per cumunicà cù un supportu di almacenamentu. Per u mumentu, Silicon Labs ùn offre micca driver.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
49/174
Overview
U driver TPY aa u driver AI hè definitu da typedef sl_usbd_msc_scsi_lun_api_t. U nostru driver sl_usbd_msc_scsi_lun_api_t deve esse inclusu in u vostru driver sl_usbd_msc_scsi_lun_info_t, utilizatu quandu aghjunghjite una unità logica cù sl_usbd_msc_scsi_lun_add(). Vede a sezione USB Device MSC SCSI API per più dettagli nantu à e strutture. L'implementazione di u driver di almacenamiento pò esse simplice cum'è un array di settori in RAM. A dimensione tipica di u settore (vale à dì, a dimensione di u bloccu) hè 512 per i dispositivi di almacenamiento di massa, è 2048 per i CD-ROM.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
50/174
Overview
Overview
Classe di Venditori di Dispositivi USB
Classe di Venditore di Dispositivi USB Overview Classe di Fornitori di Dispositivi USB Bisogni di Risorse da a Cunfigurazione Core di a Classe di Fornitori di Dispositivi USB Guida di Programmazione di a Classe di Fornitori di Dispositivi USB A classe Vendor vi permette di custruisce dispositivi specifichi di u fornitore chì ponu implementà un protocolu pruprietariu. Si basa nantu à una coppia di endpoint in massa per trasferisce dati trà l'host è u dispositivu. I trasferimenti in massa sò cunvenienti per trasferisce grandi quantità di dati non strutturati è furniscenu un scambiu affidabile di dati utilizendu un mecanismu di rilevazione di errori è di ripetizione. In più di i endpoint in massa, a classe Vendor pò ancu aduprà una coppia opzionale di endpoint d'interruzione. Qualsiasi sistema operativu (SO) pò travaglià cù a classe Vendor, basta chì u SO abbia un driver per gestisce a classe Vendor. Sicondu u SO, u driver pò esse nativu o specificu di u fornitore. Per esempiu, sottu Microsoft Windows®, a vostra applicazione interagisce cù u driver WinUSB furnitu da Microsoft per cumunicà cù u dispositivu di u fornitore.
Classe di Venditore di Dispositivi USB Overview
A Figura - Architettura Generale trà l'Host Windows è a Classe Vendor mostra l'architettura generale trà l'host è u dispusitivu utilizendu a classe Vendor. In questu esempiuampvale à dì, u sistema operativu ospitante hè MS Windows.
Figura - Architettura Generale trà MS Windows Host è Vendor Class
Da u latu MS Windows, l'applicazione cumunicheghja cù u dispusitivu di u venditore interagendu cù una biblioteca USB. E biblioteche, cum'è libusb, offrenu una API per gestisce un dispusitivu è i so pipe assuciati, è per cumunicà cù u dispusitivu per mezu di punti finali di cuntrollu, bulk è interrupt.
Da u latu di u dispusitivu, a classa Vendor hè cumposta da i seguenti endpoints:
Una coppia di punti finali di cuntrollu IN è OUT chjamati punti finali predefiniti. Una coppia di punti finali di bulk IN è OUT.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
51/174
Overview
Una coppia di punti finali d'interruzzione IN è OUT. Questa coppia hè facultativa. A tabella sottu indica l'usu di i diversi punti finali:
Tavula - Usu di i punti finali di a classe di venditori
Direzzione di u puntu finale
Cuntrolla IN
Cuntrolla
OUT
IN MASSA
Da u dispusitivu à l'ospite
>Ospite à u dispusitivu
Da u dispusitivu à l'ospite
Massa FUORI
Interruzzione IN
Interruzzione
OUT
Ospite à dispusitivu
Da u dispusitivu à l'ospite
Ospite à dispusitivu
Usu
Richieste standard per l'enumerazione è richieste specifiche di u venditore.
Richieste standard per l'enumerazione è richieste specifiche di u venditore.
Cumunicazione di dati grezzi. I dati ponu esse strutturati secondu un protocolu pruprietariu.
Cumunicazione di dati grezzi. I dati ponu esse strutturati secondu un protocolu pruprietariu.
Cumunicazione o notificazione di dati grezzi. I dati ponu esse strutturati secondu un protocolu pruprietariu. Cumunicazione o notificazione di dati grezzi. I dati ponu esse strutturati secondu un protocolu pruprietariu.
L'applicazione di u dispusitivu pò aduprà punti finali di massa è d'interruzzione per mandà o riceve dati da o versu l'ospite. Pò aduprà solu u puntu finale predefinitu per decifrà e richieste specifiche di u venditore mandate da l'ospite. E richieste standard sò gestite internamente da u stratu Core di u dispusitivu USB di Silicon Labs.
Bisogni di risorse di a classe di fornitori di dispositivi USB da Core
Ogni volta chì aghjunghjite una istanza di classe di venditore à una cunfigurazione via a funzione sl_usbd_vendor_add_to_configuration(), e risorse seguenti saranu allocate da u core.
Risorsa
Interfacce Interfacce alternative Punti finali Gruppi d'interfaccia
Quantità
1 1 2 (4 s'è vo avete attivatu i punti finali di l'interruzzione) 0
Nutate bè chì sti numeri sò per cunfigurazione. Quandu cunfigurate i vostri valori di cunfigurazione SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY è SL_USBD_DESCRIPTOR_QUANTITY, ùn vi scurdate di tene contu di quante cunfigurazioni a classa serà aghjunta. Per u valore di cunfigurazione SL_USBD_OPEN_ENDPOINTS_QUANTITY, postu chì i punti finali sò aperti solu quandu una cunfigurazione hè stabilita da l'ospite, basta à tene contu di u numeru di punti finali necessarii per una istanza di classa.
Cunfigurazione di a Classe di u Venditore di Dispositivi USB
Dui gruppi di parametri di cunfigurazione sò aduprati per cunfigurà a classa Vendor:
Configurazioni specifiche di l'applicazione di a classe di fornitori di dispositivi USB Configurazioni di l'istanza di a classe di fornitori di dispositivi USB
Configurazioni specifiche di l'applicazione di a classe di fornitori di dispositivi USB
Prima, per aduprà u modulu di classe Vendor di u dispositivu USB di Silicon Labs, aghjustate e definizioni di cunfigurazione in tempu di compilazione di Vendor secondu i bisogni di a vostra applicazione. Sò raggruppati in l'intestazione sl_usbd_core_config.h. file sottu à a sezzione Venditore. U scopu di e cunfigurazioni di quantità hè di informà u modulu di u dispusitivu USB di quanti oggetti Venditore USB deve assignà.
A tavula quì sottu descrive ogni cunfigurazione definita.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
52/174
Overview
Tavula - Definizione di a cunfigurazione di u venditore di dispositivi USB
Nome di cunfigurazione
Descrizzione
Valore predeterminatu
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Numeru d'istanze di classe chì assignerete via una chjama à a funzione 2 sl_usbd_vendor_create_instance().
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Numeru di cunfigurazioni. L'istanze di a classa di venditori ponu esse aghjunte 1 à una o più cunfigurazioni via una chjama à a funzione sl_usbd_vendor_add_to_configuration().
Configurazioni di l'istanza di a classe di u fornitore di dispositivi USB
Questa sezione definisce e cunfigurazioni relative à l'istanze di a classe Vendor.
Creazione di l'istanza di classe intr_en interval p_vendor_callbacks
Creazione di l'istanza di classe
A creazione di una istanza di classe Vendor si face chjamendu a funzione sl_usbd_vendor_create_instance(), chì accetta trè argumenti di cunfigurazione chì sò descritti quì sottu.
intr_en
Booleanu chì indica s'ellu ci vole à aghjunghje o micca una coppia di punti finali d'interruzzione.
Valore
veru falsu
Descrizzione
Una coppia di punti finali IN/OUT serà aghjunta è messa à dispusizione di l'applicazione integrata. Nisun puntu finale d'interruzzione serà aghjuntu. Solu una coppia di punti finali Bulk IN/OUT serà dispunibile.
intervallu
Sè vo impostate intr_en à true, pudete specificà l'intervallu di polling di i punti finali di l'interruzzione (in millisecondi). Sè vo impostate intr_en à false, pudete impostate l'intervallu à 0 postu chì serà ignoratu da a classa.
p_vendor_callbacks
p_vendor_callbacks hè un puntatore à una variabile di struttura di funzioni di callback. chì pudete specificà per gestisce e richieste di cuntrollu specifiche di a classe. Sè ùn aduprate micca richieste specifiche di a classe o avete bisognu di attivà/disattivà a notificazione, pudete stabilisce questu à NULL.
L'exampQuì sottu furnisce a firma prevista di u vostru gestore di richieste specifiche di classe.
Example – Firma di a funzione di dumanda specifica di a classe
void app_usbd_vendor_req_handle(uint8_t
class_nbr, (1)
custante 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) Numeru d'istanza di a classa di u venditore.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
53/174
Overview
(2) Puntatore à una dumanda di cunfigurazione ricevuta da l'ospite.
Guida di Programmazione di a Classe di Venditori di Dispositivi USB
Questa sezione spiega cumu aduprà a classa Vendor. Inizializazione di a classa USB Device Vendor Aggiunta di una istanza di classa USB Device Vendor à u vostru dispositivu Cumunicà cù a classa USB Device Vendor
Inizializazione di a Classe di Venditori di Dispositivi USB
Per aghjunghje una funziunalità di Classe Venditore à u vostru dispositivu, inizializate prima a classe chjamendu a funzione USBD_Vendor_Init(). L'exampA pagina quì sottu mostra cumu chjamà sl_usbd_vendor_init().
Example – Chjama di sl_usbd_vendor_init()
statutu sl_status_t;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */ }
Aghjunghjendu una istanza di classe di fornitore di dispositivi USB à u vostru dispositivu
Per aghjunghje a funziunalità di a classa di venditori à u vostru dispositivu, duvete prima creà una istanza, dopu aghjunghjela à a (e) cunfigurazione (i) di u vostru dispositivu.
Creazione di una istanza di classe di fornitore Aggiunta di l'istanza di classe di fornitore à a cunfigurazione (o cunfigurazioni) di u vostru dispositivu
Creazione di una istanza di classe Vendor
Crea una istanza di classe Vendor chjamendu a funzione sl_usbd_vendor_create_instance(). L'esempiuampA pagina quì sottu mostra cumu chjamà sl_usbd_vendor_create_instance() aduprendu argumenti predefiniti. Per più infurmazioni nantu à l'argumenti di cunfigurazione da passà à sl_usbd_vendor_create_instance(), vede Configurazioni di l'istanza di classe di u fornitore di dispositivi USB.
Example – Chjama di sl_usbd_vendor_create_instance()
uint8_t class_nbr; sl_status_t statutu;
statutu = sl_usbd_vendor_create_instance(falsu,
(1)
0u,
(2)
funzioni_di_richiamata_di_venditore_di_app_usbd, (3)
&class_nbr);
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
(1) Nisun puntu finale d'interruzzione cù sta istanza di classe. (2) L'intervallu hè ignoratu postu chì i punti finali d'interruzzione sò disattivati.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
54/174
Overview
(3) Funzione di callback chì face parte di a vostra applicazione chì gestisce e richieste di classe specifiche di u venditore. Vede Cumunicà cù a Classe di Venditore di Dispositivi USB per più infurmazioni. Aggiunta di l'Istanza di Classe di Venditore à a Cunfigurazione (e) di u vostru Dispositivu Dopu avè creatu una istanza di classe di venditore, pudete aghjunghjela à una cunfigurazione chjamendu a funzione USBD_Vendor_ConfigAdd(). L'exampA pagina quì sottu mostra cumu chjamà sl_usbd_vendor_add_to_configuration() aduprendu argumenti predefiniti.
Example – Chjama di sl_usbd_vendor_add_to_configuration()
statutu sl_status_t;
statutu = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
sè (statu ! SL_STATUS_OK) {
/* Un errore hè accadutu. A gestione di l'errore deve esse aghjunta quì. */
}
(1) Numeru di classe da aghjunghje à a cunfigurazione restituita da sl_usbd_vendor_create_instance(). (2) Numeru di cunfigurazione (quì aghjunghjendulu à una cunfigurazione Full-Speed).
Cumunicà cù a Classe di Venditori di Dispositivi USB
Cumunicazione sincrona generale Cumunicazione asincrona Richiesta di u fornitore Generale A classe Vendor offre e seguenti funzioni per cumunicà cù l'ospite. Per più dettagli nantu à i parametri di a funzione, vede USB Device Vendor API.
Tavula - Riassuntu di l'API di cumunicazione di u fornitore
Nome di a funzione
sl_usb d _v e nd o r_ re ad _b ulk_sy nc() sl_usb d _v e nd o r_write _b ulk_sy nc() sl_usb d _v e nd o r_ re ad _b ulk_asy nc() sl_usb d _v e nd o r_write _b ulk_asy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_sy nc() sl_usb d _v e nd o r_write _inte rrup t_sy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_asy nc
()
sl_usb d _v e nd o r_write _inte rrup t_asy nc
()
Operation Receives data from host through bulk OUT endpoint. This function is blocking. Sends data to host through bulk IN endpoint. This function is blocking. Receives data from host through bulk OUT endpoint. This function is non-blocking. Sends data to host through bulk IN endpoint. This function is non-blocking. Receives data from host through interrupt OUT endpoint. This function is blocking. Sends data to host through interrupt IN endpoint. This function is blocking. Receives data from host through interrupt OUT endpoint. This function is non-
bluccatu.
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. Tutti i diritti riservati.
55/174
Overview
Synchronous communication means that the transfer is blocking. When a function is called, the application blocks until the transfer completes with or without an error. A timeout can be specified to avoid waiting forever. The example below shows a read and write that receives data from the host using the bulk OUT endpoint and sends data to the host using the bulk IN endpoint.
Example – Synchronous Bulk Read and Write
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statutu;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
false,
(5)
&xfer_len);
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
(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) L'applicazione furnisce u buffer di trasmissione inizializatu.
(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.
Comunicazione asincrona
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. Tutti i diritti riservati.
56/174
Overview
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
statutu;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
NULL,
(4)
false);
(6)
sè (statu ! SL_STATUS_OK) {
/* $$$$ Gestisce l'errore. */
}
}
(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)
{
sè (statu ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} altru {
/* $$$$ Gestisce l'errore. */
}
}
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)
{
sè (statu ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} altru {
/* $$$$ Gestisce l'errore. */
}
}
(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. Tutti i diritti riservati.
57/174
Overview
(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. Tutti i diritti riservati.
58/174
Overview
#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;
statutu 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;
default:
(6)
// Request is not supported.
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
59/174
Overview
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 presente.
*/
} 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. Tutti i diritti riservati.
60/174
Documentation API
Documentation API
Documentation API
Lista di moduli
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
Descrizzione
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. Tutti i diritti riservati.
61/174
USB Device API
USB Device API
USB Device API
USB Device API.
Moduli
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. Tutti i diritti riservati.
62/174
USB Device ACM API
USB Device ACM API
USB Device ACM API
USB Device CDC ACM API.
Moduli
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funzioni
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. Tutti i diritti riservati.
63/174
USB Device ACM API
Macro
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODULU.
#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. Tutti i diritti riservati.
64/174
USB Device ACM API
Tipu
nuddu
Direction N/A
Argument Name
MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS
Initialize the CDC ACM serial emulation subclass.
Ritorna
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
Descrizzione
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.
Parametri
Tipu
uint16_t
uint16_t
Direction Argument Name
Descrizzione
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.
Ritorna
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.
Parametri
Tipu
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.
Ritorna
Copyright © 2025 Silicon Laboratories. Tutti i diritti riservati.
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.
Parametri
Tipu
Direzzione
Argument Name
Descrizzione
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
Documenti / Risorse
![]() |
SILICON LABS USB Device Stack [pdfManuale d'istruzzioni USB Device Stack, Device Stack, Stack |