USB Device Stack
Mga pagtutukoy
- Bersyon ng USB: 1.5.1
- Petsa ng Paglabas: Hulyo 21, 2025
- Simplicity Bersyon ng SDK: 2025.6.1
Natapos ang Produktoview
Ang USB device stack ng Silicon Labs ay nagbibigay ng maraming nalalaman at
madaling gamitin na koneksyon sa USB para sa mga proyekto ng IoT, na nagpapadali
komunikasyon sa pagitan ng network co-processors at mga host.
Mga tampok
- Mahusay na USB device stack
- Tamang-tama para sa mga proyekto ng IoT
- Suporta para sa komunikasyon sa pagitan ng network co-processors at
mga host
Mga Tagubilin sa Paggamit ng Produkto
Configuration ng USB Device
I-configure ang mga setting ng USB device ayon sa iyong proyekto
kinakailangan sa pamamagitan ng pagsangguni sa seksyon ng USB Device Configuration
sa dokumentasyon.
Gabay sa Programming ng USB Device
Sundin ang USB Device Programming Guide para maunawaan kung paano
program at makipag-ugnayan sa USB device para sa iba't-ibang
mga aplikasyon.
Mga Klase ng USB Device
Ang seksyon ng Mga Klase ng USB Device ay nagbibigay ng higitview ng iba't ibang
mga klase tulad ng CDC ACM, HID, MSC SCSI, at Vendor Class. Piliin ang
naaangkop na klase batay sa functionality ng iyong device.
Pag-troubleshoot ng USB Device
Kung makatagpo ka ng anumang mga isyu sa USB device, sumangguni sa
Seksyon ng Pag-troubleshoot ng USB Device para sa mga solusyon at pag-debug
mga tip.
Microsoft Windows OS USB Host
Kung gumagamit ka ng USB device na may Microsoft Windows OS USB
Host, tiyaking sundin ang mga alituntuning ibinigay sa
documentation for seamless integration.
FAQ
Q: Ano ang ilang karaniwang exampkaunting mga device na maaari kong gamitin
itong USB stack?
A: Binibigyang-daan ka ng USB stack na bumuo ng mga device gaya ng
Mga USB-to-serial adapter, mouse o keyboard, naaalis na storage
device, at custom na device.
Q: Mayroon bang anumang partikular na kinakailangan ng software para sa paggamit nito
USB device stack?
A: Kasama sa katugmang software ang Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (The GNU Compiler Collection),
IAR Embedded Workbench para sa ARM, at IAR EWARM.
Universal Serial Bus USB
Universal Serial Bus USB
USB Overview Tapos naview
Mga Tala sa Paglabas USB
Specifications and Features Overview
Tapos na ang Configuration ng USB Deviceview
USB Device Programming Guide Overview
Tapos na ang Mga Klase ng USB Deviceview Tapos na ang Klase ng CDC ACMview Tapos na ang HID Classview Tapos na ang Klase ng MSC SCSIview Tapos na ang Klase ng Vendorview
USB API API Documentation USB Device API USB Device ACM API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB Device CDC API a sl_usbd_cdc_subcl ss_driver_t USB Device Core API
sl_usbd_device_config_t sl_usbd_setup_req_t
isang sl_usbd_cl ss_driver_t USB Device HID API
sl_usbd_hid_callbacks_t USB Device MSC API
isang sl_usbd_msc_subcl ss_driver_t USB Device MSC SCSI API
sl_usbd_msc_scsi_callbacks_t
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
1/174
Universal Serial Bus USB
isang sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB Device Vendor API sl_usbd_vendor_callbacks_t
API Documentation Pag-troubleshoot ng USB Device
Tapos naview Microsoft Windows OS USB Host
Tapos naview
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
2/174
Tapos naview
Tapos naview
USB Device
Ang USB ay isa sa pinakamatagumpay na mga interface ng komunikasyon sa kasaysayan ng mga computer system at ang de facto na pamantayan para sa pagkonekta ng mga peripheral ng computer. Ang Silicon Labs USB Device stack ay isang USB device module na partikular na idinisenyo para sa mga naka-embed na system. Itinayo mula sa simula gamit ang kalidad, scalability, at pagiging maaasahan ng Silicon Labs, dumaan ito sa isang mahigpit na proseso ng pagpapatunay upang sumunod sa detalye ng USB 2.0. Inilalarawan ng dokumentasyong ito kung paano simulan, simulan, at gamitin ang Silicon Labs USB Device stack. Ipinapaliwanag nito ang iba't ibang mga halaga ng pagsasaayos at ang kanilang mga gamit. Kasama rin dito ang paglipasview ng teknolohiya, mga uri ng mga posibilidad ng pagsasaayos, mga pamamaraan ng pagpapatupad, at halamples of typical usage for every available class.
To help you understand the USB concepts quickly, the documentation features many examples ng USB na may mga pangunahing pag-andar. Itong mga examples will provide you with a framework that allows you to build devices quickly. These exampkasama ang:
USB-to-serial adapter (Communications Device Class) Mouse o keyboard (Human Interface Device Class) Removable storage device (Mass Storage Class) Custom na device (Vendor Class)
Tapos na ang sumusunodview of the documentation sections:
Specifications and Features USB Device Configuration USB Device Programming Guide USB Device Classes
CDC ACM Class HID Class MSC SCSI Class Vendor Class USB Device Troubleshooting Microsoft Windows OS USB Host
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
3/174
USB
USB
Bersyon ng USB 1.5.1 Hulyo 21, 2025 – Mga Tala sa Paglabas
Simplicity SDK Bersyon 2025.6.1
Ang mahusay na USB device stack ng Silicon Labs ay nag-aalok ng versatile, madaling gamitin na USB connectivity na perpekto para sa mga proyekto ng IoT, kabilang ang komunikasyon sa pagitan ng mga network co-processor at host. Mag-click dito para sa mga naunang release.
Buod ng Paglabas
Mga Pangunahing Tampok | Mga Pagbabago sa API | Mga Pag-aayos ng Bug | Pag-enable ng Chip
Mga Pangunahing Tampok
Underlying platform changes only.
Mga Pagbabago sa API
wala.
Mga Pag-aayos ng Bug
wala.
Pag-enable ng Chip
wala.
Mga Pangunahing Tampok
Mga Bagong Tampok | Mga Pagpapahusay | Inalis na Mga Tampok | Hindi na ginagamit na Mga Tampok
Mga Bagong Tampok
wala.
Mga pagpapahusay
Underlying platform changes only.
Removed Features
wala.
Hindi na ginagamit na Mga Tampok
wala.
Mga Pagbabago sa API
Mga bagong API | Mga Binagong API | Mga Inalis na API | Mga hindi na ginagamit na API
Mga bagong API
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
4/174
USB
wala.
Mga binagong API
wala.
Inalis ang mga API
wala.
Deprecated APIs
wala.
Mga Pag-aayos ng Bug
wala.
Pag-enable ng Chip
wala.
Paglalapat Halample Mga Pagbabago
Bagong Halamples | Binagong Halamples | Removed Examples | Deprecated Examples
Bagong Halamples
wala.
Binagong Halamples
wala.
Inalis Halamples
wala.
Hindi na ginagamit Halamples
wala.
Epekto ng Mga Pagbabago sa Paglabas
Mga Pahayag ng Epekto | Patnubay sa Migrasyon
Mga Pahayag ng Epekto
wala.
Patnubay sa Migrasyon
wala.
Mga Kilalang Isyu at Limitasyon
wala.
Gamit ang Paglabas na Ito
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
5/174
USB
Ano ang nasa Release? | Mga Katugmang Software | Pag-install at Paggamit | Tulong at Feedback
Ano ang nasa Release?
USB Device Stack Application Halamples
Katugmang Software
Software
Simplicity SDK Simplicity Studio Simplicity Commander GCC Ang GNU Compiler Collection) IAR Embedded Workbench para sa ARM IAR EWARM
Katugmang Bersyon o Variant
2025.6.0 5.11.0 1.18.2 (ibinigay ng Simplicity Studio) 12.2.1 (ibinigay ng Simplicity Studio) 9.40.1 (ibinigay ng Simplicity Studio)
Pag-install at Paggamit
To kick start your development see our:
USB Device Programming Guide. API Documentation.
Para sa impormasyon tungkol sa Secure Vault Integration, tingnan ang Secure Vault.
Pinunitview Mga notification sa Security at Software Advisory at pamahalaan ang iyong mga kagustuhan sa notification:
ò Pumunta sa https://community.silabs.com/. ó Mag-log in gamit ang mga kredensyal ng iyong account. o I-click ang iyong profile icon sa kanang sulok sa itaas ng page.
õ Piliin ang Mga Notification mula sa dropdown na menu. ö Sa seksyong Mga Notification, pumunta sa tab na Mga Notification ng Aking Produkto upang mulingview historical Security and Software Advisory
mga abiso
÷ Upang pamahalaan ang iyong mga kagustuhan, gamitin ang tab na Pamahalaan ang Mga Notification upang i-customize kung aling mga update at advisory ng produkto ang iyong
tumanggap.
Para sa mga inirerekomendang setting ng configuration, tingnan dito.
Upang matuto nang higit pa tungkol sa software sa release na ito, sumisid sa aming online na dokumentasyon.
Tulong at Feedback
Makipag-ugnayan sa Suporta sa Silicon Labs. Upang gamitin ang aming Ask AI tool para makakuha ng mga sagot, tingnan ang field ng paghahanap sa itaas ng page na ito.
Tandaan: Ang Ask AI ay eksperimental.
Humingi ng tulong mula sa aming komunidad ng developer.
Patakaran sa Pagpapalabas at Pagpapanatili ng SDK
Tingnan ang aming Patakaran sa Paglabas at Pagpapanatili ng SDK.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
6/174
Tapos naview
Tapos naview
Mga pagtutukoy
Sumusunod sa “Universal Serial Bus specification revision 2.0” Ipapatupad ang “Interface Association Descriptor Engineering Change Notice (ECN)” Mga uri ng paglilipat
Kontrolin ang Bulk Interrupt na mga klase sa USB Communication Device Class (CDC) Abstract Control Model (ACM) Human Interface Device (HID) Mass Storage Class (MSC) Framework ng klase na partikular sa vendor
Mga tampok
Scalable para isama lang ang mga kinakailangang feature para mabawasan ang memory footprint Sumusuporta sa Full-speed (12 Mbit/s) Sumusuporta sa composite (multi-function) device Sumusuporta sa multi-configuration device Sumusuporta sa USB power-saving functionality (device suspend and resume) Kumpletuhin ang integration ng Mass Storage Class sa Micrium OS File System module na Binuo gamit ang CMSIS-RTOS2 abstraction layer upang ito ay gumana sa iba't ibang OS. Ang Silicon Labs GSDK ay may kasamang FreeRTOS at Micrium OS port.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
7/174
Tapos naview
Tapos naview
Configuration ng USB Device
Tinatalakay ng seksyong ito kung paano i-configure ang Silicon Labs USB Device. Mayroong tatlong pangkat ng mga parameter ng pagsasaayos, tulad ng sumusunod:
Configuration ng USB Device Core Configuration ng Impormasyon ng USB Device Configuration ng Hardware ng USB Device
USB Device Core Configuration
Maaaring i-configure ang Silicon Labs USB Device sa oras ng pag-compile sa pamamagitan ng isang set ng #defines na matatagpuan sa sl_usbd_core_config.h file. Gumagamit ang USB Device ng #defines kapag posible dahil pinapayagan ng mga ito na i-scale ang mga laki ng code at data sa oras ng pag-compile batay sa kung aling mga feature ang pinagana. Nagbibigay-daan ito sa read-only memory (ROM) at random-access memory (RAM) footprint ng Silicon Labs USB Device na maisaayos batay sa mga kinakailangan ng iyong application.
Inirerekomenda: Simulan ang proseso ng pagsasaayos gamit ang mga default na halaga (naka-highlight sa bold).
Ang mga seksyon sa ibaba ay nakaayos batay sa pagkakasunud-sunod sa configuration ng template file, sl_usbd_core_config.h.
Core Configuration Classes Configuration
Core Configuration
Table – USB Device Core Configuration Constants
Patuloy na Paglalarawan
Default na Halaga
SL_USBD_TA SK_STACK_ SIZE
Kino-configure ang laki ng stack sa mga byte ng USBD core task
4096
SL_USBD_TA SK_PRIORIT Y
Kino-configure ang priyoridad ng USBD core task. Ito ay isang priyoridad ng CMSIS-RTOS2.
osPriorityHigh
SL_USBD_A UTO_START _USB_DEVIC E
Kung naka-enable, awtomatikong magsisimula ang USB device kapag nasimulan na ang kernel at naka-iskedyul ang 1 USBD core task sa unang pagkakataon. Kung hindi pinagana, kakailanganin ng iyong application na tumawag sa sl_usbd_core_start_device() kapag handa nang matukoy ng USB host.
SL_USBD_C Ang kabuuang bilang ng mga configuration na idaragdag sa pamamagitan ng sl_usbd_add_configuration()
1
ONFIGURATI function.
ON_QUANTI
TY
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
8/174
Tapos naview
pare-pareho
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITY
SL_USBD _DESCRI
PTOR_Q
UANTITY
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY
Paglalarawan Ang kabuuang bilang ng mga USB interface na idaragdag para sa lahat ng iyong mga configuration. Ito ay lubos na nakadepende sa (mga) klase na ginamit. Para sa higit pang impormasyon sa kung gaano karaming mga interface ang kailangan ng isang instance ng klase, sumangguni sa seksyong “Resource Needs from core” ng iyong (mga) klase.
Ang kabuuang bilang ng mga USB na alternatibong interface na idaragdag para sa lahat ng iyong configuration. Ito ay lubos na nakadepende sa (mga) klase na ginamit. Ang halagang ito ay dapat palaging katumbas o mas malaki sa SL_USBD_INTERFACE_QUANTITY . Para sa higit pang impormasyon sa kung gaano karaming mga kahaliling interface ang kailangan ng isang instance ng klase, sumangguni sa seksyong “Resource Needs from Core” ng iyong (mga) klase.
The total number of USB interface groups that will be added for all your configurations. This greatly depends on the class(es) used. For more information on how many interface groups requires a class instance, refer to the section “Resource Needs from Core” of your class(es).
Ang kabuuang bilang ng mga endpoint descriptor na idaragdag para sa lahat ng iyong configuration. Ito ay lubos na nakadepende sa (mga) klase na ginamit. Para sa higit pang impormasyon sa kung ilang endpoint descriptor ang kailangan ng isang instance ng klase, sumangguni sa “Bilang ng mga endpoint” sa seksyong “Resource Needs from Core” ng iyong (mga) klase. Tandaan na ang mga control endpoint ay hindi kailangang isaalang-alang dito. Ang kabuuang bilang ng mga USB string. Ang pagtatakda ng dami sa zero ay hindi papaganahin ang tampok. Ang hindi pagpapagana nito ay magiging sanhi ng hindi pag-imbak ng device ng anumang mga string ng paglalarawan ng USB na ipinasa mula sa application. Nangangahulugan ito na hindi na makukuha ng host ang mga string ng paglalarawan (gaya ng manufacturer at pangalan ng produkto). Ang kabuuang bilang ng mga nakabukas na endpoint bawat configuration. Ang isang device ay nangangailangan ng hindi bababa sa dalawang nakabukas na endpoint para sa mga control transfer, ngunit dapat mo ring idagdag ang mga endpoint ng (mga) klase na ginamit. Para sa higit pang impormasyon sa kung gaano karaming mga nakabukas na endpoint ang kailangan ng isang instance ng klase, sumangguni sa “Bilang ng mga endpoint” sa seksyong “Resource Needs mula sa Core” ng iyong (mga) klase.
Default na Halaga
10 10
2
20 30 20
Configuration ng mga Klase
Classes have specific compile-time configurations. Refer to USB Device Classes for more information.
Configuration ng Impormasyon ng USB Device
Ang sl_usbd_device_config.h configuration file regroups compile-time #define-s upang itakda ang pangunahing impormasyon tungkol sa iyong device, gaya ng Vendor/Product ID, mga string ng device, atbp. Inilalarawan ng talahanayan sa ibaba ang bawat configuration ng impormasyong define na available sa configuration na ito file.
Talahanayan – Tinutukoy ang Configuration ng Impormasyon ng USB Device
pare-pareho
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID
Paglalarawan Ang iyong numero ng pagkakakilanlan ng vendor bilang inihatid ng USB Implementers Forum. Para sa higit pang impormasyon kung paano ka makakakuha ng vendor ID, tingnan ang http://www.usb.org/developers/vendor/ . Ang iyong numero ng pagkakakilanlan ng produkto.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
9/174
Tapos naview
pare-pareho
Paglalarawan
SL_USBD_DEVICE_RELEASE Numero ng paglabas ng iyong device. _NUMBER
SL_USBD_DEVICE_MANUFA String na naglalarawan sa manufacturer ng iyong device. Ang pagsasaayos na ito ay binabalewala kapag ang
CTURER_STRING
ang configuration SL_USBD_STRING_QUANTITY ay nakatakda sa 0.
SL_USBD_DEVICE_PRODUC String na naglalarawan sa iyong produkto. Ang pagsasaayos na ito ay binabalewala kapag ang pagsasaayos
T_STRING
Ang SL_USBD_STRING_QUANTITY ay nakatakda sa 0.
SL_USBD_DEVICE_SERIAL_N String containing the serial number of your device. This configuration is ignored when the
UMBER_STRING
ang configuration SL_USBD_STRING_QUANTITY ay nakatakda sa 0.
SL_USBD_DEVICE_LANGUA Numero ng pagkakakilanlan ng wika ng mga string ng iyong device. Ang mga posibleng halaga ay:
GE_ID
– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA
– SL_USBD_LANG_ID_CHINESE_TAIWAN
– SL_USBD_LANG_ID_ENGLISH_US
– SL_USBD_LANG_ID_ENGLISH_UK
– SL_USBD_LANG_ID_FRENCH
– SL_USBD_LANG_ID_GERMAN
– SL_USBD_LANG_ID_GREEK
– SL_USBD_LANG_ID_ITALIAN
– SL_USBD_LANG_ID_PORTUGUESE
– SL_USBD_LANG_ID_SANSKRIT
Binabalewala ang configuration na ito kapag nakatakda sa 0 ang configuration na SL_USBD_STRING_QUANTITY.
Configuration ng Hardware ng USB Device
Depending on the Silicon Labs device you are using, you will possibly have the GPIO pin and port to configure for USB VBUS Sense signal. The configuration defines are in the sl_usbd_hardware_config.h header file.
pare-pareho
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Paglalarawan
GPIO Port para sa USB VBUS Sense signal sa iyong board. GPIO Pin para sa USB VBUS Sense signal sa iyong board.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
10/174
Tapos naview
Tapos naview
Gabay sa Programming ng USB Device
Ipinapaliwanag ng seksyong ito kung paano gamitin ang module ng USB Device.
Paunang Setup ng USB Device Module
Inilalarawan ng seksyong ito ang mga pangunahing hakbang na kinakailangan upang masimulan ang module ng USB Device at upang magdagdag, maghanda, at magsimula ng isang device. Pagsisimula sa USB Device Module Pagsisimula sa USB Device Core Pagsisimula sa aCl ss(es) Pagdaragdag ng Iyong USB Device Pagbuo ng Iyong USB Device Pagdaragdag ng (Mga) Configuration Pagdaragdag ng (Mga) USB Function Pagsisimula ng Iyong USB Device
Mga Function ng Event Hook
Sinisimulan ang USB Device Module
Sinisimulan ang USB Device Core
a US a Magsimula sa pamamagitan ng pagsisimula sa core ng module ng B device sa pamamagitan ng paglalagay ng function na sl_usbd_core_init() . T aa ang halimbawa sa ibaba ay nagpapakita ng c lling sl_usbd_core_init() .
Example – Tumatawag sa sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Pagsisimula ng (mga) Klase
Pagkatapos masimulan ang USB device module core, dapat mong simulan ang bawat klase na balak mong gamitin. Tingnan ang seksyong “Gabay sa Programming” ng iyong (mga) acl ss para sa higit pang impormasyon.
Pagbuo ng Iyong USB Device
Pagdaragdag ng (mga) Configuration
Pagkatapos mong matagumpay na masimulan ang iyong device, maaari mong simulan ang pagdaragdag ng mga USB function dito, simula sa isang bagong configuration. Ang isang device ay dapat magkaroon ng kahit isang configuration. Upang magdagdag ng (mga) configuration, tawagan ang function na aa sl_usbd_core_ dd_configur tion() function. Dapat tawagan ang function na ito para sa bawat configuration na gusto mong idagdag. Ang exampIpinapakita sa ibaba kung paano magdagdag ng isang Full-speed.
Example – Pagdaragdag ng (mga) Configuration sa Iyong Device
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
11/174
Tapos naview
sl_status_t status; uint8_t config_nbr_fs;
/* Pagdaragdag ng full-speed na configuration sa device. */
katayuan = sl_usbd_core_add_configuration(0,
/* Walang mga espesyal na katangian sa pagsasaayos. */
100u,
/* Pinakamataas na paggamit ng kuryente: 100mA.
*/
SL_USBD_DEVICE_SPEED_FULL,
/* Full-Speed configuration.
*/
“Config Add Example Full-Speed config",
&config_nbr_fs);
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Pagdaragdag ng (mga) USB Function
Pagkatapos mong matagumpay na makapagdagdag ng kahit isang configuration sa iyong device, maaari mong idagdag ang mga interface at endpoint sa iyong device. Ang bawat klase ng USB ay may sariling mga pangangailangan sa mga tuntunin ng interface at uri ng mga endpoint, dami, at iba pang mga parameter. Ang Silicon Labs USB Device ay nagdaragdag ng mga interface at endpoint sa mga klase na inaalok nito.
Mula sa iyong application, maaari kang mag-instantiate ng USB class at idagdag ito sa isang configuration. Para sa higit pang impormasyon sa konsepto ng mga instance ng klase ng USB device, tingnan ang Mga Klase ng USB Device. Tandaan na maaari kang mag-instantiate at magdagdag ng maraming iba't ibang instance ng klase sa isang configuration upang lumikha ng isang multi-function (composite) na device.
Ang exampIpinapakita sa ibaba kung paano lumikha ng isang halimbawa ng klase at idagdag ito sa isang pagsasaayos.
Example – Pagdaragdag ng Class Instance sa Iyong Device
sl_status_t status; uint8_t class_nbr;
/* Lumikha ng instance ng klase na gusto mong gamitin.*/ /* Tandaan na depende sa klase ang function na ito ay maaaring magkaroon ng mas maraming argumento. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
/* Idagdag ang class instance sa Full-Speed configuration. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Class number na ibinalik ng sl_usbd_ _create_instance. */
config_nbr_fs); /* Configuration number na ibinalik ng sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Pagsisimula ng Iyong USB Device
Bilang default, awtomatikong magsisimula ang device ng USB device core task pagkatapos makumpleto ang pagsisimula ng device at magsimula ang kernel. Upang makontrol kung kailan sinimulan ang device at makikita ng USB host, gamitin ang configuration define SL_USBD_AUTO_START_USB_DEVICE upang i-disable ang auto-start na feature. Kapag hindi pinagana, pagkatapos mong gawin/ihanda ang iyong device, maaari mo itong simulan at gawin itong nakikita ng USB host sa pamamagitan ng pagtawag sa function na sl_usbd_core_start_device() .
Ang exampIpinapakita sa ibaba kung paano simulan ang iyong device gamit ang sl_usbd_core_start_device() function.
Example – Pagsisimula ng Iyong Device
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
12/174
Tapos naview
sl_status_t status;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Mga Function ng Event Hook
Ang USB Device core module ay nag-aalok ng dalawang mahinang hook function na maaari mong muling tukuyin sa iyong application. Ang kanilang layunin ay ipaalam kapag nangyari ang mga kaganapan sa bus at configuration.
Talahanayan – Mga Function ng USB Event Hook
Kaganapan
Paglalarawan
Bus
Tinatawag kapag nangyari ang USB Bus event
Configuration Tinatawag kapag nangyari ang USB Configuration event
Function Signature
void sl_usbd_on_bus_event(sl_usbd_bus_event_t event); void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr);
Example – Mga Function ng Event Hook
void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { switch (event) { case SL_USBD_EVENT_BUS_CONNECT:
// tinatawag kapag ang USB cable ay ipinasok sa isang host controller break;
kaso SL_USBD_EVENT_BUS_DISCONNECT: // tinatawag kapag tinanggal ang USB cable mula sa break ng host controller;
kaso SL_USBD_EVENT_BUS_RESET: // tinatawag kapag nagpadala ang host ng reset command break;
kaso SL_USBD_EVENT_BUS_SUSPEND: // tinatawag kapag nagpadala ang host ng suspend command break;
case SL_USBD_EVENT_BUS_RESUME: // called when the host sends wake up command break;
default: break; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { switch (event) { case SL_USBD_EVENT_CONFIG_SET:
// called when the host sets a configuration break;
kaso SL_USBD_EVENT_CONFIG_UNSET: // tinatawag kapag ang configuration ay unset break;
default: break; } }
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
13/174
Tapos naview
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
14/174
Tapos naview
Tapos naview
Mga Klase ng USB Device
Ang mga klase sa USB na available sa Silicon Labs USB Device ay may ilang karaniwang katangian. Ipinapaliwanag ng seksyong ito ang mga katangiang ito at ang kanilang mga pakikipag-ugnayan sa core layer.
Para sa higit pang impormasyon sa isang partikular na klase, tingnan ang sumusunod:
CDC ACM Class HID Class MSC SCSI Class Vendor Class
Tungkol sa Class Instance
Ang mga USB na klase na available sa USB Device ay nagpapatupad ng konsepto ng mga instance ng klase. Ang isang instance ng klase ay kumakatawan sa isang function sa loob ng isang device. Ang function ay maaaring ilarawan sa pamamagitan ng isang interface o ng isang pangkat ng mga interface at nabibilang sa isang partikular na klase.
Ang bawat pagpapatupad ng klase ng USB ay may ilang mga pagsasaayos at pag-andar na magkakatulad, batay sa konsepto ng halimbawa ng klase. Ang mga karaniwang configuration at function ay ipinakita sa talahanayan sa ibaba. Sa pamagat ng column na 'Constants o Function', ang placeholder XXXX ay maaaring palitan ng pangalan ng klase: CDC, HID, MSC, CDC_ACM o VENDOR (Vendor para sa mga pangalan ng function).
Table – Constants and Functions Related to the Concept of Multiple Class Instances
Constant o Function
SL_USBD_XXXX_CL ASS_IN TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre ate _insta nce ()
sl_usbd_XXXX_add_to_conf iguration()
Paglalarawan
Kino-configure ang maximum na bilang ng mga instance ng klase.
Kino-configure ang maximum na bilang ng mga configuration. Sa panahon ng pagsisimula ng klase, ang isang nilikhang instance ng klase ay idaragdag sa isa o higit pang mga configuration. Lumilikha ng bagong instance ng klase.
Nagdaragdag ng isang umiiral na instance ng klase sa tinukoy na configuration ng device.
Sa mga tuntunin ng pagpapatupad ng code, ang klase ay magdedeklara ng isang lokal na global variable na naglalaman ng isang istraktura ng kontrol ng klase. Ang istraktura ng kontrol ng klase na ito ay nauugnay sa isang instance ng klase at maglalaman ng partikular na impormasyon upang pamahalaan ang instance ng klase.
Ang mga sumusunod na figure ay nagpapakita ng ilang mga sitwasyon ng kaso. Ang bawat figure ay may kasamang code example na tumutugma sa senaryo ng kaso.
Figure – Maramihang Class Instance – Ang FS Device (1 Configuration na may 1 Interface) ay kumakatawan sa isang tipikal na USB device. Ang device ay Full-Speed (FS) at naglalaman ng isang configuration. Ang pag-andar ng device ay inilalarawan ng isang interface na binubuo ng isang pares ng mga endpoint para sa komunikasyon ng data. Isang instance ng klase ang nilikha at magbibigay-daan sa iyong pamahalaan ang buong interface kasama ang nauugnay na endpoint nito.
Figure – Maramihang Class Instance – Configuration ng FS Device 1 na may 1 Interface)
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
15/174
Tapos naview
Ang code na naaayon sa Figure – Maramihang Class Instance – FS Device (1 Configuration na may 1 Interface) ay ipinapakita sa exampsa ibaba.
Example – Multiple Class Instances – FS Device 1 Configuration with 1 Interface)
sl_status_t status; uint8_t class_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Pangasiwaan ang Class enable event. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Pangasiwaan ang Class disable event. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
status = sl_usbd_XXXX_init();
(2)
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
status = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&class_0);
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
status = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
(1) Ang bawat klase ay nag-aalok ng isang hanay ng mga callback function para sa device connect/disconnect event at para sa class na partikular na event. Ang callback structure object ay ipinasa bilang argumento kapag lumilikha ng class instance na may sl_usbd_XXXX_create_instance()
function.
(1) Initialize the class. All internal variables, structures, and class ports will be initialized. Note that the Init() function in some classes may take other arguments.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
16/174
Tapos naview
(2) Lumikha ng halimbawa ng klase, na class_0 . Ang function na sl_usbd_XXXX_create_instance() ay naglalaan ng class control structure na nauugnay sa class_0 . Depende sa klase, ang sl_usbd_XXXX_create_instance() ay maaaring may mga karagdagang parameter bukod sa numero ng klase na kumakatawan sa impormasyong partikular sa klase na nakaimbak sa istruktura ng kontrol ng klase. aaa (3) Idagdag ang cl ss inst nce, class_0 , sa tinukoy na numero ng pagsasaayos, config_0 . sl_usbd_XXXX_add_to_configuration() ay lilikha ng interface 0 at ang nauugnay nitong IN at OUT na endpoint. Bilang resulta, ang class instance ay sumasaklaw sa interface 0 at sa mga endpoint nito. Ang anumang komunikasyon na ginawa sa interface 0 ay gagamit ng class instance number, class_0 . Figure – Maramihang Class Instance – Ang FS Device (2 Configuration at Maramihang Interface) ay kumakatawan sa isang mas kumplikadong example. Ang isang full-speed na device ay binubuo ng dalawang configuration. Ang device ay may dalawang function na kabilang sa parehong klase, ngunit ang bawat function ay inilalarawan ng dalawang interface at may isang pares ng bidirectional endpoint. Sa ex na itoample, dalawang instance ng klase ang ginawa. Ang bawat instance ng klase ay nauugnay sa isang pangkat ng mga interface kumpara sa Figure – Multiple Class Instance – FS Device (1 Configuration na may 1 Interface) at Figure – Multiple Class Instance – FS Device (2 Configurations at Multiple Interface) kung saan nauugnay ang class instance sa isang interface.
Figure – Maramihang Mga Instance ng Klase – Mga Configuration ng FS Device 2 at Maramihang Interface)
Ang code na naaayon sa Figure – Maramihang Mga Instance ng Klase – FS Device (2 Configuration at Maramihang Interface) ay ipinapakita sa exampsa ibaba. Ang paghawak ng error ay tinanggal para sa kalinawan.
Example – Maramihang Mga Instance ng Klase – Mga Configuration ng FS Device 2 at Maramihang Interface)
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
17/174
Tapos naview
sl_status_t status; uint8_t class_0; uint8_t class_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
status = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); status = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
status = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); status = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Simulan ang klase. Ang anumang panloob na mga variable, istruktura, at mga port ng klase ay pasisimulan.
(2) Lumikha ng halimbawa ng klase, class_0 . Ang function na sl_usbd_XXXX_create_instance() ay naglalaan ng class control structure na nauugnay sa class_0 .
(3) Lumikha ng halimbawa ng klase, class_1 . Ang function na sl_usbd_XXXX_create_instance() ay naglalaan ng isa pang istruktura ng kontrol ng klase na nauugnay sa class_1 .
(4) Idagdag ang class instance, class_0 , sa configuration, cfg_0 . sl_usbd_XXXX_add_to_configuration() ay lilikha ng interface 0, interface 1, mga kahaliling interface, at ang nauugnay na IN at OUT na endpoint. Ang class instance number, class_0 , ay gagamitin para sa anumang komunikasyon ng data sa interface 0 o interface 1.
(5) Idagdag ang class instance, class_1 , sa configuration, cfg_0 . sl_usbd_XXXX_add_to_configuration() ay lilikha ng interface 2, interface 3 at ang kanilang nauugnay na IN at OUT na mga endpoint. Ang class instance number, class_1 , ay gagamitin para sa anumang komunikasyon ng data sa interface 2 o interface 3.
(6) Idagdag ang parehong mga instance ng klase, class_0 at class_1 , sa iba pang configuration, cfg_1 .
Tinutukoy ng bawat klase ang istraktura ng uri sl_usbd_XXXX_callbacks_t . Ang layunin nito ay bigyan ang bawat klase ng isang hanay ng mga function ng callback na tatawagin kapag nangyari ang kaganapan. Dalawang callback function ang naroroon sa bawat klase. Ang mga ito ay iniharap sa talahanayan sa ibaba.
Talahanayan – Mga Karaniwang Pag-andar ng Callback ng Klase
Fields Description .enable Called kapag matagumpay na pinagana ang USB class instance. .disable Tinatawag kapag naka-disable ang USB class instance.
Function Signature void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
18/174
Tapos naview
Tapos naview
USB Device CDC ACM Class
USB Device CDC Base Class Overview USB Device CDC ACM Class Resource Needs mula sa Core USB Device CDC ACM Subclass Overview USB Device CDC ACM Class Configuration USB Device CDC ACM Class Programming Guide
Inilalarawan ng seksyong ito ang klase ng Communications Device Class (CDC) at ang nauugnay na CDC subclass na sinusuportahan ng USB Device stack ng Silicon Labs. Kasalukuyang sinusuportahan ng Silicon Labs USB-Device ang subclass ng Abstract Control Model (ACM), na karaniwang ginagamit para sa serial emulation.
Kasama sa CDC ang iba't ibang kagamitan sa telekomunikasyon at networking. Ang mga telecommunication device ay sumasaklaw sa mga analog modem, analog at digital na telepono, ISDN terminal adapters, atbp. Para sa exampAng mga networking device ay naglalaman ng ADSL at cable modem, Ethernet adapter, at hub. Tinutukoy ng CDC ang isang balangkas upang i-encapsulate ang mga umiiral nang pamantayan ng mga serbisyo ng komunikasyon, tulad ng V.250 (para sa mga modem sa network ng telepono) at Ethernet (para sa mga lokal na device sa network ng lugar), gamit ang isang USB link. Ang isang aparatong pangkomunikasyon ay namamahala sa pamamahala ng device, pamamahala ng tawag kung kinakailangan, at paghahatid ng data.
Tinutukoy ng CDC ang pitong pangunahing grupo ng mga device. Ang bawat pangkat ay kabilang sa isang modelo ng komunikasyon, na maaaring may kasamang ilang mga subclass. Ang bawat pangkat ng mga device ay may sariling dokumento ng detalye bukod sa CDC base class. Ang pitong pangkat ay:
Public Switched Telephone Network (PSTN), mga device kabilang ang voiceband modem, telepono, at serial emulation device. Mga Integrated Services Digital Network (ISDN) na device, kabilang ang mga terminal adapter at telepono. Ethernet Control Model (ECM) device, kabilang ang mga device na sumusuporta sa IEEE 802 family (hal.: cable at ADSL modem, WiFi adapters). Asynchronous Transfer Mode (ATM) device, kabilang ang ADSL modem at iba pang device na konektado sa mga ATM network (workstation, router, LAN switch). Wireless Mobile Communications (WMC) na mga device, kabilang ang mga multi-function na komunikasyong handset device na ginagamit upang pamahalaan ang boses at data na komunikasyon. Ethernet Emulation Model (EEM) na mga device na nagpapalitan ng Ethernet-framed na data. Mga device na Network Control Model (NCM), kabilang ang mga high-speed network device (High Speed Packet Access modem, Line Terminal Equipment)
Ang CDC at ang nauugnay na pagpapatupad ng subclass ay sumusunod sa mga sumusunod na detalye:
Universal Serial Bus, Class Definition for Communications Devices, Revision 1.2, November 3 2010. Universal Serial Bus, Communications, Subclass para sa PSTN Devices, Revision 1.2, February 9 2007.
USB Device CDC Base Class Overview
Ang isang CDC device ay binubuo ng mga sumusunod na interface upang ipatupad ang kakayahan sa komunikasyon:
Responsable ang Communications Class Interface (CCI) para sa pamamahala ng device at opsyonal sa pamamahala ng tawag. Ang
pinapagana ng pamamahala ng device ang pangkalahatang pagsasaayos at kontrol ng device at ang pag-abiso ng mga kaganapan sa host. Ang pamamahala ng tawag ay nagbibigay-daan sa pagtatatag at pagwawakas ng mga tawag. Maaaring i-multiplex ang pamamahala ng tawag sa pamamagitan ng isang DCI. Ang CCI ay sapilitan para sa lahat ng CDC device. Tinutukoy nito ang function ng CDC sa pamamagitan ng pagtukoy sa modelo ng komunikasyon na sinusuportahan ng CDC device. Ang (mga) interface na sumusunod sa CCI ay maaaring anumang tinukoy na interface ng klase ng USB, gaya ng Audio o isang interface na partikular sa vendor. Ang interface na partikular sa vendor ay partikular na kinakatawan ng isang DCI.
Ang Data Class Interface (DCI) ay responsable para sa paghahatid ng data. Ang data na ipinadala at/o natanggap ay hindi sumusunod sa isang tiyak
pormat. Ang data ay maaaring raw data mula sa isang linya ng komunikasyon, data na sumusunod sa isang pagmamay-ari na format, atbp. Ang lahat ng mga DCI na sumusunod sa CCI ay makikita bilang mga subordinate na interface.
Ang isang CDC device ay dapat magkaroon ng hindi bababa sa isang CCI at zero o higit pang mga DCI. Isang CCI at sinumang subordinate na DCI ang magkasamang nagbibigay ng feature sa host. Ang kakayahang ito ay tinutukoy din bilang isang function. Sa isang CDC composite device, maaari kang magkaroon ng ilan
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
19/174
Tapos naview
mga function. Samakatuwid, ang device ay bubuuin ng ilang set ng CCI at (mga) DCI gaya ng ipinapakita sa Figure – CDC Composite Device.
Larawan – CDC Composite Device
Ang isang CDC device ay malamang na gumamit ng sumusunod na kumbinasyon ng mga endpoint:
Isang pares ng kontrol na IN at OUT na endpoint na tinatawag na default na endpoint. Isang opsyonal na bulk o interrupt IN endpoint. Isang pares ng maramihan o isochronous na IN at OUT na endpoint. Tandaan na ang Silicon Labs USB device stack ay kasalukuyang hindi sumusuporta sa mga isochronous na endpoint.
Ipinapakita ng talahanayan sa ibaba ang paggamit ng iba't ibang mga endpoint at kung aling interface ng CDC ang mga ito ay ginagamit.
Talahanayan – Paggamit ng Endpoint ng CDC
Endpoint
Kontrolin ang IN
Kontrolin OUT
Interrupt or bulk IN Bulk or isochronous IN Bulk or isochronous
LABAS
Direksyon
Deviceto-host
Host-todevice
Deviceto-host
Deviceto-host
Host-todevice
Paggamit ng Interface
CCI
Standard requests for enumeration, class-specific requests, device
pamamahala, at opsyonal na tumawag sa pamamahala.
CCI
Standard requests for enumeration, class-specific requests, device
pamamahala, at opsyonal na tumawag sa pamamahala.
CCI
Notification ng mga kaganapan, gaya ng ring detect, serial line status, network status.
DCI
Raw or formatted data communication.
DCI
Raw or formatted data communication.
Most communication devices use an interrupt endpoint to notify the host of events. Isochronous endpoints should not be used for data transmission when a proprietary protocol relies on data retransmission in case of USB protocol errors. Isochronous communication can inherently lose data since it has no retry mechanisms.
The seven major models of communication encompass several subclasses. A subclass describes the way the device should use the CCI to handle the device management and call management. The table below shows all the possible subclasses and the communication model they belong to.
Talahanayan – Mga Subclass ng CDC
Subclass
Direct Line Control Model Abstract Control Model
Communication Model
PSTN
PSTN
Example ng Mga Device na Gumagamit ng Subclass na Ito
Mga modem device na direktang kinokontrol ng USB host
Mga serial emulation device, mga modem device na kinokontrol sa pamamagitan ng serial command set
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
20/174
Tapos naview
Subclass
Communication Model
Example ng Mga Device na Gumagamit ng Subclass na Ito
Modelo ng Kontrol ng Telepono
PSTN
Multi-Channel Control ISDN Model
CAPI Control Model ISDN
Modelo ng Kontrol ng ECM ng Ethernet Networking
ATM Networking
ATM
Modelo ng Kontrol
Wireless Handset Control Model
WMC
Pamamahala ng Device WMC
Mobile Direct Line Model
WMC
OBEX
WMC
Ethernet Emulation EEM Model
Modelo ng Kontrol ng Network
NCM
Mga aparatong voice telephony
Mga pangunahing adaptor ng terminal ng rate, mga adaptor ng terminal ng pangunahing rate, mga telepono
Basic rate terminal adapters, primary rate terminal adapters, mga teleponong DOC-SIS cable modem, ADSL modem na sumusuporta sa PPPoE emulation, Wi-Fi adapters (IEEE 802.11-family), IEEE 802.3 adapters ADSL modem
Mobile terminal equipment na kumukonekta sa mga wireless na device
Mobile terminal equipment na kumukonekta sa mga wireless na device Mobile terminal equipment na kumukonekta sa mga wireless na device
Mobile terminal equipment na kumukonekta sa mga wireless na device Mga device na gumagamit ng Ethernet frame bilang susunod na layer ng transportasyon. Hindi inilaan para sa pagruruta at mga Internet connectivity device IEEE 802.3 adapters na nagdadala ng high-speed data bandwidth sa network
USB Device CDC ACM Class Resource Needs mula sa Core
Sa bawat oras na magdagdag ka ng CDC ACM class instance sa isang USB configuration sa pamamagitan ng isang tawag sa function na sl_usbd_cdc_acm_add_to_configuration() , ang mga sumusunod na mapagkukunan ay ilalaan mula sa core.
mapagkukunan
Mga Interface Mga kahaliling interface Mga Endpoint Mga pangkat ng interface
Dami
2 2 3 1
Tandaan na ang mga numerong iyon ay bawat configuration. Kapag nagse-set up ng iyong SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY at SL_USBD_DESCRIPTOR_QUANTITY na mga halaga ng configuration, huwag kalimutang isaalang-alang kung gaano karaming mga configuration ang idaragdag sa klase. Para sa SL_USBD_OPEN_ENDPOINTS_QUANTITY na halaga ng configuration, dahil ang mga endpoint ay binuksan lamang kapag ang isang configuration ay itinakda ng host, kailangan mo lamang na isaalang-alang ang bilang ng mga kinakailangang endpoint para sa isang halimbawa ng klase.
USB Device CDC ACM Subclass Overview
Ang CDC base class ay binubuo ng Communications Class Interface (CCI) at Data Class Interface (DCI), na tinatalakay nang detalyado sa USB Device CDC Base Class Overview . Tinatalakay ng seksyong ito ang isang CCI ng uri ng ACM. Binubuo ito ng isang default na endpoint para sa elemento ng pamamahala at isang interrupt na endpoint para sa elemento ng notification. Ang isang pares ng maramihang mga endpoint ay ginagamit upang magdala ng hindi tinukoy na data sa ibabaw ng DCI.
Ang ACM subclass ay ginagamit ng dalawang uri ng mga aparatong pangkomunikasyon:
Mga device na sumusuporta sa mga AT command (halimbawa, voiceband modem). Mga serial emulation device na tinatawag ding Virtual COM port device.
Mayroong ilang mga kahilingang partikular sa subclass para sa subclass ng ACM. Pinapayagan ka nitong kontrolin at i-configure ang device. Ang kumpletong listahan at paglalarawan ng lahat ng mga kahilingan sa ACM ay makikita sa detalye
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
21/174
Tapos naview Subclass para sa PSTN Devices, rebisyon 1.2, Pebrero 9, 2007=, seksyon 6.2.2.
Mula sa listahang ito, sinusuportahan ng Silicon Labs9 ACM subclass ang sumusunod:
Talahanayan – Mga Kahilingan sa ACM na Sinusuportahan ng Silicon Labs
Paglalarawan ng Kahilingan sa Subclass
SetCommFeature GetCommFeature ClearCommFeature
Ipinapadala ng host ang kahilingang ito upang kontrolin ang mga setting para sa isang partikular na feature ng komunikasyon. Hindi ginagamit para sa serial emulation.
Ipinapadala ng host ang kahilingang ito para makuha ang kasalukuyang mga setting para sa isang partikular na feature ng komunikasyon. Hindi ginagamit para sa serial emulation.
Ipinapadala ng host ang kahilingang ito upang i-clear ang mga setting para sa isang partikular na feature ng komunikasyon. Hindi ginagamit para sa serial emulation.
SetLineCoding
Ipinapadala ng host ang kahilingang ito upang i-configure ang mga setting ng ACM device: baud rate, bilang ng mga stop bit, uri ng parity at bilang ng mga bit ng data. Para sa isang serial emulation, ang kahilingang ito ay awtomatikong ipinapadala ng isang serial terminal sa tuwing iko-configure mo ang mga serial setting para sa isang bukas na virtual COM port.
GetLineCoding
Ipinapadala ng host ang kahilingang ito para makuha ang kasalukuyang mga setting ng ACM (baud rate, stop bits, parity, data bits). Para sa isang serial emulation, awtomatikong ipinapadala ng mga serial terminal ang kahilingang ito sa panahon ng pagbubukas ng virtual COM port.
SetControlLineState The host sends this request to control the carrier for half-duplex modems and indicate that Data Terminal Equipment (DTE) is ready or not. In the serial emulation case, the DTE is a serial terminal. For a serial emulation, certain serial terminals allow you to send this request with the controls set.
SetBreak
Ipinapadala ng host ang kahilingang ito para makabuo ng RS-232 style break. Para sa isang serial emulation, pinapayagan ka ng ilang serial terminal na ipadala ang kahilingang ito.
Ginagamit ng Silicon Labs9 ACM subclass ang interrupt IN endpoint upang ipaalam sa host ang tungkol sa kasalukuyang serial line state. Ang serial
line state ay isang bitmap na nagpapaalam sa host tungkol sa:
Na-discard ang data dahil sa overrun Parity error Error sa framing State of the ring signal detection State of break detection mechanism State of transmission carrier State of receiver carrier detection
Ang pagpapatupad ng subclass ng Silicon Labs9 ACM ay sumusunod sa sumusunod na detalye:
Universal Serial Bus, Communications, Subclass para sa PSTN Devices, rebisyon 1.2, Pebrero 9, 2007.
USB Device CDC ACM Class Configuration
Tinatalakay ng seksyong ito kung paano i-configure ang CDC ACM Class (Communication Device Class, Abstract Control Model). Mayroong dalawang pangkat ng mga parameter ng pagsasaayos:
USB Device Mga Tukoy na Configuration ng Application ng CDC ACM Class Application ng USB Device Mga Configuration ng Instance ng ACM Class ng CDC
Mga Tukoy na Configuration ng Aplikasyon ng Klase ng CDC ACM ng USB Device
CDC Base Class ACM Subclass
Batayang Klase ng CDC
Una, para magamit ang Silicon Labs USB device na CDC class module, kakailanganin mong isaayos ang CDC compile-time configuration #define-s ayon sa iyong mga pangangailangan sa application. Ang mga ito ay muling pinagsama-sama sa loob ng sl_usbd_core_config.h header file sa ilalim ng seksyon ng CDC. Ang kanilang layunin ay ipaalam sa module ng USB device tungkol sa kung gaano karaming mga bagay ng USB CDC ang ilalaan.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
22/174
Tapos naview
Inilalarawan ng talahanayan sa ibaba ang bawat field ng pagsasaayos na magagamit sa istraktura ng pagsasaayos na ito.
Talahanayan – Tinutukoy ng Configuration ng CDC ng USB Device
Pangalan ng Configuration
SL_USBD_CDC_CL BILANG S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY
Paglalarawan
Bilang ng mga instance ng klase na iyong ilalaan sa pamamagitan ng isang tawag sa function
sl_usbd_cdc_acm_create_instance() .
Bilang ng mga pagsasaayos. Ang mga instance ng klase ng ACM ay maaaring idagdag sa isa o higit pang aaaa configuration tions vi c ll sa sl_usbd_cdc_acm_add_to_configuration() .
Kabuuang bilang ng mga interface ng data (DCI) para sa lahat ng mga function ng CDC. Ang bawat CDC ACM function na aaaaaaaaa ay idinagdag vi c ll sa function na sl_usbd_cdc_acm_create_instance() ay dd dt interf ce.
Default na Halaga
2
1
2
ACM Subclass
Ang ACM subclass ay may isang compile-time na configuration na ipinapakita sa talahanayan sa ibaba.
Talahanayan – USB Device CDC ACM Configuration Define
Pangalan ng Configuration
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Paglalarawan
Kino-configure ang bilang ng mga instance ng subclass na iyong ilalaan sa pamamagitan ng isang tawag sa
function na sl_usbd_cdc_acm_create_instance() .
Default na Halaga
2
USB Device CDC ACM Class Instance Configurations
Tinutukoy ng seksyong ito ang mga pagsasaayos na nauugnay sa mga instance ng serial class ng CDC ACM. Class Instance Creation line state interval call mgmt capabilities p_acm_callbacks
Paglikha ng Class Instance
Upang lumikha ng CDC ACM serial class instance, tawagan ang function na T a sl_usbd_cdc_acm_create_instance() . ang kanyang function ay may tatlong argumento ng pagsasaayos, gaya ng inilarawan dito.
line_state_interval
Ito ang agwat (sa millisecond) na iuulat ng iyong CDC ACM serial class ang mga notification ng estado ng linya sa T aa host. ang kanyang v lue ay dapat na kapangyarihan ng dalawa (1, 2, 4, 8, 16, atbp).
call_mgmt_capabilities
Call Management Capabilities bitmap. Possible values of the bitmap are as follows:
Value (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Paglalarawan
Pinangangasiwaan ng device ang pamamahala ng tawag mismo. Maaaring magpadala/makatanggap ang device ng impormasyon sa pamamahala ng tawag sa interface ng Data Class.
p_acm_callbacks
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
23/174
Tapos naview
aa M aa p_acm_callbacks ay pointer sa istraktura ng uri sl_usbd_cdc_acm_callbacks_t . Ang layunin nito ay bigyan ang CDC AC Cl ss set ng mga function ng callback na tatawagin kapag may naganap na kaganapan sa CDC ACM. Hindi lahat ng callback ay sapilitan at ang isang null pointer ( NULL ) ay maaaring maipasa sa mga callback structure variable kapag ang callback ay hindi kailangan. Inilalarawan ng talahanayan sa ibaba ang bawat field ng pagsasaayos na magagamit sa istraktura ng pagsasaayos na ito.
Table – sl_usbd_cdc_acm _callbacks_t Configuration Structure
Mga patlang
Paglalarawan
.paganahin
Tinatawag kapag naka-enable ang instance ng USB class
matagumpay.
.disable
Tinatawag kapag naka-disable ang instance ng USB class.
.line_control_changed Tinatawag kapag natanggap ang isang line control change.
line_coding_changed Tinatawag kapag may natanggap na pagbabago sa line coding.
Function Signature
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Tingnan ang seksyong Pagrerehistro ng Mga Callback ng Notification ng Kaganapan para sa mga function ng callback halample.
USB Device CDC ACM Class Programming Guide
This section explains how to use the CDC Abstract Control Model class. Initializing the USB Device CDC ACM Class Adding a USB Device CDC ACM Class Instance to Your Device Communicating Using the CDC ACM Class
Sinisimulan ang USB Device CDC ACM Class
Upang magdagdag ng functionality ng klase ng CDC ACM sa iyong device, dapat mo munang simulan ang CDC base class at ang ACM subclass sa pamamagitan ng pag-aac sa mga function na sl_usbd_cdc_init() at sl_usbd_cdc_acm_init() . T aaaaa ang kanyang halimbawa sa ibaba ay nagpapakita kung paano c ll sl_usbd_cdc_init() at sl_usbd_cdc_acm_init() gamit ang mga default na rgument.
Example – Pagsisimula ng CDC ACM Class
sl_status_t status;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Adding a USB Device CDC ACM Class Instance to Your Device
Upang magdagdag ng CDC ACM class functionality sa iyong device, dapat kang lumikha ng isang instance, pagkatapos ay idagdag ito sa (mga) configuration ng iyong device.
Paggawa ng CDC ACM Class Instance
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
24/174
Tapos naview
Pagdaragdag ng CDC ACM Class Instance sa Configuration (Mga) Pagrerehistro ng Mga Callback sa Notification ng Event ng Iyong Device
Paggawa ng CDC ACM Class Instance
a a M a a a Cre te CDC AC cl ss inst nce by c lling the function sl_usbd_cdc_acm_create_instance() . T a a a M a a a he ex mple below shows how to cre te CDC AC cl ss inst nce vi sl_usbd_cdc_acm_create_instance() .
Example – Creating a CDC ACM Function via sl_usbd_cdc_acm_create_instance()
uint8_t subclass_nbr; sl_status_t status;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Pagdaragdag ng CDC ACM Class Instance sa (mga) Configuration ng Iyong Device
Pagkatapos mong gumawa ng CDC ACM class instance, maaari mo itong idagdag sa isang configuration sa pamamagitan ng pagtawag sa function
sl_usbd_cdc_acm_add_to_configuration() .
T aa ang halimbawa sa ibaba ay nagpapakita kung paano c ll sl_usbd_cdc_acm_add_to_configuration() .
Example – Tumawag sa USBD ACM sl_usbd_cdc_acm_add_to_configuration()
sl_status_t status;
status = sl_usbd_cdc_acm_add_to_configuration(subclass_nbr,
(1)
config_nbr_fs);
(2)
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
aaa (1) Cl ss number to dd sa configuration na ibinalik ng sl_usbd_cdc_acm_create_instance() . (2) Configuration number (dito idinaragdag sa isang Full-Speed configuration).
Pagrerehistro ng Mga Callback ng Notification ng Event
Maaaring ipaalam ng CDC ACM Serial class ang iyong aplikasyon ng anumang mga pagbabago sa line control o coding sa pamamagitan ng notification callback function. Maaaring ipasa ang isang istraktura ng mga function ng callback bilang argument sa panahon ng paggawa ng instance ng ACM. Tandaan na ang mga callback na iyon ay opsyonal. Halample – Ang CDC ACM Callbacks Registration ay naglalarawan ng paggamit ng mga function ng pagpaparehistro ng callback. Halample – CDC ACM Callbacks Implementation shows an example of implementation of the callback functions.
Example – Pagpaparehistro ng Mga Callback ng CDC ACM
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
25/174
Tapos naview
uint8_t subclass_nbr; sl_status_t status;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cd_c_acmd_line
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Example – Pagpapatupad ng Mga Callback ng CDC ACM
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
subclass_nbr,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t baudrate_new;
uint8_t parity_new;
uint8_t stop_bits_new;
uint8_t data_bits_new;
/* TODO Ilapat ang bagong line coding.*/ 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;
return (true);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO Ilapat ang bagong line control. */ rts_state = ((kaganapan at SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? totoo : mali; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? totoo : mali; dtr_state = ((kaganapan at SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? totoo : mali; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? totoo : mali; brk_state = ((kaganapan at SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? totoo : mali; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? totoo : mali;
}
(1) It is important to return false to this function if the line coding applying failed. Otherwise, return true.
Communicating Using the CDC ACM Class
Serial Status
Line Coding Line Control
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
26/174
Tapos naview
Line State Subclass Instance Communication
Serial Status
Line Coding
The USB host controls the line coding (baud rate, parity, etc) of the CDC ACM device. When necessary, the application is responsible for setting the line coding. There are two functions provided to retrieve and set the current line coding, as described in the table below.
Talahanayan – Mga Pag-andar ng Line Coding ng CDC ACM
Function
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()
Paglalarawan
Maaaring makuha ng iyong application ang kasalukuyang mga setting ng line coding na itinakda alinman mula sa host na may mga kahilingan sa SetLineCoding o gamit ang function na sl_usbd_cdc_acm_set_line_coding() .
Maaaring itakda ng iyong application ang line coding. Maaaring kunin ng host ang mga setting gamit ang kahilingang GetLineCoding.
Pagkontrol sa Linya
Kinokontrol ng USB host ang line control (RTS at DTR pin, break signal, at iba pa) ng CDC ACM device. Kung kinakailangan, ang iyong aplikasyon ay responsable para sa paglalapat ng mga kontrol sa linya. Ang isang function ay ibinigay upang kunin at itakda ang kasalukuyang mga kontrol sa linya, tulad ng inilarawan sa talahanayan sa ibaba.
Talahanayan – Mga Pag-andar ng Kontrol sa Linya ng CDC ACM
Function
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()
Makukuha ng iyong aplikasyon ang kasalukuyang estado ng control line na itinakda ng host gamit ang kahilingan ng SetControlLineState.
Estado ng Linya
Kinukuha ng USB host ang estado ng linya sa isang regular na pagitan. Dapat i-update ng iyong aplikasyon ang estado ng linya sa tuwing magbabago ito. Kung kinakailangan, ang iyong aplikasyon ay responsable para sa pagtatakda ng estado ng linya. Dalawang function ang ibinigay upang kunin at itakda ang kasalukuyang mga kontrol ng linya, tulad ng inilarawan sa talahanayan sa ibaba.
Table – CDC ACM Line S tate Functions
Function
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Maaaring magtakda ang iyong aplikasyon ng anumang (mga) kaganapan sa estado ng linya. Habang itinatakda ang estado ng linya, ipinapadala ang isang interrupt na IN transfer sa host upang ipaalam tungkol dito ang pagbabago sa estado ng serial line.
Maaaring i-clear ng application ang dalawang kaganapan ng estado ng linya: transmission carrier at receiver carrier detection. Ang lahat ng iba pang mga kaganapan ay self-clear ng ACM serial emulation subclass.
Subclass na Instance Communication
Ang ACM subclass ng Silicon Labs ay nag-aalok ng mga sumusunod na function upang makipag-ugnayan sa host. Para sa higit pang mga detalye tungkol sa mga parameter ng function9, tingnan ang sanggunian ng CDC ACM Subclass Functions.
Pangalan ng function
sl_usb d _cd c_acm_ muling ad () sl_usb d _cd c_acm_write ()
Operasyon
Tumatanggap ng data mula sa host sa pamamagitan ng maramihang OUT endpoint. Bina-block ang function na ito. Nagpapadala ng data sa host sa pamamagitan ng isang bultuhang IN endpoint. Bina-block ang function na ito.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
27/174
Tapos naview
Table – CDC ACM Communication API Summary a a a a a sl_usbd_cdc_acm_read() nd sl_usbd_cdc_acm_write() provide synchronous communic tion, which me ns th t the tr nsfer is blocking. In other words, upon calling the function, the application blocks until the transfer is complete with or without an error. A timeout can be specified to avoid waiting forever. The exampMakikita sa ibaba ang isang read at write example na tumatanggap ng data mula sa host gamit ang bulk OUT endpoint at nagpapadala ng data sa host gamit ang bulk IN endpoint.
Listing – Serial Read and Write Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
katayuan;
katayuan = sl_usbd_cdc_acm_read(subclass_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
katayuan = sl_usbd_cdc_acm_write(subclass_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
T aaaaa M (1) he cl ss inst nce number cre ted with sl_usbd_cdc_acm_create_instance() ay nagbibigay ng intern l reference sa AC subclass upang iruta ang paglipat sa tamang bulk OUT o IN endpoint. (2) Dapat tiyakin ng iyong aplikasyon na ang buffer na ibinigay sa function ay sapat na malaki upang ma-accommodate ang lahat ng data. Kung hindi, maaaring mangyari ang mga isyu sa pag-synchronize. (3) Upang maiwasan ang isang walang katapusang sitwasyon sa pagharang, tumukoy ng timeout na ipinahayag sa millisecond. Ang halaga ng 809 ay ginagawang maghintay magpakailanman ang gawain ng aplikasyon. (4) Ang application ay nagbibigay ng inisyal na transmit buffer.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
28/174
Tapos naview
Tapos naview
USB Device HID Class
Tapos na ang klase ng USB Device HIDview USB Device HID Class Resource Needs from Core USB Device HID Class Configuration USB Device HID Class Programming Guide HID Periodic Input Reports Task
Inilalarawan ng seksyong ito ang klase ng Human Interface Device (HID) na sinusuportahan ng Silicon Labs USB Device.
Ang klase ng HID ay sumasaklaw sa mga device na ginagamit ng mga tao upang kontrolin ang mga pagpapatakbo ng computer, gaya ng mga keyboard, mouse, pointing device, at game device.
Ang HID class ay maaari ding gamitin sa isang composite device na naglalaman ng mga kontrol gaya ng mga knobs, switch, buttons, at slider. Para kay exampAng mga kontrol ng le, mute at volume sa isang audio headset ay kinokontrol ng HID function ng headset. Ang klase ng HID ay maaaring makipagpalitan ng data para sa anumang layunin gamit lamang ang kontrol at pag-abala sa mga paglilipat.
The HID class is one of the oldest and most widely-used USB classes. All the major host operating systems provide a native driver to manage HID devices, which is why a variety of vendor-specific devices work with the HID class. This class also includes various types of output items such as LEDs, audio, tactile feedback, etc.
The HID implementation complies with the following specifications:
Definition Class ng Device para sa Mga Human Interface Device (HID), 6/27/01, Bersyon 1.11. Mga Talaan ng Paggamit ng Universal Serial Bus HID, 10/28/2004, Bersyon 1.12.
Tapos na ang klase ng USB Device HIDview
Tapos naview
Ang isang HID device ay binubuo ng mga sumusunod na endpoint:
Isang pares ng kontrol na IN at OUT endpoint na tinatawag na default na endpoint Isang interrupt IN endpoint Isang opsyonal na interrupt OUT endpoint
Inilalarawan ng talahanayan sa ibaba ang paggamit ng iba't ibang mga endpoint:
Talahanayan – HID Class Endpoints Usage
Paggamit ng Direksyon ng Endpoint
Kontrolin ang IN
Kontrol
LABAS
Makagambala sa IN
Makagambala
LABAS
Deviceto-host
Host-todevice
Deviceto-host
Host-todevice
Mga karaniwang kahilingan para sa enumeration, mga kahilingang partikular sa klase, at komunikasyon ng data (Input, Mga ulat sa Tampok na ipinadala sa host na may kahilingang GET_REPORT). Mga karaniwang kahilingan para sa enumeration, mga kahilingang partikular sa klase at komunikasyon ng data (Output, Mga ulat sa Tampok na natanggap mula sa host na may kahilingang SET_REPORT). Komunikasyon ng data (Mga ulat sa Input at Tampok).
Komunikasyon ng data (Mga ulat sa Output at Tampok).
Ulat
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
29/174
Tapos naview
Ang isang host at isang HID device ay nagpapalitan ng data gamit ang mga ulat. Ang isang ulat ay naglalaman ng naka-format na data na nagbibigay ng impormasyon tungkol sa mga kontrol at iba pang pisikal na entity ng HID device. Ang isang kontrol ay maaaring manipulahin ng user at nagpapatakbo ng isang aspeto ng device. Para kay exampSa gayon, ang isang kontrol ay maaaring maging isang pindutan sa isang mouse o isang keyboard, isang switch, atbp. Ang iba pang mga entity ay nagpapaalam sa user tungkol sa estado ng ilang partikular na feature ng device. Para kay exampAng mga LED sa isang keyboard ay nag-aabiso sa user tungkol sa caps lock na naka-on, ang numeric na keypad na aktibo, atbp.
The format and the use of a report data is understood by the host by analyzing the content of a Report descriptor. Analyzing the content is done by a parser. The Report descriptor describes data provided by each control in a device. It is composed of items which are pieces of information about the device and consist of a 1-byte prefix and variable-length
data. For more details about the item format, refer to <Device Class Definition for Human Interface Devices (HID) Version
1.11=, section 5.6 and 6.2.2.
Mayroong tatlong pangunahing uri ng mga bagay:
Tinutukoy o pinapangkat ng pangunahing item ang ilang uri ng mga field ng data.
Inilalarawan ng pandaigdigang item ang mga katangian ng data ng isang kontrol.
Ang lokal na item ay naglalarawan ng mga katangian ng data ng isang kontrol.
Ang bawat uri ng item ay tinutukoy ng iba't ibang mga function. Ang isang function ng item ay maaari ding tawaging a tag. Ang isang function ng item ay makikita bilang isang sub-item na kabilang sa isa sa tatlong pangunahing uri ng item. Ang talahanayan sa ibaba ay nagbibigay ng maikling overview ng mga function ng item9 sa bawat uri ng item. Para sa kumpletong paglalarawan ng mga item sa bawat kategorya, tingnan
Table – Item’s Function Description for Each Item Type
Uri ng Item Function
Paglalarawan
Pangunahing Input
Naglalarawan ng impormasyon tungkol sa data na ibinigay ng isa o higit pang mga pisikal na kontrol.
Pangunahing Output Inilalarawan ang data na ipinadala sa device.
Pangunahing Tampok
Inilalarawan ang impormasyon ng configuration ng device na ipinadala o natanggap mula sa device na nakakaimpluwensya sa pangkalahatang gawi ng device o isa sa mga bahagi nito.
Main Collection Group related items (Input, Output or Feature).
Pangunahing Wakas ng Nagsasara ng koleksyon. Koleksyon
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
30/174
Tapos naview
Uri ng Item Function
Paglalarawan
Pahina ng Pandaigdigang Paggamit
Tinutukoy ang isang function na magagamit sa loob ng device.
Global Logical Tinutukoy ang mas mababang limitasyon ng mga naiulat na halaga sa mga lohikal na yunit. pinakamababa
Global Logical Defines the upper limit of the reported values in logical units. Maximum
Global Physical Defines the lower limit of the reported values in physical units, that is the Logical Minimum Minimum expressed in physical units.
Global Physical Tinutukoy ang pinakamataas na limitasyon ng mga naiulat na halaga sa mga pisikal na unit, iyon ay ang Logical Maximum na Maximum na ipinahayag sa mga pisikal na unit.
Pandaigdigang Yunit
Isinasaad ang unit exponent sa base 10. Ang exponent ay mula -8 hanggang +7.
Exponent
Pandaigdigang Yunit
Isinasaad ang unit ng mga naiulat na halaga. Halimbawa, haba, masa, mga yunit ng temperatura, atbp.
Laki ng Global Report
Ipinapahiwatig ang laki ng mga field ng ulat sa mga bit.
Global Report ID Isinasaad ang prefix na idinagdag sa isang partikular na ulat.
Bilang ng Global Report
Indicates the number of data fields for an item.
Global Push
Naglalagay ng kopya ng pangkalahatang talahanayan ng estado ng item sa CPU stack.
Global Pop
Pinapalitan ang talahanayan ng estado ng item ng huling istraktura mula sa stack.
Lokal na Paggamit
Kinakatawan ang isang index upang magtalaga ng isang partikular na Paggamit sa loob ng isang Pahina ng Paggamit. Isinasaad nito ang iminungkahing paggamit ng vendor9 para sa isang partikular na kontrol o pangkat ng mga kontrol. Ang isang paggamit ay nagbibigay ng impormasyon sa isang developer ng application tungkol sa kung ano talaga ang sinusukat ng isang kontrol.
Lokal na Paggamit
Tinutukoy ang panimulang paggamit na nauugnay sa isang array o bitmap.
pinakamababa
Lokal na Paggamit
Defines the ending usage associated with an array or bitmap.
Pinakamataas
Lokal na Tagadisenyo Tinutukoy ang bahagi ng katawan na ginagamit para sa isang kontrol. Itinuturo ng index ang isang tagatalaga sa Pisikal
Index
deskriptor.
Local Designator Tinutukoy ang index ng panimulang designator na nauugnay sa isang array o bitmap. pinakamababa
Local Designator Tinutukoy ang index ng nagtatapos na designator na nauugnay sa isang array o bitmap. Pinakamataas
Lokal na String Index
String index para sa isang String descriptor. Pinapayagan nito ang isang string na maiugnay sa isang partikular na item o kontrol.
Local String
Tinutukoy ang unang string index kapag nagtatalaga ng pangkat ng mga sunud-sunod na string sa mga kontrol sa isang array
Minimum o bitmap.
Lokal na Lokal
Pinakamataas na String
Delimiter
Specifies the last string index when assigning a group of sequential strings to controls in an array or bitmap.
Defines the beginning or end of a set of local items.
Dapat tukuyin ng data ng control9 ang hindi bababa sa mga sumusunod na item:
Input, Output o Feature Pangunahing item Paggamit Lokal na item Pahina ng Paggamit Global item Logical Minimum Global item Logical Maximum Global item Laki ng Ulat Global item
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
31/174
Tapos naview
Bilang ng Ulat Pangkalahatang item Ang talahanayan sa ibaba ay nagpapakita ng representasyon ng isang nilalaman ng Mouse Report descriptor mula sa pananaw ng host HID parser. Ang mouse ay may tatlong mga pindutan (kaliwa, kanan, at gulong). Ang code na ipinakita sa exampAng nasa ibaba ay isang pagpapatupad ng code na naaayon sa representasyon ng deskriptor ng ulat ng mouse na ito.
Figure – Report Descriptor Content mula sa isang Host HID Parser View
(1) Tinutukoy ng function ng item sa Usage Page ang pangkalahatang function ng device. Sa ex na itoample, ang HID device ay kabilang sa a
pangkaraniwang kontrol sa desktop.
(2) Pinapangkat ng Aplikasyon ng Koleksyon ang mga Pangunahing bagay na may iisang layunin at maaaring pamilyar sa mga aplikasyon. Sa diagram, ang grupo ay binubuo ng tatlong Input Main item. Para sa koleksyong ito, ang iminungkahing paggamit para sa mga kontrol ay isang mouse tulad ng ipinahiwatig ng item sa Paggamit. (3) Maaaring gamitin ang mga nested na koleksyon upang magbigay ng higit pang mga detalye tungkol sa paggamit ng isang kontrol o grupo ng mga kontrol sa mga application. Sa ex na itoample, ang Collection Physical, na naka-nest sa Collection Application, ay binubuo ng parehong tatlong Input item na bumubuo sa Collection Application. Ginagamit ang Collection Physical para sa isang set ng data item na kumakatawan sa mga data point na nakolekta sa isang geometric point. Sa example, ang iminungkahing paggamit ay isang pointer gaya ng ipinahiwatig ng item sa Paggamit. Dito ang paggamit ng pointer ay tumutukoy sa mga coordinate ng posisyon ng mouse at isasalin ng software ng system ang mga coordinate ng mouse sa paggalaw ng cursor ng screen. (4) Posible rin ang mga nested na pahina ng paggamit at nagbibigay ng higit pang mga detalye tungkol sa isang partikular na aspeto sa loob ng pangkalahatang paggana ng device. Sa kasong ito, dalawang Inputs item ang pinagsama-sama at tumutugma sa mga button ng mouse. Tinutukoy ng One Input item ang tatlong button ng mouse (kanan, kaliwa at gulong) sa mga tuntunin ng bilang ng mga field ng data para sa item (Item ng Bilang ng Ulat), laki ng field ng data (Item ng Laki ng Ulat) at posibleng mga halaga para sa bawat field ng data (Minimum at Maximum ng Paggamit, Logical na Minimum at Maximum na item). Ang isa pang item ng Input ay isang 13-bit na pare-pareho na nagpapahintulot sa data ng ulat ng Input na ihanay sa isang hangganan ng byte. Ang Input item na ito ay ginagamit lamang para sa layunin ng padding. (5) Ang isa pang nested na pahina ng paggamit na tumutukoy sa isang generic na kontrol sa desktop ay tinukoy para sa mga coordinate ng posisyon ng mouse. Para sa pahina ng paggamit na ito, inilalarawan ng item na Input ang mga field ng data na tumutugma sa x- at y-axis gaya ng tinukoy ng dalawang Paggamit
mga bagay.
Pagkatapos suriin ang nakaraang nilalaman ng Report descriptor ng mouse, nagagawa ng host9s HID parser na bigyang-kahulugan ang data ng ulat ng Input na ipinadala ng device na may interrupt na IN transfer o bilang tugon sa isang kahilingan sa GET_REPORT. Ang data ng Input na ulat na tumutugma sa mouse Report descriptor na ipinapakita sa Figure – Report Descriptor Content mula sa isang Host HID Parser View is
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
32/174
Tapos naview
ipinapakita sa talahanayan sa ibaba. Ang kabuuang laki ng data ng ulat ay 4 bytes. Maaaring ipadala ang iba't ibang uri ng mga ulat sa parehong endpoint. Para sa layunin ng pagkilala sa iba't ibang uri ng mga ulat, isang 1-byte na prefix ng ID ng ulat ay idinaragdag sa ulat ng data. Kung ginamit ang isang report ID sa exampsa ulat ng mouse, ang kabuuang laki ng data ng ulat ay magiging 5 bytes.
Talahanayan – Input Report na Ipinadala sa Host at Naaayon sa Katayuan ng 3 Buttons Mouse
Bit Offset
0 1 2 3 16 24
Bit Count 1 1 1 13 8 8
Button para sa Paglalarawan 1 (left button). Pindutan 2 (kanang pindutan). Pindutan 3 (button ng gulong). Hindi ginagamit. Posisyon sa axis X. Posisyon sa axis Y.
Ang isang Pisikal na descriptor ay nagpapahiwatig ng bahagi o mga bahagi ng katawan na nilalayon upang i-activate ang isang kontrol o mga kontrol. Maaaring gamitin ng isang application ang impormasyong ito upang magtalaga ng functionality sa kontrol ng isang device. Ang Physical descriptor ay isang opsyonal na class-specific na descriptor at karamihan sa mga device ay may maliit na pakinabang sa paggamit nito. Sumangguni sa
USB Device HID Class Resource Needs mula sa Core
Sa bawat oras na magdagdag ka ng isang HID class instance sa isang USB configuration sa pamamagitan ng isang tawag sa function na sl_usbd_hid_add_to_configuration() , ang mga sumusunod na mapagkukunan ay ilalaan mula sa core.
mapagkukunan
Mga Interface Mga kahaliling interface Mga Endpoint Mga pangkat ng interface
Dami
1 1 1 (2 kung naka-enable ang interrupt OUT endpoint) 0
Tandaan na ang mga numerong iyon ay bawat configuration. Kapag nagse-set up ng iyong SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY at SL_USBD_DESCRIPTOR_QUANTITY na mga halaga ng configuration, huwag kalimutang isaalang-alang kung gaano karaming mga configuration ang idaragdag sa klase. Para sa SL_USBD_OPEN_ENDPOINTS_QUANTITY na halaga ng configuration, dahil ang mga endpoint ay binuksan lamang kapag ang isang configuration ay itinakda ng host, kailangan mo lamang na isaalang-alang ang bilang ng mga kinakailangang endpoint para sa isang halimbawa ng klase.
USB Device HID Class Configuration
Dalawang pangkat ng mga parameter ng pagsasaayos ang ginagamit upang i-configure ang klase ng HID:
USB Device HID Class Application-Specific Configurations Mga Configuration ng Instance ng Class HID ng USB Device
Mga Configuration na Partikular sa Application ng USB Device HID Class Application
Una, para gamitin ang Silicon Labs USB device HID class module, ayusin ang HID compile-time configuration na tumutukoy ayon sa iyong mga pangangailangan sa application. Ang mga ito ay muling pinagsama-sama sa loob ng sl_usbd_core_config.h header file sa ilalim ng seksyong HID. Maaari silang hatiin sa dalawang seksyon, ang mga pagsasaayos ng dami at ang mga pagsasaayos ng gawain ng HID. Ang layunin ng mga configuration ng dami ay upang ipaalam sa module ng USB device ang tungkol sa kung ilang USB HID object ang ilalaan.
Inilalarawan ng talahanayan sa ibaba ang bawat pagtukoy ng configuration.
Talahanayan – Tinutukoy ang Configuration ng USB Device HID
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
33/174
Tapos naview
Pangalan ng Configuration
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
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
Paglalarawan
Bilang ng mga instance ng klase na iyong ilalaan sa pamamagitan ng isang tawag sa function
sl_usbd_hid_create_instance() .
Bilang ng mga pagsasaayos. Maaaring idagdag ang mga instance ng HID class sa isa o higit pang aaaa configuration tions vi c ll sa function na sl_usbd_hid_add_to_configuration() . Kino-configure ang kabuuang bilang ng mga ID ng ulat na ilalaan.
Kino-configure ang kabuuang bilang ng mga Push/Pop na item na ilalaan.
Pinangangasiwaan ng timer task ang lahat ng timer-based HID operations. Ang pagsasaayos na ito ay nagpapahintulot sa iyo na itakda ang laki ng stack (sa bilang ng mga byte). Priyoridad ng gawain ng HID. ang kanya ay isang priority ng CMSIS-RTOS2.
Default na Halaga
2 1 2 0 2048
osPriorityHigh
USB Device HID Class Instance Configurations Class Instance Creation subclass
protocol country_code
interval_in at interval_out p_hid_callback HID Class Report Descriptor Halample Tinutukoy ng seksyong ito ang mga pagsasaayos na nauugnay sa mga instance ng HID class.
Paglikha ng Class Instance
Ang paggawa ng isang HID class instance ay ginagawa sa pamamagitan ng pagtawag sa function na aaa sl_usbd_hid_create_instance() , na t kes sever l configuration arguments na inilalarawan sa ibaba.
subclass
Code ng HID subclass. Ang mga posibleng halaga ay:
SL_USBD_HID_SUBCL ASS_WALA SL_USBD_HID_SUBCL ASS_BOOT
Ang isang HID device na gumagamit ng boot subclass ay dapat gumamit ng mga karaniwang format ng ulat. Para sa higit pang impormasyon sa mga subclass code, tingnan ang seksyon 4.2 ng HID specification revision 1.11.
protocol
Protocol na ginagamit ng HID device. Ang mga posibleng halaga ay:
SL_USBD_HID_PROTOCOL_WALA SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Kung ang iyong HID function ay isang mouse, ang protocol ay dapat itakda sa aa SL_USBD_HID_PROTOCOL_MOUSE . Kung ito ay keybo rd, dapat itong itakda sa SL_USBD_HID_PROTOCOL_KBD . kung hindi, ang protocol ay dapat itakda sa SL_USBD_HID_PROTOCOL_NONE . Para sa higit pang impormasyon sa mga subclass code, tingnan ang seksyon 4.3 ng HID specification revision 1.11.
country_code
ID of the country code. Possible values are:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
34/174
Tapos naview
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODEBLCZE SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_CODE_GREEK SL_USBD_CODE_GREEK SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREA SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AT SL_USBD_HID_COUNTRY_SECODE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_SWITZERL AT SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_CODE_US SL_USBD_HID SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Tinutukoy ng country code kung saang bansa naka-localize ang hardware. Karamihan sa hardware ay hindi naisalokal at samakatuwid ang aaaav lue na ito ay magiging SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Gayunpaman, ginagamit ng mga keybo ang field para ipahiwatig ang wika ng mga key cap.
Para sa higit pang impormasyon sa mga country code, tingnan ang seksyon 6.2.1 ng HID specification revision 1.11.
interval_in and interval_out
Ang interval_in at interval_out ay kumakatawan sa pagitan ng botohan ng IN interrupt endpoint at ang OUT interrupt endpoint.
Kinakatawan nito ang pagitan ng botohan ng endpoint, sa millisecond. Ang pagtatakda ng halagang ito ay depende sa kung gaano kadalas ang iyong device ay madaling makabuo ng bagong ulat para sa host. Halimbawa, kung ang isang ulat ay nabuo bawat 16 na millisecond, ang pagitan ay dapat na 16 o mas mababa.
Ang halaga ay dapat na isang kapangyarihan ng 2 (1, 2, 4, 8, 16, atbp.).
ang isang interval_out v lue ay hindi papansinin kung ang ctrl_rd_en ay nakatakda sa true.
p_hid_callback
aaaa p_hid_callback ay pointer sa istraktura ng uri sl_usbd_hid_callbacks_t . Ang layunin nito ay bigyan ang HID Cl ss na hanay ng mga function ng callback na tatawagin kapag may nangyaring HID na kaganapan.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
35/174
Tapos naview
Hindi lahat ng callback ay sapilitan at ang isang null pointer ( NULL ) ay maaaring maipasa sa mga callback structure variable kapag ang callback ay hindi kailangan. Inilalarawan ng talahanayan sa ibaba ang bawat field ng pagsasaayos na magagamit sa istraktura ng pagsasaayos na ito.
Table – sl_usbd_hid_callbacks_t Configuration Structure
Mga patlang
Paglalarawan
Function Signature
.enable .disable .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Tinatawag kapag matagumpay na pinagana ang instance ng USB class. Tinatawag kapag naka-disable ang instance ng USB class.
Tumawag sa panahon ng paggawa ng HID Instance upang ipasa ang iyong descriptor ng ulat. Para sa bawat isa sa iyong HID function, dapat kang magbigay ng report descriptor. Isinasaad ng descriptor ng ulat sa host kung paano dapat i-parse ang pana-panahong ulat na ipapadala ng device. Ang pagsulat ng iyong sariling deskriptor ng ulat ay maaaring maging mahirap, at iyon ang dahilan kung bakit mayroong ilang mga mapagkukunan upang makatulong. Ito ang tanging mandatoryong function ng callback. Tinawag sa panahon ng paggawa ng HID Instance upang ipasa ang iyong pisikal na descriptor. Ang pisikal na deskriptor ay isang deskriptor na nagbibigay ng impormasyon tungkol sa partikular na bahagi o bahagi ng katawan ng tao na nag-a-activate ng kontrol o mga kontrol. Para sa higit pang impormasyon sa mga pisikal na deskriptor, tingnan ang seksyon 6.2.3 ng pagbabago sa detalye ng HID 1.11. Ang pisikal na descriptor ay opsyonal at kadalasang binabalewala. Ang buffer na ipinasa dito ay maaaring itakda sa NULL at ang haba ay itakda sa 0. Tawagan kapag ang host ay nagtakda ng isang ulat tulad ng inilarawan sa iyong report descriptor (kapag ito ay nagpadala ng isang ulat).
Tinatawag kapag humiling ang host ng feature report gaya ng inilarawan sa iyong report descriptor.
Tinatawag kapag nagtakda ang host ng feature report gaya ng inilarawan sa iyong report descriptor.
void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Kinukuha ang kasalukuyang aktibong protocol.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Nagtatakda ng kasalukuyang aktibong protocol.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Deskriptor ng Ulat ng HID Class Halample
Mga klase ng HID ng Silicon LabsampAng application ay nagbibigay ng isang example of a report descriptor for a simple mouse. The example below shows a mouse report descriptor.
Example – Mouse Report Descriptor
static 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. Lahat ng karapatan ay nakalaan.
36/174
Tapos naview
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_ENDCOLLECTION,(10)
SL_USBD_HID_MAIN_ENDCOLLECTION
(11)};
(1) Ang talahanayan na kumakatawan sa isang mouse report descriptor ay sinisimulan sa paraang ang bawat linya ay tumutugma sa isang maikling item. Ang huli ay nabuo mula sa isang 1-byte na prefix at isang 1-byte na data. Sumangguni sa viewed ng host HID parser sa Figure – Report Descriptor Content mula sa Host HID Parser View.
(2) Ginagamit ang Generic Desktop Usage Page.
(3) Sa loob ng Generic Desktop Usage Page, ang paggamit tag nagmumungkahi na ang pangkat ng mga kontrol ay para sa pagkontrol ng mouse. Ang koleksyon ng mouse ay karaniwang binubuo ng dalawang axes (X at Y) at isa, dalawa, o tatlong button.
(4) Nagsimula na ang koleksyon ng mouse.
(5) Sa loob ng koleksyon ng mouse, isang paggamit tag mas partikular na nagmumungkahi na ang mga kontrol ng mouse ay kabilang sa koleksyon ng pointer. Ang koleksyon ng pointer ay isang koleksyon ng mga palakol na bumubuo ng isang halaga upang idirekta, ipahiwatig, o ituro ang mga intensyon ng user sa isang application.
(6) Nagsimula na ang pagkolekta ng pointer.
(7) Ang Pahina sa Paggamit ng Mga Pindutan ay tumutukoy sa isang Input item na binubuo ng tatlong 1-bit na field. Ang bawat 1-bit na field ay kumakatawan sa mouse9s button 1, 2 at 3 ayon sa pagkakabanggit at maaaring magbalik ng value na 0 o 1.
(8) Ang Input Item para sa Pahina ng Paggamit ng Mga Pindutan ay may padded ng 13 iba pang mga bit.
(9) Isa pang Generic na Pahina ng Paggamit ng Desktop ay ipinahiwatig para sa paglalarawan ng posisyon ng mouse na may mga axes na X at Y. Ang Input item ay binubuo ng dalawang 8-bit na field na ang halaga ay maaaring nasa pagitan ng -127 at 127.
(10) Ang koleksyon ng pointer ay sarado.
(11) Ang koleksyon ng mouse ay sarado.
USB.org HID Page
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
37/174
Tapos naview
Ang USB Implementers Forum (USB-IF) ay nagbibigay ng tool na tinatawag na "HID Descriptor Tool" kasama ng iba pang impormasyon sa format ng report descriptor. Tingnan anghttp://www.usb.org/developers/hidpage/ para sa higit pang impormasyon.
USB Device HID Class Programming Guide
Ipinapaliwanag ng seksyong ito kung paano gamitin ang klase ng HID. Pagsisimula sa USB Device HID Class Pagdaragdag ng USB Device HID Class Instance sa iyong Device Na nakikipag-ugnayan gamit ang USB Device HID Class
Sinisimulan ang USB Device HID Class
Upang magdagdag ng functionality ng HID Class sa iyong device, dapat mo munang simulan ang klase sa pamamagitan ng pagtawag sa function na sl_usbd_hid_init() . Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_hid_init() gamit ang mga default na argumento. Para sa higit pang impormasyon sa mga argumento ng pagsasaayos na ipapasa sa sl_usbd_hid_init() , tingnan ang Mga Pag-configure ng Partikular sa Application ng Klase ng USB Device HID.
Example – Tumatawag sa sl_usbd_hid_init()
sl_status_t status;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* An error occurred. Error handling should be added here. */
}
Pagdaragdag ng USB Device HID Class Instance sa Iyong Device
Upang magdagdag ng HID class functionality sa iyong device, dapat kang lumikha ng isang instance, pagkatapos ay idagdag ito sa (mga) configuration ng iyong device.
Paggawa ng HID Class Instance
Gumawa ng HID class instance sa pamamagitan ng pagtawag sa function na sl_usbd_hid_create_instance() . Ang exampIpinapakita sa ibaba kung paano lumikha ng isang simpleng function ng mouse sa pamamagitan ng sl_usbd_hid_create_instance() gamit ang mga default na argumento. Para sa higit pang impormasyon sa mga argumento ng configuration na ipapasa sa sl_usbd_hid_create_instance() , tingnan ang USB Device HID Class Instance Configurations .
Example – Pagdaragdag ng Mouse Function sa pamamagitan ng sl_usbd_hid_create_instance()
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
38/174
Tapos naview
/* Global constants. */ 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_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_PHYSICAL, SL_USBD_PHYSICAL, SL_USBD_HID_HID 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 0 000 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_CON 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_US_USAGE, SL_USBD_HID_LOCAL_USAGE + 1 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 +01, 0COUNT 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 };
/* Mga lokal na variable.*/ 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)
{ (walang bisa)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_Mouse_Mouse ,2uHID) totoo, &app_usbd_hid_callbacks, &class_nbr);
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
39/174
Tapos naview
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */}
Pagdaragdag ng Instance ng HID Class sa (Mga) Configuration ng Iyong Device Pagkatapos mong gumawa ng instance ng HID class, maaari mo itong idagdag sa isang configuration sa pamamagitan ng pagtawag sa function.
sl_usbd_hid_add_to_configuration() .
Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_hid_add_to_configuration() .
Example – Tumatawag sa sl_usbd_hid_add_to_configuration()
sl_status_t status;
sl_usbd_hid_add_to_configuration(class_nbr,
(1)
config_nbr_fs); (2)
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
(1) Class number na idaragdag sa configuration na ibinalik ng sl_usbd_hid_create_instance(). (2) Configuration number (dito idinaragdag sa isang Full-Speed configuration).
Pakikipag-usap Gamit ang USB Device HID Class
Class Instance Communication Synchronous Communication Class Instance Communication Ang HID class ay nag-aalok ng mga sumusunod na function upang makipag-ugnayan sa host.
Talahanayan – Buod ng HID Communication API
Pangalan ng function
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()
Operation Receives data from the host through interrupt OUT endpoint. This function is blocking. Sends data to the host through interrupt IN endpoint. This function is blocking.
Synchronous Communication Nangangahulugan ang synchronous na komunikasyon na ang paglilipat ay humaharang. Sa function na tawag, ang mga application ay humaharang hanggang sa makumpleto ang paglilipat na mayroon o walang error. Maaaring tukuyin ang isang timeout upang maiwasan ang paghihintay nang tuluyan. Ang exampAng ibaba ay nagpapakita ng read at write na tumatanggap ng data mula sa host gamit ang interrupt OUT endpoint at nagpapadala ng data sa host gamit ang interrupt IN endpoint.
Example – Synchronous HID Magbasa at Sumulat
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
katayuan;
katayuan = sl_usbd_hid_read_sync(class_nbr,
(1)
(walang bisa *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
40/174
Tapos naview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */}
(1) Ang numero ng instance ng klase na nilikha mula sa sl_usbd_hid_create_instance() ay nagbibigay ng panloob na sanggunian para sa HID class upang iruta ang paglipat sa tamang interrupt na OUT o IN endpoint.
(2) Dapat tiyakin ng application na ang buffer na ibinigay sa function ay sapat na malaki upang ma-accommodate ang lahat ng data. Kung hindi, maaaring mangyari ang mga isyu sa pag-synchronize. Sa panloob, ang read operation ay ginagawa sa pamamagitan ng control endpoint o sa interrupt endpoint, depende sa control read flag na itinakda kapag tumatawag sa sl_usbd_hid_create_instance() .
(3) Upang maiwasan ang isang walang katapusang sitwasyon sa pagharang, maaaring tukuyin ang isang timeout na ipinahayag sa millisecond. Ang halaga ng 809 ay ginagawang maghintay magpakailanman ang gawain ng aplikasyon.
(4) Ang application ay nagbibigay ng inisyal na transmit buffer.
HID Pana-panahong Input Reports Task
Para makatipid ng bandwidth, may kakayahan ang host na patahimikin ang mga ulat mula sa isang interrupt na IN endpoint sa pamamagitan ng paglilimita sa dalas ng pag-uulat. Upang magawa ito, dapat ipadala ng host ang kahilingang SET_IDLE. Ang klase ng HID na ipinatupad ng Silicon Labs ay naglalaman ng panloob na gawain na gumagalang sa limitasyon ng dalas ng pag-uulat na maaari mong ilapat sa isa o ilang ulat ng pag-input. Figure Periodic Input Reports Task ay nagpapakita ng paggana ng periodic input reports tasks.
Figure – Pana-panahong Input Reports Gawain
(1) Nakatanggap ang device ng SET_IDLE na kahilingan. Tinutukoy ng kahilingang ito ang isang idle na tagal para sa isang ibinigay na ID ng ulat. Para sa higit pang mga detalye tungkol sa kahilingang SET_IDLE, tingnan
(2) Ina-update ang isang istraktura ng ID ng ulat (inilalaan sa yugto ng pagsisimula ng klase ng HID) sa tagal ng idle. Ang isang idle duration counter ay sinisimulan gamit ang idle duration value. Ang istraktura ng ID ng ulat ay ipinasok sa dulo ng isang naka-link na listahan na naglalaman ng mga istruktura ng ID ng mga ulat ng input. Ang halaga ng tagal ng idle ay ipinahayag sa 4-ms unit na nagbibigay ng hanay na 4 hanggang 1020 ms.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
41/174
Tapos naview
Kung ang tagal ng idle ay mas mababa kaysa sa pagitan ng botohan ng interrupt IN endpoint, ang mga ulat ay nabuo sa pagitan ng botohan.
(3) Bawat 4 na ms, bina-browse ng periodic input report task ang listahan ng ID ng mga ulat ng input. Para sa bawat input report ID, ang gawain ay nagsasagawa ng isa sa dalawang posibleng operasyon. Ang tagal ng panahon ng gawain ay tumutugma sa 4-ms unit na ginamit para sa idle na tagal. Kung walang SET_IDLE na kahilingan ang naipadala ng host, ang listahan ng ID ng mga ulat ng input ay walang laman at ang gawain ay walang kailangang iproseso. Ang mga proseso ng gawain ay nag-uulat lamang ng mga ID na iba sa 0 at may idle na tagal na higit sa 0.
(4) For a given input report ID, the task verifies if the idle duration has elapsed. If the idle duration has not elapsed, the counter is decremented and no input report is sent to the host.
(5) Kung ang idle duration ay lumipas na (iyon ay, ang idle duration counter ay umabot na sa zero), isang input report ang ipapadala sa host sa pamamagitan ng pagtawag sa sl_usbd_hid_write_sync() function sa pamamagitan ng interrupt IN endpoint.
(6) Ang data ng ulat ng input na ipinadala ng gawain ay nagmumula sa isang panloob na buffer ng data na inilalaan para sa bawat ulat ng pag-input na inilarawan sa Deskriptor ng Ulat. Maaaring tawagan ng isang application task ang sl_usbd_hid_write_sync() function para magpadala ng input report. Pagkatapos ipadala ang data ng ulat ng input, ina-update ng sl_usbd_hid_write_sync() ang panloob na buffer na nauugnay sa isang input report ID na may data na ipinadala lamang. Pagkatapos, palaging nagpapadala ng parehong data ng ulat ng pag-input ang periodic input reports pagkatapos ng bawat idle na tagal at hanggang sa ma-update ng application task ang data sa internal buffer. Mayroong ilang mekanismo ng pag-lock upang maiwasan ang katiwalian ng data ng ID ng ulat ng input kung sakaling magkaroon ng pagbabago sa eksaktong oras ng paghahatid na ginawa ng pana-panahong gawain ng ulat ng pag-input.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
42/174
Tapos naview
Tapos naview
USB Device MSC Class
USB Device MSC Class Overview USB Device MSC Class Resource Needs mula sa Core USB Device MSC Class Configuration USB Device MSC Class Programming Guide USB Device MSC Class Storage Drivers
Inilalarawan ng seksyong ito ang mass storage device class (MSC) na sinusuportahan ng Silicon Labs USB Device. Ang MSC ay isang protocol na nagbibigay-daan sa paglipat ng impormasyon sa pagitan ng isang USB device at isang host. Ang impormasyong inililipat ay anumang bagay na maaaring maimbak sa elektronikong paraan, tulad ng mga executable program, source code, mga dokumento, larawan, configuration data, o iba pang text o numeric data. Lumilitaw ang USB device bilang isang external storage medium sa host, na nagpapagana sa paglipat ng files sa pamamagitan ng drag and drop.
A file ang sistema ay tumutukoy kung paano ang files ay nakaayos sa storage media. Ang detalye ng USB mass storage class ay hindi nangangailangan ng anumang partikular file sistema na gagamitin sa mga aparatong tumutugma. Sa halip, nagbibigay ito ng simpleng interface para magbasa at magsulat ng mga sektor ng data gamit ang Maliit na Computer System Interface (SCSI) transparent command set. Dahil dito, maaaring ituring ng mga operating system ang USB drive bilang isang hard drive, at maaari itong i-format sa alinman file sistemang gusto nila.
Sinusuportahan ng klase ng USB mass storage device ang dalawang transport protocol, tulad ng sumusunod:
Bulk-Only Transport (BOT) Control/Bulk/Interrupt (CBI) Transport (ginagamit lang para sa mga floppy disk drive)
Ang klase ng mass storage device ay nagpapatupad ng SCSI transparent command set gamit ang BOT protocol lamang, na nangangahulugan na ang mga bulk endpoint lang ang gagamitin upang magpadala ng data at impormasyon ng status. Ang pagpapatupad ng MSC ay sumusuporta sa maramihang mga lohikal na yunit.
Ang pagpapatupad ng MSC ay sumusunod sa mga sumusunod na detalye:
Pangkalahatang Serial Bus Mass Storage Class Specification Overview, Rebisyon 1.3 Set. 5, 2008. Universal Serial Bus Mass Storage Class Bulk-Only Transport, Rebisyon 1.0 Set. 31, 1999.
USB Device MSC aCl ss Overview
Protocol Endpoints Class Requests Small Computer System Interface (SCSI)
Protocol
Sa seksyong ito, tatalakayin natin ang Bulk-Only Transport (BOT) na protocol ng Mass Storage Class. Ang Bulk-Only Transport protocol ay may tatlong stages:
Ang Command Transport Ang Data Transport Ang Status Transport
Ang mga command ng mass storage ay ipinapadala ng host sa pamamagitan ng isang istraktura na tinatawag na Command Block Wrapper (CBW). Para sa mga utos na nangangailangan ng data transport stage, susubukan ng host na ipadala o tanggapin ang eksaktong bilang ng mga byte mula sa device gaya ng tinukoy ng haba at flag na mga field ng CBW. Pagkatapos ng data transport stage, sinusubukan ng host na makatanggap ng Command Status Wrapper (CSW) mula sa device na nagdedetalye ng status ng command pati na rin ang anumang data na nalalabi (kung
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
43/174
Tapos naview
anumang). Para sa mga utos na walang kasamang data transport stage, sinusubukan ng host na tanggapin ang CSW nang direkta pagkatapos ipadala ang CBW. Ang protocol ay detalyado sa Figure – MSC Protocol.
Larawan – MSC Protocol
Mga Endpoint
Sa panig ng device, bilang pagsunod sa detalye ng BOT, ang MSC ay binubuo ng mga sumusunod na endpoint: Isang pares ng kontrol na IN at OUT na endpoint na tinatawag na default na endpoint. Isang pares ng maramihang IN at OUT na endpoint.
Ang talahanayan sa ibaba ay nagpapahiwatig ng iba't ibang paggamit ng mga endpoint.
Table – MSC Endpoint Usage
Endpoint
Control IN Control OUT Bulk IN Bulk OUT
Direksyon
Device na Host Host sa Device Device na Host Host sa Device
Paggamit
Enumeration at MSC class-specific requests Enumeration at MSC class-specific requests Magpadala ng CSW at data Tumanggap ng CBW at data
Mga Kahilingan sa Klase
Mayroong dalawang tinukoy na mga kahilingan sa kontrol para sa protocol ng MSC BOT. Ang mga kahilingang ito at ang kanilang mga paglalarawan ay nakadetalye sa talahanayan sa ibaba.
Talahanayan – Mga Kahilingan sa Klase ng Mass Storage
Mga Kahilingan sa Klase
Bulk-Only Mass Storage Reset
Paglalarawan
Ginagamit ang kahilingang ito para i-reset ang mass storage device at ang nauugnay na interface nito. Inihahanda ng kahilingang ito ang device upang matanggap ang susunod na command block.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
44/174
Tapos naview
Mga Kahilingan sa Klase
Paglalarawan
Get Max Ginagamit ang kahilingang ito para ibalik ang pinakamataas na logical unit number (LUN) na sinusuportahan ng device. Para kay example, a
LUN
ang device na may LUN 0 at LUN 1 ay magbabalik ng value na 1. Ang isang device na may iisang logical unit ay magbabalik ng 0 o i-stall ang
kahilingan. Ang maximum na halaga na maaaring ibalik ay 15.
Maliit na Computer System Interface SCSI
Sa antas ng interface ng programming, ipinapatupad ng MSC device ang isa sa mga karaniwang protocol ng komunikasyon sa storage-media, tulad ng SCSI at SFF-8020i (ATAPI). Tinutukoy ng “Programming Interface” kung aling protocol ang ipinatupad, at tinutulungan ang host operating system na i-load ang naaangkop na driver ng device para sa pakikipag-ugnayan sa USB storage device. Ang SCSI ay ang pinakakaraniwang protocol na ginagamit sa mga USB MSC storage device. Nagbibigay kami ng pagpapatupad para sa MSC SCSI subclass na magagamit ng aming mga GSDK user sa labas ng kahon.
Ang SCSI ay isang hanay ng mga pamantayan para sa paghawak ng komunikasyon sa pagitan ng mga computer at peripheral na aparato. Kasama sa mga pamantayang ito ang mga command, protocol, electrical interface at optical interface. Ang mga storage device na gumagamit ng iba pang mga interface ng hardware, gaya ng USB, ay gumagamit ng SCSI command para sa pagkuha ng device/host information at pagkontrol sa pagpapatakbo ng device at paglilipat ng mga block ng data sa storage media.
Saklaw ng mga command ng SCSI ang malawak na hanay ng mga uri at function ng device at dahil dito, kailangan ng mga device ng subset ng mga command na ito. Sa pangkalahatan, ang mga sumusunod na utos ay kinakailangan para sa pangunahing komunikasyon:
INQUIRY READ CAPACITY(10) READ(10) REQUEST SENSE TEST UNIT READY WRITE(10)
USB Device MSC Class Resource Needs mula sa Core
Sa bawat oras na magdagdag ka ng MSC class instance sa isang USB configuration sa pamamagitan ng function na sl_usbd_msc_add_to_configuration() , ang mga sumusunod na mapagkukunan ay ilalaan mula sa core.
mapagkukunan
Mga Interface Mga kahaliling interface Mga Endpoint Mga pangkat ng interface
Dami
1 1 2 0
Tandaan na ang mga numerong iyon ay bawat configuration. Kapag nagse-set up ng iyong SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY at SL_USBD_DESCRIPTOR_QUANTITY na mga halaga ng configuration, huwag kalimutang isaalang-alang kung gaano karaming mga configuration ang idaragdag sa klase. Para sa SL_USBD_OPEN_ENDPOINTS_QUANTITY na halaga ng configuration, dahil ang mga endpoint ay binuksan lamang kapag ang isang configuration ay itinakda ng host, kailangan mo lamang na isaalang-alang ang bilang ng mga kinakailangang endpoint para sa isang halimbawa ng klase.
USB Device MSC Class Configuration
Dalawang pangkat ng mga parameter ng pagsasaayos ang ginagamit upang i-configure ang klase ng MSC:
USB Device MSC Class Application-Specific Configuration USB Device MSC Class Logical Unit Configuration
USB Device MSC Class Application-Specific Configurations
Class Compile-Time Configuration Paglikha ng Instance ng Class
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
45/174
Tapos naview
Class Compile-Time Configurations
Ang Silicon Labs USB Device MSC class at SCSI subclass ay maaaring i-configure sa oras ng pag-compile sa pamamagitan ng #defines na matatagpuan sa sl_usbd_core_config.h file.
Talahanayan – Mga Generic na Configuration
Pangalan ng Configuration
Paglalarawan
SL_USBD_MSC_CLASS_INST Bilang ng mga instance ng klase na iyong ilalaan sa pamamagitan ng isang tawag sa function
ANCE_QUANTITY
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA Number of configuration to which a class instance can be added via a call to the
TION_QUANTITY
function na sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Number of logical units per class instance that you will add via a call to the
ITY
function na sl_usbd_msc_scsi_lun_add() .
SL_USBD_MSC_SCSI_64_BIT Pinapagana o hindi pinapagana ang suporta para sa Logical Block Address (LBA) na 64 bits.
_LBA_EN
SL_USBD_MSC_DATA_BUFF Size of data buffer per class instance in bytes ER_SIZE
Default na Halaga
2
1
2
0
512
Paglikha ng Class Instance
Ang paggawa ng USB Device MSC SCSI class instance ay ginagawa sa pamamagitan ng pagtawag sa sl_usbd_msc_scsi_create_instance() function. Ang function na ito ay tumatagal ng isang configuration argument na inilalarawan sa ibaba.
p_scsi_callbacks
Ang p_scsi_callbacks ay isang pointer sa isang istraktura ng pagsasaayos ng uri sl_usbd_msc_scsi_callbacks_t . Bilang karagdagan sa karaniwang mga callback ng klase ng usb device na kumonekta/nagdidiskonekta, nagbibigay ito sa klase ng MSC ng isang hanay ng mga opsyonal na function ng callback na tinatawag kapag naganap ang isang kaganapan sa lohikal na yunit. Ang isang null pointer ( NULL ) ay maaaring maipasa sa argumentong ito kung walang mga callback na kailangan.
Inilalarawan ng talahanayan sa ibaba ang bawat field ng pagsasaayos na magagamit sa istraktura ng pagsasaayos na ito.
Talahanayan – sl_usbd_msc_scsi_callbacks_t Structure ng Configuration
Mga patlang
Paglalarawan
.paganahin
Tinatawag kapag matagumpay na pinagana ang instance ng USB class.
.disable Tinatawag kapag naka-disable ang USB class instance.
.host_eject Tinatawag ang function kapag ang isang lohikal na yunit ay na-eject mula sa host.
Function Signature
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
USB Device MSC Class Logical Unit Configuration
Ang pagdaragdag ng isang lohikal na yunit sa isang halimbawa ng klase ng MSC ay ginagawa sa pamamagitan ng pagtawag sa function na sl_usbd_msc_lun_add() . Ang function na ito ay tumatagal ng isang configuration argument na inilalarawan sa ibaba.
p_lu_info
Ang p_lu_info ay isang pointer sa isang istraktura ng uri sl_usbd_msc_scsi_lun_info_t . Ang layunin nito ay magbigay ng impormasyon sa lohikal na yunit sa klase ng MSC.
Inilalarawan ng talahanayan sa ibaba ang bawat field ng pagsasaayos na magagamit sa istraktura ng pagsasaayos na ito.
Talahanayan – sl_usbd_msc_scsi_lun_info_t Structure ng Configuration
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
46/174
Tapos naview
Patlang
Paglalarawan
Patlang
.scsi_lun_api_p tr
Paglalarawan
Pointer sa media driver API na hahawak sa logical unit na ito. Tingnan ang USB Device MSC Class Storage Drivers para sa higit pang impormasyon sa mga storage driver.
.ve nd o r_id _ p tr
.product_id_ptr
.p ro d uct_ re v isi on_level .is_ re ad _o nly
Pointer sa isang string na naglalaman ng vendor identification ng logical unit. Ang maximum na haba ng string ay 8 character. Pointer sa isang string na naglalaman ng pagkakakilanlan ng produkto ng logical unit. Ang maximum na haba ng string ay 16 na character. Antas ng pagbabago ng produkto.
I-flag na nagsasaad kung ang lohikal na yunit ay dapat makita bilang nabasa lamang mula sa punto ng view ng host ( true ) o hindi ( false ).
USB Device MSC Class Programming Guide
Ipinapaliwanag ng seksyong ito kung paano gamitin ang klase ng MSC.
Initializing the USB Device MSC Class Adding a USB Device MSC SCSI Class Instance to Your Device USB Device MSC Class Logical Unit Handling
Sinisimulan ang USB Device MSC Class
Upang magdagdag ng functionality ng MSC SCSI class sa iyong device, simulan muna ang MSC base class at ang SCSI subclass sa pamamagitan ng pagtawag sa function na sl_usbd_msc_init() at sl_usbd_msc_scsi_init() .
Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_msc_init() at sl_usbd_msc_scsi_init() .
Example – Tumatawag sa sl_usbd_msc_init() at sl_usbd_msc_scsi_init()
sl_status_t status;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
Adding a USB Device MSC SCSI Class Instance to Your Device
Upang magdagdag ng functionality ng klase ng MSC SCSI sa iyong device, gumawa muna ng isang instance, pagkatapos ay idagdag ito sa (mga) configuration ng iyong device. Dapat kang magdagdag ng hindi bababa sa isang lohikal na yunit sa iyong instance.
Paggawa ng MSC SCSI Class Instance
Create a MSC SCSI class instance by calling the function sl_usbd_msc_scsi_create_instance() .
Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_msc_scsi_create_instance() gamit ang mga default na argumento. Para sa higit pang impormasyon sa mga argumento ng pagsasaayos na ipapasa sa sl_usbd_msc_scsi_create_instance() , tingnan ang USB Device MSC Class Application Specific Configurations .
Example – Tumatawag sa sl_usbd_ msc_scsi_create_instance()
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
47/174
Tapos naview
uint8_t class_nbr; sl_status_t status;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Pagdaragdag ng MSC Class Instance sa (mga) Configuration ng Iyong Device
Pagkatapos mong gumawa ng MSC class instance, maaari mo itong idagdag sa isang configuration sa pamamagitan ng pagtawag sa function
sl_usbd_msc_add_to_configuration() .
Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_msc_scsi_add_to_configuration() gamit ang mga default na argumento.
Example – Tumatawag sa sl_usbd_ msc_scsi_add_to_configuration()
sl_status_t status;
katayuan = sl_usbd_msc_scsi_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
(1) Class number na idaragdag sa configuration na ibinalik ng sl_usbd_msc_scsi_create_instance() . (32) Configuration number (dito idinaragdag ito sa isang Full-Speed configuration).
USB Device MSC Class Logical Unit Handling
Pagdaragdag ng Logical Unit na Pag-attach/Pagtanggal ng Storage Medium
Pagdaragdag ng Logical Unit
Kapag nagdaragdag ng lohikal na unit sa iyong MSC SCSI class instance, dapat itong itali sa isang storage medium (RAMDisk, SD card, flash memory, atbp). Gumagamit ang klase ng MSC ng storage driver para makipag-ugnayan sa storage media. Ang driver na ito ay kailangang may supply kapag nagdaragdag ng lohikal na yunit.
Ang exampIpinapakita sa ibaba kung paano magdagdag ng isang lohikal na yunit sa pamamagitan ng sl_usbd_msc_scsi_lun_add() .
Example – Pagdaragdag ng Logical Unit sa pamamagitan ng sl_usbd_msc_scsi_lun_add()
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
48/174
Tapos naview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
katayuan;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= "Silicon Labs";
lu_info.product_id_ptr
= “i-block ang device halample”;
lu_info.product_revision_level = 0x1000u;
lu_info.is_read_only
= mali;
status = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Pag-attach/Pagtanggal ng isang Storage Medium
Pagkatapos maidagdag ang lohikal na yunit, dapat na may kalakip na storage medium upang maging available mula sa host side. Ang klase ng MSC ay nag-aalok ng dalawang function upang makontrol ang storage media association sa logical unit: sl_usbd_msc_scsi_lun_attach() at sl_usbd_msc_scsi_lun_detach() . Binibigyang-daan ka ng mga function na ito na tularan ang pag-alis ng storage device upang muling makakuha ng access mula sa naka-embed na application kung kinakailangan.
Ang exampIpinapakita sa ibaba kung paano gamitin ang function na sl_usbd_msc_scsi_lun_attach() at sl_usbd_msc_scsi_lun_detach() .
Example – Media Attach/Detach
sl_status_t status;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
…
(1)
status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); kung (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
…
(2)
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) kung (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
…
(3)
(1) From this moment, if the MSC device is connected to a host, the storage media is accessible.
(2) Kung nakakonekta ang MSC device sa isang host, lalabas na ngayon ang media bilang hindi available. Sa sandaling ito, maaaring isagawa ang mga operasyon sa media mula sa naka-embed na application.
(3) Muli, kung nakakonekta ang MSC device sa host, lalabas ang storage media bilang konektado.
USB Device MSC Class Storage Drivers
Ang USB Device MSC Class ay nangangailangan ng storage driver para makipag-usap sa isang storage medium. Sa ngayon, hindi nag-aalok ang Silicon Labs ng mga driver.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
49/174
Tapos naview
T P Y a a he driver A I is defined by typedef sl_usbd_msc_scsi_lun_api_t . our sl_usbd_msc_scsi_lun_api_t v ri ble must be included to a a a a a a a a your sl_usbd_msc_scsi_lun_info_t v ri ble, p ssed s rgument when you dd logic l unit with sl_usbd_msc_scsi_lun_add() . See section USB Device MSC SCSI API for more details on the structures. The storage driver implementation can be as simple as an array of sectors in RAM. Typical sector size (i.e., block size) is 512 for mass storage devices, and 2048 for CD-ROMs.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
50/174
Tapos naview
Tapos naview
Klase ng Nagbebenta ng USB Device
Tapos na ang Klase ng Vendor ng USB Deviceview USB Device Vendor Class Resource Needs mula sa Core USB Device Vendor Class Configuration USB Device Vendor Class Programming Guide Binibigyang-daan ka ng Vendor class na bumuo ng mga device na partikular sa vendor na maaaring magpatupad ng proprietary protocol. Umaasa ito sa isang pares ng maramihang endpoint upang maglipat ng data sa pagitan ng host at ng device. Ang mga maramihang paglilipat ay maginhawa para sa paglilipat ng malalaking halaga ng hindi nakaayos na data at nagbibigay ng maaasahang pagpapalitan ng data sa pamamagitan ng paggamit ng mekanismo ng pagtuklas ng error at muling pagsubok. Bilang karagdagan sa mga maramihang endpoint, ang klase ng Vendor ay maaari ding gumamit ng opsyonal na pares ng mga interrupt na endpoint. Anumang operating system (OS) ay maaaring gumana sa Vendor class sa kondisyon na ang OS ay may driver na pangasiwaan ang Vendor class. Depende sa OS, ang driver ay maaaring native o vendor-specific. Halimbawa, sa ilalim ng Microsoft Windows®, nakikipag-ugnayan ang iyong application sa driver ng WinUSB na ibinigay ng Microsoft upang makipag-ugnayan sa vendor na device.
Tapos na ang Klase ng Vendor ng USB Deviceview
Figure – Pangkalahatang Arkitektura sa Pagitan ng Windows Host at Vendor Class ay nagpapakita ng pangkalahatang arkitektura sa pagitan ng host at ng device gamit ang Vendor class. Sa ex na itoampSabagay, ang host operating system ay MS Windows.
Figure – Pangkalahatang Arkitektura sa Pagitan ng MS Windows Host at Vendor Class
Sa panig ng MS Windows, nakikipag-ugnayan ang application sa vendor device sa pamamagitan ng pakikipag-ugnayan sa isang USB library. Ang mga aklatan, tulad ng libusb, ay nag-aalok ng API upang pamahalaan ang isang device at ang mga nauugnay na pipe nito, at upang makipag-ugnayan sa device sa pamamagitan ng kontrol, maramihan at interrupt na mga endpoint.
Sa bahagi ng device, ang klase ng Vendor ay binubuo ng mga sumusunod na endpoint:
Isang pares ng kontrol na IN at OUT na endpoint na tinatawag na default na endpoint. Isang pares ng maramihang IN at OUT na endpoint.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
51/174
Tapos naview
Isang pares ng interrupt na IN at OUT na endpoint. Opsyonal ang pares na ito. Ang talahanayan sa ibaba ay nagpapahiwatig ng paggamit ng iba't ibang mga endpoint:
Talahanayan – Paggamit ng Mga Endpoint ng Klase ng Vendor
Direksyon ng Endpoint
Kontrolin ang IN
Kontrol
LABAS
Bulk IN
Device-tohost
>Host-todevice
Device-tohost
Bulk OUT
Makagambala sa IN
Makagambala
LABAS
Host-todevice
Device-tohost
Host-todevice
Paggamit
Mga karaniwang kahilingan para sa enumeration at mga kahilingang partikular sa vendor.
Mga karaniwang kahilingan para sa enumeration at mga kahilingang partikular sa vendor.
Raw data communication. Data can be structured according to a proprietary protocol.
Raw data communication. Data can be structured according to a proprietary protocol.
Raw data communication o notification. Maaaring isaayos ang data ayon sa isang proprietary protocol. Raw data communication o notification. Maaaring isaayos ang data ayon sa isang proprietary protocol.
Ang application ng device ay maaaring gumamit ng maramihan at interrupt na mga endpoint upang magpadala o tumanggap ng data papunta o mula sa host. Maaari lamang nitong gamitin ang default na endpoint para i-decode ang mga kahilingang partikular sa vendor na ipinadala ng host. Ang mga karaniwang kahilingan ay panloob na pinamamahalaan ng Core layer ng Silicon Labs USB Device.
USB Device Vendor Class Resource Needs mula sa Core
Each time you add a vendor class instance to a configuration via the function sl_usbd_vendor_add_to_configuration() , the following resources will be allocated from the core.
mapagkukunan
Mga Interface Mga kahaliling interface Mga Endpoint Mga pangkat ng interface
Dami
1 1 2 (4 kung pinagana mo ang mga interrupt na endpoint) 0
Tandaan na ang mga numerong iyon ay bawat configuration. Kapag nagse-set up ng iyong SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY at SL_USBD_DESCRIPTOR_QUANTITY na mga halaga ng configuration, huwag kalimutang isaalang-alang kung gaano karaming mga configuration ang idaragdag sa klase. Para sa SL_USBD_OPEN_ENDPOINTS_QUANTITY na halaga ng configuration, dahil ang mga endpoint ay binuksan lamang kapag ang isang configuration ay itinakda ng host, kailangan mo lamang na isaalang-alang ang bilang ng mga kinakailangang endpoint para sa isang halimbawa ng klase.
Configuration ng Klase ng Vendor ng USB Device
Dalawang pangkat ng mga parameter ng pagsasaayos ang ginagamit upang i-configure ang klase ng Vendor:
Mga Configurasyon na Partikular sa Application ng Klase ng USB Device Vendor Mga Configuration ng Instance ng Klase ng Nagbebenta ng Device ng USB
Mga Configuration na Partikular sa Application ng Klase ng USB Device Vendor
First, to use the Silicon Labs USB device Vendor class module, adjust the Vendor compile-time configuration defines according to your application needs. They are regrouped inside the sl_usbd_core_config.h header file under the Vendor section. The quantity configurations purpose is to inform the USB device module about how many USB Vendor objects to allocate.
Inilalarawan ng talahanayan sa ibaba ang bawat pagtukoy ng configuration.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
52/174
Tapos naview
Talahanayan – Tinutukoy ang Configuration ng Vendor ng USB Device
Pangalan ng Configuration
Paglalarawan
Default na Halaga
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Bilang ng mga instance ng klase na iyong ilalaan sa pamamagitan ng isang tawag sa 2 function na sl_usbd_vendor_create_instance() .
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Bilang ng mga configuration. Ang mga instance ng klase ng vendor ay maaaring 1 idagdag sa isa o higit pang mga configuration sa pamamagitan ng isang tawag sa function na sl_usbd_vendor_add_to_configuration() .
Mga Configuration ng Class Instance ng USB Device Vendor
Tinutukoy ng seksyong ito ang mga configuration na nauugnay sa mga instance ng klase ng Vendor.
Paglikha ng Class Instance intr_en interval p_vendor_callbacks
Paglikha ng Class Instance
Ang paggawa ng isang Instance ng klase ng Vendor ay ginagawa sa pamamagitan ng pagtawag sa function na sl_usbd_vendor_create_instance() , na tumatagal ng tatlong argumento ng pagsasaayos na inilalarawan sa ibaba.
intr_en
Boolean that indicates if a pair of interrupt endpoints should be added or not.
Halaga
totoong mali
Paglalarawan
Ang isang pares ng IN/OUT na endpoint ay idaragdag at gagawing available sa naka-embed na application. Walang idadagdag na interrupt endpoint. Isang pares lang ng Bulk IN/OUT endpoint ang magiging available.
pagitan
If you set intr_en to true , you can specify the interrupt endpoints polling interval (in milliseconds). If you set intr_en to false , you can set interval to 0 as it will be ignored by the class.
p_vendor_callbacks
Ang p_vendor_callbacks ay isang pointer sa isang variable ng istraktura ng mga function ng callback. na maaari mong tukuyin upang pangasiwaan ang mga kahilingan sa kontrol na partikular sa klase. Kung hindi ka gumagamit ng anumang mga kahilingang partikular sa klase o nangangailangan ng pag-enable/disable ng notification, maaari mo itong itakda sa NULL .
Ang exampAng nasa ibaba ay nagbibigay ng inaasahang pirma ng iyong tagapangasiwa ng mga partikular na kahilingan sa klase.
Example – Lagda ng Function ng Kahilingan na Partikular sa Klase
void app_usbd_vendor_req_handle(uint8_t
class_nbr, (1)
const sl_usbd_setup_req_t *p_setup_req); (2)
sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};
(1) Instance number ng klase ng vendor.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
53/174
Tapos naview
(2) Pointer sa isang natanggap na kahilingan sa pag-setup mula sa host.
Gabay sa Programming ng Klase ng Nagbebenta ng USB Device
Ipinapaliwanag ng seksyong ito kung paano gamitin ang klase ng Vendor. Sinisimulan ang USB Device Vendor Class Pagdaragdag ng USB Device Vendor Class Instance sa iyong Device Pakikipag-ugnayan gamit ang USB Device Vendor Class
Sinisimulan ang USB Device Vendor Class
Upang magdagdag ng functionality ng Vendor Class sa iyong device, simulan muna ang klase sa pamamagitan ng pagtawag sa function na USBD_Vendor_Init(). Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_vendor_init() .
Example – Tumatawag sa sl_usbd_vendor_init()
sl_status_t status;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* May naganap na error. Dapat idagdag dito ang paghawak ng error. */ }
Pagdaragdag ng USB Device Vendor Class Instance sa iyong Device
Upang magdagdag ng functionality ng klase ng vendor sa iyong device, kailangan mo munang gumawa ng isang instance, pagkatapos ay idagdag ito sa (mga) configuration ng iyong device.
Paggawa ng Instance ng Vendor Class Pagdaragdag ng Instance ng Vendor Class sa (Mga) Configuration ng Iyong Device
Paglikha ng Instance ng Klase ng Nagbebenta
Lumikha ng isang Instance ng klase ng Vendor sa pamamagitan ng pagtawag sa function na sl_usbd_vendor_create_instance() . Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_vendor_create_instance() gamit ang mga default na argumento. Para sa higit pang impormasyon tungkol sa mga argumento ng pagsasaayos na ipapasa sa sl_usbd_vendor_create_instance() , tingnan ang Mga Configuration ng Instance ng Class ng USB Device Vendor.
Example – Tumatawag sa sl_usbd_vendor_create_instance()
uint8_t class_nbr; sl_status_t status;
katayuan = sl_usbd_vendor_create_instance(false,
(1)
0u,
(2)
app_usbd_vendor_callback_functions, (3)
&class_nbr);
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
(1) Walang mga interrupt na endpoint sa instance ng klase na ito. (2) Ang agwat ay binabalewala dahil ang mga interrupt na endpoint ay hindi pinagana.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
54/174
Tapos naview
(3) Callback function na bahagi ng iyong application na humahawak sa mga kahilingan sa klase na partikular sa vendor. Tingnan ang Pakikipag-usap gamit ang USB Device Vendor Class para sa higit pang impormasyon. Pagdaragdag ng Instance ng Vendor Class sa (Mga) Configuration ng Iyong Device Pagkatapos mong gumawa ng instance ng klase ng vendor, maaari mo itong idagdag sa isang configuration sa pamamagitan ng pagtawag sa function na USBD_Vendor_ConfigAdd(). Ang exampIpinapakita sa ibaba kung paano tumawag sa sl_usbd_vendor_add_to_configuration() gamit ang mga default na argumento.
Example – Tumatawag sa sl_usbd_vendor_add_to_configuration()
sl_status_t status;
katayuan = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
if (status ! SL_STATUS_OK) {
/* May naganap na error. Dapat idagdag dito ang paghawak ng error. */
}
(1) Class number na idaragdag sa configuration na ibinalik ng sl_usbd_vendor_create_instance() . (2) Configuration number (dito idinaragdag sa isang Full-Speed configuration).
Pakikipag-usap Gamit ang USB Device Vendor Class
General Synchronous Communication Asynchronous Communication Vendor Request General Ang Vendor class ay nag-aalok ng mga sumusunod na function upang makipag-ugnayan sa host. Para sa higit pang mga detalye tungkol sa mga parameter ng function, tingnan ang USB Device Vendor API.
Talahanayan – Buod ng Vendor Communication API
Pangalan ng function
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_writes d 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 _asy rnc t
()
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-
pagharang.
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. Lahat ng karapatan ay nakalaan.
55/174
Tapos naview
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
katayuan;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
false,
(5)
&xfer_len);
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
(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) Ang application ay nagbibigay ng inisyal na transmit buffer.
(5) If this flag is set to true , and the transfer length is multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of the transfer.
The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_sync() and sl_usbd_vendor_write_interrupt_sync() , is similar to bulk endpoint communication functions presented in Example – Synchronous Bulk Read and Write.
Asynchronous na Komunikasyon
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. Lahat ng karapatan ay nakalaan.
56/174
Tapos naview
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
katayuan;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
NULI
(4)
false);
(6)
if (status ! SL_STATUS_OK) {
/* $$$$ Pangasiwaan ang error. */
}
}
(1) (3)
(1) (3)
static void app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
void *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t status)
{
if (status ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} iba {
/* $$$$ Pangasiwaan ang error. */
}
}
static void app_usbd_vendor_tx_completed(uint8_t class_nbr,
(3)
void *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t status)
{
if (status ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} iba {
/* $$$$ Pangasiwaan ang error. */
}
}
(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. Lahat ng karapatan ay nakalaan.
57/174
Tapos naview
(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. Lahat ng karapatan ay nakalaan.
58/174
Tapos naview
#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;
sl_status_t status;
uint16_t req_len;
uint32_t xfer_len;
(void)class_nbr;
switch(p_setup_req->bRequest) { case APP_VENDOR_REQ_NO_DATA: valid = true; break;
(2) (3)
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:
(4)
req_len = p_setup_req->wLength;
if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {
// Not enough room to receive data.
return (false);
}
// Receive data via Control OUT EP. // Wait transfer completion forever. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); if (status ! SL_STATUS_OK) { valid = false; } else { valid = true; } break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:
(5)
req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;
// Fill buf with a pattern. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
req_len);
// Send data via Control IN EP. // Wait transfer completion forever. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); if (status ! SL_STATUS_OK) { valid = DEF_FAIL; } else { valid = DEF_OK; } break;
default:
(6)
// Request is not supported.
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
59/174
Tapos naview
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 kasalukuyan.
*/
} 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. Lahat ng karapatan ay nakalaan.
60/174
Dokumentasyon ng API
Dokumentasyon ng API
Dokumentasyon ng API
Listahan ng mga module
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API
Paglalarawan
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. Lahat ng karapatan ay nakalaan.
61/174
USB Device API
USB Device API
USB Device API
USB Device API.
Mga module
USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
62/174
USB Device ACM API
USB Device ACM API
USB Device ACM API
USB Device CDC ACM API.
Mga module
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Mga pag-andar
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. Lahat ng karapatan ay nakalaan.
63/174
USB Device ACM API
Mga macro
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODULE.
#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. Lahat ng karapatan ay nakalaan.
64/174
USB Device ACM API
Uri
walang bisa
Direction N/A
Argument Name
MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS
Initialize the CDC ACM serial emulation subclass.
Nagbabalik
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
Paglalarawan
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.
Mga Parameter
Uri
uint16_t
uint16_t
Direction Argument Name
Paglalarawan
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.
Nagbabalik
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.
Mga Parameter
Uri
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.
Nagbabalik
Copyright © 2025 Silicon Laboratories. Lahat ng karapatan ay nakalaan.
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.
Mga Parameter
Uri
Direksyon
Argument Name
Paglalarawan
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
Mga Dokumento / Mga Mapagkukunan
![]() |
SILICON LABS USB Device Stack [pdf] Manwal ng Pagtuturo USB Device Stack, Device Stack, Stack |