SILICON LABS USB Device Stack Instruction Manual

USB įrenginių stekas

Specifikacijos

  • USB versija: 1.5.1
  • Išleidimo data: 21 m. liepos 2025 d
  • Simplicity SDK Version: 2025.6.1

Produktas baigtasview

„Silicon Labs“ USB įrenginių paketas suteikia universalumo ir
lengvai naudojamas USB ryšys daiktų interneto projektams, palengvinantis
communication between network co-processors and hosts.

Savybės

  • Efficient USB device stack
  • Idealiai tinka daiktų interneto projektams
  • Palaikymas ryšiui tarp tinklo koprocesorių ir
    šeimininkai

Produkto naudojimo instrukcijos

USB įrenginio konfigūracija

Configure the USB device settings according to your project
requirements by referring to the USB Device Configuration section
dokumentacijoje.

USB įrenginio programavimo vadovas

Vadovaukitės USB įrenginio programavimo vadovu, kad suprastumėte, kaip
program and interact with the USB device for various
programas.

USB Device Classes

The USB Device Classes section provides an overview skirtingų
classes like CDC ACM, HID, MSC SCSI, and Vendor Class. Choose the
tinkamą klasę pagal jūsų įrenginio funkcionalumą.

USB Device Troubleshooting

If you encounter any issues with the USB device, refer to the
USB įrenginio trikčių šalinimo skyrius, kuriame pateikiami sprendimai ir derinimo instrukcijos
patarimai.

„Microsoft Windows“ operacinės sistemos USB prievadas

Jei naudojate USB įrenginį su „Microsoft Windows“ operacine sistema,
Šeimininkas, būtinai laikykitės pateiktų gairių
dokumentacija sklandžiam integravimui.

DUK

Kl.: Kokie yra dažni buvamples of devices I can build using
šis USB rinkinys?

A: The USB stack allows you to build devices such as
USB-nuosekliojo prievado adapteriai, pelės arba klaviatūros, išimamos laikmenos
devices, and custom devices.

Q: Are there any specific software requirements for using this
USB device stack?

A: Suderinama programinė įranga apima „Simplicity SDK“, „Simplicity“
Studio, Simplicity Commander, GCC (The GNU Compiler Collection),
IAR įterptinis darbo stalas, skirtas ARM, ir IAR EWARM.

Universali nuoseklioji magistralė USB

Universali nuoseklioji magistralė USB

USB perview Baigėsiview
USB išleidimo pastabos
Specifikacijos ir funkcijosview
USB įrenginio konfigūracija perview
USB įrenginio programavimo vadovasview
USB įrenginių klasės viršview CDC ACM Class Overview HID klasė viršview MSC SCSI Class Overview Pardavėjo klasė viršytaview
USB API API dokumentacija USB įrenginio API USB įrenginio ACM API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB įrenginio CDC API a sl_usbd_cdc_subcl ss_driver_t USB įrenginio pagrindinė API
sl_usbd_device_config_t sl_usbd_setup_req_t
a sl_usbd_cl ss_driver_t USB Device HID API
sl_usbd_hid_callbacks_t USB įrenginio MSC API
a sl_usbd_msc_subcl ss_driver_t USB Device MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

1/174

Universali nuoseklioji magistralė USB
sl_usbd_msc_scsi_lun_pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB įrenginio tiekėjo API sl_usbd_vendor_callbacks_t
API Documentation USB Device Troubleshooting
Baigėsiview „Microsoft Windows“ operacinės sistemos USB prievadas
Baigėsiview

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

2/174

Baigėsiview
Baigėsiview
USB įrenginys
USB is one of the most successful communication interfaces in the history of computer systems and is the de facto standard for connecting computer peripherals. Silicon Labs USB Device stack is a USB device module designed specifically for embedded systems. Built from the ground up with Silicon Labs’ quality, scalability, and reliability, it has gone through a rigorous validation process to comply with the USB 2.0 specification. This documentation describes how to initialize, start, and use Silicon Labs USB Device stack. It explains the various configuration values and their uses. It also includes an overview technologijos, konfigūracijos galimybių tipai, įgyvendinimo procedūros ir pavyzdžiaiamptipinio kiekvienos prieinamos klasės naudojimo būdai.
Kad galėtumėte greitai suprasti USB sąvokas, dokumentacijoje pateikiama daug pavyzdžiųampUSB atmintinės su pagrindinėmis funkcijomis. Šiosamples suteiks jums sistemą, kuri leis jums greitai kurti įrenginius. Šie pavyzdžiaiampįtraukia:
USB-nuosekliojo prievado adapteris (ryšio įrenginio klasė) Pelė arba klaviatūra (žmogaus sąsajos įrenginio klasė) Išimamas atminties įrenginys (didelės talpos atminties klasė) Pasirinktinis įrenginys (tiekėjo klasė)
Toliau pateikiama pabaigaview dokumentacijos skyrių:
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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

3/174

USB
USB

USB Version 1.5.1 July 21, 2025 – Release Notes
Simplicity SDK Version 2025.6.1
Silicon Labs’ efficient USB device stack offers versatile, easy-to-use USB connectivity ideal for IoT projects, including communication between network co-processors and hosts. Click here for earlier releases.
Išleidimo santrauka
Pagrindinės funkcijos | API pakeitimai | Klaidų ištaisymai | Lustų įgalinimas
Pagrindinės savybės
Keičiasi tik pagrindinė platforma.
API pakeitimai
Nėra.
Trikčių pataisymai
Nėra.
Chip Enablement
Nėra.
Pagrindinės savybės
Naujos funkcijos | Patobulinimai | Pašalintos funkcijos | Nebenaudojamos funkcijos
Naujos funkcijos
Nėra.
Patobulinimai
Keičiasi tik pagrindinė platforma.
Pašalintos funkcijos
Nėra.
Nebenaudojamos funkcijos
Nėra.
API pakeitimai
Naujos API | Modifikuotos API | Pašalintos API | Nebenaudojamos API
Naujos API

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

4/174

USB
Nėra.
Modifikuotos API sąsajos
Nėra.
Pašalintos API
Nėra.
Nebenaudojamos API
Nėra.
Trikčių pataisymai
Nėra.
Chip Enablement
Nėra.
Paraiška PvzampPakeitimai
Naujas Examples | Modified Examples | Pašalintas examples | Deprecated Examples
Naujas Examples
Nėra.
Modifikuotas Pvzamples
Nėra.
Pašalintas Examples
Nėra.
Nebenaudojamas examples
Nėra.
Išleidimo pakeitimų poveikis
Impact Statements | Migration Guide
Poveikio ataskaitos
Nėra.
Migracijos vadovas
Nėra.
Žinomos problemos ir apribojimai
Nėra.
Naudojant šį leidimą

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

5/174

USB

What’s in the Release? | Compatible Software | Installation and Use | Help and Feedback

Kas yra leidime?

USB Device Stack Application Examples
Suderinama programinė įranga

Programinė įranga
Simplicity SDK Simplicity Studio Simplicity Commander GCC The GNU Compiler Collection) IAR Embedded Workbench for ARM IAR EWARM

Suderinama versija arba variantas
2025.6.0 5.11.0 1.18.2 (provided with Simplicity Studio) 12.2.1 (provided with Simplicity Studio) 9.40.1 (provided with Simplicity Studio)

Įdiegimas ir naudojimas

Norėdami pradėti savo tobulėjimą, žr. mūsų:
USB įrenginio programavimo vadovas. API dokumentacija.
Informacijos apie „Secure Vault“ integraciją žr. skyriuje „Secure Vault“.
Norėdami iš naujoview Saugumo ir programinės įrangos įspėjimų pranešimai ir pranešimų nuostatų valdymas:
ò Eikite į https://community.silabs.com/. Prisijunkite naudodami savo paskyros duomenis. Spustelėkite savo profesionalųfile icon in the upper-right corner of the page.
õ Select Notifications from the dropdown menu. ö In the Notifications section, go to the My Product Notifications tab to review istorinės saugumo ir programinės įrangos konsultacijos
pranešimai
÷ Norėdami tvarkyti savo nuostatas, naudokite skirtuką „Tvarkyti pranešimus“, kad tinkintumėte, kuriuos produktų atnaujinimus ir patarimus norite gauti.
gauti.
Rekomenduojamus konfigūracijos nustatymus žr. čia.
To learn more about the software in this release, dive into our online documentation.
Pagalba ir atsiliepimai

Susisiekite su „Silicon Labs“ palaikymo tarnyba. Norėdami gauti atsakymus naudodami mūsų įrankį „Klauskite dirbtinio intelekto“, žr. paieškos laukelį šio puslapio viršuje.

Pastaba: „Ask AI“ yra eksperimentinė funkcija.

Gaukite pagalbos iš mūsų kūrėjų bendruomenės.
SDK išleidimo ir priežiūros politika
Žr. mūsų SDK išleidimo ir priežiūros politiką.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

6/174

Baigėsiview
Baigėsiview
Specifikacijos
Complies with the “Universal Serial Bus specification revision 2.0” Implements the “Interface Association Descriptor Engineering Change Notice (ECN)” Transfer types
Control Bulk Interrupt USB classes Communication Device Class (CDC) Abstract Control Model (ACM) Human Interface Device (HID) Mass Storage Class (MSC) Vendor-specific class framework
Savybės
Galima įtraukti tik būtinas funkcijas, siekiant sumažinti atminties naudojimą. Palaiko viso greičio (12 Mbit/s). Palaiko sudėtinius (daugiafunkcinius) įrenginius. Palaiko kelių konfigūracijų įrenginius. Palaiko USB energijos taupymo funkcijas (įrenginio pristabdymas ir tęsimas). Visiškas masinės atminties klasės integravimas į „Micrium“ OS. File System module Developed with CMSIS-RTOS2 abstraction layer so that it can work with different OSes. Silicon Labs GSDK comes with FreeRTOS and Micrium OS ports.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

7/174

Baigėsiview
Baigėsiview

USB įrenginio konfigūracija

This section discusses how to configure Silicon Labs USB Device. There are three groups of configuration parameters, as follows:
USB Device Core Configuration USB Device Information Configuration USB Device Hardware Configuration
USB įrenginio pagrindinė konfigūracija
Silicon Labs USB Device can be configured at compile time via a set of #defines located in the sl_usbd_core_config.h fileUSB įrenginys, kai įmanoma, naudoja #defines, nes jos leidžia keisti kodo ir duomenų dydžius kompiliavimo metu pagal tai, kurios funkcijos yra įjungtos. Tai leidžia „Silicon Labs“ USB įrenginio tik skaitymui skirtos atminties (ROM) ir operatyviosios atminties (RAM) apimtį koreguoti pagal jūsų programos reikalavimus.
Recommended: Start the configuration process with the default values (highlighted in bold).
The sections below are organized based on the order in the template configuration file, sl_usbd_core_config.h.
Pagrindinės konfigūracijos klasių konfigūracija
Pagrindinė konfigūracija
Lentelė – USB įrenginio pagrindinės konfigūracijos konstantos

Konstantos aprašymas

Numatytoji reikšmė

SL_USBD_TA SK_STACK_ SIZE

Konfigūruoja USBD pagrindinės užduoties steko dydį baitais

4096

SL_USBD_TA SK_PRIORIT Y

Konfigūruojamas USBD pagrindinės užduoties prioritetas. Tai yra CMSIS-RTOS2 prioritetas.

osPriorityHigh

SL_USBD_A UTO_START _USB_DEVIC E

Jei įjungta, USB įrenginys bus automatiškai paleistas, kai bus paleistas branduolys ir pirmą kartą suplanuota 1 USBD pagrindinė užduotis. Jei išjungta, jūsų programa turės iškviesti sl_usbd_core_start_device(), kai USB mazgas ją aptiks.

SL_USBD_C The total number of configurations that will be added via the sl_usbd_add_configuration()

1

ONFIGURATI funkcija.

ON_QUANTI

TY

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

8/174

Baigėsiview

Pastovus
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ KIEKIS
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

Aprašymas Bendras USB sąsajų, kurios bus pridėtos visoms jūsų konfigūracijoms, skaičius. Tai labai priklauso nuo naudojamos (-ų) klasės (-ių). Daugiau informacijos apie tai, kiek sąsajų reikia klasės egzemplioriui, rasite savo klasės (-ių) skyriuje „Pagrindinių išteklių poreikiai“.
The total number of USB alternate interfaces to be added for all your configurations. This greatly depends on the class(es) used. This value must always be equal or greater than SL_USBD_INTERFACE_QUANTITY . For more information on how many alternate interfaces a class instance requires, refer to the section “Resource Needs from Core” of your class(es).
Bendras USB sąsajos grupių, kurios bus pridėtos visoms jūsų konfigūracijoms, skaičius. Tai labai priklauso nuo naudojamos (-ų) klasės (-ių). Daugiau informacijos apie tai, kiek sąsajos grupių reikia klasės egzemplioriui, rasite savo klasės (-ių) skyriuje „Pagrindinio serverio išteklių poreikiai“.
The total number of Endpoint descriptors that will be added for all your configurations. This greatly depends on the class(es) used. For more information on how many endpoint descriptors a class instance requires, refer to “Number of endpoints” in the section “Resource Needs from Core” of your class(es). Note that the control endpoints don’t need to be considered here. The total number of USB strings. Setting the quantity to zero will disable the feature. Disabling this will cause the device to not store any USB description strings passed from the application. This means the host will be unable to retrieve the description strings (such as manufacturer and product name). The total number of opened endpoints per configuration. A device requires at least two opened endpoints for control transfers, but you must also add the endpoints of the class(es) used. For more information on how many opened endpoints a class instance requires, refer to “Number of endpoints” in the section “Resource Needs from Core” of your class(es).

Numatytoji reikšmė
10 10
2
20 30 20

Klasių konfigūracija
Classes have specific compile-time configurations. Refer to USB Device Classes for more information.
USB įrenginio informacijos konfigūracija

Sl_usbd_device_config.h konfigūracija file pergrupuoja kompiliavimo laiko #define-s, kad nustatytų pagrindinę informaciją apie jūsų įrenginį, pvz., tiekėjo / produkto ID, įrenginio eilutes ir kt. Žemiau esančioje lentelėje aprašoma kiekviena šioje konfigūracijoje galima informacijos konfigūracija. file.

Lentelė – USB įrenginio informacijos konfigūracijos apibrėžimai

Pastovus
SL_USBD_ĮRENGINIO E_TIEKĖJO_ID
SL_USBD_ĮRENGINIO E_PRODUCT_ID

Aprašymas Jūsų tiekėjo identifikacinis numeris, kurį pateikė USB diegėjų forumas. Daugiau informacijos apie tai, kaip gauti tiekėjo ID, rasite adresu http://www.usb.org/developers/vendor/. Jūsų produkto identifikacinis numeris.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

9/174

Baigėsiview

Pastovus

Aprašymas

SL_USBD_DEVICE_RELEASE Release number of your device. _NUMBER

SL_USBD_DEVICE_MANUFA String describing the manufacturer of your device. This configuration is ignored when the

CTURER_STRING

configuration SL_USBD_STRING_QUANTITY is set to 0.

SL_USBD_DEVICE_PRODUC String describing your product. This configuration is ignored when the configuration

T_STRING

SL_USBD_STRING_QUANTITY nustatytas į 0.

SL_USBD_DEVICE_SERIAL_N Eilutė, kurioje yra jūsų įrenginio serijos numeris. Ši konfigūracija ignoruojama, kai

UMBER_STRING

configuration SL_USBD_STRING_QUANTITY is set to 0.

SL_USBD_DEVICE_LANGUA Identification number of the language of your device’s strings. Possible values are:
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_ANGLŲ_JK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_GERMAN

– SL_USBD_LANG_ID_GREEK

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGALIŠKA

– SL_USBD_LANG_ID_SANSKRIT

Ši konfigūracija ignoruojama, kai konfigūracija SL_USBD_STRING_QUANTITY nustatyta į 0.

USB įrenginio aparatinės įrangos konfigūracija

Priklausomai nuo naudojamo „Silicon Labs“ įrenginio, gali būti, kad turėsite GPIO kontaktą ir prievadą, skirtą USB VBUS Sense signalo konfigūravimui. Konfigūracijos apibrėžimai yra sl_usbd_hardware_config.h antraštėje. file.

Pastovus
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Aprašymas
GPIO Port for the USB VBUS Sense signal on your board. GPIO Pin for the USB VBUS Sense signal on your board.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

10/174

Baigėsiview
Baigėsiview
USB įrenginio programavimo vadovas
Šiame skyriuje paaiškinama, kaip naudoti USB įrenginio modulį.
Initial Setup of USB Device Module
Šiame skyriuje aprašomi pagrindiniai veiksmai, reikalingi norint inicijuoti USB įrenginio modulį, pridėti, paruošti ir paleisti įrenginį. USB įrenginio modulio inicijavimas USB įrenginio branduolio inicijavimas aCl serverio(-ių) inicijavimas USB įrenginio pridėjimas USB įrenginio kūrimas Konfigūracijos(-ų) pridėjimas USB funkcijos(-ų) pridėjimas USB įrenginio paleidimas
Įvykių kablio funkcijos
Initializing the USB Device Module
Initializing the USB Device Core
Pradėkite inicijuodami B įrenginio modulio branduolį, iškviesdami funkciją sl_usbd_core_init(). Žemiau pateiktame pavyzdyje parodytas sl_usbd_core_init() iškvietimas.
Example – iškviečiama sl_usbd_core_init() funkcija
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}
Klasės (-ių) inicijavimas
Inicializavus USB įrenginio modulio branduolį, turite inicijuoti kiekvieną klasę, kurią ketinate naudoti. Daugiau informacijos rasite savo ACL serverio (-ių) skyriuje „Programavimo vadovas“.
Building Your USB Device
Konfigūracijos (-ų) pridėjimas
Sėkmingai inicializavus įrenginį, galima pradėti pridėti USB funkcijas, pradedant nuo naujos konfigūracijos. Įrenginys turi turėti bent vieną konfigūraciją. Norėdami pridėti konfigūraciją (-as), iškvieskite funkciją sl_usbd_core_dd_configuration(). Ši funkcija turi būti iškviesta kiekvienai konfigūracijai, kurią norite pridėti. PavyzdžiuiampŽemiau parodyta, kaip pridėti viso greičio.
Example – Konfigūracijos (-ų) pridėjimas prie jūsų įrenginio

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

11/174

Baigėsiview

sl_status_t status; uint8_t config_nbr_fs;

/* Įrenginiui pridedama pilno greičio konfigūracija. */

būsena = sl_usbd_core_add_configuration(0,

/* Konfigūrai nėra jokių specialių atributų. */

100u,

/* Maksimali energijos sąnauda: 100 mA.

*/

SL_USBD_DEVICE_SPEED_FULL,

/* Full-Speed configuration.

*/

„Konfigūruoti pridėti egz.“amp„Viso greičio konfigūracija“,

&config_nbr_fs);

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

Adding USB Function(s)
Sėkmingai pridėję bent vieną konfigūraciją prie savo įrenginio, galite pridėti sąsajas ir galinius taškus. Kiekviena USB klasė turi savo poreikius, susijusius su sąsajos ir galinių taškų tipu, kiekiu ir kitais parametrais. „Silicon Labs“ USB įrenginys prideda sąsajas ir galinius taškus prie siūlomų klasių.
From your application, you can instantiate a USB class and add it to a configuration. For more information on the concept of USB device class instances, see USB Device Classes. Note that you can instantiate and add many different class instances to a configuration to create a multi-function (composite) device.
BuvęsampŽemiau pateiktame paveikslėlyje parodyta, kaip sukurti klasės egzempliorių ir pridėti jį prie konfigūracijos.
Example – Adding a Class Instance to Your Device

sl_status_t būsena; uint8_t klasės_nbr;
/* Sukurkite norimos naudoti klasės egzempliorių.*/ /* Atkreipkite dėmesį, kad priklausomai nuo klasės ši funkcija gali turėti daugiau argumentų. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }
/* Pridėti klasės egzempliorių prie „Full-Speed“ konfigūracijos. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Klasės numeris, grąžintas sl_usbd_ _sukurti_instance. */
config_nbr_fs); /* Sl_usbd_core_add_configuration() grąžintas konfigūracijos numeris. */ if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }
USB įrenginio paleidimas
By default, the device will be started automatically by the USB device core task after the device initialization is completed and the kernel started. To control when the device is started and becomes visible by the USB host, use the configuration define SL_USBD_AUTO_START_USB_DEVICE to disable the auto-start feature. When disabled, after you have built/prepared your device, you can start it and make it visible to the USB host by calling the function sl_usbd_core_start_device() .
BuvęsampŽemiau pateiktame paveikslėlyje parodyta, kaip paleisti įrenginį naudojant funkciją sl_usbd_core_start_device().
Example – Starting Your Device

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

12/174

Baigėsiview

sl_status_t būsena;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }

Įvykių kablio funkcijos
The USB Device core module offers two weak hook functions that you can re-defined in your application. Their purpose is to notify when bus and configuration events occur.
Table – USB Event Hook Functions

Renginys

Aprašymas

Autobusas

Iškviečiama, kai įvyksta USB magistralės įvykis

Configuration Called when USB Configuration event occurs

Funkcijos parašas
void sl_usbd_on_bus_event(sl_usbd_bus_event_t įvykis); void sl_usbd_on_config_event(sl_usbd_config_event_t įvykis, uint8_t config_nbr);

Example – Įvykių kablio funkcijos

void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { jungiklis (įvykis) { atvejis SL_USBD_EVENT_BUS_CONNECT: }
// iškviečiama, kai USB laidas įkišamas į pagrindinio valdiklio jungtį;
case SL_USBD_EVENT_BUS_DISCONNECT: // iškviečiama, kai USB laidas atjungiamas nuo pagrindinio valdiklio;
case SL_USBD_EVENT_BUS_RESET: // iškviečiama, kai kompiuteris siunčia atstatymo komandą break;
case SL_USBD_EVENT_BUS_SUSPEND: // called when the host sends suspend command break;
case SL_USBD_EVENT_BUS_RESUME: // called when the host sends wake up command break;
numatytoji reikšmė: pertrauka; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { jungiklis (įvykis) { atvejis SL_USBD_EVENT_CONFIG_SET: }
// called when the host sets a configuration break;
case SL_USBD_EVENT_CONFIG_UNSET: // iškviečiama, kai konfigūracija yra nenustatyta break;
numatytoji reikšmė: pertrauka; } }

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

13/174

Baigėsiview

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

14/174

Baigėsiview
Baigėsiview

USB Device Classes

„Silicon Labs“ USB įrenginiuose esančios USB klasės turi keletą bendrų savybių. Šiame skyriuje paaiškinamos šios savybės ir jų sąveika su pagrindiniu sluoksniu.
Daugiau informacijos apie konkrečią klasę rasite šiuose šaltiniuose:
CDC ACM klasė HID klasė MSC SCSI klasė Tiekėjo klasė
About Class Instances
USB klasės, esančios USB įrenginyje, įgyvendina klasės egzempliorių koncepciją. Klasės egzempliorius žymi vieną įrenginio funkciją. Funkciją gali apibūdinti viena sąsaja arba sąsajų grupė ir ji priklauso konkrečiai klasei.
Each USB class implementation has some configurations and functions in common, based on the concept of class instance. The common configurations and functions are presented in the table below. In the column title ‘Constants or Function’, the placeholder XXXX can be replaced by the name of the class: CDC, HID, MSC, CDC_ACM or VENDOR (Vendor for function names).
Lentelė – Konstantos ir funkcijos, susijusios su kelių klasių egzempliorių koncepcija

Constant or Function
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_KONFIGŪRACIJOS_KIEKIS
sl_usb d _XXXX_create _instance ()
sl_usbd_XXXX_add_to_conf iguration()

Aprašymas
Configures the maximum number of class instances.
Konfigūruojamas maksimalus konfigūracijų skaičius. Klasės inicijavimo metu sukurtas klasės egzempliorius bus pridėtas prie vienos ar kelių konfigūracijų. Sukuria naują klasės egzempliorių.
Adds an existing class instance to the specified device configuration.

In terms of code implementation, the class will declare a local global variable that contains a class control structure. This class control structure is associated with one class instance and will contain specific information to manage the class instance.
The following figures show several case scenarios. Each figure includes a code example, kuris atitinka atvejo scenarijų.
Figure – Multiple Class Instances – FS Device (1 Configuration with 1 Interface) represents a typical USB device. The device is Full-Speed (FS) and contains a single configuration. The function of the device is described by one interface composed of a pair of endpoints for data communication. One class instance is created and will allow you to manage the entire interface with its associated endpoint.
Figure – Multiple Class Instances – FS Device 1 Configuration with 1 Interface)

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

15/174

Baigėsiview

The code corresponding to Figure – Multiple Class Instances – FS Device (1 Configuration with 1 Interface) is shown in the example žemiau.
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) { /* Tvarkyti klasės įjungimo įvykį. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Handle Class disable event. */ }

sl_usbd_XXXX_callbacks_t class_callbacks = {

(1)

.enable = app_usbd_XXXX_enable,

.disable = app_usbd_XXXX_disable

};

būsena = sl_usbd_XXXX_init();

(2)

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

status = sl_usbd_XXXX_create_instance(&class_callbacks,

(3)

&class_0);

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

būsena = sl_usbd_XXXX_add_to_configuration(0_klasė, 0_konfigūracija);

(4)

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

(1) Kiekviena klasė siūlo grįžtamojo ryšio funkcijų rinkinį įrenginių prijungimo / atjungimo įvykiams ir su klase susijusiems įvykiams. Atgalinio ryšio struktūros objektas perduodamas kaip argumentas kuriant klasės egzempliorių naudojant sl_usbd_XXXX_create_instance()
funkcija.
(1) Inicijuokite klasę. Bus inicijuoti visi vidiniai kintamieji, struktūros ir klasės prievadai. Atkreipkite dėmesį, kad kai kurių klasių funkcija „Init()“ gali priimti kitus argumentus.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

16/174

Baigėsiview
(2) Sukurkite klasės egzempliorių, kuris yra class_0. Funkcija sl_usbd_XXXX_create_instance() skiria klasės valdymo struktūrą, susietą su class_0. Priklausomai nuo klasės, sl_usbd_XXXX_create_instance() gali turėti papildomų parametrų, be klasės numerio, kurie nurodo klasei būdingą informaciją, saugomą klasės valdymo struktūroje. aaa (3) Pridėkite klasės egzempliorių class_0 prie nurodyto konfigūracijos numerio config_0. sl_usbd_XXXX_add_to_configuration() sukurs sąsają 0 ir su ja susijusius IN ir OUT galinius taškus. Dėl to klasės egzempliorius apima sąsają 0 ir jos galinius taškus. Bet koks ryšys, vykdomas sąsajoje 0, naudos klasės egzemplioriaus numerį class_0. 1. Paveikslėlis – Keli klasės egzemplioriai – FS įrenginys (2 konfigūracijos ir kelios sąsajos) yra sudėtingesnis pavyzdys.amppvz., pilno greičio įrenginys sudarytas iš dviejų konfigūracijų. Įrenginys turi dvi funkcijas, kurios priklauso tai pačiai klasei, tačiau kiekviena funkcija aprašoma dviem sąsajomis ir turi porą dvikrypčių galinių taškų. Šiame pavyzdyjeample, two class instances are created. Each class instance is associated with a group of interfaces as opposed to Figure – Multiple Class Instances – FS Device (1 Configuration with 1 Interface) and Figure – Multiple Class Instances – FS Device (2 Configurations and Multiple Interfaces) where the class instance was associated with a single interface.
Figure – Multiple Class Instances – FS Device 2 Configurations and Multiple Interfaces)

The code corresponding to Figure – Multiple Class Instances – FS Device (2 Configurations and Multiple Interfaces) is shown in the exampžemiau. Klaidų tvarkymas aiškumo dėlei praleistas.
Example – Keli klasės egzemplioriai – FS 2 įrenginio konfigūracijos ir kelios sąsajos)

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

17/174

Baigėsiview

sl_status_t status; uint8_t class_0; uint8_t class_1;
būsena = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
būsena = sl_usbd_XXXX_add_to_configuration(0_klasė, cfg_0); būsena = sl_usbd_XXXX_add_to_configuration(1_klasė, cfg_0);
būsena = sl_usbd_XXXX_add_to_configuration(0_klasė, cfg_1); būsena = sl_usbd_XXXX_add_to_configuration(1_klasė, cfg_1);

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

(1) Initialize the class. Any internal variables, structures, and class ports will be initialized.
(2) Sukurkite klasės egzempliorių class_0. Funkcija sl_usbd_XXXX_create_instance() priskiria klasės valdymo struktūrą, susietą su class_0.
(3) Sukurkite klasės egzempliorių class_1. Funkcija sl_usbd_XXXX_create_instance() priskiria kitą klasės valdymo struktūrą, susietą su class_1.
(4) Pridėkite klasės egzempliorių class_0 prie konfigūracijos cfg_0. Funkcija sl_usbd_XXXX_add_to_configuration() sukurs sąsają 0, sąsają 1, alternatyvias sąsajas ir susijusius IN ir OUT galinius taškus. Klasės egzemplioriaus numeris class_0 bus naudojamas bet kokiam duomenų perdavimui sąsajoje 0 arba 1.
(5) Pridėkite klasės egzempliorių class_1 prie konfigūracijos cfg_0. Funkcija sl_usbd_XXXX_add_to_configuration() sukurs 2 ir 3 sąsajas bei su jomis susijusius IN ir OUT galinius taškus. Klasės egzemplioriaus numeris class_1 bus naudojamas bet kokiam duomenų perdavimui 2 arba 3 sąsajoje.
(6) Pridėkite tuos pačius klasės egzempliorius, class_0 ir class_1, prie kitos konfigūracijos, cfg_1.
Every class defines structure of type sl_usbd_XXXX_callbacks_t . Its purpose is to give every class a set of callback functions to be called when event occurs. Two callback functions are present in each class. They are presented in the table bellow.
Table – Common Class Callback Functions

Fields Description .enable Called when the USB class instance is enabled successfully. .disable Called when the USB class instance is disabled.

Funkcijos parašas void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

18/174

Baigėsiview
Baigėsiview
USB įrenginio CDC ACM klasė
USB Device CDC Base Class Overview USB įrenginio CDC ACM klasės išteklių poreikiai iš pagrindinio USB įrenginio CDC ACM poklasioview USB Device CDC ACM Class Configuration USB Device CDC ACM Class Programming Guide
Šiame skyriuje aprašoma ryšio įrenginių klasės (CDC) klasė ir susijusi CDC poklasė, palaikoma „Silicon Labs“ USB įrenginių rinkinio. „Silicon Labs“ USB įrenginys šiuo metu palaiko abstraktaus valdymo modelio (ACM) poklasį, kuris dažniausiai naudojamas nuosekliajai emuliacijai.
CDC includes various telecommunication and networking devices. Telecommunication devices encompass analog modems, analog and digital telephones, ISDN terminal adapters, etc. For example, networking devices contain ADSL and cable modems, Ethernet adapters, and hubs. CDC defines a framework to encapsulate existing communication services standards, such as V.250 (for modems over telephone network) and Ethernet (for local area network devices), using a USB link. A communication device is in charge of device management, call management when needed, and data transmission.
CDC apibrėžia septynias pagrindines įrenginių grupes. Kiekviena grupė priklauso ryšio modeliui, kuris gali apimti kelis poklasius. Kiekviena įrenginių grupė, be CDC pagrindinės klasės, turi savo specifikacijos dokumentą. Septynios grupės yra:
Public Switched Telephone Network (PSTN), devices including voiceband modems, telephones, and serial emulation devices. Integrated Services Digital Network (ISDN) devices, including terminal adaptors and telephones. Ethernet Control Model (ECM) devices, including devices supporting the IEEE 802 family (ex.: cable and ADSL modems, WiFi adapters). Asynchronous Transfer Mode (ATM) devices, including ADSL modems and other devices connected to ATM networks (workstations, routers, LAN switches). Wireless Mobile Communications (WMC) devices, including multi-function communications handset devices used to manage voice and data communications. Ethernet Emulation Model (EEM) devices which exchange Ethernet-framed data. Network Control Model (NCM) devices, including high-speed network devices (High Speed Packet Access modems, Line Terminal Equipment)
The CDC and the associated subclass implementation complies with the following specifications:
Universali nuoseklioji magistralė, ryšių įrenginių klasių apibrėžimai, 1.2 redakcija, 2010 m. lapkričio 3 d. Universali nuoseklioji magistralė, ryšiai, PSTN įrenginių poklasis, 1.2 redakcija, 2007 m. vasario 9 d.
USB Device CDC Base Class Overview
CDC įrenginį sudaro šios sąsajos, skirtos ryšio galimybėms įgyvendinti:
Communications Class Interface (CCI) is responsible for the device management and optionally the call management. The
Įrenginių valdymas leidžia atlikti bendrą įrenginio konfigūraciją ir valdymą bei pranešti apie įvykius pagrindiniam kompiuteriui. Skambučių valdymas leidžia užmegzti ir nutraukti skambučius. Skambučių valdymas gali būti multipleksuojamas per DCI. CCI yra privalomas visiems CDC įrenginiams. Jis identifikuoja CDC funkciją, nurodydamas CDC įrenginio palaikomą ryšio modelį. Sąsaja(-os) po CCI gali būti bet kokia apibrėžta USB klasės sąsaja, pvz., garso arba konkretaus tiekėjo sąsaja. Konkretaus tiekėjo sąsaja yra konkrečiai pavaizduota DCI.
Data Class Interface (DCI) is responsible for data transmission. Data transmitted and/or received do not follow a specific
formatas. Duomenys gali būti neapdoroti duomenys iš ryšio linijos, duomenys, atitinkantys patentuotą formatą ir pan. Visus DCI, einančius po CCI, galima laikyti pavaldžiomis sąsajomis.
A CDC device must have at least one CCI and zero or more DCIs. One CCI and any subordinate DCI together provide a feature to the host. This capability is also referred to as a function. In a CDC composite device, you could have several

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

19/174

Baigėsiview
funkcijos. Todėl įrenginį sudarytų keli CCI ir DCI rinkiniai, kaip parodyta paveiksle – CDC sudėtinis įrenginys.
Paveikslėlis – CDC sudėtinis įrenginys

CDC įrenginys greičiausiai naudos tokį galinių taškų derinį:
Valdymo įvesties ir išvesties galinių taškų pora, vadinama numatytuoju galiniu tašku. Pasirenkamas masinio arba pertraukimo įvesties galinis taškas. Masinio arba izochroninio įvesties ir išvesties galinių taškų pora. Atkreipkite dėmesį, kad „Silicon Labs“ USB įrenginių stekas šiuo metu nepalaiko izochroninių galinių taškų.
Žemiau esančioje lentelėje parodytas skirtingų galinių taškų naudojimas ir per kurią CDC sąsają jie naudojami.
Table – CDC Endpoint Usage

Galutinis taškas
Valdymas IN
Valdymas OUT
Interrupt or bulk IN Bulk or isochronous IN Bulk or isochronous
OUT

Kryptis
Deviceto-host
Host-todevice
Deviceto-host
Deviceto-host
Host-todevice

Sąsajos naudojimas

CCI

Standartinės išvardijimo užklausos, konkrečios klasės užklausos, įrenginio užklausos

valdymas ir pasirinktinai skambučių valdymas.

CCI

Standartinės išvardijimo užklausos, konkrečios klasės užklausos, įrenginio užklausos

valdymas ir pasirinktinai skambučių valdymas.

CCI

Pranešimai apie įvykius, pvz., skambučio aptikimas, nuosekliosios linijos būsena, tinklo būsena.

DCI

Neapdorotų arba formatuotų duomenų perdavimas.

DCI

Neapdorotų arba formatuotų duomenų perdavimas.

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.
Lentelė – CDC poklasiai

Subclass
Tiesioginės linijos valdymo modelis Abstraktus valdymo modelis

Communication Model
PSTN
PSTN

ExampĮrenginių, naudojančių šią poklasę, sąrašas
Modemo įrenginiai, tiesiogiai valdomi USB pagrindinio kompiuterio
Nuosekliojo emuliavimo įrenginiai, modemo įrenginiai, valdomi per nuoseklųjį komandų rinkinį

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

20/174

Baigėsiview

Subclass

Communication Model

ExampĮrenginių, naudojančių šią poklasę, sąrašas

Telefono valdymo modelis

PSTN

Daugiakanalio valdymo ISDN modelis

CAPI valdymo modelis ISDN

Ethernet tinklo ECM valdymo modelis

ATM Networking

bankomatas

Valdymo modelis

Belaidžio ragelio valdymo modelis

WMC

Device Management WMC

Mobilus tiesioginės linijos modelis

WMC

OBEX

WMC

Ethernet emuliacijos EEM modelis

Tinklo valdymo modelis

Šiaurės ministrų taryba

Voice telephony devices
Bazinio tarifo terminalų adapteriai, pagrindinio tarifo terminalų adapteriai, telefonai
Bazinio greičio terminalų adapteriai, pagrindinio greičio terminalų adapteriai, telefonai, DOC-SIS kabeliniai modemai, ADSL modemai, palaikantys PPPoE emuliaciją, „Wi-Fi“ adapteriai (IEEE 802.11 šeimos), IEEE 802.3 adapteriai, ADSL modemai
Mobile terminal equipment connecting to wireless devices
Mobile terminal equipment connecting to wireless devices Mobile terminal equipment connecting to wireless devices
Mobiliųjų terminalų įranga, jungianti prie belaidžių įrenginių. Įrenginiai, naudojantys Ethernet rėmelius kaip kitą perdavimo sluoksnį. Neskirta maršrutizavimo ir interneto ryšio įrenginiams. IEEE 802.3 adapteriai, perduodantys didelės spartos duomenų pralaidumą tinkle.

USB įrenginio CDC ACM klasės išteklių poreikiai iš pagrindinės sistemos

Kiekvieną kartą, kai prie USB konfigūracijos pridedate CDC ACM klasės egzempliorių iškvietę funkciją sl_usbd_cdc_acm_add_to_configuration(), iš branduolio bus paskirstyti šie ištekliai.

Išteklius
Interfaces Alternate interfaces Endpoints Interface groups

Kiekis
2 2 3 1

Note that those numbers are per configuration. When setting up your SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY and SL_USBD_DESCRIPTOR_QUANTITY configuration values, don’t forget to take into account on how many configurations the class will be added. For the SL_USBD_OPEN_ENDPOINTS_QUANTITY configuration value, since endpoints are opened only when a configuration is set by the host, you just need to take into account the number of needed endpoints for a class instance.
USB Device CDC ACM Subclass Overview

The CDC base class is composed of a Communications Class Interface (CCI) and Data Class Interface (DCI), which is discussed in detail in USB Device CDC Base Class Overview . This section discusses a CCI of type ACM. It consists of a default endpoint for the management element and an interrupt endpoint for the notification element. A pair of bulk endpoints is used to carry unspecified data over the DCI.
The ACM subclass is used by two types of communication devices:
Įrenginiai, palaikantys AT komandas (pvz., balso juostos modemai). Nuosekliojo emuliavimo įrenginiai, dar vadinami virtualiais COM prievado įrenginiais.
There are several subclass-specific requests for the ACM subclass. They allow you to control and configure the device. The complete list and description of all ACM requests can be found in the specification <Universal Serial Bus, Communications,

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

21/174

Baigėsiview PSTN įrenginių poklasis, 1.2 redakcija, 2007 m. vasario 9 d. =, 6.2.2 skyrius.
From this list, Silicon Labs9 ACM subclass supports the following:
Lentelė – „Silicon Labs“ palaikomos ACM užklausos

Poklasio užklausos aprašymas

SetCommFeature GetCommFeature ClearCommFeature

The host sends this request to control the settings for a given communications feature. Not used for serial emulation.
The host sends this request to get the current settings for a given communications feature. Not used for serial emulation.
The host sends this request to clear the settings for a given communications feature. Not used for serial emulation.

Nustatyti eilutęKodavimas

The host sends this request to configure the ACM device settings: baud rate, number of stop bits, parity type and number of data bits. For a serial emulation, this request is sent automatically by a serial terminal each time you configure the serial settings for an open virtual COM port.

GetLineCoding

Pagrindinis kompiuteris siunčia šią užklausą, norėdamas gauti dabartinius ACM nustatymus (baudos greitį, stabdymo bitus, lyginumą, duomenų bitus). Nuosekliosios emuliacijos atveju nuoseklieji terminalai siunčia šią užklausą automatiškai, atidarant virtualų COM prievadą.

„SetControlLineState“ Pagrindinis kompiuteris siunčia šią užklausą, kad valdytų pusdupleksinių modemų nešiklį ir nurodytų, ar duomenų galinė įranga (DTE) yra paruošta, ar ne. Nuosekliosios emuliacijos atveju DTE yra nuoseklusis terminalas. Nuosekliosios emuliacijos atveju tam tikri nuoseklieji terminalai leidžia siųsti šią užklausą su nustatytais valdikliais.

SetBreak

The host sends this request to generate an RS-232 style break. For a serial emulation, certain serial terminals allow you to send this request.

„Silicon Labs9“ ACM poklasis naudoja „interrupt IN“ galinį tašką, kad praneštų pagrindiniam kompiuteriui apie dabartinę nuosekliosios linijos būseną. Nuoseklioji linija
eilutės būsena yra bitmap, informuojantis pagrindinį kompiuterį apie:

Data discarded because of overrun Parity error Framing error State of the ring signal detection State of break detection mechanism State of transmission carrier State of receiver carrier detection

Silicon Labs9 ACM subclass implementation complies with the following specification:
Universali nuoseklioji magistralė, ryšiai, PSTN įrenginių poklasis, 1.2 redakcija, 2007 m. vasario 9 d.
USB įrenginio CDC ACM klasės konfigūracija

Šiame skyriuje aptariama, kaip konfigūruoti CDC ACM klasę (ryšio įrenginio klasę, abstraktų valdymo modelį). Yra dvi konfigūracijos parametrų grupės:
USB įrenginio CDC ACM klasės konkrečios programos konfigūracijos USB įrenginio CDC ACM klasės egzemplioriaus konfigūracijos
USB įrenginio CDC ACM klasės konkrečios programos konfigūracijos

CDC Base Class ACM Subclass
CDC bazinė klasė

Pirmiausia, norėdami naudoti „Silicon Labs“ USB įrenginio CDC klasės modulį, turėsite pakoreguoti CDC kompiliavimo laiko konfigūraciją #define-s pagal savo programos poreikius. Jie yra pergrupuoti sl_usbd_core_config.h antraštėje. file CDC skyriuje. Jų paskirtis – informuoti USB įrenginio modulį apie tai, kiek USB CDC objektų skirti.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

22/174

Baigėsiview

Žemiau esančioje lentelėje aprašomas kiekvienas šioje konfigūracijos struktūroje esantis konfigūracijos laukas.
Lentelė – USB įrenginio CDC konfigūracijos apibrėžimai

Konfigūracijos pavadinimas
SL_USBD_CDC_CL KAIP S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

Aprašymas
Klasės egzempliorių skaičius, kurį paskirsite iškvietę funkciją
sl_usbd_cdc_acm_create_instance() . (Šis kodas nekeičiamas, todėl jį galima naudoti kaip originalų kodą.)
Konfigūracijų skaičius. ACM klasės egzempliorius galima pridėti prie vienos ar kelių aaaa konfigūracijų, įtraukiant jas į sl_usbd_cdc_acm_add_to_configuration() funkciją.
Total number of data interfaces (DCI) for all the CDC functions. Each CDC ACM function a a a a a a a a a dded vi c ll to the function sl_usbd_cdc_acm_create_instance() will dd d t interf ce.

Numatytoji reikšmė
2
1
2

ACM poklasis
The ACM subclass has one compile-time configuration shown in the table below.
Lentelė – USB įrenginio CDC ACM konfigūracijos apibrėžimas

Konfigūracijos pavadinimas
SL_USBD_CDC_ACM_SUBCL ASS_I NOSTANCE_QUANTITY

Aprašymas
Konfigūruoja poklasio egzempliorių, kuriuos paskirsite iškvietę, skaičių.
function sl_usbd_cdc_acm_create_instance() .

Numatytoji reikšmė
2

USB Device CDC ACM Class Instance Configurations

This section defines the configurations related to the CDC ACM serial class instances. Class Instance Creation line state interval call mgmt capabilities p_acm_callbacks
Klasės egzemplioriaus kūrimas

To create a CDC ACM serial class instance, call the function T a sl_usbd_cdc_acm_create_instance() . his function t kes three configuration arguments, as described here.

linijos_būsenos_intervalas
This is the interval (in milliseconds) that your CDC ACM serial class instance will report the line state notifications to the T a a host. his v lue must be power of two (1, 2, 4, 8, 16, etc).

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

Aprašymas
Įrenginys pats tvarko skambučių valdymą. Įrenginys gali siųsti / gauti skambučių valdymo informaciją per duomenų klasės sąsają.

p_acm_callbacks

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

23/174

Baigėsiview

a a M a a p_acm_callbacks is pointer to structure of type sl_usbd_cdc_acm_callbacks_t . Its purpose is to give the CDC AC Cl ss set of callback functions to be called when a CDC ACM event occurs. Not all callbacks are mandatory and a null pointer ( NULL ) can be passed in the callbacks structure variable when the callback is not needed. The table below describes each configuration field available in this configuration structure.
Lentelė – sl_usbd_cdc_acm _callbacks_t konfigūracijos struktūra

Laukai

Aprašymas

.įgalinti

Iškviečiama, kai įjungtas USB klasės egzempliorius

sėkmingai.

.išjungti

Iškviečiama, kai USB klasės egzempliorius yra išjungtas.

.line_control_changed Iškviečiama, kai gaunamas linijos valdymo pakeitimas.

line_coding_changed Called when a line coding change is received.

Funkcijos parašas
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_linijos_kodavimas

See section Registering Event Notification Callbacks for callback functions example.
USB Device CDC ACM Class Programming Guide

Šiame skyriuje paaiškinama, kaip naudoti CDC abstrakčiojo valdymo modelio klasę. USB įrenginio CDC ACM klasės inicijavimas USB įrenginio CDC ACM klasės egzemplioriaus pridėjimas prie įrenginio Ryšys naudojant CDC ACM klasę
USB įrenginio CDC ACM klasės inicijavimas

To add CDC ACM class functionality to your device, you must first initialize the CDC base class and the ACM subclass by a a c lling the functions sl_usbd_cdc_init() nd sl_usbd_cdc_acm_init() . T a a a a a he ex mple below shows how to c ll sl_usbd_cdc_init() nd sl_usbd_cdc_acm_init() using def ult rguments.

Example – Initialization of CDC ACM Class

sl_status_t būsena;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* An error occurred. Error handling should be added here. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}
USB įrenginio CDC ACM klasės egzemplioriaus pridėjimas prie jūsų įrenginio
Norėdami pridėti CDC ACM klasės funkcionalumą prie savo įrenginio, turite sukurti egzempliorių, tada pridėti jį prie savo įrenginio konfigūracijos (-ų).
Creating a CDC ACM Class Instance

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

24/174

Baigėsiview
CDC ACM klasės egzemplioriaus pridėjimas prie įrenginio konfigūracijos (-ų). Įvykių pranešimų atgalinių iškvietimų registravimas.
Creating a 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 būsena;
būsena = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, ir subclass_nbr);
if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}
CDC ACM klasės egzemplioriaus pridėjimas prie įrenginio konfigūracijos (-ų)
Sukūrę CDC ACM klasės egzempliorių, galite jį pridėti prie konfigūracijos iškviesdami funkciją
sl_usbd_cdc_acm_add_to_configuration() . (Pridėti prie konfigūracijos)
Žemiau pateiktame pavyzdyje parodyta, kaip iškviesti sl_usbd_cdc_acm_add_to_configuration().
Example – Iškviesti USBD ACM sl_usbd_cdc_acm_add_to_configuration()

sl_status_t būsena;

būsena = sl_usbd_cdc_acm_add_to_configuration(subclass_nbr,

(1)

config_nbr_fs);

(2)

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

a a a (1) Cl ss number to dd to the configur tion returned by sl_usbd_cdc_acm_create_instance() . (2) Configuration number (here adding it to a Full-Speed configuration).
Įvykių pranešimų atgalinių iškvietimų registravimas
The CDC ACM Serial class can notify your application of any changes in line control or coding via notification callback functions. A callback functions structure can be passed as argument during the ACM instance creation. Note that those callbacks are optional. Example – CDC ACM atgalinių iškvietimų registracija iliustruoja atgalinių iškvietimų registracijos funkcijų naudojimą. Pvz.ample – CDC ACM atgalinių iškvietimų įgyvendinimas rodo pavyzdįample of implementation of the callback functions.
Example – CDC ACM Callbacks Registration

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

25/174

Baigėsiview

uint8_t subclass_nbr; sl_status_t būsena;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }
Example – CDC ACM atgalinių iškvietimų įdiegimas

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 Apply new 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 įvykis, uint8_t įvykis_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;

/* UŽDUOTIS Pritaikyti naują linijos valdymą. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((įvykis_pakeistas ir SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? tiesa : klaidinga;
}

(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
Serijos būsena
Linijų kodavimas Linijų valdymas

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

26/174

Baigėsiview

Line State Subclass Instance Communication
Serijos būsena
Linijų kodavimas
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.
Table – CDC ACM Line Coding Functions

Funkcija
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()

Aprašymas
Jūsų programa gali gauti dabartinius linijų kodavimo nustatymus iš pagrindinio kompiuterio, pateikdama „SetLineCoding“ užklausas, arba naudodama funkciją sl_usbd_cdc_acm_set_line_coding().
Jūsų programa gali nustatyti linijų kodavimą. Pagrindinis kompiuteris gali gauti nustatymus naudodamas „GetLineCoding“ užklausą.

Linijos valdymas
USB prievadas valdo CDC ACM įrenginio linijos valdymą (RTS ir DTR kontaktus, pertraukimo signalą ir pan.). Prireikus jūsų programa yra atsakinga už linijos valdiklių taikymą. Pateikta funkcija, skirta dabartiniams linijos valdikliams gauti ir nustatyti, kaip aprašyta toliau pateiktoje lentelėje.
Table – CDC ACM Line Control Functions

Funkcija
sl_usb d _cd c_acm_get e t_line _control_state ()

Jūsų programa gali gauti dabartinę valdymo linijos būseną, kurią nustatė pagrindinis kompiuteris, naudodama užklausą „SetControlLineState“.

Linijos būsena
The USB host retrieves the line state at a regular interval. Your application must update the line state each time it changes. When necessary, your application is responsible for setting the line state. Two functions are provided to retrieve and set the current line controls, as described in the table below.
Table – CDC ACM Line S tate Functions

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

Your application can set any line state event(s). While setting the line state, an interrupt IN transfer is sent to the host to inform about it a change in the serial line state.
Application can clear two events of the line state: transmission carrier and receiver carrier detection. All the other events are self-cleared by the ACM serial emulation subclass.

Subclass Instance Communication

„Silicon Labs“ ACM poklasis siūlo šias funkcijas, skirtas bendrauti su pagrindiniu kompiuteriu. Daugiau informacijos apie „functions9“ parametrus rasite CDC ACM poklasio funkcijų nuorodoje.

Funkcijos pavadinimas
sl_usb d _cd c_acm_ re ad () sl_usb d _cd c_acm_write ()

Operacija
Gauna duomenis iš pagrindinio kompiuterio per masinį išvesties galinį tašką. Ši funkcija blokuoja. Siunčia duomenis į pagrindinį kompiuterį per masinį įvesties galinį tašką. Ši funkcija blokuoja.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

27/174

Baigėsiview

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 exampŽemiau pateiktas skaitymo ir rašymo pavyzdysampfailas, kuris gauna duomenis iš pagrindinio kompiuterio naudodamas masinio išvesties galinį tašką ir siunčia duomenis į pagrindinį kompiuterį naudodamas masinio įvesties galinį tašką.
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

status;

būsena = sl_usbd_cdc_acm_read(subklasės_nbr,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

status = sl_usbd_cdc_acm_write(subclass_nbr,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

T a a a a a M (1) he cl ss inst nce number cre ted with sl_usbd_cdc_acm_create_instance() provides n intern l reference to the AC subclass to route the transfer to the proper bulk OUT or IN endpoint. (2) Your application must ensure that the buffer provided to the function is large enough to accommodate all the data. Otherwise, synchronization issues might happen. (3) To avoid an infinite blocking situation, specify a timeout expressed in milliseconds. A value of 809 makes the application task wait forever. (4) The application provides the initialized transmit buffer.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

28/174

Baigėsiview
Baigėsiview

USB Device HID Class

USB įrenginio HID klasė viršview USB Device HID Class Resource Needs from Core USB Device HID Class Configuration USB Device HID Class Programming Guide HID Periodic Input Reports Task
Šiame skyriuje aprašoma žmogaus sąsajos įrenginio (HID) klasė, kurią palaiko „Silicon Labs“ USB įrenginys.
HID klasė apima įrenginius, kuriuos žmonės naudoja kompiuterių operacijoms valdyti, tokius kaip klaviatūros, pelės, žymėjimo įrenginiai ir žaidimų įrenginiai.
HID klasė taip pat gali būti naudojama sudėtiniame įrenginyje, kuriame yra valdikliai, tokie kaip rankenėlės, jungikliai, mygtukai ir slankikliai. Pavyzdžiui,ample, mute and volume controls in an audio headset are controlled by the HID function of the headset. HID class can exchange data for any purpose using only control and interrupt transfers.
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.
HID diegimas atitinka šias specifikacijas:
Žmogaus sąsajos įrenginių (HID) įrenginių klasės apibrėžimas, 6-01-27, 1.11 versija. Universaliosios nuosekliosios magistralės HID naudojimo lentelės, 2004-10-28, 1.12 versija.
USB įrenginio HID klasė viršview
Baigėsiview
HID įrenginį sudaro šie galiniai taškai:
Valdymo Įėjimo ir Išėjimo galinių taškų pora, vadinama numatytuoju galiniu tašku. Pertraukimo Įėjimo galinis taškas. Papildomas pertraukimo Išėjimo galinis taškas.
Žemiau esančioje lentelėje aprašomas skirtingų galinių taškų naudojimas:
Lentelė – HID klasės galinių taškų naudojimas

Endpoint Direction Usage

Valdymas IN
Kontrolė
OUT
Pertraukimas ĮĖJIMAS
Pertraukite
OUT

Deviceto-host
Host-todevice
Deviceto-host
Host-todevice

Standartinės išvardijimo, konkrečioms klasėms skirtų užklausų ir duomenų perdavimo užklausos (įvestis, funkcijų ataskaitos, siunčiamos pagrindiniam kompiuteriui su GET_REPORT užklausa). Standartinės išvardijimo, konkrečioms klasėms skirtų užklausų ir duomenų perdavimo užklausos (išvestis, funkcijų ataskaitos, gautos iš pagrindinio kompiuterio su SET_REPORT užklausa). Duomenų perdavimas (įvestis ir funkcijų ataskaitos).
Data communication (Output and Feature reports).

Pranešimas

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

29/174

Baigėsiview

Pagrindinis kompiuteris ir HID įrenginys keičiasi duomenimis naudodami ataskaitas. Ataskaitoje pateikiami suformatuoti duomenys, kuriuose pateikiama informacija apie HID įrenginio valdiklius ir kitus fizinius objektus. Valdiklį gali valdyti vartotojas ir jis valdo įrenginio aspektą. Pavyzdžiui,ampPavyzdžiui, valdiklis gali būti pelės ar klaviatūros mygtukas, jungiklis ir kt. Kiti objektai informuoja vartotoją apie tam tikrų įrenginio funkcijų būseną. Pavyzdžiui,ampPavyzdžiui, klaviatūros šviesos diodai praneša vartotojui apie įjungtą didžiųjų raidžių klavišą, aktyvią skaitmeninę klaviatūrą ir pan.
Ataskaitos duomenų formatą ir naudojimą kompiuteris supranta analizuodamas ataskaitos deskriptoriaus turinį. Turinį analizuoja analizatorius. Ataskaitos deskriptorius aprašo kiekvieno įrenginio valdiklio pateiktus duomenis. Jį sudaro elementai, kurie yra informacija apie įrenginį ir susideda iš 1 baito prefikso ir kintamo ilgio.
duomenys. Daugiau informacijos apie elemento formatą žr.
1.11=, 5.6 ir 6.2.2 skirsniai.
There are three principal types of items:
Main item defines or groups certain types of data fields.
Global item describes data characteristics of a control.
Vietinis elementas apibūdina valdiklio duomenų charakteristikas.
Kiekvieną elemento tipą apibrėžia skirtingos funkcijos. Elemento funkciją taip pat galima vadinti tagElemento funkciją galima laikyti subelementu, priklausančiu vienam iš trijų pagrindinių elementų tipų. Žemiau esančioje lentelėje pateikiama trumpa apžvalga.view kiekvieno elemento tipo elementų funkcijų. Išsamų kiekvienos kategorijos elementų aprašymą žr.
Table – Item’s Function Description for Each Item Type

Item Item Type Function

Aprašymas

Pagrindinė įvestis

Describes information about the data provided by one or more physical controls.

Main Output Describes data sent to the device.

Pagrindinė funkcija

Describes device configuration information sent to or received from the device which influences the overall behavior of the device or one of its components.

Pagrindinės kolekcijos grupės susiję elementai (įvestis, išvestis arba funkcija).

Main End of Closes a collection. Collection

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

30/174

Baigėsiview

Item Item Type Function

Aprašymas

Visuotinio naudojimo puslapis

Nurodo įrenginyje esančią funkciją.

Global Logical Apibrėžia apatinę pateikiamų reikšmių ribą loginiais vienetais. Minimalus

Global Logical Apibrėžia viršutinę pateikiamų reikšmių ribą loginiais vienetais. Maksimalus

Globalus fizinis Apibrėžia apatinę pateikiamų verčių ribą fiziniais vienetais, t. y. loginį minimumą, išreikštą fiziniais vienetais.

Global Physical Apibrėžia viršutinę pateikiamų verčių ribą fiziniais vienetais, t. y. loginį maksimumą, išreikštą fiziniais vienetais.

Pasaulinis padalinys

Indicates the unit exponent in base 10. The exponent ranges from -8 to +7.

Rodiklis

Pasaulinis padalinys

Nurodo pateiktų verčių vienetą. Pavyzdžiui, ilgio, masės, temperatūros vienetai ir kt.

Visuotinis ataskaitos dydis

Nurodo ataskaitos laukų dydį bitais.

Global Report ID Indicates the prefix added to a particular report.

Visuotinis ataskaitų skaičius

Indicates the number of data fields for an item.

Global Push

Į CPU steko įdeda visuotinės elementų būsenos lentelės kopiją.

Pasaulinis popsas

Replaces the item state table with the last structure from the stack.

Vietinis naudojimas

Represents an index to designate a specific Usage within a Usage Page. It indicates the vendor9s suggested use for a specific control or group of controls. A usage supplies information to an application developer about what a control is actually measuring.

Vietinis naudojimas

Apibrėžia pradinį naudojimą, susietą su masyvu arba bitų žemėlapiu.

Minimalus

Vietinis naudojimas

Defines the ending usage associated with an array or bitmap.

Maksimalus

Local Designator Determines the body part used for a control. Index points to a designator in the Physical

Rodyklė

deskriptorius.

Local Designator Defines the index of the starting designator associated with an array or bitmap. Minimum

Vietinis žymuo (Local Designator) apibrėžia su masyvu arba bitų žemėlapiu susijusio galinio žymuo indeksą.

Local String Index

String index for a String descriptor. It allows a string to be associated with a particular item or control.

Vietinė eilutė

Specifies the first string index when assigning a group of sequential strings to controls in an array

Minimum or bitmap.

Vietinis Vietinis

String Maximum
Skirstytuvas

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.

A control9s data must define at least the following items:
Input, Output or Feature Main items Usage Local item Usage Page Global item Logical Minimum Global item Logical Maximum Global item Report Size Global item

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

31/174

Baigėsiview
Ataskaitų skaičius Visuotinis elementas Žemiau esančioje lentelėje parodytas pelės ataskaitos deskriptoriaus turinio atvaizdavimas iš pagrindinio kompiuterio HID analizatoriaus perspektyvos. Pelė turi tris mygtukus (kairįjį, dešinįjį ir ratuką). Pavyzdyje pateiktas kodasample below is a code implementation corresponding to this mouse Report descriptor representation.
Figure – Report Descriptor Content from a Host HID Parser View

(1) Naudojimo puslapio elemento funkcija nurodo bendrą įrenginio funkciją. Šiame pavyzdyjeample, the HID device belongs to a
bendras darbalaukio valdymas.
(2) The Collection Application groups Main items that have a common purpose and may be familiar to applications. In the diagram, the group is composed of three Input Main items. For this collection, the suggested use for the controls is a mouse as indicated by the Usage item. (3) Nested collections may be used to give more details about the use of a single control or group of controls to applications. In this exampFizinis kolekcijos elementas, įdėtas į kolekcijos programą, sudarytas iš tų pačių trijų įvesties elementų, kurie sudaro kolekcijos programą. Fizinis kolekcijos elementas naudojamas duomenų elementų rinkiniui, kuris vaizduoja viename geometriniame taške surinktus duomenų taškus. Pavyzdžiui,ampPavyzdžiui, siūlomas naudojimas yra rodyklė, kaip nurodyta elemente „Naudojimas“. Čia rodyklės naudojimas reiškia pelės padėties koordinates, o sistemos programinė įranga perkels pelės koordinates pagal ekrano žymeklio judėjimą. (4) Taip pat galimi įterptiniai naudojimo puslapiai, kuriuose pateikiama daugiau informacijos apie tam tikrą aspektą, susijusį su bendra įrenginio funkcija. Šiuo atveju du įvesties elementai yra sugrupuoti ir atitinka pelės mygtukus. Vienas įvesties elementas apibrėžia tris pelės mygtukus (dešinįjį, kairįjį ir ratuką) pagal elemento duomenų laukų skaičių (ataskaitos skaičiaus elementas), duomenų lauko dydį (ataskaitos dydžio elementas) ir galimas kiekvieno duomenų lauko reikšmes (minimalus ir maksimalus naudojimas, loginis minimumas ir maksimalus elementai). Kitas įvesties elementas yra 13 bitų konstanta, leidžianti įvesties ataskaitos duomenis sulygiuoti su baitų riba. Šis įvesties elementas naudojamas tik užpildymui. (5) Kitas įterptinis naudojimo puslapis, susijęs su bendru darbalaukio valdikliu, yra apibrėžtas pelės padėties koordinatėms. Šiame naudojimo puslapyje įvesties elementas aprašo duomenų laukus, atitinkančius x ir y ašis, kaip nurodyta dviejuose naudojimo elementuose.
daiktų.
Išanalizavęs ankstesnį pelės ataskaitos deskriptoriaus turinį, „host9s HID“ analizatorius gali interpretuoti įvesties ataskaitos duomenis, kuriuos įrenginys atsiuntė su pertraukties IN perdavimu arba atsakydamas į GET_REPORT užklausą. Įvesties ataskaitos duomenys, atitinkantys pelės ataskaitos deskriptorių, parodytą paveiksle – „Ataskaitos deskriptoriaus turinys iš pagrindinio HID analizatoriaus“. View is

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

32/174

Baigėsiview

shown in the table below. The total size of the report data is 4 bytes. Different types of reports may be sent over the same endpoint. For the purpose of distinguishing the different types of reports, a 1-byte report ID prefix is added to the data report. If a report ID was used in the exampPelės ataskaitos atveju bendras ataskaitos duomenų dydis būtų 5 baitai.
Lentelė – Įvesties ataskaita, išsiųsta pagrindiniam kompiuteriui ir atitinkanti 3 mygtukų pelės būseną

Bitų poslinkis
0 1 2 3 16 24

Bit Count 1 1 1 13 8 8

Aprašymas 1 mygtukas (kairysis mygtukas). 2 mygtukas (dešinysis mygtukas). 3 mygtukas (ratelio mygtukas). Nenaudojamas. Padėtis X ašyje. Padėtis Y ašyje.

Fizinis deskriptorius nurodo kūno dalį arba dalis, skirtas(-ias) aktyvuoti valdiklį arba valdiklius. Programa gali naudoti šią informaciją, norėdama priskirti įrenginio valdikliui funkciją. Fizinis deskriptorius yra pasirenkamas, klasei būdingas deskriptorius, ir dauguma įrenginių jį naudoja mažai. Žr.
USB Device HID Class Resource Needs from Core

Kiekvieną kartą, kai prie USB konfigūracijos pridedate HID klasės egzempliorių iškvietę funkciją sl_usbd_hid_add_to_configuration(), iš branduolio bus paskirstyti šie ištekliai.

Išteklius
Interfaces Alternate interfaces Endpoints Interface groups

Kiekis
1 1 1 (2 if interrupt OUT endpoint is enabled) 0

Note that those numbers are per configuration. When setting up your SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY and SL_USBD_DESCRIPTOR_QUANTITY configuration values, don’t forget to take into account on how many configurations the class will be added. For the SL_USBD_OPEN_ENDPOINTS_QUANTITY configuration value, since endpoints are opened only when a configuration is set by the host, you just need to take into account the number of needed endpoints for a class instance.
USB Device HID Class Configuration

Two groups of configuration parameters are used to configure the HID class:
USB Device HID Class Application-Specific Configurations USB Device HID Class Instance Configurations
USB Device HID Class Application-Specific Configurations

Pirmiausia, norėdami naudoti „Silicon Labs“ USB įrenginio HID klasės modulį, pakoreguokite HID kompiliavimo laiko konfigūracijos apibrėžimus pagal savo programos poreikius. Jie yra pergrupuoti sl_usbd_core_config.h antraštėje. file under the HID section. They can be divided into two sections, the quantity configurations and the HID task configurations. The quantity configurations purpose is to inform the USB device module about how many USB HID objects to allocate.
Žemiau esančioje lentelėje aprašomas kiekvienas konfigūracijos apibrėžimas.
Lentelė – USB įrenginio HID konfigūracijos apibrėžimai

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

33/174

Baigėsiview

Konfigūracijos pavadinimas
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_KIEKIS
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY

Aprašymas
Klasės egzempliorių skaičius, kurį paskirsite iškvietę funkciją
sl_usbd_hid_create_instance().
Number of configurations. HID class instances can be added to one or more a a a a configur tions vi c ll to the function sl_usbd_hid_add_to_configuration() . Configures the total number of report IDs to allocate.
Configures the total number of Push/Pop items to allocate.
The timer task handles all the timer-based HID operations. This configuration allows you to set the stack size (in number of bytes). Priority of HID task. his is a CMSIS-RTOS2 priority.

Numatytoji reikšmė
2 1 2 0 2048
osPriorityHigh

USB įrenginio HID klasės egzemplioriaus konfigūracijos klasės egzemplioriaus kūrimo poklasis
protocol country_code
interval_in ir interval_out p_hid_callback HID klasės ataskaitos deskriptoriaus pavyzdysample This section defines the configurations related to the HID class instances.
Klasės egzemplioriaus kūrimas
HID klasės egzempliorius sukuriamas iškviečiant funkciją aaa sl_usbd_hid_create_instance(), kuri naudoja kelis toliau aprašytus konfigūracijos argumentus.
poklasis
HID poklasio kodas. Galimos reikšmės:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
HID įrenginys, kuris naudoja įkrovos poklasį, turi naudoti standartinius ataskaitų formatus. Daugiau informacijos apie poklasių kodus rasite HID specifikacijos 1.11 redakcijos 4.2 skyriuje.
protokolas
HID įrenginio naudojamas protokolas. Galimos reikšmės:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Jei jūsų HID funkcija yra pelė, protokolas turėtų būti nustatytas į SL_USBD_HID_PROTOCOL_MOUSE. Jei tai klaviatūra, protokolas turėtų būti nustatytas į SL_USBD_HID_PROTOCOL_KBD. Priešingu atveju, protokolas turėtų būti nustatytas į SL_USBD_HID_PROTOCOL_NONE. Daugiau informacijos apie poklasių kodus rasite HID specifikacijos 1.11 redakcijos 4.3 skyriuje.
šalies_kodas
Šalies kodo ID. Galimos reikšmės:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

34/174

Baigėsiview
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_CODE_CZECH_REPUBLIC 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_HID_COUNTRY_CODE_HEBREW 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_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AND SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL AND SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
The country code identifies which country the hardware is localized for. Most hardware is not localized and therefore this a a a a v lue would be SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). However, keybo rds m y use the field to indic te the language of the key caps.
For more information on the country codes, see section 6.2.1 of HID specification revision 1.11.
interval_in and interval_out
interval_in and interval_out represent the polling interval of the IN interrupt endpoint and the OUT interrupt endpoint.
Tai nurodo galinio taško apklausos intervalą milisekundėmis. Šios vertės nustatymas priklauso nuo to, kaip dažnai jūsų įrenginys gali generuoti naują ataskaitą pagrindiniam kompiuteriui. Pavyzdžiui, jei ataskaita generuojama kas 16 milisekundžių, intervalas turėtų būti 16 arba mažesnis.
Reikšmė turi būti 2 laipsnis (1, 2, 4, 8, 16 ir t. t.).
Jei „ctrl_rd_en“ yra nustatyta kaip „true“, interval_out reikšmė ignoruojama.
p_hid_atgalinis skambutis
„aaaa p_hid_callback“ yra rodyklė į sl_usbd_hid_callbacks_t tipo struktūrą. Jos paskirtis – pateikti HID clss grįžtamojo ryšio funkcijų rinkinį, kuris bus iškviestas įvykus HID įvykiui.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

35/174

Baigėsiview

Not all callbacks are mandatory and a null pointer ( NULL ) can be passed in the callbacks structure variable when the callback is not needed. The table below describes each configuration field available in this configuration structure.
Table – sl_usbd_hid_callbacks_t Configuration Structure

Laukai

Aprašymas

Funkcijos parašas

.enable .disable .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

Iškviečiama, kai USB klasės egzempliorius sėkmingai įjungiamas. Iškviečiama, kai USB klasės egzempliorius išjungiamas.
Iškviečiama kuriant HID egzempliorių, norint perduoti jūsų ataskaitos deskriptorių. Kiekvienai HID funkcijai turite pateikti ataskaitos deskriptorių. Ataskaitos deskriptorius nurodo pagrindiniam kompiuteriui, kaip turėtų būti analizuojama periodinė ataskaita, kurią siųs įrenginys. Savo ataskaitos deskriptoriaus rašymas gali būti sudėtingas, todėl yra keletas išteklių, kurie gali padėti. Tai vienintelė privaloma atgalinio iškvietimo funkcija. Iškviečiama kuriant HID egzempliorių, norint perduoti jūsų fizinį deskriptorių. Fizinis deskriptorius yra deskriptorius, teikiantis informaciją apie konkrečią žmogaus kūno dalį ar dalis, kurios aktyvuoja valdiklį ar valdiklius. Daugiau informacijos apie fizinius deskriptorius rasite HID specifikacijos 1.11 redakcijos 6.2.3 skyriuje. Fizinis deskriptorius yra neprivalomas ir dažniausiai ignoruojamas. Čia perduodamą buferį galima nustatyti į NULL, o ilgį – į 0. Iškviečiama, kai pagrindinis kompiuteris nustato ataskaitą, kaip aprašyta jūsų ataskaitos deskriptoriuje (kai jis siunčia ataskaitą).
Iškviečiama, kai pagrindinis kompiuteris prašo pateikti funkcijų ataskaitą, kaip aprašyta jūsų ataskaitos apraše.
Called when the host sets a feature report as described in your 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); **kaip**
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); } * Naudotojo vardas, pavardė (UTC)*

.get_protocol

Retrieves current active protocol.

void app_usbd_hid_get_protocol(uint8_t klasės_nbr, uint8_t *p_protocol);

.set_protocol

Nustato šiuo metu aktyvų protokolą.

void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protokolas);

HID klasės ataskaitos aprašas (pvz., išorinis pavadinimas)ample

„Silicon Labs“ HID klasės lemposampprograma pateikia pavyzdįample 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)

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

36/174

Baigėsiview

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_PAGRINDINIS_KINTAMASIS |

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_PAGRINDINIS_KINTAMASIS |

SL_USBD_HID_MAIN_RELATIVE,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Pelės ataskaitos deskriptoriaus lentelė inicijuojama taip, kad kiekviena eilutė atitiktų trumpą elementą. Pastarasis sudaromas iš 1 baito prefikso ir 1 baito duomenų. Žr. viewpaveiksle pavaizduotas pagrindinio kompiuterio HID analizatoriaus ataskaitos aprašo turinys. View.
(2) The Generic Desktop Usage Page is used.
(3) Bendrojo darbalaukio naudojimo puslapyje naudojimas tag suggests that the group of controls is for controlling a mouse. A mouse collection typically consists of two axes (X and Y) and one, two, or three buttons.
(4) The mouse collection is started.
(5) Pelių kolekcijoje yra naudojimo būdas tag suggests more specifically that the mouse controls belong to the pointer collection. A pointer collection is a collection of axes that generates a value to direct, indicate, or point user intentions to an application.
(6) Pradedamas rodyklių rinkimas.
(7) The Buttons Usage Page defines an Input item composed of three 1-bit fields. Each 1-bit field represents the mouse9s button 1, 2 and 3 respectively and can return a value of 0 or 1.
(8) Mygtukų naudojimo puslapio įvesties elementas papildytas 13 kitų bitų.
(9) Another Generic Desktop Usage Page is indicated for describing the mouse position with the axes X and Y. The Input item is composed of two 8-bit fields whose value can be between -127 and 127.
(10) Rodyklės rinkinys uždarytas.
(11) The mouse collection is closed.
USB.org HID Page

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

37/174

Baigėsiview
USB diegėjų forumas (USB-IF) teikia įrankį, vadinamą „HID deskriptoriaus įrankiu“, kartu su kita informacija apie ataskaitos deskriptoriaus formatą. Daugiau informacijos rasite adresu http://www.usb.org/developers/hidpage/.
USB įrenginio HID klasės programavimo vadovas
Šiame skyriuje paaiškinama, kaip naudoti HID klasę. USB įrenginio HID klasės inicijavimas USB įrenginio HID klasės egzemplioriaus pridėjimas prie įrenginio Ryšys naudojant USB įrenginį HID klasė
USB įrenginio HID klasės inicijavimas
Norėdami pridėti HID klasės funkcionalumą prie savo įrenginio, pirmiausia turite inicijuoti klasę iškviesdami funkciją sl_usbd_hid_init(). Pavyzdžiui,ample below shows how to call sl_usbd_hid_init() using default arguments. For more information on the configuration arguments to pass to sl_usbd_hid_init() , see USB Device HID Class Application Specific Configurations .
Example – iškviečiama sl_usbd_hid_init() funkcija
sl_status_t būsena;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* An error occurred. Error handling should be added here. */
}
USB įrenginio HID klasės egzemplioriaus pridėjimas prie įrenginio
Norėdami pridėti HID klasės funkcionalumą prie savo įrenginio, turite sukurti egzempliorių, tada pridėti jį prie savo įrenginio konfigūracijos (-ų).
HID klasės egzemplioriaus kūrimas
Create a HID class instance by calling the function sl_usbd_hid_create_instance() . The example below shows how to create a simple mouse function via sl_usbd_hid_create_instance() using default arguments. For more information on the configuration arguments to pass to sl_usbd_hid_create_instance() , see USB Device HID Class Instance Configurations .
Example – Pelės funkcijos pridėjimas naudojant sl_usbd_hid_create_instance()

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

38/174

Baigėsiview
/* 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_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0,03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0,00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0,01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0,03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0,01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Vietiniai kintamieji.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)klasių_nr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
būsena = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, tiesa, ir app_usbd_hid_callbacks, ir class_nbr);
Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

39/174

Baigėsiview
/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
HID klasės egzemplioriaus pridėjimas prie įrenginio konfigūracijos (-ų). Sukūrę HID klasės egzempliorių, galite jį pridėti prie konfigūracijos iškviesdami funkciją
sl_usbd_hid_add_to_configuration() .
BuvęsampŽemiau esančiame paveikslėlyje parodyta, kaip iškviesti sl_usbd_hid_add_to_configuration().
Example – Calling sl_usbd_hid_add_to_configuration()

sl_status_t būsena;

sl_usbd_hid_add_to_configuration(class_nbr,

(1)

konfigūracijos_nbr_fs); (2)

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

(1) Klasės numeris, kurį reikia pridėti prie sl_usbd_hid_create_instance() grąžinamos konfigūracijos. (2) Konfigūracijos numeris (čia pridedamas prie viso greičio konfigūracijos).
Communicating Using the USB Device HID Class
Klasės egzemplioriaus ryšys Sinchroninis ryšys Klasės egzemplioriaus ryšys HID klasė siūlo šias funkcijas bendravimui su pagrindiniu kompiuteriu.
Table – HID Communication API Summary

Funkcijos pavadinimas
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()

Operacija Gauna duomenis iš pagrindinio kompiuterio per pertraukimo išėjimo galinį tašką. Ši funkcija blokuoja. Siunčia duomenis į pagrindinį kompiuterį per pertraukimo įėjimo galinį tašką. Ši funkcija blokuoja.

Synchronous Communication Synchronous communication means that the transfer is blocking. Upon the function call, the applications blocks until the transfer is completed with or without an error. A timeout can be specified to avoid waiting forever. The exampŽemiau pateiktame paveikslėlyje parodytas skaitymo ir rašymo procesas, kurio metu duomenys gaunami iš pagrindinio kompiuterio per pertraukimo išėjimo galinį tašką ir siunčiami į pagrindinį kompiuterį per pertraukimo įėjimo galinį tašką.
Example – Sinchroninis HID skaitymas ir rašymas

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_hid_read_sync(class_nbr,

(1)

(negaliojantis *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

40/174

Baigėsiview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* An error occurred. Error handling should be added here. */}
(1) Klasės egzemplioriaus numeris, sukurtas naudojant sl_usbd_hid_create_instance() funkciją, suteikia vidinę nuorodą HID klasei, kad būtų galima nukreipti perdavimą į tinkamą pertraukimo OUT arba IN galinį tašką.
(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. Internally, the read operation is done either with the control endpoint or with the interrupt endpoint, depending on the control read flag set when calling sl_usbd_hid_create_instance() .
(3) Siekiant išvengti begalinio blokavimo, galima nurodyti skirtąjį laiką, išreikštą milisekundėmis. 809 reikšmė priverčia programos užduotį laukti amžinai.
(4) Programa pateikia inicializuotą perdavimo buferį.
HID periodinių įvesties ataskaitų užduotis
To save bandwidth, the host has the ability to silence reports from an interrupt IN endpoint by limiting the reporting frequency. To do so, the host must send the SET_IDLE request. The HID class implemented by Silicon Labs contains an internal task that respects the reporting frequency limitation that you can apply to one or several input reports. Figure Periodic Input Reports Task shows the functioning of the periodic input reports tasks.
Figure – Periodic Input Reports Task

(1) The device receives a SET_IDLE request. This request specifies an idle duration for a given report ID. For more details about the SET_IDLE request, see <Device Class Definition for Human Interface Devices (HID) Version 1.11=, section 7.2.4. A report ID allows you to distinguish among the different types of reports sent from the same endpoint.
(2) Ataskaitos ID struktūra (priskirta HID klasės inicijavimo etape) atnaujinama naudojant neveiklumo trukmę. Neveiklumo trukmės skaitiklis inicijuojamas naudojant neveiklumo trukmės reikšmę. Ataskaitos ID struktūra įterpiama susietojo sąrašo, kuriame yra įvesties ataskaitų ID struktūros, pabaigoje. Neveiklumo trukmės reikšmė išreiškiama 4 ms vienetu, kuris atitinka diapazoną nuo 4 iki 1020 ms.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

41/174

Baigėsiview
Jei prastovos trukmė yra trumpesnė už pertraukties IN galinio taško apklausos intervalą, ataskaitos generuojamos apklausos intervalu.
(3) Kas 4 ms periodinė įvesties ataskaitos užduotis peržiūri įvesties ataskaitų ID sąrašą. Kiekvienam įvesties ataskaitos ID užduotis atlieka vieną iš dviejų galimų operacijų. Užduoties laikotarpio trukmė atitinka 4 ms vienetą, naudojamą neveiklumo trukmei. Jei pagrindinis kompiuteris nesiuntė jokių SET_IDLE užklausų, įvesties ataskaitų ID sąrašas yra tuščias ir užduotis neturi ko apdoroti. Užduotis apdoroja tik tuos ataskaitų ID, kurie skiriasi nuo 0 ir kurių neveiklumo trukmė yra didesnė nei 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) If the idle duration has elapsed (that is, the idle duration counter has reached zero), an input report is sent to the host by calling the sl_usbd_hid_write_sync() function via the interrupt IN endpoint.
(6) Užduoties siunčiami įvesties ataskaitos duomenys gaunami iš vidinio duomenų buferio, skirto kiekvienai įvesties ataskaitai, aprašytai ataskaitos apraše. Programos užduotis gali iškviesti funkciją sl_usbd_hid_write_sync(), kad išsiųstų įvesties ataskaitą. Išsiuntusi įvesties ataskaitos duomenis, sl_usbd_hid_write_sync() atnaujina vidinį buferį, susietą su įvesties ataskaitos ID, ką tik išsiųstais duomenimis. Tada periodinių įvesties ataskaitų užduotis visada siunčia tuos pačius įvesties ataskaitos duomenis po kiekvienos prastovos trukmės ir tol, kol programos užduotis atnaujina duomenis vidiniame buferyje. Yra tam tikras užrakinimo mechanizmas, skirtas išvengti įvesties ataskaitos ID duomenų sugadinimo, jei modifikacija įvyksta tiksliai tuo metu, kai perduodama periodinė įvesties ataskaita.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

42/174

Baigėsiview
Baigėsiview
USB Device MSC Class
USB įrenginio MSC klasė viršview USB Device MSC Class Resource Needs from Core USB Device MSC Class Configuration USB Device MSC Class Programming Guide USB Device MSC Class Storage Drivers
Šiame skyriuje aprašoma „Silicon Labs“ USB įrenginio palaikoma masinio saugojimo įrenginių klasė (MSC). MSC yra protokolas, leidžiantis perduoti informaciją tarp USB įrenginio ir pagrindinio kompiuterio. Perduodama informacija yra bet kokia informacija, kurią galima saugoti elektroniniu būdu, pvz., vykdomosios programos, šaltinio kodas, dokumentai, vaizdai, konfigūracijos duomenys arba kiti tekstiniai ar skaitmeniniai duomenys. USB įrenginys pagrindiniam kompiuteriui rodomas kaip išorinė laikmena, leidžianti perduoti files via drag and drop.
A file system defines how the fileyra sutvarkyti laikmenoje. USB masinės atminties klasės specifikacija nereikalauja jokių konkrečių file system to be used on conforming devices. Instead, it provides a simple interface to read and write sectors of data using the Small Computer System Interface (SCSI) transparent command set. As such, operating systems may treat the USB drive like a hard drive, and can format it with any file sistema, kuri jiems patinka.
The USB mass storage device class supports two transport protocols, as follows:
Tik masinis transportavimas (BOT) Valdymo / masinis / pertraukimo (CBI) transportavimas (naudojamas tik diskelių įrenginiams)
The mass storage device class implements the SCSI transparent command set using the BOT protocol only, which signifies that only bulk endpoints will be used to transmit data and status information. The MSC implementation supports multiple logical units.
MSC įgyvendinimas atitinka šias specifikacijas:
Universaliosios nuosekliosios magistralės masinio saugojimo klasės specifikacija viršview, 1.3 redakcija, 2008 m. rugsėjo 5 d. Universaliosios nuosekliosios magistralės masinio saugojimo klasė (tik dideliems kiekiams skirtas transportavimas), 1.0 redakcija, 1999 m. rugsėjo 31 d.
USB įrenginys MSC aCl ss perview
Protokolo galiniai taškai Klasės užklausos Mažos kompiuterinės sistemos sąsaja (SCSI)
protokolas
Šiame skyriuje aptarsime masinio saugojimo klasės (angl. Mass Storage Class) tik masinio perdavimo (angl. BOT) protokolą. Tik masinio perdavimo protokolas turi tris ypatybes:tages:
The Command Transport The Data Transport The Status Transport
Masinio saugojimo komandas pagrindinis kompiuteris siunčia per struktūrą, vadinamą komandų bloko apvalkalu (CBW). Komandoms, kurioms reikalingas duomenų perdavimo stage., pagrindinis kompiuteris bandys išsiųsti arba gauti tikslų baitų skaičių iš įrenginio, kaip nurodyta CBW ilgio ir žymės laukuose. Po duomenų perdavimotage, the host attempts to receive a Command Status Wrapper (CSW) from the device that details the status of the command as well as any data residue (if

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

43/174

Baigėsiview
any). For commands that do not include a data transport stage., pagrindinis kompiuteris bando gauti CSW iš karto po CBW išsiuntimo. Protokolas išsamiai aprašytas paveiksle – MSC protokolas.
Paveikslėlis – MSC protokolas

Galiniai taškai
Įrenginio pusėje, laikantis BOT specifikacijos, MSC sudaro šie galiniai taškai: Valdymo įvesties ir išvesties galinių taškų pora, vadinama numatytuoju galiniu tašku. Masinių įvesties ir išvesties galinių taškų pora.
Žemiau esančioje lentelėje nurodyti skirtingi galinių taškų naudojimo būdai.
Lentelė – MSC galinio taško naudojimas

Galutinis taškas
Control IN Control OUT Bulk IN Bulk OUT

Kryptis
Įrenginys tarp pagrindinio kompiuterio Pagrindinio kompiuterio ir įrenginio Įrenginys tarp pagrindinio kompiuterio Pagrindinio kompiuterio ir įrenginio

Naudojimas
Išvardijimo ir MSC klasėms būdingos užklausos Išvardijimo ir MSC klasėms būdingos užklausos Siųsti CSW ir duomenis Gauti CBW ir duomenis

Užsiėmimų užklausos
There are two defined control requests for the MSC BOT protocol. These requests and their descriptions are detailed in the table below.

Lentelė – Masinio saugojimo klasės užklausos

Užsiėmimų užklausos
Masinio saugojimo nustatymas iš naujo tik dideliais kiekiais

Aprašymas
Ši užklausa naudojama didelės talpos atminties įrenginiui ir su juo susijusiai sąsajai atkurti. Ši užklausa paruošia įrenginį priimti kitą komandų bloką.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

44/174

Baigėsiview

Užsiėmimų užklausos

Aprašymas

„Gauti maksimalų“ Ši užklausa naudojama norint grąžinti didžiausią įrenginio palaikomą loginio vieneto numerį (LUN). Pvz.ample, a

LUN

device with LUN 0 and LUN 1 will return a value of 1. A device with a single logical unit will return 0 or stall the

užklausa. Didžiausia grąžinama reikšmė yra 15.

Mažos kompiuterinės sistemos sąsaja SCSI

At the programming interface level, the MSC device implements one of the standard storage-media communication protocols, like SCSI and SFF-8020i (ATAPI). The “Programming Interface” specifies which protocol is implemented, and helps the host operating system to load the suitable device driver for communicating with the USB storage device. SCSI is the most common protocol used with USB MSC storage devices. We provide an implementation for MSC SCSI subclass that our GSDK users can use out of the box.
SCSI yra standartų rinkinys, skirtas ryšiui tarp kompiuterių ir periferinių įrenginių tvarkyti. Šie standartai apima komandas, protokolus, elektrines ir optines sąsajas. Saugojimo įrenginiai, kurie naudoja kitas aparatinės įrangos sąsajas, pvz., USB, naudoja SCSI komandas įrenginio / pagrindinio kompiuterio informacijai gauti, įrenginio veikimui valdyti ir duomenų blokams perduoti saugojimo laikmenoje.
SCSI komandos apima platų įrenginių tipų ir funkcijų spektrą, todėl įrenginiams reikalingas šių komandų pogrupis. Paprastai pagrindiniam ryšiui būtinos šios komandos:
UŽKLAUSA SKAITYMO TALPA (10) SKAITYMAS (10) UŽKLAUSA JUTIMO BANDYMAS ĮRENGINYS PARUOŠTAS RAŠYMAS (10)
USB įrenginio MSC klasės išteklių poreikiai iš „Core“

Kiekvieną kartą, kai prie USB konfigūracijos pridedate MSC klasės egzempliorių naudodami funkciją sl_usbd_msc_add_to_configuration(), iš branduolio bus paskirstyti šie ištekliai.

Išteklius
Interfaces Alternate interfaces Endpoints Interface groups

Kiekis
1 1 2 0

Note that those numbers are per configuration. When setting up your SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY and SL_USBD_DESCRIPTOR_QUANTITY configuration values, don’t forget to take into account on how many configurations the class will be added. For the SL_USBD_OPEN_ENDPOINTS_QUANTITY configuration value, since endpoints are opened only when a configuration is set by the host, you just need to take into account the number of needed endpoints for a class instance.
USB įrenginio MSC klasės konfigūracija

MSC klasei konfigūruoti naudojamos dvi konfigūracijos parametrų grupės:
USB įrenginio MSC klasės konkrečios programos konfigūracijos, USB įrenginio MSC klasės loginio vieneto konfigūracija
USB įrenginio MSC klasės konkrečios programos konfigūracijos

Class Compile-Time Configurations Class Instance Creation

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

45/174

Baigėsiview

Klasės kompiliavimo laiko konfigūracijos
„Silicon Labs“ USB įrenginio MSC klasę ir SCSI poklasį galima konfigūruoti kompiliavimo metu naudojant #defines, esančias sl_usbd_core_config.h faile. file.
Lentelė – Bendrosios konfigūracijos konstantos

Konfigūracijos pavadinimas

Aprašymas

SL_USBD_MSC_CLASS_INST Klasės egzempliorių skaičius, kurį paskirsite iškvietę funkciją

KIEKIS

sl_usbd_msc_scsi_create_instance() . (Šis kodas nekeičiamas, todėl jį galima sukurti.)

SL_USBD_MSC_CONFIGURA Konfigūracijos numeris, prie kurio klasės egzempliorius gali būti pridėtas iškvietus

TION_QUANTITY

function sl_usbd_msc_scsi_add_to_configuration() .

SL_USBD_MSC_LUN_QUANT Loginių vienetų skaičius klasės egzemplioriui, kurį pridėsite iškvietę į

ITY

function sl_usbd_msc_scsi_lun_add() .

SL_USBD_MSC_SCSI_64_BIT Įjungia arba išjungia 64 bitų loginio bloko adreso (LBA) palaikymą.
_LBA_EN

SL_USBD_MSC_DATA_BUFF Size of data buffer per class instance in bytes ER_SIZE

Numatytoji reikšmė
2
1
2
0
512

Klasės egzemplioriaus kūrimas
USB įrenginio MSC SCSI klasės egzemplioriaus kūrimas atliekamas iškviečiant funkciją sl_usbd_msc_scsi_create_instance(). Ši funkcija priima vieną konfigūracijos argumentą, kuris aprašytas toliau.
p_scsi_atgaliniai skambučiai
„p_scsi_callbacks“ yra rodyklė į konfigūracijos struktūrą, kurios tipas yra „sl_usbd_msc_scsi_callbacks_t“. Be įprastų USB įrenginių klasės grįžtamųjų iškvietimų „connect“/„disconnect“, ji suteikia MSC klasei pasirenkamų grįžtamųjų iškvietimų funkcijų rinkinį, kurios iškviečiamos, kai loginiame vienete įvyksta įvykis. Šiam argumentui galima perduoti nulinę rodyklę (NULL), jei grįžtamųjų iškvietimų nereikia.
Žemiau esančioje lentelėje aprašomas kiekvienas šioje konfigūracijos struktūroje esantis konfigūracijos laukas.
Lentelė – sl_usbd_msc_scsi_callbacks_t konfigūracijos struktūra

Laukai

Aprašymas

.įgalinti

Called when the USB class instance is enabled successfully.

.disable Iškviečiama, kai USB klasės egzempliorius yra išjungtas.

.host_eject Funkcija iškviečiama, kai loginis vienetas yra išstumiamas iš pagrindinio kompiuterio.

Funkcijos parašas
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 įrenginio MSC klasės loginio vieneto konfigūracija

Loginis vienetas prie MSC klasės egzemplioriaus pridedamas iškviečiant funkciją sl_usbd_msc_lun_add(). Ši funkcija priima vieną konfigūracijos argumentą, kuris aprašytas toliau.

p_lu_info

„p_lu_info“ yra rodyklė į „sl_usbd_msc_scsi_lun_info_t“ tipo struktūrą. Jos paskirtis – pateikti informaciją apie loginį vienetą MSC klasei.
Žemiau esančioje lentelėje aprašomas kiekvienas šioje konfigūracijos struktūroje esantis konfigūracijos laukas.

Table – sl_usbd_msc_scsi_lun_info_t Configuration Structure

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

46/174

Baigėsiview

Laukas

Aprašymas

Laukas
.scsi_lun_api_p tr

Aprašymas
Pointer to the media driver API that will handle this logical unit. See USB Device MSC Class Storage Drivers for more information on storage drivers.

.ven nd arba r_id _p tr
.product_id_ptr
.p ro d uct_ revision_level .is_ tik skaitomas

Rodyklė į eilutę, kurioje yra loginio vieneto tiekėjo identifikatorius. Didžiausias eilutės ilgis yra 8 simboliai. Rodyklė į eilutę, kurioje yra loginio vieneto produkto identifikatorius. Didžiausias eilutės ilgis yra 16 simbolių. Produkto versijos lygis.
Flag that indicates if the logical unit should be seen as read only from the point of view šeimininko (true) arba ne (false).

USB įrenginio MSC klasės programavimo vadovas

Šiame skyriuje paaiškinama, kaip naudoti MSC klasę.
USB įrenginio MSC klasės inicijavimas, USB įrenginio MSC SCSI klasės egzemplioriaus pridėjimas prie įrenginio, USB įrenginio MSC klasės loginio vieneto tvarkymas.
Initializing the USB Device MSC Class

To add MSC SCSI class functionality to your device, first initialize the MSC base class and the SCSI subclass by calling the function sl_usbd_msc_init() and sl_usbd_msc_scsi_init() .
BuvęsampŽemiau pateiktame paveikslėlyje parodyta, kaip iškviesti sl_usbd_msc_init() ir sl_usbd_msc_scsi_init().

Example – iškviečiamos sl_usbd_msc_init() ir sl_usbd_msc_scsi_init() funkcijos

sl_status_t būsena;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}
Adding a USB Device MSC SCSI Class Instance to Your Device
Norėdami prie įrenginio pridėti MSC SCSI klasės funkcionalumą, pirmiausia sukurkite egzempliorių, tada pridėkite jį prie įrenginio konfigūracijos (-ų). Prie egzemplioriaus turite pridėti bent vieną loginį vienetą.
MSC SCSI klasės egzemplioriaus kūrimas
Create a MSC SCSI class instance by calling the function sl_usbd_msc_scsi_create_instance() .
BuvęsampŽemiau pateiktame paveikslėlyje parodyta, kaip iškviesti sl_usbd_msc_scsi_create_instance() funkciją naudojant numatytuosius argumentus. Daugiau informacijos apie konfigūracijos argumentus, kuriuos reikia perduoti sl_usbd_msc_scsi_create_instance() funkcijai, rasite skyriuje „USB įrenginio MSC klasės taikomųjų programų konfigūracijos“.
Example – Calling sl_usbd_ msc_scsi_create_instance()

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

47/174

Baigėsiview

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) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }
MSC klasės egzemplioriaus pridėjimas prie įrenginio konfigūracijos (-ų)
After you have created an MSC class instance, you can add it to a configuration by calling the function
sl_usbd_msc_add_to_configuration() . (Šis kodas nekeičiamas, todėl jį galima pridėti prie konfigūracijos.)
BuvęsampŽemiau parodyta, kaip iškviesti sl_usbd_msc_scsi_add_to_configuration() naudojant numatytuosius argumentus.
Example – iškviečiama sl_usbd_ msc_scsi_add_to_configuration() funkcija

sl_status_t būsena;

būsena = sl_usbd_msc_scsi_add_to_configuration(klasės_nbr,

(1)

config_nbr_fs);

(2)

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

(1) Class number to add to the configuration returned by sl_usbd_msc_scsi_create_instance() . (32) Configuration number (here adding it to a Full-Speed configuration).
USB įrenginio MSC klasės loginio vieneto tvarkymas
Adding a Logical Unit Attaching/Detaching a Storage Medium
Adding a Logical Unit
When adding a logical unit to your MSC SCSI class instance, it must be bound to a storage medium (RAMDisk, SD card, flash memory, etc). The MSC class uses a storage driver to communicate with storage media. This driver will need to be supply when adding the logical unit.
BuvęsampŽemiau pateiktame paveikslėlyje parodyta, kaip pridėti loginį vienetą naudojant sl_usbd_msc_scsi_lun_add().
Example – Adding a Logical Unit via sl_usbd_msc_scsi_lun_add()

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

48/174

Baigėsiview

sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_status_t

status;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.vendor_id_ptr

= „Silicon Labs“;

lu_info.product_id_ptr

= “block device example”;

lu_info.product_revision_level = 0x1000u;

lu_info.yra_tik_skaitomas

= klaidinga;

būsena = sl_usbd_msc_scsi_lun_add(klasės_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */ }

Saugojimo laikmenos prijungimas / atjungimas
After the logical unit has been added, a storage medium must be attached to be available from the host side. The MSC class offers two functions to control the storage media association to the logical unit: sl_usbd_msc_scsi_lun_attach() and sl_usbd_msc_scsi_lun_detach() . These functions allow you to emulate the removal of a storage device in order to re-gain access from the embedded application if necessary.
Buvęsample below shows how to use the function sl_usbd_msc_scsi_lun_attach() and sl_usbd_msc_scsi_lun_detach() .
Example – Laikmenos prijungimas / atjungimas

sl_status_t būsena;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}

(1)

būsena = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); jei (būsena ! SL_STATUS_OK) {
/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}

(2)

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) if (status ! SL_STATUS_OK) {
/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */
}

(3)

(1) From this moment, if the MSC device is connected to a host, the storage media is accessible.
(2) Jei MSC įrenginys prijungtas prie pagrindinio kompiuterio, medija bus rodoma kaip nepasiekiama. Šiuo metu operacijas su medija galima atlikti naudojant įterptąją programą.
(3) Vėlgi, jei MSC įrenginys prijungtas prie pagrindinio kompiuterio, laikmena bus rodoma kaip prijungta.
USB Device MSC Class Storage Drivers
The USB Device MSC Class needs a storage driver to communicate with a storage medium. For the moment, Silicon Labs doesn’t offer drivers.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

49/174

Baigėsiview
Tvarkyklės AI apibrėžiamas naudojant „typedef sl_usbd_msc_scsi_lun_api_t“. Jūsų sl_usbd_msc_scsi_lun_api_t parametras turi būti įtrauktas į jūsų sl_usbd_msc_scsi_lun_info_t argumentą, kai pridedate loginį įrenginį naudodami sl_usbd_msc_scsi_lun_add(). Daugiau informacijos apie struktūras rasite skyriuje „USB įrenginys, MSC SCSI API“. Saugyklos tvarkyklės įgyvendinimas gali būti toks paprastas, kaip sektorių masyvas RAM atmintyje. Tipinis sektoriaus dydis (t. y. bloko dydis) yra 512 didelės talpos atminties įrenginiams ir 2048 CD-ROM diskams.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

50/174

Baigėsiview
Baigėsiview
USB įrenginio tiekėjo klasė
USB Device Vendor Class Overview USB Device Vendor Class Resource Needs from Core USB Device Vendor Class Configuration USB Device Vendor Class Programming Guide The Vendor class allows you to build vendor-specific devices that can implement a proprietary protocol. It relies on a pair of bulk endpoints to transfer data between the host and the device. Bulk transfers are convenient for transferring large amounts of unstructured data and provide a reliable exchange of data by using an error detection and retry mechanism. In addition to bulk endpoints, the Vendor class can also use an optional pair of interrupt endpoints. Any operating system (OS) can work with the Vendor class provided that the OS has a driver to handle the Vendor class. Depending on the OS, the driver can be native or vendor-specific. For instance, under Microsoft Windows®, your application interacts with the WinUSB driver provided by Microsoft to communicate with the vendor device.
USB Device Vendor Class Overview
Paveikslėlis – Bendroji „Windows Host“ ir „Vendor“ klasių architektūra rodo bendrą pagrindinio kompiuterio ir įrenginio, naudojančio „Vendor“ klasę, architektūrą. Šiame pavyzdyjeampy., pagrindinė operacinė sistema yra „MS Windows“.
Paveikslėlis – Bendra MS Windows pagrindinio kompiuterio ir tiekėjo klasės architektūra

„MS Windows“ pusėje programa bendrauja su tiekėjo įrenginiu sąveikaudama su USB biblioteka. Bibliotekos, tokios kaip „libusb“, siūlo API, skirtą valdyti įrenginį ir su juo susijusius kanalus bei bendrauti su įrenginiu per valdymo, masinio apdorojimo ir pertraukimų galinius taškus.
On the device side, the Vendor class is composed of the following endpoints:
Pora valdymo Įėjimo ir Išėjimo galinių taškų, vadinamų numatytuoju galiniu tašku. Pora masinių Įėjimo ir Išėjimo galinių taškų.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

51/174

Baigėsiview

Pertraukimo Įėjimo ir Išėjimo galinių taškų pora. Ši pora yra neprivaloma. Žemiau esančioje lentelėje nurodytas skirtingų galinių taškų naudojimas:
Lentelė – Tiekėjo klasės galinių taškų naudojimas

Galinio taško kryptis

Valdymas IN
Kontrolė
OUT
Masinis įvedimas

Įrenginys-host
>Nuo pagrindinio kompiuterio iki įrenginio
Įrenginys-host

Bulk OUT
Pertraukimas ĮĖJIMAS
Pertraukite
OUT

Host-todevice
Įrenginys-host
Host-todevice

Naudojimas
Standartinės išvardijimo užklausos ir su tiekėju susiję užklausos.
Standartinės išvardijimo užklausos ir su tiekėju susiję užklausos.
Neapdorotų duomenų perdavimas. Duomenys gali būti struktūrizuoti pagal patentuotą protokolą.
Neapdorotų duomenų perdavimas. Duomenys gali būti struktūrizuoti pagal patentuotą protokolą.
Raw data communication or notification. Data can be structured according to a proprietary protocol. Raw data communication or notification. Data can be structured according to a proprietary protocol.

Įrenginio programa gali naudoti masinį ir pertraukimų galinį tašką duomenims siųsti arba gauti į pagrindinį kompiuterį arba iš jo. Ji gali naudoti tik numatytąjį galinį tašką, norėdama iššifruoti pagrindinio kompiuterio siunčiamas tiekėjo specifines užklausas. Standartines užklausas viduje tvarko „Silicon Labs“ USB įrenginio pagrindinis sluoksnis.
USB įrenginio tiekėjo klasės išteklių poreikiai iš „Core“

Kiekvieną kartą, kai prie konfigūracijos pridedate tiekėjo klasės egzempliorių naudodami funkciją sl_usbd_vendor_add_to_configuration(), iš branduolio bus paskirstyti šie ištekliai.

Išteklius
Interfaces Alternate interfaces Endpoints Interface groups

Kiekis
1 1 2 (4, jei įjungėte pertraukimų galinius taškus) 0

Note that those numbers are per configuration. When setting up your SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY and SL_USBD_DESCRIPTOR_QUANTITY configuration values, don’t forget to take into account on how many configurations the class will be added. For the SL_USBD_OPEN_ENDPOINTS_QUANTITY configuration value, since endpoints are opened only when a configuration is set by the host, you just need to take into account the number of needed endpoints for a class instance.
USB įrenginio tiekėjo klasės konfigūracija

Two groups of configuration parameters are used to configure the Vendor class:
USB įrenginio tiekėjo klasės konkrečios programos konfigūracijos USB įrenginio tiekėjo klasės egzemplioriaus konfigūracijos
USB įrenginio tiekėjo klasės konkrečios programos konfigūracijos
Pirmiausia, norėdami naudoti „Silicon Labs“ USB įrenginio tiekėjo klasės modulį, pakoreguokite tiekėjo kompiliavimo laiko konfigūracijos apibrėžimus pagal savo programos poreikius. Jie yra pergrupuoti sl_usbd_core_config.h antraštėje. file skyriuje „Tiekėjas“. Kiekio konfigūracijos tikslas – informuoti USB įrenginio modulį apie tai, kiek USB tiekėjo objektų skirti.
Žemiau esančioje lentelėje aprašomas kiekvienas konfigūracijos apibrėžimas.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

52/174

Baigėsiview

Table – USB Device Vendor Configuration Defines

Konfigūracijos pavadinimas

Aprašymas

Numatytoji reikšmė

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Number of class instances you will allocate via a call to the 2 function sl_usbd_vendor_create_instance() .

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Number of configurations. Vendor class instances can be 1 added to one or more configurations via a call to the function sl_usbd_vendor_add_to_configuration() .

USB Device Vendor Class Instance Configurations

Šiame skyriuje apibrėžiamos su „Vendor“ klasės egzemplioriais susijusios konfigūracijos.
Klasės egzemplioriaus kūrimas intr_en interval p_vendor_callbacks
Klasės egzemplioriaus kūrimas

Creating a Vendor class instance is done by calling the function sl_usbd_vendor_create_instance() , which takes three configuration arguments that are described below.

intr_lt
Loginė reikšmė, nurodanti, ar reikia pridėti pertraukimų galinių taškų porą, ar ne.

Vertė
tikra netikra

Aprašymas
Įterptojoje programoje bus pridėta ir pasiekiama pora IN/OUT galinių taškų. Nebus pridėta jokių pertraukimų galinių taškų. Bus pasiekiama tik pora masinių IN/OUT galinių taškų.

intervalas
Jei nustatysite „intr_en“ į „true“, galite nurodyti pertraukimų galinių taškų apklausos intervalą (milisekundėmis). Jei nustatysite „intr_en“ į „false“, galite nustatyti intervalą į 0, nes klasė jo ignoruos.
p_vendor_callbacks
„p_vendor_callbacks“ yra rodyklė į grįžtamojo ryšio funkcijų struktūros kintamąjį, kurį galite nurodyti, kad jis apdorotų su klase susijusias valdymo užklausas. Jei nenaudojate jokių su klase susijusių užklausų arba jums reikia įjungti/išjungti pranešimus, galite nustatyti šį kintamąjį į NULL.
BuvęsampŽemiau pateiktas failas pateikia numatomą jūsų klasei būdingų užklausų tvarkyklės parašą.
Example – Signature of Class-Specific Request Function

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 = (liet. „app_usbd_vendor_callback_functions“)
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};

(1) Pardavėjo klasės egzemplioriaus numeris.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

53/174

Baigėsiview

(2) Rodyklė į gautą sąrankos užklausą iš pagrindinio kompiuterio.
USB įrenginių tiekėjo klasės programavimo vadovas
This section explains how to use the Vendor class. Initializing the USB Device Vendor Class Adding a USB Device Vendor Class Instance to your Device Communicating using the USB Device Vendor Class
USB įrenginio tiekėjo klasės inicijavimas
Norėdami prie įrenginio pridėti tiekėjo klasės funkcionalumą, pirmiausia inicijuokite klasę iškviesdami funkciją USBD_Vendor_Init().ampŽemiau esančiame paveikslėlyje parodyta, kaip iškviesti sl_usbd_vendor_init().
Example – iškviečiama sl_usbd_vendor_init() funkcija

sl_status_t būsena;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* An error occurred. Error handling should be added here. */ }
Adding a USB Device Vendor Class Instance to your Device
Norėdami prie įrenginio pridėti tiekėjo klasės funkcionalumą, pirmiausia turite sukurti egzempliorių, o tada pridėti jį prie įrenginio konfigūracijos (-ų).
Tiekėjo klasės egzemplioriaus kūrimas Tiekėjo klasės egzemplioriaus pridėjimas prie įrenginio konfigūracijos (-ų)
Pardavėjo klasės egzemplioriaus kūrimas
Sukurkite „Vendor“ klasės egzempliorių iškviesdami funkciją sl_usbd_vendor_create_instance().ampŽemiau pateiktame paveikslėlyje parodyta, kaip iškviesti sl_usbd_vendor_create_instance() funkciją naudojant numatytuosius argumentus. Daugiau informacijos apie konfigūracijos argumentus, kuriuos reikia perduoti sl_usbd_vendor_create_instance() funkcijai, rasite skyriuje „USB įrenginių tiekėjų klasės egzempliorių konfigūracijos“.
Example – iškviečiama sl_usbd_vendor_create_instance() funkcija

uint8_t class_nbr; sl_status_t status;

status = sl_usbd_vendor_create_instance(false,

(1)

0u,

(2)

programėlės_usbd_pardavėjo_atgalinio_skambinimo_funkcijos, (3)

&klasės_nbr);

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

(1) Šioje klasės instancijoje nėra pertraukimų galinių taškų. (2) Intervalas ignoruojamas, nes pertraukimų galiniai taškai yra išjungti.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

54/174

Baigėsiview

(3) Callback function that is part of your application that handles vendor-specific class requests. See Communicating using the USB Device Vendor Class for more information. Adding the Vendor Class Instance to Your Device’s Configuration(s) After you have created a vendor class instance, you can add it to a configuration by calling the function USBD_Vendor_ConfigAdd(). The exampŽemiau pateiktame paveikslėlyje parodyta, kaip iškviesti sl_usbd_vendor_add_to_configuration() naudojant numatytuosius argumentus.
Example – Calling sl_usbd_vendor_add_to_configuration()

sl_status_t būsena;

status = sl_usbd_vendor_add_to_configuration(class_nbr,

(1)

config_nbr_fs);

(2)

jei (būsena ! SL_STATUS_OK) {

/* Įvyko klaida. Čia turėtų būti pridėtas klaidų apdorojimas. */

}

(1) Class number to add to the configuration returned by sl_usbd_vendor_create_instance() . (2) Configuration number (here adding it to a Full-Speed configuration).
Bendravimas naudojant USB įrenginio tiekėjo klasę
General Synchronous Communication Asynchronous Communication Vendor Request General The Vendor class offers the following functions to communicate with the host. For more details about the parameters of the function, see USB Device Vendor API.
Lentelė – Tiekėjo komunikacijos API santrauka

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

Operation Receives data from host through bulk OUT endpoint. This function is blocking. Sends data to host through bulk IN endpoint. This function is blocking. Receives data from host through bulk OUT endpoint. This function is non-blocking. Sends data to host through bulk IN endpoint. This function is non-blocking. Receives data from host through interrupt OUT endpoint. This function is blocking. Sends data to host through interrupt IN endpoint. This function is blocking. Receives data from host through interrupt OUT endpoint. This function is non-
blokavimas.
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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

55/174

Baigėsiview

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

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_vendor_read_bulk_sync(class_nbr,

(1)

(void *)&rx_buf[0],

(2)

2u,

0u,

(3)

&xfer_len);

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(4)

2u,

0u,

(3)

false,

(5)

&xfer_len);

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

(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) Programa pateikia inicializuotą perdavimo buferį.
(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.
Asinchroninis ryšys
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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

56/174

Baigėsiview

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

sl_status_t

status;

status = sl_usbd_vendor_read_bulk_async(class_nbr,

(void *)&rx_buf[0],

(2)

2u,

app_usbd_vendor_rx_completed,

NULL);

(4)

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2u,

app_usbd_vendor_tx_completed,

NULL,

(4)

false);

(6)

jei (būsena ! SL_STATUS_OK) {

/* $$$$ Ištaisykite klaidą. */

}

}

(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)

{

jei (būsena ! SL_STATUS_OK) {

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

} dar {

/* $$$$ Ištaisykite klaidą. */

}

}

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)

{

jei (būsena ! SL_STATUS_OK) {

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

} dar {

/* $$$$ Ištaisykite klaidą. */

}

}

(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.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

57/174

Baigėsiview
(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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

58/174

Baigėsiview

#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 būsena;

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;

numatytasis:

(6)

// Request is not supported.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

59/174

Baigėsiview

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 pateikti.

*/

} 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.

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

60/174

API dokumentacija
API dokumentacija
API dokumentacija
Modulių sąrašas
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

Aprašymas
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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

61/174

USB Device API
USB Device API
USB Device API
USB Device API.
Moduliai
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

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
Moduliai
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funkcijos

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).

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

63/174

USB Device ACM API
Makrokomandos
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODULIS.
#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
Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

64/174

USB Device ACM API

Tipas
tuščias

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
Grąžina

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Aprašymas

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.
Parametrai

Tipas
uint16_t
uint16_t

Direction Argument Name

Aprašymas

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.

Grąžina

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.
Parametrai

Tipas
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.

Grąžina

Autoriaus teisės © 2025 Silicon Laboratories. Visos teisės saugomos.

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.
Parametrai

Tipas

Kryptis

Argument Name

Aprašymas

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

Dokumentai / Ištekliai

SILICON LABS USB Device Stack [pdfNaudojimo instrukcija
USB Device Stack, Device Stack, Stack

Nuorodos

Palikite komentarą

Jūsų el. pašto adresas nebus skelbiamas. Privalomi laukai pažymėti *