Navodila za uporabo sklada USB naprav SILICON LABS

Sklad naprav USB

Specifikacije

  • Različica USB: 1.5.1
  • Datum izdaje: 21. julij 2025
  • Različica kompleta za razvoj programske opreme Simplicity: 2025.6.1

Konec izdelkaview

Sklad USB naprav podjetja Silicon Labs ponuja vsestransko in
enostavna USB povezljivost za projekte interneta stvari, ki olajša
komunikacija med omrežnimi soprocesorji in gostitelji.

Lastnosti

  • Učinkovit sklad naprav USB
  • Idealno za projekte interneta stvari
  • Podpora za komunikacijo med omrežnimi soprocesorji in
    gostitelji

Navodila za uporabo izdelka

Konfiguracija naprave USB

Konfigurirajte nastavitve naprave USB glede na vaš projekt
zahteve v razdelku Konfiguracija naprave USB
v dokumentaciji.

Vodnik za programiranje naprav USB

Za razumevanje, kako sledite Vodniku za programiranje naprav USB
programirati in komunicirati z napravo USB za različne namene
aplikacije.

Razredi naprav USB

Razdelek Razredi naprav USB ponuja pregledview različnih
razrede, kot so CDC ACM, HID, MSC SCSI in Vendor Class. Izberite
ustrezen razred glede na funkcionalnost vaše naprave.

Odpravljanje težav z napravami USB

Če imate kakršne koli težave z napravo USB, glejte
Razdelek za odpravljanje težav z napravami USB za rešitve in odpravljanje napak
nasveti.

Gostitelj USB za operacijski sistem Microsoft Windows

Če uporabljate napravo USB z operacijskim sistemom Microsoft Windows USB
Gostitelj, poskrbite, da boste upoštevali smernice, navedene v
dokumentacija za nemoteno integracijo.

pogosta vprašanja

V: Kateri so pogosti bivšiampmanj naprav, ki jih lahko sestavim z uporabo
ta sklad USB?

A: Sklad USB vam omogoča, da zgradite naprave, kot so
USB-serijski adapterji, miške ali tipkovnice, odstranljivi pomnilniki
naprave in naprave po meri.

V: Ali obstajajo kakšne posebne zahteve glede programske opreme za uporabo tega
Sklad USB naprav?

A: Združljiva programska oprema vključuje Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (Zbirka prevajalnikov GNU),
Vgrajeno delovno okolje IAR za ARM in IAR EWARM.

Univerzalno serijsko vodilo USB

Univerzalno serijsko vodilo USB

USB prekview konecview
Opombe k izdaji USB
Specifikacije in funkcijeview
Konfiguracija naprave USB je končanaview
Vodnik za programiranje naprav USBview
Razredi naprav USB nadview Razred CDC ACM nadview HID razreda več kotview MSC SCSI razreda nadview Razred prodajalca nadview
Dokumentacija API-ja za USB API za naprave USB API za ACM naprav USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t API za CDC naprav USB a sl_usbd_cdc_subcl ss_driver_t API za jedro naprav USB
sl_usbd_device_config_t sl_usbd_setup_req_t
API za HID naprave USB sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t API MSC za naprave USB
API za MSC SCSI za napravo USB sl_usbd_msc_subcl ss_driver_t
sl_usbd_msc_scsi_callbacks_t

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

1/174

Univerzalno serijsko vodilo USB
sl_usbd_msc_scsi_lun_pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API prodajalca naprav USB sl_usbd_vendor_callbacks_t
Dokumentacija API-ja Odpravljanje težav z napravami USB
konecview Gostitelj USB za operacijski sistem Microsoft Windows
konecview

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

2/174

konecview
konecview
Naprava USB
USB je eden najuspešnejših komunikacijskih vmesnikov v zgodovini računalniških sistemov in je dejanski standard za povezovanje računalniške periferne opreme. Sklad USB naprav Silicon Labs je modul USB naprav, zasnovan posebej za vgrajene sisteme. Zgrajen je bil od začetka s kakovostjo, razširljivostjo in zanesljivostjo Silicon Labs ter je prestal strog postopek validacije, da bi bil skladen s specifikacijo USB 2.0. Ta dokumentacija opisuje, kako inicializirati, zagnati in uporabljati sklad USB naprav Silicon Labs. Pojasnjuje različne konfiguracijske vrednosti in njihovo uporabo. Vključuje tudi pregled.view tehnologije, vrst možnosti konfiguracije, postopkov izvedbe in npr.ampmanj tipične uporabe za vsak razpoložljivi razred.
Da bi vam pomagali hitro razumeti koncepte USB-ja, dokumentacija vsebuje veliko primerovampUSB-ključi z osnovnimi funkcijami. Ti na primeramples vam bo zagotovil ogrodje, ki vam omogoča hitro gradnjo naprav. Ti na primerampvključujejo:
Adapter USB-serijski (razred komunikacijskih naprav) Miška ali tipkovnica (razred vmesniških naprav) Izmenljiva naprava za shranjevanje (razred masovnega pomnilnika) Naprava po meri (razred prodajalca)
Sledi konecview dokumentacijskih oddelkov:
Specifikacije in funkcije Konfiguracija naprave USB Vodnik za programiranje naprav USB Razredi naprav USB
Razred CDC ACM Razred HID Razred MSC SCSI Razred prodajalca Odpravljanje težav z napravami USB Operacijski sistem Microsoft Windows Gostitelj USB

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

3/174

USB
USB

USB različice 1.5.1, 21. julij 2025 – Opombe ob izdaji
Različica kompleta za razvoj programske opreme Simplicity 2025.6.1
Učinkovit sklad USB naprav podjetja Silicon Labs ponuja vsestransko in enostavno povezljivost USB, idealno za projekte interneta stvari, vključno s komunikacijo med omrežnimi soprocesorji in gostitelji. Za prejšnje izdaje kliknite tukaj.
Povzetek izdaje
Ključne funkcije | Spremembe API-ja | Popravki napak | Omogočanje čipov
Ključne značilnosti
Samo osnovne spremembe platforme.
Spremembe API-ja
Noben.
Popravki napak
Noben.
Omogočanje čipa
Noben.
Ključne značilnosti
Nove funkcije | Izboljšave | Odstranjene funkcije | Zastarele funkcije
Nove funkcije
Noben.
Izboljšave
Samo osnovne spremembe platforme.
Odstranjene funkcije
Noben.
Zastarele funkcije
Noben.
Spremembe API-ja
Novi API-ji | Spremenjeni API-ji | Odstranjeni API-ji | Zastareli API-ji
Novi API-ji

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

4/174

USB
Noben.
Spremenjeni API-ji
Noben.
Odstranjeni API-ji
Noben.
Zastareli API-ji
Noben.
Popravki napak
Noben.
Omogočanje čipa
Noben.
Aplikacija ExampSpremembe
New Examples | Spremenjeni Examples | Odstranjeno Examples | Zastarelo Examples
New Examples
Noben.
Spremenjen Examples
Noben.
Odstranjeno Examples
Noben.
Zastarelo Examples
Noben.
Vpliv sprememb izdaje
Izjave o vplivu | Vodnik za migracijo
Izjave o vplivu
Noben.
Vodnik za selitev
Noben.
Znane težave in omejitve
Noben.
Uporaba te izdaje

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

5/174

USB

Kaj je v izdaji? | Združljiva programska oprema | Namestitev in uporaba | Pomoč in povratne informacije

Kaj je v izdaji?

Aplikacija USB Device Stack Examples
Združljiva programska oprema

Programska oprema
Simplicity SDK Simplicity Studio Simplicity Commander GCC (Zbirka prevajalnikov GNU) IAR Embedded Workbench za ARM IAR EWARM

Združljiva različica ali varianta
2025.6.0 5.11.0 1.18.2 (na voljo s Simplicity Studio) 12.2.1 (na voljo s Simplicity Studio) 9.40.1 (na voljo s Simplicity Studio)

Namestitev in uporaba

Za začetek vašega razvoja si oglejte naše:
Vodnik za programiranje naprav USB. Dokumentacija API-ja.
Za informacije o integraciji Secure Vault glejte Secure Vault.
Za ponovnoview Obvestila o varnosti in programski opremi ter upravljanje nastavitev obvestil:
ò Pojdite na https://community.silabs.com/. Ó Prijavite se s svojimi podatki za račun. ò Kliknite svojega profesionalcafile ikono v zgornjem desnem kotu strani.
õ V spustnem meniju izberite Obvestila. ö V razdelku Obvestila pojdite na zavihek Obvestila o mojih izdelkih, daview zgodovinsko svetovanje o varnosti in programski opremi
obvestila
÷ Za upravljanje nastavitev uporabite zavihek Upravljanje obvestil, kjer lahko prilagodite, katere posodobitve izdelkov in obvestila želite prejemati.
prejemati.
Za priporočene nastavitve konfiguracije glejte tukaj.
Če želite izvedeti več o programski opremi v tej izdaji, si oglejte našo spletno dokumentacijo.
Pomoč in povratne informacije

Obrnite se na podporo Silicon Labs. Če želite uporabiti naše orodje Ask AI za pridobitev odgovorov, si oglejte iskalno polje na vrhu te strani.

Opomba: Funkcija Ask AI je eksperimentalna.

Poiščite pomoč naše skupnosti razvijalcev.
Politika izdaje in vzdrževanja SDK
Oglejte si naš pravilnik o izdaji in vzdrževanju SDK-ja.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

6/174

konecview
konecview
Specifikacije
Ustreza specifikaciji »Universal Serial Bus, revizija 2.0«. Izvaja »Obvestilo o spremembah inženiringa deskriptorjev združenj vmesnikov (ECN)«. Vrste prenosov.
Razredi USB za nadzor množičnih prekinitev Razred komunikacijskih naprav (CDC) Abstraktni krmilni model (ACM) Naprava za človeški vmesnik (HID) Razred za masovno shranjevanje (MSC) Okvir razredov, specifičen za proizvajalca
Lastnosti
Prilagodljivo, da vključuje le zahtevane funkcije za zmanjšanje porabe pomnilnika. Podpira polno hitrost (12 Mbit/s). Podpira sestavljene (večfunkcijske) naprave. Podpira naprave z več konfiguracijami. Podpira funkcije varčevanja z energijo USB (začasna ustavitev in nadaljevanje delovanja naprave). Popolna integracija razreda za masovno shranjevanje v operacijski sistem Micrium. File Sistemski modul, razvit z abstrakcijsko plastjo CMSIS-RTOS2, tako da lahko deluje z različnimi operacijskimi sistemi. Silicon Labs GSDK je na voljo s porti za FreeRTOS in Micrium OS.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

7/174

konecview
konecview

Konfiguracija naprave USB

V tem razdelku je opisano, kako konfigurirati napravo Silicon Labs USB. Obstajajo tri skupine konfiguracijskih parametrov:
Konfiguracija jedra naprave USB Konfiguracija informacij o napravi USB Konfiguracija strojne opreme naprave USB
Konfiguracija jedra naprave USB
Napravo USB podjetja Silicon Labs je mogoče konfigurirati med prevajanjem z nizom #define, ki se nahajajo v datoteki sl_usbd_core_config.h. fileUSB Device uporablja #define, kadar je to mogoče, ker omogočajo prilagajanje velikosti kode in podatkov med prevajanjem glede na to, katere funkcije so omogočene. To omogoča prilagajanje velikosti bralnega pomnilnika (ROM) in naključnega pomnilnika (RAM) USB Device podjetja Silicon Labs glede na zahteve vaše aplikacije.
Priporočeno: Začnite postopek konfiguracije s privzetimi vrednostmi (označenimi s krepko pisavo).
Spodnji razdelki so organizirani glede na vrstni red v konfiguraciji predloge file, sl_usbd_core_config.h.
Konfiguracija osnovnih razredov konfiguracije
Konfiguracija jedra
Tabela – Konstante konfiguracije jedra naprave USB

Konstanta Opis

Privzeta vrednost

VELIKOST SKLADOV SL_USBD_TA SK

Konfigurira velikost sklada v bajtih osrednje naloge USBD

4096

SL_USBD_TA SK_PRIORIT Y

Konfigurira prioriteto osrednje naloge USBD. To je prioriteta CMSIS-RTOS2.

osPriorityHigh

SL_USBD_A SAMODEJNI_ZAGON _USB_NAPRAVA E

Če je omogočeno, se bo naprava USB samodejno zagnala, ko se zažene jedro in je ta 1 jedrna naloga USBD načrtovana prvič. Če je onemogočeno, bo vaša aplikacija morala poklicati sl_usbd_core_start_device(), ko jo bo gostitelj USB lahko zaznal.

SL_USBD_C Skupno število konfiguracij, ki bodo dodane prek funkcije sl_usbd_add_configuration().

1

Funkcija ONFIGURATI.

VKLOPLJENO

TY

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

8/174

konecview

Konstanta
SL_USBD _VMESNIK_KAKO ANTITY
SL_USBD _ALT_INT_ERFACE_ KOLIČINE
TY
SL_USBD _VMESNIK ACE_GR
OUP_QU
ANTITET
SL_USBD _OPIS
PTOR_Q
UANTITY
SL_USBD _NIZ _KOLIČINA
TY
SL_USBD _ODPRTO_KOLIČINA_KONČNE_TOČKE

Opis Skupno število vmesnikov USB, ki jih je treba dodati za vse vaše konfiguracije. To je močno odvisno od uporabljenega(-ih) razreda(-ov). Za več informacij o tem, koliko vmesnikov potrebuje primerek razreda, glejte razdelek »Potrebe po virih iz jedra« vašega(-ih) razreda(-ov).
Skupno število alternativnih vmesnikov USB, ki jih je treba dodati za vse vaše konfiguracije. To je močno odvisno od uporabljenega(-ih) razreda(-ov). Ta vrednost mora biti vedno enaka ali večja od SL_USBD_INTERFACE_QUANTITY. Za več informacij o tem, koliko alternativnih vmesnikov potrebuje primerek razreda, glejte razdelek »Potrebe po virih iz jedra« vašega(-ih) razreda(-ov).
Skupno število skupin vmesnikov USB, ki bodo dodane za vse vaše konfiguracije. To je močno odvisno od uporabljenega(-ih) razreda(-ov). Za več informacij o tem, koliko skupin vmesnikov zahteva primerek razreda, glejte razdelek »Potrebe po virih iz jedra« vašega(-ih) razreda(-ov).
Skupno število deskriptorjev končnih točk, ki bodo dodani za vse vaše konfiguracije. To je močno odvisno od uporabljenega(-ih) razreda(-ov). Za več informacij o tem, koliko deskriptorjev končnih točk potrebuje primerek razreda, glejte »Število končnih točk« v razdelku »Potrebe po virih iz jedra« vašega(-ih) razreda(-ov). Upoštevajte, da tukaj ni treba upoštevati kontrolnih končnih točk. Skupno število nizov USB. Če količino nastavite na nič, boste funkcijo onemogočili. Če to onemogočite, naprava ne bo shranjevala nobenih opisnih nizov USB, ki jih posreduje aplikacija. To pomeni, da gostitelj ne bo mogel pridobiti opisnih nizov (kot sta proizvajalec in ime izdelka). Skupno število odprtih končnih toček na konfiguracijo. Naprava potrebuje vsaj dve odprti končni točki za prenos nadzora, vendar morate dodati tudi končne točke uporabljenega(-ih) razreda(-ov). Za več informacij o tem, koliko odprtih končnih toček potrebuje primerek razreda, glejte »Število končnih točk« v razdelku »Potrebe po virih iz jedra« vašega(-ih) razreda(-ov).

Privzeta vrednost
10 10
2
20 30 20

Konfiguracija razredov
Razredi imajo specifične konfiguracije med prevajanjem. Za več informacij glejte Razredi naprav USB.
Konfiguracija informacij o napravi USB

Konfiguracija datoteke sl_usbd_device_config.h file pregrupira #define-s med prevajanjem, da nastavi osnovne informacije o vaši napravi, kot so ID prodajalca/izdelka, nizi naprav itd. Spodnja tabela opisuje vsako definicijo konfiguracije informacij, ki je na voljo v tej konfiguraciji. file.

Tabela – Definicije konfiguracije informacij o napravi USB

Konstanta
SL_USBD_NAPRAVA E_DOBAVLJALNIK_ID
SL_USB_NAPRAVA_E_IZDELEK_ID

Opis Vaša identifikacijska številka prodajalca, kot jo posreduje forum implementatorjev USB. Za več informacij o tem, kako lahko pridobite ID prodajalca, glejte http://www.usb.org/developers/vendor/. Vaša identifikacijska številka izdelka.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

9/174

konecview

Konstanta

Opis

SL_USBD_DEVICE_RELEASE Številka izdaje vaše naprave. _NUMBER

SL_USBD_DEVICE_MANUFA Niz, ki opisuje proizvajalca vaše naprave. Ta konfiguracija se prezre, ko je

CTURER_STRING

Konfiguracija SL_USBD_STRING_QUANTITY je nastavljena na 0.

SL_USBD_DEVICE_PRODUC Niz, ki opisuje vaš izdelek. Ta konfiguracija se prezre, ko konfiguracija

T_STRING

SL_USBD_STRING_QUANTITY je nastavljen na 0.

SL_USBD_DEVICE_SERIAL_N Niz, ki vsebuje serijsko številko vaše naprave. Ta konfiguracija se prezre, ko je

ŠTEVILKA_NIZ

Konfiguracija SL_USBD_STRING_QUANTITY je nastavljena na 0.

SL_USBD_DEVICE_LANGUA Identifikacijska številka jezika nizov vaše naprave. Možne vrednosti so:
GE_ID

– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA

– SL_USBD_LANG_ID_CHINESE_TAIWAN

– SL_USBD_LANG_ID_ANGLISH_US

– SL_USBD_LANG_ID_ANGLISH_UK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_GERMAN

– SL_USBD_LANG_ID_GREEK

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGALŠČINA

– SL_USBD_LANG_ID_SANSKRIT

Ta konfiguracija se prezre, če je konfiguracija SL_USBD_STRING_QUANTITY nastavljena na 0.

Konfiguracija strojne opreme naprave USB

Odvisno od naprave Silicon Labs, ki jo uporabljate, boste verjetno morali konfigurirati pin in vrata GPIO za signal USB VBUS Sense. Konfiguracijske definicije so v glavi datoteke sl_usbd_hardware_config.h. file.

Konstanta
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Opis
Vrata GPIO za signal USB VBUS Sense na vaši matični plošči. Priključek GPIO za signal USB VBUS Sense na vaši matični plošči.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

10/174

konecview
konecview
Vodnik za programiranje naprav USB
V tem razdelku je pojasnjeno, kako uporabljati modul USB naprave.
Začetna nastavitev modula USB naprave
V tem razdelku so opisani osnovni koraki, potrebni za inicializacijo modula naprave USB ter za dodajanje, pripravo in zagon naprave. Inicializacija modula naprave USB Inicializacija jedra naprave USB Inicializacija ključev ACL Dodajanje naprave USB Izdelava naprave USB Dodajanje konfiguracije Dodajanje funkcije USB Zagon naprave USB
Funkcije za zaznavanje dogodkov
Inicializacija modula naprave USB
Inicializacija jedra naprave USB
Začnite z inicializacijo jedra modula naprave B s klicem funkcije sl_usbd_core_init(). Spodnji primer prikazuje klic funkcije sl_usbd_core_init().
Example – Klic funkcije sl_usbd_core_init()
status sl_status_t; status = sl_usbd_core_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
Inicializacija razreda(-ov)
Ko je jedro modula naprave USB inicializirano, morate inicializirati vsak razred, ki ga nameravate uporabiti. Za več informacij glejte poglavje »Vodnik za programiranje« vašega(-ih) ACL(-ov).
Sestavljanje vaše USB naprave
Dodajanje konfiguracije(j)
Ko uspešno inicializirate napravo, ji lahko začnete dodajati funkcije USB, začenši z novo konfiguracijo. Naprava mora imeti vsaj eno konfiguracijo. Če želite dodati konfiguracijo(je), pokličite funkcijo sl_usbd_core_dd_configuration(). To funkcijo je treba poklicati za vsako konfiguracijo, ki jo želite dodati. Npr.ampSpodaj je prikazano, kako dodati polno hitrost.
Example – Dodajanje konfiguracije(j) vaši napravi

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

11/174

konecview

stanje sl_status_t; uint8_t config_nbr_fs;

/* Dodajanje konfiguracije s polno hitrostjo napravi. */

status = sl_usbd_core_add_configuration(0,

/* Konfiguracija ne zahteva posebnih atributov. */

100u,

/* Največja poraba energije: 100 mA.

*/

HITROST_USB_NAPRAVE_SL_POLNA,

/* Konfiguracija s polno hitrostjo.

*/

»Konfiguriraj Dodaj Izv«ampkonfiguracija s polno hitrostjo”,

&config_nbr_fs);

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

Dodajanje funkcij USB
Ko svoji napravi uspešno dodate vsaj eno konfiguracijo, lahko vanjo dodate vmesnike in končne točke. Vsak razred USB ima svoje potrebe glede vrste, količine in drugih parametrov vmesnika in končnih toček. Silicon Labs USB Device dodaja vmesnike in končne točke v razrede, ki jih ponuja.
Iz aplikacije lahko ustvarite instanco razreda USB in ga dodate konfiguraciji. Za več informacij o konceptu instanc razreda naprav USB glejte Razredi naprav USB. Upoštevajte, da lahko ustvarite instanco in konfiguraciji dodate veliko različnih instanc razredov, da ustvarite večfunkcijsko (sestavljeno) napravo.
BivšiampSpodnja slika prikazuje, kako ustvariti primerek razreda in ga dodati v konfiguracijo.
Example – Dodajanje primerka razreda v vašo napravo

status sl_status_t; uint8_t razred_nbr;
/* Ustvarite primerek razreda, ki ga želite uporabiti.*/ /* Upoštevajte, da ima lahko ta funkcija glede na razred več argumentov. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }
/* Dodajanje instance razreda v konfiguracijo Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Številka razreda, ki jo vrne sl_usbd_ _ustvari_instanco. */
config_nbr_fs); /* Številka konfiguracije, ki jo vrne sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }
Zagon naprave USB
Privzeto bo napravo samodejno zagnala jedrna naloga USB naprave po končani inicializaciji naprave in zagonu jedra. Če želite nadzorovati, kdaj se naprava zažene in postane vidna za gostitelja USB, uporabite konfiguracijsko definicijo SL_USBD_AUTO_START_USB_DEVICE, da onemogočite funkcijo samodejnega zagona. Ko je onemogočena, jo lahko po sestavljanju/pripravi naprave zaženete in jo naredite vidno za gostitelja USB s klicem funkcije sl_usbd_core_start_device().
BivšiampSpodnja slika prikazuje, kako zagnati napravo s funkcijo sl_usbd_core_start_device().
Example – Zagon naprave

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

12/174

konecview

stanje sl_status_t;
status = sl_usbd_core_start_device(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }

Funkcije za zaznavanje dogodkov
Osrednji modul USB Device ponuja dve šibki funkciji zaklepanja, ki ju lahko v svoji aplikaciji na novo definirate. Njun namen je obveščanje o dogodkih na vodilu in konfiguraciji.
Tabela – Funkcije za zaklepanje dogodkov USB

Dogodek

Opis

Avtobus

Pokliče se, ko se pojavi dogodek USB vodila

Konfiguracija Pokliče se, ko se pojavi dogodek konfiguracije USB

Podpis funkcije
void sl_usbd_on_bus_event(dogodek sl_usbd_bus_event_t); void sl_usbd_on_config_event(dogodek sl_usbd_config_event_t, uint8_t config_nbr);

Example – Funkcije za zaklepanje dogodkov

void sl_usbd_on_bus_event(dogodek sl_usbd_bus_event_t) { stikalo (dogodek) { primer SL_USBD_EVENT_BUS_CONNECT:
// se pokliče, ko je kabel USB vstavljen v break krmilnika gostitelja;
case SL_USBD_EVENT_BUS_DISCONNECT: // se pokliče, ko je kabel USB odstranjen iz gostiteljskega krmilnika break;
case SL_USBD_EVENT_BUS_RESET: // se pokliče, ko gostitelj pošlje ukaz za ponastavitev break;
case SL_USBD_EVENT_BUS_SUSPEND: // se pokliče, ko gostitelj pošlje ukaz za zaustavitev break;
case SL_USBD_EVENT_BUS_RESUME: // se pokliče, ko gostitelj pošlje ukaz za prebujanje break;
privzeto: premor; } }
void sl_usbd_on_config_event(dogodek sl_usbd_config_event_t, uint8_t config_nbr) { stikalo (dogodek) { primer SL_USBD_EVENT_CONFIG_SET:
// se pokliče, ko gostitelj nastavi prekinitev konfiguracije;
case SL_USBD_EVENT_CONFIG_UNSET: // se pokliče, ko je konfiguracija izklopljena break;
privzeto: premor; } }

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

13/174

konecview

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

14/174

konecview
konecview

Razredi naprav USB

Razredi USB, ki so na voljo v Silicon Labs USB Device, imajo nekaj skupnih značilnosti. Ta razdelek pojasnjuje te značilnosti in njihovo interakcijo z osrednjo plastjo.
Za več informacij o določenem razredu glejte naslednje:
Razred CDC ACM Razred HID Razred MSC SCSI Razred prodajalca
O primerkih razreda
Razredi USB, ki so na voljo v USB Device, izvajajo koncept primerkov razredov. Primerek razreda predstavlja eno funkcijo znotraj naprave. Funkcijo lahko opiše en vmesnik ali skupina vmesnikov in pripada določenemu razredu.
Vsaka implementacija razreda USB ima nekaj skupnih konfiguracij in funkcij, ki temeljijo na konceptu instance razreda. Skupne konfiguracije in funkcije so predstavljene v spodnji tabeli. V naslovu stolpca »Konstante ali funkcije« lahko nadomestno besedilo XXXX nadomestimo z imenom razreda: CDC, HID, MSC, CDC_ACM ali VENDOR (Vendor za imena funkcij).
Tabela – Konstante in funkcije, povezane s konceptom več primerkov razreda

Konstanta ali funkcija
SL_USBD_XXXX_CL ASS_INS KOLIČINA_TANCIJE
SL_USBD_XXXX_KONFIGURACIJE_KOLIČINA
sl_usb d _XXXX_create _instance ()
sl_usbd_XXXX_add_to_conf iguration()

Opis
Konfigurira največje število primerkov razreda.
Konfigurira največje število konfiguracij. Med inicializacijo razreda bo ustvarjeni primerek razreda dodan eni ali več konfiguracijam. Ustvari nov primerek razreda.
Doda obstoječi primerek razreda v določeno konfiguracijo naprave.

Kar zadeva implementacijo kode, bo razred deklariral lokalno globalno spremenljivko, ki vsebuje nadzorno strukturo razreda. Ta nadzorna struktura razreda je povezana z enim primerkom razreda in bo vsebovala specifične informacije za upravljanje tega primerka.
Naslednje slike prikazujejo več primerov. Vsaka slika vključuje primer kodeample, ki ustreza scenariju primera.
Slika – Več primerkov razreda – Naprava FS (1 konfiguracija z 1 vmesnikom) predstavlja tipično napravo USB. Naprava je polne hitrosti (FS) in vsebuje eno samo konfiguracijo. Funkcijo naprave opisuje en vmesnik, sestavljen iz para končnih točk za komunikacijo podatkov. Ustvarjen je en primerek razreda, ki vam omogoča upravljanje celotnega vmesnika s pripadajočo končno točko.
Slika – Več primerkov razreda – Konfiguracija naprave FS 1 z 1 vmesnikom)

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

15/174

konecview

Koda, ki ustreza sliki – Več primerkov razreda – Naprava FS (1 konfiguracija z 1 vmesnikom), je prikazana v primeruample spodaj.
Example – Več primerkov razreda – konfiguracija naprave FS 1 z 1 vmesnikom)

status sl_status_t; uint8_t razred_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Obravnavaj dogodek omogočanja razreda. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Obravnava dogodka onemogočanja razreda. */ }

sl_usbd_XXXX_callbacks_t class_callbacks = {

(1)

.enable = app_usbd_XXXX_enable,

.disable = app_usbd_XXXX_disable

};

status = sl_usbd_XXXX_init();

(2)

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

status = sl_usbd_XXXX_create_instance(&povratni_klici_razreda,

(3)

&razred_0);

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

status = sl_usbd_XXXX_add_to_configuration(razred_0, konfiguracija_0);

(4)

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

(1) Vsak razred ponuja nabor funkcij povratnega klica za dogodke povezovanja/prekinitve povezave naprav in za dogodke, specifične za razred. Objekt strukture povratnega klica se posreduje kot argument pri ustvarjanju primerka razreda z uporabo sl_usbd_XXXX_create_instance().
funkcijo.
(1) Inicializirajte razred. Inicializirane bodo vse notranje spremenljivke, strukture in vrata razreda. Upoštevajte, da lahko funkcija Init() v nekaterih razredih sprejme druge argumente.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

16/174

konecview
(2) Ustvarite primerek razreda, ki je class_0. Funkcija sl_usbd_XXXX_create_instance() dodeli nadzorno strukturo razreda, povezano s class_0. Odvisno od razreda ima lahko sl_usbd_XXXX_create_instance() poleg številke razreda dodatne parametre, ki predstavljajo informacije, specifične za razred, shranjene v nadzorni strukturi razreda. aaa (3) Dodajte primerek razreda ss, class_0, k navedeni konfiguracijski številki, config_0. sl_usbd_XXXX_add_to_configuration() bo ustvaril vmesnik 0 in z njim povezane končne točke IN in OUT. Posledično primerek razreda zajema vmesnik 0 in njegove končne točke. Vsaka komunikacija, opravljena na vmesniku 0, bo uporabila številko primerka razreda, class_0. Slika – Več primerkov razreda – Naprava FS (2 konfiguraciji in več vmesnikov) predstavlja bolj zapleten primerampNaprava s polno hitrostjo je sestavljena iz dveh konfiguracij. Naprava ima dve funkciji, ki spadata v isti razred, vendar je vsaka funkcija opisana z dvema vmesnikoma in ima par dvosmernih končnih točk. V tem primeruampTorej, ustvarjena sta dva primerka razreda. Vsak primerek razreda je povezan s skupino vmesnikov, za razliko od Slika – Več primerkov razreda – Naprava FS (1 konfiguracija z 1 vmesnikom) in Slika – Več primerkov razreda – Naprava FS (2 konfiguraciji in več vmesnikov), kjer je bil primerek razreda povezan z enim samim vmesnikom.
Slika – Več primerkov razreda – Konfiguracije naprave FS 2 in več vmesnikov)

Koda, ki ustreza sliki – Več primerkov razreda – Naprava FS (2 konfiguraciji in več vmesnikov), je prikazana v primeruampspodaj. Obravnava napak je zaradi jasnosti izpuščena.
Example – Več primerkov razreda – Konfiguracije naprave FS 2 in več vmesnikov)

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

17/174

konecview

status sl_status_t; uint8_t razred_0; uint8_t razred_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&razred_0); status = sl_usbd_XXXX_create_instance(&razred_1);
status = sl_usbd_XXXX_add_to_configuration(razred_0, cfg_0); status = sl_usbd_XXXX_add_to_configuration(razred_1, cfg_0);
status = sl_usbd_XXXX_add_to_configuration(razred_0, cfg_1); status = sl_usbd_XXXX_add_to_configuration(razred_1, cfg_1);

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

(1) Inicializirajte razred. Inicializirane bodo vse notranje spremenljivke, strukture in vrata razreda.
(2) Ustvarite primerek razreda class_0. Funkcija sl_usbd_XXXX_create_instance() dodeli nadzorno strukturo razreda, povezano z class_0.
(3) Ustvarite primerek razreda class_1. Funkcija sl_usbd_XXXX_create_instance() dodeli drugo kontrolno strukturo razreda, povezano z class_1.
(4) Dodajte primerek razreda class_0 v konfiguracijo cfg_0. Funkcija sl_usbd_XXXX_add_to_configuration() bo ustvarila vmesnik 0, vmesnik 1, alternativne vmesnike in povezane končne točke IN in OUT. Številka primerka razreda class_0 bo uporabljena za vso podatkovno komunikacijo na vmesniku 0 ali vmesniku 1.
(5) Dodajte instanco razreda class_1 v konfiguracijo cfg_0. Funkcija sl_usbd_XXXX_add_to_configuration() bo ustvarila vmesnik 2, vmesnik 3 in njune povezane končne točke IN in OUT. Številka instance razreda class_1 bo uporabljena za vso podatkovno komunikacijo na vmesniku 2 ali vmesniku 3.
(6) Dodajte iste primerke razredov, class_0 in class_1, v drugo konfiguracijo, cfg_1.
Vsak razred definira strukturo tipa sl_usbd_XXXX_callbacks_t. Njen namen je, da vsakemu razredu dodeli nabor funkcij povratnega klica, ki se pokličejo ob nastanku dogodka. V vsakem razredu sta prisotni dve funkciji povratnega klica. Predstavljeni sta v spodnji tabeli.
Tabela – Pogoste povratne funkcije razreda

Polja Opis .enable Kliče se, ko je primerek razreda USB uspešno omogočen. .disable Kliče se, ko je primerek razreda USB onemogočen.

Podpis funkcije void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

18/174

konecview
konecview
Naprava USB CDC ACM razred
Osnovni razred CDC naprave USB nadview Potrebe virov razreda CDC ACM za naprave USB iz podrazreda Core USB Device CDC ACM nadview Konfiguracija razreda CDC ACM za naprave USB Vodnik za programiranje razreda CDC ACM za naprave USB
Ta razdelek opisuje razred komunikacijskih naprav (CDC) in pripadajoči podrazred CDC, ki ga podpira sklad USB naprav Silicon Labs. USB-Device Silicon Labs trenutno podpira podrazred Abstract Control Model (ACM), ki se pogosto uporablja za serijsko emulacijo.
CDC vključuje različne telekomunikacijske in omrežne naprave. Telekomunikacijske naprave obsegajo analogne modeme, analogne in digitalne telefone, ISDN terminalske adapterje itd. Na primerampOmrežne naprave vključujejo ADSL in kabelske modeme, ethernetne adapterje in vozlišča. CDC opredeljuje okvir za zajemanje obstoječih standardov komunikacijskih storitev, kot sta V.250 (za modeme prek telefonskega omrežja) in Ethernet (za naprave lokalnega omrežja), z uporabo povezave USB. Komunikacijska naprava je odgovorna za upravljanje naprav, upravljanje klicev, kadar je to potrebno, in prenos podatkov.
CDC opredeljuje sedem glavnih skupin naprav. Vsaka skupina pripada modelu komunikacije, ki lahko vključuje več podrazredov. Vsaka skupina naprav ima poleg osnovnega razreda CDC še svoj specifikacijski dokument. Sedem skupin je:
Javno komutirano telefonsko omrežje (PSTN), naprave, vključno z modemi za glasovni pas, telefoni in napravami za serijsko emulacijo. Naprave digitalnega omrežja z integriranimi storitvami (ISDN), vključno s terminalskimi adapterji in telefoni. Naprave z modelom Ethernet Control Model (ECM), vključno z napravami, ki podpirajo družino IEEE 802 (npr. kabelski in ADSL modemi, adapterji WiFi). Naprave z asinhronskim prenosnim načinom (ATM), vključno z modemi ADSL in drugimi napravami, povezanimi z omrežji ATM (delovne postaje, usmerjevalniki, stikala LAN). Naprave za brezžične mobilne komunikacije (WMC), vključno z večfunkcijskimi komunikacijskimi telefonskimi napravami, ki se uporabljajo za upravljanje glasovnih in podatkovnih komunikacij. Naprave z modelom Ethernet Emulation Model (EEM), ki izmenjujejo podatke, uokvirjene z Ethernetom. Naprave z modelom Network Control Model (NCM), vključno z visokohitrostnimi omrežnimi napravami (modemi za visokohitrostni paketni dostop, linijska terminalska oprema).
CDC in pripadajoča implementacija podrazreda sta skladna z naslednjimi specifikacijami:
Univerzalno serijsko vodilo, definicije razredov za komunikacijske naprave, revizija 1.2, 3. november 2010. Univerzalno serijsko vodilo, komunikacije, podrazred za naprave PSTN, revizija 1.2, 9. februar 2007.
Osnovni razred CDC naprave USB nadview
Naprava CDC je sestavljena iz naslednjih vmesnikov za izvajanje komunikacijskih zmogljivosti:
Komunikacijski vmesnik (CCI) je odgovoren za upravljanje naprav in po izbiri za upravljanje klicev.
Upravljanje naprav omogoča splošno konfiguracijo in nadzor naprave ter obveščanje gostitelja o dogodkih. Upravljanje klicev omogoča vzpostavljanje in prekinitev klicev. Upravljanje klicev se lahko multipleksira prek DCI. CCI je obvezen za vse naprave CDC. Določa funkcijo CDC z določitvijo komunikacijskega modela, ki ga naprava CDC podpira. Vmesnik(-i), ki sledi(-jo) CCI, je(-so) lahko kateri koli definirani vmesnik razreda USB, kot je zvok ali vmesnik, specifičen za prodajalca. Vmesnik, specifičen za prodajalca, je predstavljen posebej z DCI.
Vmesnik podatkovnega razreda (DCI) je odgovoren za prenos podatkov. Poslani in/ali prejeti podatki ne sledijo določenemu
formatu. Podatki so lahko surovi podatki iz komunikacijske linije, podatki, ki sledijo lastniškemu formatu itd. Vse DCI-je, ki sledijo CCI, je mogoče obravnavati kot podrejene vmesnike.
Naprava CDC mora imeti vsaj en CCI in nič ali več DCI-jev. En CCI in kateri koli podrejeni DCI skupaj zagotavljata gostitelju določeno funkcijo. Ta zmožnost se imenuje tudi funkcija. V sestavljeni napravi CDC jih lahko imate več.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

19/174

konecview
funkcije. Zato bi bila naprava sestavljena iz več sklopov CCI in DCI, kot je prikazano na sliki – sestavljena naprava CDC.
Slika – Kompozitna naprava CDC

Naprava CDC bo verjetno uporabljala naslednjo kombinacijo končnih točk:
Par kontrolnih končnih točk IN in OUT, imenovanih privzeta končna točka. Izbirna končna točka IN za množično uporabo ali prekinitev. Par končnih točk IN in OUT za množično uporabo ali izohronih končnih točk. Upoštevajte, da sklad naprav Silicon Labs USB trenutno ne podpira izohronih končnih točk.
Spodnja tabela prikazuje uporabo različnih končnih točk in kateri vmesnik CDC jih uporablja.
Tabela – Uporaba končne točke CDC

Končna točka
Nadzor IN
Control OUT
Prekinitev ali razsuti tokokrog V razsutem stanju ali izohron V razsutem stanju ali izohron
VEN

Smer
Naprava-gostitelj
Od gostitelja do naprave
Naprava-gostitelj
Naprava-gostitelj
Od gostitelja do naprave

Uporaba vmesnika

CCI

Standardne zahteve za naštevanje, zahteve, specifične za razred, naprave

upravljanje in po izbiri upravljanje klicev.

CCI

Standardne zahteve za naštevanje, zahteve, specifične za razred, naprave

upravljanje in po izbiri upravljanje klicev.

CCI

Obveščanje o dogodkih, kot so zaznavanje zvonjenja, stanje serijske linije, stanje omrežja.

DCI

Komunikacija surovih ali formatiranih podatkov.

DCI

Komunikacija surovih ali formatiranih podatkov.

Večina komunikacijskih naprav uporablja prekinitveno končno točko za obveščanje gostitelja o dogodkih. Izohronih končnih točk se ne sme uporabljati za prenos podatkov, kadar lastniški protokol v primeru napak protokola USB zahteva ponovni prenos podatkov. Izohronska komunikacija lahko sama po sebi povzroči izgubo podatkov, saj nima mehanizmov za ponovni poskus.
Sedem glavnih modelov komunikacije zajema več podrazredov. Podrazred opisuje način, kako naj naprava uporablja CCI za upravljanje naprave in klicev. Spodnja tabela prikazuje vse možne podrazrede in komunikacijski model, ki mu pripadajo.
Tabela – podrazredi CDC

Podrazred
Model neposrednega linijskega krmiljenja Abstraktni model krmiljenja

Komunikacijski model
PSTN
PSTN

Exampseznam naprav, ki uporabljajo ta podrazred
Modemske naprave, ki jih neposredno krmili gostitelj USB
Serijske emulacijske naprave, modemske naprave, ki jih krmili serijski nabor ukazov

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

20/174

konecview

Podrazred

Komunikacijski model

Exampseznam naprav, ki uporabljajo ta podrazred

Model telefonskega nadzora

PSTN

Večkanalni nadzorni ISDN model

Model krmiljenja CAPI ISDN

Model krmiljenja ECM za ethernetno omrežje

Omrežje bankomatov

bankomat

Nadzorni model

Model brezžičnega upravljanja s slušalko

WMC

Upravljanje naprav WMC

Model mobilne neposredne linije

WMC

OBEX

WMC

Model EEM za emulacijo Etherneta

Model nadzora omrežja

NCM

Naprave za glasovno telefonijo
Osnovni tarifni adapterji, primarni tarifni adapterji, telefoni
Osnovni terminalski adapterji, primarni terminalski adapterji, telefoni DOC-SIS kabelski modemi, ADSL modemi, ki podpirajo emulacijo PPPoE, Wi-Fi adapterji (družina IEEE 802.11), IEEE 802.3 adapterji ADSL modemi
Mobilna terminalska oprema, ki se povezuje z brezžičnimi napravami
Mobilna terminalska oprema, ki se povezuje z brezžičnimi napravami Mobilna terminalska oprema, ki se povezuje z brezžičnimi napravami
Mobilna terminalska oprema, ki se povezuje z brezžičnimi napravami Naprave, ki uporabljajo ethernetne okvirje kot naslednjo plast prenosa. Ni namenjeno za usmerjanje in naprave za internetno povezljivost Adapterji IEEE 802.3, ki prenašajo visokohitrostne pasovne širine podatkov po omrežju

Potrebe virov razreda CDC ACM za naprave USB od Core

Vsakič, ko dodate primerek razreda CDC ACM v konfiguracijo USB prek klica funkcije sl_usbd_cdc_acm_add_to_configuration(), bodo iz jedra dodeljeni naslednji viri.

Vir
Vmesniki Alternativni vmesniki Končne točke Skupine vmesnikov

Količina
2 2 3 1

Upoštevajte, da so te številke na konfiguracijo. Pri nastavljanju konfiguracijskih vrednosti SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY in SL_USBD_DESCRIPTOR_QUANTITY ne pozabite upoštevati, koliko konfiguracij bo razred dodan. Pri konfiguracijski vrednosti SL_USBD_OPEN_ENDPOINTS_QUANTITY morate upoštevati le število potrebnih končnih toček za primerek razreda, saj se končne točke odprejo le, ko gostitelj nastavi konfiguracijo.
Podrazred CDC ACM naprave USB nadview

Osnovni razred CDC je sestavljen iz vmesnika komunikacijskega razreda (CCI) in vmesnika podatkovnega razreda (DCI), ki sta podrobno obravnavana v poglavju Osnovni razred CDC za naprave USB.view Ta razdelek obravnava CCI tipa ACM. Sestavljen je iz privzete končne točke za element upravljanja in končne točke prekinitve za element obveščanja. Za prenos nedoločenih podatkov prek DCI se uporablja par končnih točk za množično uporabo.
Podrazred ACM uporabljata dve vrsti komunikacijskih naprav:
Naprave, ki podpirajo AT ukaze (na primer modemi z govornim pasom). Naprave za emulacijo serijskih portov, ki se imenujejo tudi naprave z virtualnimi COM vrati.
Za podrazred ACM obstaja več zahtev, specifičnih za podrazred. Omogočajo vam nadzor in konfiguracijo naprave. Celoten seznam in opis vseh zahtev ACM najdete v specifikaciji.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

21/174

konecview Podrazred za naprave PSTN, revizija 1.2, 9. februar 2007=, razdelek 6.2.2.
S tega seznama podrazred Silicon Labs9 ACM podpira naslednje:
Tabela – Zahteve ACM, ki jih podpira Silicon Labs

Opis zahteve za podrazred

NastaviCommFeature PridobiCommFeature PočistiCommFeature

Gostitelj pošlje to zahtevo za nadzor nastavitev za določeno komunikacijsko funkcijo. Ne uporablja se za serijsko emulacijo.
Gostitelj pošlje to zahtevo, da pridobi trenutne nastavitve za določeno komunikacijsko funkcijo. Ne uporablja se za serijsko emulacijo.
Gostitelj pošlje to zahtevo za brisanje nastavitev za določeno komunikacijsko funkcijo. Ne uporablja se za serijsko emulacijo.

Nastavi kodiranje vrstic

Gostitelj pošlje to zahtevo za konfiguracijo nastavitev naprave ACM: hitrost prenosa, število zaustavitvenih bitov, vrsto paritete in število podatkovnih bitov. Pri serijski emulaciji serijski terminal to zahtevo samodejno pošlje vsakič, ko konfigurirate serijske nastavitve za odprta navidezna vrata COM.

GetLineCoding

Gostitelj pošlje to zahtevo, da pridobi trenutne nastavitve ACM (hitrost prenosa, zaustavitveni biti, pariteta, podatkovni biti). Pri serijski emulaciji serijski terminali to zahtevo samodejno pošljejo med odpiranjem virtualnih vrat COM.

SetControlLineState Gostitelj pošlje to zahtevo za nadzor nosilca pri poldupleksnih modemih in nakaže, ali je podatkovna terminalska oprema (DTE) pripravljena ali ne. V primeru serijske emulacije je DTE serijski terminal. Pri serijski emulaciji nekateri serijski terminali omogočajo pošiljanje te zahteve z nastavljenimi kontrolami.

SetBreak

Gostitelj pošlje to zahtevo za generiranje prekinitve v slogu RS-232. Za serijska emulacija vam nekateri serijski terminali omogočajo pošiljanje te zahteve.

Podrazred ACM v Silicon Labs9 uporablja končno točko interrupt IN za obveščanje gostitelja o trenutnem stanju serijske linije. Serijska linija
Stanje vrstice je bitna slika, ki gostitelju sporoča:

Podatki zavrženi zaradi prekoračitve Napaka paritete Napaka okvirjanja Stanje zaznavanja zvonjenja Stanje mehanizma za zaznavanje prekinitve Stanje nosilca prenosa Stanje zaznavanja nosilca sprejemnika

Implementacija podrazreda ACM v Silicon Labs9 je skladna z naslednjo specifikacijo:
Univerzalno serijsko vodilo, komunikacije, podrazred za naprave PSTN, revizija 1.2, 9. februar 2007.
Konfiguracija razreda ACM za CDC naprave USB

V tem razdelku je opisano, kako konfigurirati razred CDC ACM (razred komunikacijskih naprav, abstraktni model krmiljenja). Obstajata dve skupini konfiguracijskih parametrov:
Konfiguracije za specifične aplikacije razreda CDC ACM za naprave USB Konfiguracije primerkov razreda CDC ACM za naprave USB
Konfiguracije za specifične aplikacije razreda CDC ACM za naprave USB

Osnovni razred CDC Podrazred ACM
Osnovni razred CDC

Najprej, če želite uporabiti modul razreda CDC za USB naprave Silicon Labs, boste morali prilagoditi konfiguracijo prevajanja CDC #define-s glede na potrebe vaše aplikacije. Pregrupirani so znotraj glave sl_usbd_core_config.h. file v razdelku CDC. Njihov namen je obvestiti modul naprave USB o tem, koliko objektov USB CDC naj dodeli.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

22/174

konecview

Spodnja tabela opisuje vsako konfiguracijsko polje, ki je na voljo v tej konfiguracijski strukturi.
Tabela – Definicije konfiguracije CDC naprav USB

Ime konfiguracije
SL_USBD_CDC_CL KOT KOLIČINA_PRIMERKA
SL_USBD_CDC_KONFIGURACIJE_KOLIČINA
TY
KOLIČINA_VMESNIKA_SL_USBD_CDC_PODATKOV
TY

Opis
Število primerkov razreda, ki jih boste dodelili s klicem funkcije
sl_usbd_cdc_acm_create_instance().
Število konfiguracij. Primerke razreda ACM je mogoče dodati eni ali več konfiguracijam aaaa, ki jih dodate v funkcijo sl_usbd_cdc_acm_add_to_configuration().
Skupno število podatkovnih vmesnikov (DCI) za vse funkcije CDC. Vsaka funkcija CDC ACM, dodana funkciji sl_usbd_cdc_acm_create_instance(), bo dodala podatkovni vmesnik.

Privzeta vrednost
2
1
2

Podrazred ACM
Podrazred ACM ima eno konfiguracijo med prevajanjem, ki je prikazana v spodnji tabeli.
Tabela – Definicija konfiguracije ACM za CDC naprave USB

Ime konfiguracije
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY

Opis
Konfigurira število primerkov podrazreda, ki jih boste dodelili s klicem metode
funkcija sl_usbd_cdc_acm_create_instance().

Privzeta vrednost
2

Konfiguracije primerkov razreda CDC ACM za naprave USB

Ta razdelek definira konfiguracije, povezane z instancami serijskega razreda CDC ACM. Ustvarjanje instance razreda, stanje linije, interval klicev, upravljanje zmogljivosti p_acm_callbacks
Ustvarjanje primerka razreda

Za ustvarjanje primerka serijskega razreda CDC ACM pokličite funkcijo T a sl_usbd_cdc_acm_create_instance(). Ta funkcija T ima tri konfiguracijske argumente, kot je opisano tukaj.

interval_stanja_linije
To je interval (v milisekundah), v katerem bo vaš primerek serijskega razreda CDC ACM poročal o stanju linije gostitelju T aa. Ta vrednost mora biti potenca dveh (1, 2, 4, 8, 16 itd.).

zmogljivosti_upravljanja_klici
Bitna slika zmogljivosti upravljanja klicev. Možne vrednosti bitne slike so naslednje:

Vrednost (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_PODATKI_CCI _DCI

Opis
Naprava sama upravlja klice. Naprava lahko pošilja/prejema informacije o upravljanju klicev prek vmesnika podatkovnega razreda.

p_acm_callbacks

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

23/174

konecview

aa M aa p_acm_callbacks je kazalec na strukturo tipa sl_usbd_cdc_acm_callbacks_t. Njegov namen je dati razredu CDC AC ss nabor funkcij povratnega klica, ki se klicejo, ko se pojavi dogodek CDC ACM. Vsi povratni klici niso obvezni in v spremenljivko strukture callbacks je mogoče posredovati ničelni kazalec (NULL), ko povratni klic ni potreben. Spodnja tabela opisuje vsako konfiguracijsko polje, ki je na voljo v tej konfiguracijski strukturi.
Tabela – struktura konfiguracije sl_usbd_cdc_acm _callbacks_t

Polja

Opis

.omogočiti

Pokliče se, ko je omogočen primerek razreda USB

uspešno.

.onemogočiti

Pokliče se, ko je primerek razreda USB onemogočen.

.line_control_changed Pokliče se, ko je prejeta sprememba nadzora linije.

line_coding_changed Pokliče se, ko je prejeta sprememba linijskega kodiranja.

Podpis funkcije
void app_usbd_cdc_acm_enable(uint8_t podrazred_nbr);
void app_usbd_cdc_acm_disable(uint8_t podrazred_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t podrazred_nbr, uint8_t dogodek, uint8_t dogodek_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t podrazred_nbr, podrazred_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding

Glejte poglavje Registracija povratnih klicev za obveščanje o dogodkih za funkcije povratnega klica, npr.ample.
Vodnik za programiranje razreda CDC ACM za naprave USB

V tem razdelku je pojasnjeno, kako uporabljati razred CDC Abstract Control Model. Inicializacija razreda CDC ACM naprave USB Dodajanje primerka razreda CDC ACM naprave USB v vašo napravo Komuniciranje z uporabo razreda CDC ACM
Inicializacija razreda CDC ACM naprave USB

Če želite svoji napravi dodati funkcionalnost razreda CDC ACM, morate najprej inicializirati osnovni razred CDC in podrazred ACM tako, da izpolnite funkcije sl_usbd_cdc_init() in sl_usbd_cdc_acm_init(). Spodnji primer prikazuje, kako poklicati sl_usbd_cdc_init() in sl_usbd_cdc_acm_init() z uporabo privzetih argumentov.

Example – Inicializacija razreda CDC ACM

stanje sl_status_t;
status = sl_usbd_cdc_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
status = sl_usbd_cdc_acm_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
Dodajanje primerka razreda CDC ACM naprave USB v vašo napravo
Če želite svoji napravi dodati funkcionalnost razreda CDC ACM, morate ustvariti primerek in ga nato dodati v konfiguracijo(-e) naprave.
Ustvarjanje primerka razreda CDC ACM

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

24/174

konecview
Dodajanje primerka razreda CDC ACM v konfiguracijo(-e) vaše naprave Registriranje povratnih klicev za obveščanje o dogodkih
Ustvarjanje primerka razreda CDC ACM
Ustvarite namestitev razreda CDC AC s klicem funkcije sl_usbd_cdc_acm_create_instance(). Spodnji primer prikazuje, kako ustvariti namestitev razreda CDC AC z uporabo sl_usbd_cdc_acm_create_instance().
Example – Ustvarjanje funkcije CDC ACM prek sl_usbd_cdc_acm_create_instance()

uint8_t podrazred_nbr; stanje sl_status_t;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &podrazred_št.);
če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
Dodajanje primerka razreda CDC ACM v konfiguracijo(-e) vaše naprave
Ko ustvarite primerek razreda CDC ACM, ga lahko dodate konfiguraciji s klicem funkcije
sl_usbd_cdc_acm_add_to_configuration().
Spodnji primer prikazuje, kako poklicati funkcijo sl_usbd_cdc_acm_add_to_configuration().
Example – Klic USBD ACM sl_usbd_cdc_acm_add_to_configuration()

stanje sl_status_t;

status = sl_usbd_cdc_acm_add_to_configuration(podrazred_nbr,

(1)

config_nbr_fs);

(2)

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

aaa (1) Številka razreda ss, ki jo je treba dodati konfiguraciji, ki jo vrne sl_usbd_cdc_acm_create_instance(). (2) Številka konfiguracije (tukaj jo dodajamo konfiguraciji s polno hitrostjo).
Registracija povratnih klicev za obvestila o dogodkih
Razred CDC ACM Serial lahko vašo aplikacijo obvesti o vseh spremembah v nadzoru linije ali kodiranju prek funkcij za povratni klic obveščanja. Strukturo funkcij za povratni klic je mogoče posredovati kot argument med ustvarjanjem instance ACM. Upoštevajte, da so ti povratni klici neobvezni. Npr.ample – Registracija povratnih klicev CDC ACM ponazarja uporabo funkcij registracije povratnih klicev. Primerample – Implementacija povratnih klicev CDC ACM prikazuje exampimplementacije funkcij povratnega klica.
Example – Registracija povratnih klicev CDC ACM

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

25/174

konecview

uint8_t podrazred_nbr; stanje sl_status_t;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
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);
če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }
Example – Implementacija povratnih klicev CDC ACM

bool app_usbd_cdc_acm_line_coding_changed (uint8_t

podrazred_št.,

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t nova_prenosna_hitrost;

uint8_t pariteta_nova;

uint8_t stop_bits_new;

uint8_t podatkovni_bitovi_novi;

/* TODO Uporabi novo linijsko kodiranje.*/ 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;

vrnitev (resnično);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t podrazred_nbr, uint8_t dogodek, uint8_t dogodek_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;

/* TODO Uporabi nov nadzor linije. */ 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 = ((dogodek_spremenjen & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? res : neresnica;
}

(1) Pomembno je, da tej funkciji vrnete vrednost »false«, če uporaba linijskega kodiranja ni uspela. V nasprotnem primeru vrnite vrednost »true«.
Komuniciranje z uporabo razreda CDC ACM
Serijsko stanje
Kodiranje linij, upravljanje linij

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

26/174

konecview

Komunikacija primerkov podrazreda stanja vrstice
Serijsko stanje
Linijsko kodiranje
Gostitelj USB nadzoruje linijsko kodiranje (hitrost prenosa, pariteto itd.) naprave CDC ACM. Po potrebi je aplikacija odgovorna za nastavitev linijskega kodiranja. Na voljo sta dve funkciji za pridobivanje in nastavitev trenutnega linijskega kodiranja, kot je opisano v spodnji tabeli.
Tabela – Funkcije linijskega kodiranja CDC ACM

funkcija
sl_usbd_cdc_acm_ge t_line _co d ing ()
sl_usbd_cdc_acm_se t_line _co d ing ()

Opis
Vaša aplikacija lahko pridobi trenutne nastavitve linijskega kodiranja bodisi od gostitelja z zahtevami SetLineCoding bodisi s funkcijo sl_usbd_cdc_acm_set_line_coding().
Vaša aplikacija lahko nastavi kodiranje linij. Gostitelj lahko pridobi nastavitve z zahtevo GetLineCoding.

Nadzor linije
Gostitelj USB nadzoruje linijsko krmiljenje (pina RTS in DTR, signal prekinitve itd.) naprave CDC ACM. Po potrebi je vaša aplikacija odgovorna za uporabo linijskih krmiljenj. Na voljo je funkcija za pridobivanje in nastavitev trenutnih linijskih krmiljenj, kot je opisano v spodnji tabeli.
Tabela – Funkcije nadzora linije CDC ACM

funkcija
sl_usb d _cd c_acm_ge e t_line _control_state ()

Vaša aplikacija lahko pridobi trenutno stanje krmilne linije, ki ga nastavi gostitelj, z zahtevo SetControlLineState.

Line State
Gostitelj USB redno pridobiva stanje linije. Vaša aplikacija mora posodobiti stanje linije vsakič, ko se to spremeni. Po potrebi je vaša aplikacija odgovorna za nastavitev stanja linije. Na voljo sta dve funkciji za pridobivanje in nastavitev trenutnih kontrolnikov linije, kot je opisano v spodnji tabeli.
Tabela – Funkcije stanja vrstice S CDC ACM

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

Vaša aplikacija lahko nastavi kateri koli dogodek(-e) stanja linije. Med nastavljanjem stanja linije se gostitelju pošlje prekinitev IN prenosa, ki ga obvesti o spremembi stanja serijske linije.
Aplikacija lahko izbriše dva dogodka stanja linije: nosilec prenosa in zaznavanje nosilca sprejemnika. Vse ostale dogodke podrazred serijske emulacije ACM samodejno izbriše.

Komunikacija s podrazredom

Podrazred ACM podjetja Silicon Labs ponuja naslednje funkcije za komunikacijo z gostiteljem. Za več podrobnosti o parametrih functions9 glejte referenčni priročnik o funkcijah podrazreda ACM CDC.

Ime funkcije
sl_usb d _cd c_acm_ read ad () sl_usb d _cd c_acm_write ()

Delovanje
Prejema podatke od gostitelja prek končne točke množičnega pošiljanja (OUT). Ta funkcija blokira. Pošilja podatke gostitelju prek končne točke množičnega pošiljanja (IN). Ta funkcija blokira.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

27/174

konecview

Tabela – Povzetek komunikacijskega API-ja CDC ACM aaaaa sl_usbd_cdc_acm_read() in sl_usbd_cdc_acm_write() zagotavljata sinhrono komunikacijo, kar pomeni, da prenos blokira. Z drugimi besedami, ob klicu funkcije se aplikacija blokira, dokler prenos ni končan z napako ali brez nje. Določite lahko časovno omejitev, da se izognete večnemu čakanju.ampSpodnji del prikazuje primer branja in pisanjaampdatoteka, ki prejema podatke od gostitelja z uporabo končne točke množičnega vnosa (Buck OUT) in pošilja podatke gostitelju z uporabo končne točke množičnega vnosa (Buck IN).
Seznam – Serijsko branje in pisanje Example

__PORAVNANO(4) uint8_t rx_buf[2];

__PORAVNANO(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_cdc_acm_read(podrazred_nbr,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

status = sl_usbd_cdc_acm_write(podrazred_nbr,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

T aaaaa M (1) Številka instance razreda, ustvarjena s sl_usbd_cdc_acm_create_instance(), zagotavlja notranjo referenco na podrazred AC za usmerjanje prenosa do ustrezne končne točke OUT ali IN. (2) Vaša aplikacija mora zagotoviti, da je medpomnilnik, ki je na voljo funkciji, dovolj velik, da sprejme vse podatke. V nasprotnem primeru lahko pride do težav s sinhronizacijo. (3) Da bi se izognili neskončnemu blokiranju, določite časovno omejitev, izraženo v milisekundah. Vrednost 809 povzroči, da naloga aplikacije čaka večno. (4) Aplikacija zagotavlja inicializiran medpomnilnik za prenos.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

28/174

konecview
konecview

Razred HID naprave USB

Naprava USB HID razreda nadview Potrebe po virih razreda HID za naprave USB iz konfiguracije razreda HID za naprave USB Vodnik za programiranje razreda HID za naprave USB Periodična vhodna poročila HID Naloga
Ta razdelek opisuje razred naprav za vmesniški dostop do človeka (HID), ki jih podpira naprava USB podjetja Silicon Labs.
Razred HID zajema naprave, ki jih ljudje uporabljajo za nadzor računalniških operacij, kot so tipkovnice, miške, kazalne naprave in igralne naprave.
Razred HID se lahko uporablja tudi v sestavljeni napravi, ki vsebuje krmilne elemente, kot so gumbi, stikala, gumbi in drsniki. Na primerampNadzor glasnosti, izklopa zvoka in utišanja v avdio slušalkah nadzira funkcija HID slušalk. Razred HID lahko izmenjuje podatke za kateri koli namen samo z uporabo prenosov krmiljenja in prekinitev.
Razred HID je eden najstarejših in najbolj razširjenih razredov USB. Vsi večji gostiteljski operacijski sistemi ponujajo izvorni gonilnik za upravljanje naprav HID, zato različne naprave različnih proizvajalcev delujejo z razredom HID. Ta razred vključuje tudi različne vrste izhodnih elementov, kot so LED diode, zvok, taktilne povratne informacije itd.
Implementacija HID je skladna z naslednjimi specifikacijami:
Definicija razreda naprav za naprave s človeškim vmesnikom (HID), 27. 6. 01, različica 1.11. Tabele uporabe univerzalnega serijskega vodila HID, 28. 10. 2004, različica 1.12.
Naprava USB HID razreda nadview
konecview
Naprava HID je sestavljena iz naslednjih končnih točk:
Par kontrolnih končnih točk IN in OUT, imenovanih privzeta končna točka; Končna točka prekinitve IN; Izbirna končna točka prekinitve OUT.
Spodnja tabela opisuje uporabo različnih končnih točk:
Tabela – Uporaba končnih točk razreda HID

Uporaba smeri končne točke

Nadzor IN
Nadzor
VEN
Prekinitev VHOD
Prekiniti
VEN

Naprava-gostitelj
Od gostitelja do naprave
Naprava-gostitelj
Od gostitelja do naprave

Standardne zahteve za naštevanje, zahteve, specifične za razred, in komunikacijo podatkov (vnos, poročila o funkcijah, poslana gostitelju z zahtevo GET_REPORT). Standardne zahteve za naštevanje, zahteve, specifične za razred, in komunikacijo podatkov (izhod, poročila o funkcijah, prejeta od gostitelja z zahtevo SET_REPORT). Komunikacija podatkov (vnos in poročila o funkcijah).
Komunikacija podatkov (poročila o izhodnih podatkih in funkcijah).

Poročilo

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

29/174

konecview

Gostitelj in naprava HID si izmenjujeta podatke s pomočjo poročil. Poročilo vsebuje oblikovane podatke, ki z informacijami o krmilnih elementih in drugih fizičnih entitetah naprave HID. Krmilnik lahko upravlja uporabnik in upravlja določen vidik naprave. Na primerampKontrolnik je lahko gumb na miški ali tipkovnici, stikalo itd. Druge entitete obveščajo uporabnika o stanju določenih funkcij naprave. Na primerampLED lučke na tipkovnici obveščajo uporabnika o vklopljeni funkciji Caps Lock, aktivni številski tipkovnici itd.
Gostitelj razume obliko in uporabo podatkov poročila z analizo vsebine deskriptorja poročila. Analiziranje vsebine izvede razčlenjevalnik. Deskriptor poročila opisuje podatke, ki jih zagotavlja vsak krmilnik v napravi. Sestavljen je iz elementov, ki so deli informacij o napravi in ​​so sestavljeni iz 1-bajtne predpone in spremenljive dolžine.
podatki. Za več podrobnosti o obliki zapisa elementa glejte
1.11=, oddelka 5.6 in 6.2.2.
Obstajajo tri glavne vrste predmetov:
Glavni element definira ali združuje določene vrste podatkovnih polj.
Globalni element opisuje podatkovne značilnosti kontrolnika.
Lokalni element opisuje podatkovne značilnosti kontrolnika.
Vsak tip elementa je definiran z različnimi funkcijami. Funkcijo elementa lahko imenujemo tudi tagFunkcijo postavke lahko razumemo kot podpostavko, ki spada v eno od treh glavnih vrst postavk. Spodnja tabela vsebuje kratek pregledview funkcij elementa v vsaki vrsti elementa. Za popoln opis elementov v vsaki kategoriji glejte
Tabela – Opis funkcij elementov za vsako vrsto elementa

Postavka Vrsta postavke Funkcija

Opis

Glavni vhod

Opisuje informacije o podatkih, ki jih zagotavlja eden ali več fizičnih kontrol.

Glavni izhod Opisuje podatke, poslane napravi.

Glavna značilnost

Opisuje informacije o konfiguraciji naprave, poslane napravi ali prejete od nje, ki vplivajo na splošno delovanje naprave ali ene od njenih komponent.

Povezani elementi glavne skupine zbirk (vnos, izhod ali funkcija).

Glavni konec zapre zbirko. Zbirka

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

30/174

konecview

Postavka Vrsta postavke Funkcija

Opis

Stran za globalno uporabo

Določa funkcijo, ki je na voljo v napravi.

Globalna logična vrednost Določa spodnjo mejo poročanih vrednosti v logičnih enotah. Minimalna vrednost

Globalna logična vrednost Določa zgornjo mejo poročanih vrednosti v logičnih enotah. Največja

Globalno fizično Določa spodnjo mejo poročanih vrednosti v fizikalnih enotah, to je logični minimum, izražen v fizikalnih enotah.

Globalno fizično Določa zgornjo mejo poročanih vrednosti v fizikalnih enotah, to je logični maksimum, izražen v fizikalnih enotah.

Globalna enota

Označuje eksponent enote v desetiškem sistemu. Eksponent se giblje od -8 do +7.

Eksponent

Globalna enota

Označuje enoto poročanih vrednosti. Na primer, enote za dolžino, maso, temperaturo itd.

Velikost globalnega poročila

Označuje velikost polj poročila v bitih.

Globalni ID poročila Označuje predpono, dodano določenemu poročilu.

Globalno število poročil

Označuje število podatkovnih polj za element.

Globalni potisk

Namesti kopijo globalne tabele stanj elementov na sklad CPU-ja.

Globalni pop

Zamenja tabelo stanj elementov z zadnjo strukturo iz sklada.

Lokalna uporaba

Predstavlja indeks za označevanje določene uporabe znotraj strani uporabe. Označuje predlagano uporabo proizvajalca za določen kontrolnik ali skupino kontrolnikov. Uporaba razvijalcu aplikacije zagotavlja informacije o tem, kaj kontrolnik dejansko meri.

Lokalna uporaba

Določa začetno uporabo, povezano z matrico ali bitno sliko.

Najmanjša

Lokalna uporaba

Določa končno uporabo, povezano z matrico ali bitno sliko.

Največ

Lokalni označevalec Določa del telesa, ki se uporablja za kontrolnik. Indeks kaže na označevalec v fizičnem

Kazalo

deskriptor.

Lokalni označevalec Določa indeks začetnega označevalca, povezanega z matrico ali bitno sliko. Najmanj

Lokalni označevalec Določa indeks končnega označevalnika, povezanega z matrico ali bitno sliko. Največja vrednost

Lokalni indeks nizov

Indeks niza za deskriptor niza. Omogoča povezavo niza z določenim elementom ali kontrolnikom.

Lokalni niz

Določa prvi indeks niza pri dodeljevanju skupine zaporednih nizov kontrolnikom v matriki

Minimalna ali bitna slika.

Lokalno Lokalno

Največja vrednost niza
Ločilo

Določa zadnji indeks niza pri dodeljevanju skupine zaporednih nizov kontrolnikom v matriki ali bitni sliki.
Določa začetek ali konec niza lokalnih elementov.

Podatki krmilnika morajo definirati vsaj naslednje elemente:
Vhod, izhod ali funkcija Glavni elementi Uporaba Lokalni element Uporaba Stran Globalni element Logični minimum Globalni element Logični maksimum Globalni element Velikost poročila Globalni element

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

31/174

konecview
Globalni element števca poročil Spodnja tabela prikazuje predstavitev vsebine deskriptorja poročila miške z vidika razčlenjevalnika HID gostitelja. Miška ima tri gumbe (levi, desni in kolesce). Koda, predstavljena v primeruampSpodaj je implementacija kode, ki ustreza tej predstavitvi deskriptorja poročila miške.
Slika – Vsebina deskriptorja poročila iz razčlenjevalnika HID gostitelja View

(1) Funkcija elementa Uporabne strani določa splošno funkcijo naprave. V tem primeruampnpr. naprava HID pripada
splošni nadzor namizja.
(2) Zbirka Aplikacija združuje glavne elemente, ki imajo skupen namen in so morda znani aplikacijam. Na diagramu je skupina sestavljena iz treh glavnih vhodnih elementov. Za to zbirko je predlagana uporaba kontrolnikov miška, kot je navedeno v elementu Uporaba. (3) Vgnezdene zbirke se lahko uporabijo za podajanje več podrobnosti o uporabi posameznega kontrolnika ali skupine kontrolnikov aplikacijam. V tem primeruampFizični element zbirke, ugnezden v aplikacijo zbirke, je sestavljen iz istih treh vhodnih elementov, ki tvorijo aplikacijo zbirke. Fizični element zbirke se uporablja za nabor podatkovnih elementov, ki predstavljajo podatkovne točke, zbrane na eni geometrijski točki. V primeruampPredlagana uporaba je kazalec, kot je navedeno v elementu Uporaba. Tukaj se uporaba kazalca nanaša na koordinate položaja miške, sistemska programska oprema pa bo prevedla koordinate miške v gibanje kazalca na zaslonu. (4) Možne so tudi vgnezdene strani uporabe, ki podajajo več podrobnosti o določenem vidiku znotraj splošne funkcije naprave. V tem primeru sta združena dva vhodna elementa, ki ustrezata gumbom miške. En vhodni element določa tri gumbe miške (desni, levi in ​​kolesce) glede na število podatkovnih polj za element (element Število poročil), velikost podatkovnega polja (element Velikost poročila) in možne vrednosti za vsako podatkovno polje (elementi Minimalna in maksimalna uporaba, Logični minimum in maksimum). Drugi vhodni element je 13-bitna konstanta, ki omogoča poravnavo podatkov vhodnega poročila na meji bajtov. Ta vhodni element se uporablja samo za namene zapolnjevanja. (5) Za koordinate položaja miške je definirana še ena vgnezdena stran uporabe, ki se nanaša na generični kontrolnik namizja. Za to stran uporabe vhodni element opisuje podatkovna polja, ki ustrezajo osi x in y, kot je določeno z dvema elementoma Uporaba.
predmetov.
Po analizi prejšnje vsebine deskriptorja poročila miške lahko razčlenjevalnik HID gostitelja interpretira vhodne podatke poročila, ki jih naprava pošlje s prekinitvenim prenosom IN ali kot odgovor na zahtevo GET_REPORT. Vhodni podatki poročila, ki ustrezajo deskriptorju poročila miške, so prikazani na sliki – Vsebina deskriptorja poročila iz razčlenjevalnika HID gostitelja. View is

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

32/174

konecview

prikazano v spodnji tabeli. Skupna velikost podatkov poročila je 4 bajti. Prek iste končne točke se lahko pošljejo različne vrste poročil. Za razlikovanje med različnimi vrstami poročil se podatkovnemu poročilu doda 1-bajtna predpona ID-ja poročila. Če je bil ID poročila uporabljen v exampporočila o miški bi bila skupna velikost podatkov poročila 5 bajtov.
Tabela – Vhodno poročilo, poslano gostitelju in ustreza stanju miške s 3 gumbi

Bitni odmik
0 1 2 3 16 24

Število bitov 1 1 1 13 8 8

Opis Gumb 1 (levi gumb). Gumb 2 (desni gumb). Gumb 3 (gumb kolesca). Se ne uporablja. Položaj na osi X. Položaj na osi Y.

Fizični deskriptor označuje del ali dele telesa, namenjene aktiviranju enega ali več krmilnih elementov. Aplikacija lahko te informacije uporabi za dodelitev funkcionalnosti krmilnemu elementu naprave. Fizični deskriptor je neobvezen deskriptor, specifičen za razred, in večina naprav ima malo koristi od njegove uporabe. Glejte
Potrebe virov razreda HID za naprave USB od Core

Vsakič, ko dodate primerek razreda HID v konfiguracijo USB prek klica funkcije sl_usbd_hid_add_to_configuration(), bodo iz jedra dodeljeni naslednji viri.

Vir
Vmesniki Alternativni vmesniki Končne točke Skupine vmesnikov

Količina
1 1 1 (2, če je omogočena končna točka prekinitve OUT) 0

Upoštevajte, da so te številke na konfiguracijo. Pri nastavljanju konfiguracijskih vrednosti SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY in SL_USBD_DESCRIPTOR_QUANTITY ne pozabite upoštevati, koliko konfiguracij bo razred dodan. Pri konfiguracijski vrednosti SL_USBD_OPEN_ENDPOINTS_QUANTITY morate upoštevati le število potrebnih končnih toček za primerek razreda, saj se končne točke odprejo le, ko gostitelj nastavi konfiguracijo.
Konfiguracija razreda HID naprave USB

Za konfiguracijo razreda HID se uporabljata dve skupini konfiguracijskih parametrov:
Konfiguracije razreda HID za naprave USB, specifične za aplikacijo Konfiguracije primerkov razreda HID za naprave USB
Konfiguracije razreda HID za naprave USB, specifične za aplikacijo

Najprej, če želite uporabiti modul razreda HID za USB naprave Silicon Labs, prilagodite definicije konfiguracije HID med prevajanjem glede na potrebe vaše aplikacije. Pregrupirane so znotraj glave sl_usbd_core_config.h. file v razdelku HID. Razdelimo jih lahko na dva razdelka, konfiguracije količine in konfiguracije naloge HID. Namen konfiguracije količine je obvestiti modul naprave USB o tem, koliko objektov USB HID naj dodeli.
Spodnja tabela opisuje vsako definicijo konfiguracije.
Tabela – Definicije konfiguracije HID naprave USB

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

33/174

konecview

Ime konfiguracije
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG_URATION_QUANTITY
SL_USBD_HID_POROČILO_ID_KOLIČINA
SL_USBD_HID_PUSH_P OP_ITEM_KOLIČINA
SL_USBD_HID_TIMER_T VELIKOST_VPRAŠANJA
SL_USBD_HID_TIMER_T ASK_PRIORITY

Opis
Število primerkov razreda, ki jih boste dodelili s klicem funkcije
sl_usbd_hid_create_instance().
Število konfiguracij. Primerke razreda HID je mogoče dodati eni ali več konfiguracijam aaaa prek funkcije sl_usbd_hid_add_to_configuration(). Konfigurira skupno število ID-jev poročil, ki jih je treba dodeliti.
Konfigurira skupno število elementov Push/Pop, ki jih je treba dodeliti.
Naloga časovnika obravnava vse operacije HID, ki temeljijo na časovniku. Ta konfiguracija vam omogoča, da nastavite velikost sklada (v številu bajtov). Prioriteta naloge HID. To je prioriteta CMSIS-RTOS2.

Privzeta vrednost
2 1 2 0 2048
osPriorityHigh

Konfiguracije primerkov razreda HID naprave USB Podrazred ustvarjanja primerkov razreda
protokol koda_države
interval_in in interval_out p_hid_callback Opis poročila razreda HID ExampTa razdelek definira konfiguracije, povezane z instancami razreda HID.
Ustvarjanje primerka razreda
Ustvarjanje primerka razreda HID se izvede s klicem funkcije aaa sl_usbd_hid_create_instance(), ki zahteva več konfiguracijskih argumentov, ki so opisani spodaj.
podrazred
Koda podrazreda HID. Možne vrednosti so:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Naprava HID, ki uporablja zagonski podrazred, mora uporabljati standardne formate poročil. Za več informacij o kodah podrazredov glejte razdelek 4.2 specifikacije HID, revizija 1.11.
protokol
Protokol, ki ga uporablja naprava HID. Možne vrednosti so:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Če je vaša funkcija HID miška, mora biti protokol nastavljen na SL_USBD_HID_PROTOCOL_MOUSE. Če je tipkovnica, mora biti nastavljen na SL_USBD_HID_PROTOCOL_KBD. V nasprotnem primeru mora biti protokol nastavljen na SL_USBD_HID_PROTOCOL_NONE. Za več informacij o kodah podrazredov glejte razdelek 4.3 specifikacije HID, revizija 1.11.
koda_države
ID kode države. Možne vrednosti so:
SL_USBD_HID_KODA_DRŽAVE_NI_PODPRTA

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

34/174

konecview
SL_USBD_HID_KODA_DRŽAVE_ARABIČNO SL_USBD_HID_KODA_DRŽAVE_BELGIJSKO SL_USBD_HID_KODA_DRŽAVE_KANADSKO_DVOJEZIČNO SL_USBD_HID_KODA_DRŽAVE_KANADSKO_FRANCOŠKO SL_USBD_HID_KODA_ČEŠKO_REPUBLIKA SL_USBD_HID_KODA_DRŽAVE_DANŠKO SL_USBD_HID_KODA_DRŽAVE_FINŠKO SL_USBD_HID_KODA_DRŽAVE_FRANCOŠKO SL_USBD_HID_KODA_DRŽAVE_NEMŠKO SL_USBD_HID_KODA_DRŽAVE_GRŠKO SL_USBD_HID_KODA_HEBREJŠKO SL_USBD_HID_KODA_DRŽAVE_MADŽARSKO SL_USBD_HID_KODA_MEDNARODNO SL_USBD_HID_KODA_DRŽAVE_ITALIJŠKO SL_USBD_HID_KODA_DRŽAVE_JAPONSKA_KATAKANA SL_USBD_HID_KODA_DRŽAVE_KOREJŠČINA SL_USBD_HID_KODA_L AMERIŠKA SL_USBD_HID_KODA_DRŽAVE_NIZOZEMSKA IN NIZOZEMSKA SL_USBD_HID_KODA_DRŽAVE_NORVEŠČINA SL_USBD_HID_KODA_DRŽAVE_PERZIJA_PERZIJA SL_USBD_HID_KODA_POLJŠČINA IN SL_USBD_HID_KODA_DRŽAVE_PORTUGALŠČINA SL_USBD_HID_KODA_DRŽAVE_RUSIJA SL_USBD_HID_KODA_DRŽAVE_SLOVAŠKA SL_USBD_HID_KODA_DRŽAVE_ŠPANŠČINA SL_USBD_HID_KODA_DRŽAVE_ŠVEDŠČINA SL_USBD_HID_KODA_DRŽAVE_ŠVICARSKA_FRANCOŠČINA SL_USBD_HID_KODA_DRŽAVE_ŠVICA_NEMŠČINA SL_USBD_HID_KODA_DRŽAVE_ŠVICA IN SL_USBD_HID_KODA_DRŽAVE_TAJVAN SL_USBD_HID_KODA_DRŽAVE_TURŠIJA_Q SL_USBD_HID_KODA_DRŽAVE_VB SL_USBD_HID_KODA_DRŽAVE_ZDA SL_USBD_HID_KODA_DRŽAVE_JUG OSL AVIA SL_USBD_HID_KODA_DRŽAVE_TURŠIJA_F
Koda države določa, za katero državo je strojna oprema lokalizirana. Večina strojne opreme ni lokalizirana, zato bi bila ta možnost SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Vendar pa lahko tipkovnice to polje uporabijo za označevanje jezika velikih črk.
Za več informacij o kodah držav glejte razdelek 6.2.1 specifikacije HID, revizija 1.11.
vhodni_interval in izhodni_interval
interval_in in interval_out predstavljata interval anketiranja končne točke prekinitve IN in končne točke prekinitve OUT.
To predstavlja interval anketiranja končne točke v milisekundah. Nastavitev te vrednosti je odvisna od tega, kako pogosto je vaša naprava dovzetna za ustvarjanje novega poročila za gostitelja. Če se na primer poročilo ustvari vsakih 16 milisekund, mora biti interval 16 ali manj.
Vrednost mora biti potenca števila 2 (1, 2, 4, 8, 16 itd.).
Parameter interval_out v lue se prezre, če je parameter ctrl_rd_en nastavljen na true.
p_hid_callback
aaaa p_hid_callback je kazalec na strukturo tipa sl_usbd_hid_callbacks_t. Njegov namen je dati HID Cl ss nabor klicnih funkcij, ki se klicejo, ko se pojavi dogodek HID.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

35/174

konecview

Vsi povratni klici niso obvezni in v spremenljivko strukture callbacks se lahko posreduje ničelni kazalec (NULL), kadar povratni klic ni potreben. Spodnja tabela opisuje vsako konfiguracijsko polje, ki je na voljo v tej konfiguracijski strukturi.
Tabela – struktura konfiguracije sl_usbd_hid_callbacks_t

Polja

Opis

Podpis funkcije

.omogoči .onemogoči .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

Klice se, ko je primerek razreda USB uspešno omogočen. Klice se, ko je primerek razreda USB onemogočen.
Klicana med ustvarjanjem primerka HID za posredovanje deskriptorja poročila. Za vsako od vaših funkcij HID morate navesti deskriptor poročila. Deskriptor poročila gostitelju sporoča, kako naj se razčleni periodično poročilo, ki ga bo naprava poslala. Pisanje lastnega deskriptorja poročila je lahko zahtevno, zato je na voljo nekaj virov za pomoč. To je edina obvezna funkcija povratnega klica. Klicana med ustvarjanjem primerka HID za posredovanje vašega fizičnega deskriptorja. Fizični deskriptor je deskriptor, ki zagotavlja informacije o določenem delu ali delih človeškega telesa, ki aktivirajo kontrolnik ali kontrolnike. Za več informacij o fizičnih deskriptorjih glejte razdelek 6.2.3 specifikacije HID, revizija 1.11. Fizični deskriptor je neobvezen in se večinoma prezre. Medpomnilnik, ki se posreduje tukaj, je mogoče nastaviti na NULL, dolžino pa na 0. Klicana, ko gostitelj nastavi poročilo, kot je opisano v vašem deskriptorju poročila (ko pošlje poročilo).
Pokliče se, ko gostitelj zahteva poročilo o funkciji, kot je opisano v vašem deskriptorju poročila.
Pokliče se, ko gostitelj nastavi poročilo o funkciji, kot je opisano v deskriptorju poročila.

void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t razred_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t razred_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t razred_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);

.get_protocol

Pridobi trenutno aktivni protokol.

void app_usbd_hid_get_protocol(uint8_t razred_nbr, uint8_t *p_protocol);

.set_protocol

Nastavi trenutno aktivni protokol.

void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);

Deskriptor poročila razreda HID Example

Silicon Labsov razred HIDampaplikacija ponuja npr.ampdeskriptorja poročila za preprosto miško. ExampSpodnja slika prikazuje deskriptor poročila o miški.
Example – Deskriptor poročila o miši

statični uint8_t app_usbd_hid_report_desc[] = {

(1) (2)

SL_USBD_HID_GLOBALNA_UPORABA_PAGE + 1, SL_USBD_HID_UPORABA_PAGE_SPLOŠNI_KONTROLNIKI_NAMIZJA,

SL_USBD_HID_LOKALNA_UPORABA + 1, SL_USBD_HID_CA_MIŠKA,

(3)

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

36/174

konecview

SL_USBD_HID_GLAVNA_ZBIRKA +1, SL_USBD_HID_ZBIRKA_APLIKACIJA,(4)

SL_USBD_HID_LOKALNA_UPORABA +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_GLAVNA_ZBIRKA +1, SL_USBD_HID_ZBIRKA_FIZIČNA,(6)

SL_USBD_HID_GLOBALNA_PORABA_PAGE +1, SL_USBD_HID_UPORABA_PAGE_GUMB,(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,

VELIKOST_POROČILA_SL_USBD_HID_GLOBAL +1,0 01,

SL_USBD_HID_GLAVNI_VHOD +1, SL_USBD_HID_GLAVNI_PODATKI |

SL_USBD_HID_GLAVNA_SPREMENLJIVKA |

SL_USBD_HID_GLAVNI_ABSOLUTE,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)

SL_USBD_HID_GLOBALNO_POROČILO_VELIKOST +1,0 0D,

SL_USBD_HID_GLAVNI_VHOD +1, SL_USBD_HID_GLAVNA_KONSTANTNA,(9)

SL_USBD_HID_GLOBALNA_UPORABA_PAGE +1, SL_USBD_HID_UPORABA_PAGE_SPLOŠNI_KONTROLNIKI_NAMIZJA,

SL_USBD_HID_LOKALNA_UPORABA +1, SL_USBD_HID_DV_X,

SL_USBD_HID_LOKALNA_UPORABA +1, SL_USBD_HID_DV_Y,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,

VELIKOST_POROČILA_SL_USBD_HID_GLOBAL +1,0 08,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,

SL_USBD_HID_GLAVNI_VHOD +1, SL_USBD_HID_GLAVNI_PODATKI |

SL_USBD_HID_GLAVNA_SPREMENLJIVKA |

SL_USBD_HID_GLAVNI_RELATIVNI,

SL_USBD_HID_GLAVNA_KONČNICA ZBIRKE,(10)

SL_USBD_HID_GLAVNA_KONČNA_ZBIRKA

(11)};

(1) Tabela, ki predstavlja deskriptor poročila o miški, je inicializirana tako, da vsaka vrstica ustreza kratkemu elementu. Slednji je sestavljen iz 1-bajtne predpone in 1-bajtnih podatkov. Glejte viewki ga je razčlenil gostiteljski HID na sliki – Vsebina deskriptorja poročila iz razčlenjevalnika gostiteljskega HID View.
(2) Uporablja se splošna stran za uporabo namizja.
(3) Na strani za splošno uporabo namizja je uporaba tag nakazuje, da je skupina kontrolnikov namenjena upravljanju miške. Zbirka mišk je običajno sestavljena iz dveh osi (X in Y) in enega, dveh ali treh gumbov.
(4) Zbiranje miši se začne.
(5) Znotraj zbirke mišk je uporaba tag natančneje nakazuje, da kontrolniki miške pripadajo zbirki kazalcev. Zbirka kazalcev je zbirka osi, ki generira vrednost za usmerjanje, označevanje ali opozarjanje uporabnikovih namenov na aplikacijo.
(6) Zbiranje kazalcev se začne.
(7) Stran z uporabo gumbov definira vhodni element, sestavljen iz treh 1-bitnih polj. Vsako 1-bitno polje predstavlja gumb miške 1, 2 in 3 in lahko vrne vrednost 0 ali 1.
(8) Vhodni element za stran z uporabo gumbov je dopolnjen s 13 drugimi biti.
(9) Za opis položaja miške z osma X in Y je prikazana še ena generična stran za uporabo namizja. Vhodni element je sestavljen iz dveh 8-bitnih polj, katerih vrednost je lahko med -127 in 127.
(10) Zbirka kazalcev je zaprta.
(11) Zbirka miši je zaprta.
Stran USB.org HID

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

37/174

konecview
Forum implementatorjev USB (USB-IF) ponuja orodje z imenom »HID Descriptor Tool« skupaj z drugimi informacijami o formatu deskriptorja poročila. Za več informacij glejte http://www.usb.org/developers/hidpage/.
Vodnik za programiranje razreda HID za naprave USB
V tem razdelku je razloženo, kako uporabljati razred HID. Inicializacija razreda HID naprave USB Dodajanje primerka razreda HID naprave USB vaši napravi Komuniciranje z uporabo razreda HID naprave USB
Inicializacija razreda HID naprave USB
Če želite svoji napravi dodati funkcionalnost razreda HID, morate najprej inicializirati razred s klicem funkcije sl_usbd_hid_init(). Npr.ampSpodnji diagram prikazuje, kako poklicati funkcijo sl_usbd_hid_init() z uporabo privzetih argumentov. Za več informacij o konfiguracijskih argumentih, ki jih je treba posredovati funkciji sl_usbd_hid_init(), glejte Konfiguracije za specifične aplikacije razreda USB Device HID.
Example – Klic funkcije sl_usbd_hid_init()
stanje sl_status_t;
status = sl_usbd_hid_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
Dodajanje primerka razreda HID naprave USB v vašo napravo
Če želite svoji napravi dodati funkcionalnost razreda HID, morate ustvariti primerek in ga nato dodati v konfiguracijo(-e) naprave.
Ustvarjanje primerka razreda HID
Ustvarite primerek razreda HID s klicem funkcije sl_usbd_hid_create_instance(). PrimerekampSpodnji diagram prikazuje, kako ustvariti preprosto funkcijo miške prek funkcije sl_usbd_hid_create_instance() z uporabo privzetih argumentov. Za več informacij o konfiguracijskih argumentih, ki jih je treba posredovati funkciji sl_usbd_hid_create_instance(), glejte Konfiguracije primerkov razreda HID za naprave USB.
Example – Dodajanje funkcije miške prek sl_usbd_hid_create_instance()

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

38/174

konecview
/* Globalne konstante. */ statična konstanta uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBALNA_UPORABA_PAGE + 1, SL_USBD_HID_UPORABA_PAGE_SPLOŠNI_NADZORI_NAMIZJA, SL_USBD_HID_LOKALNA_UPORABA + 1, SL_USBD_HID_CA_MIŠKA, SL_USBD_HID_GLAVNA_ZBIRKA + 1, SL_USBD_HID_ZBIRKA_APLIKACIJA, SL_USBD_HID_LOKALNA_UPORABA + 1, SL_USBD_HID_CP_KAZALO, SL_USBD_HID_GLAVNA_ZBIRKA + 1, SL_USBD_HID_FIZIČNA_ZBIRKA_ZBIRKE, SL_USBD_HID_GLOBALNA_UPORABA_PAGE + 1, SL_USBD_HID_GUMB_STRAN_UPORABE_PRAGA, SL_USBD_HID_LOKALNA_UPORABA_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_GLAVNA_SPREMENLJIVKA | 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_GLOBAL_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_GLAVNA_ZBIRKA, SL_USBD_HID_GLAVNA_ZBIRKA };
/* Lokalne spremenljivke.*/ 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)razred_številka;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, true, &app_usbd_hid_callbacks, &class_nbr);
Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

39/174

konecview
/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. *
Dodajanje primerka razreda HID v konfiguracijo(-e) vaše naprave Ko ustvarite primerek razreda HID, ga lahko dodate v konfiguracijo s klicem funkcije
sl_usbd_hid_add_to_configuration().
BivšiampSpodaj je prikazano, kako poklicati funkcijo sl_usbd_hid_add_to_configuration().
Example – Klic funkcije sl_usbd_hid_add_to_configuration()

stanje sl_status_t;

sl_usbd_hid_add_to_configuration(številka_razreda,

(1)

config_nbr_fs); (2)

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

(1) Številka razreda, ki jo je treba dodati konfiguraciji, ki jo vrne sl_usbd_hid_create_instance(). (2) Številka konfiguracije (tukaj jo dodajamo konfiguraciji s polno hitrostjo).
Komunikacija z uporabo USB naprave HID razreda
Komunikacija med instancami razreda Sinhrona komunikacija Komunikacija med instancami razreda Razred HID ponuja naslednje funkcije za komunikacijo z gostiteljem.
Tabela – Povzetek komunikacijskega API-ja HID

Ime funkcije
sl_usb d _hid _ read ad _sy nc() sl_usb d _hid _write _sy nc()

Operacija Prejema podatke od gostitelja prek končne točke prekinitve OUT. Ta funkcija blokira. Pošilja podatke gostitelju prek končne točke prekinitve IN. Ta funkcija blokira.

Sinhrona komunikacija Sinhrona komunikacija pomeni, da se prenos blokira. Ob klicu funkcije se aplikacija blokira, dokler se prenos ne zaključi z napako ali brez nje. Določite lahko časovno omejitev, da se izognete večnemu čakanju.ampSpodnja slika prikazuje branje in pisanje, ki prejema podatke od gostitelja z uporabo končne točke prekinitve OUT in pošilja podatke gostitelju z uporabo končne točke prekinitve IN.
Example – Sinhrono branje in pisanje HID

__PORAVNANO(4) uint8_t rx_buf[2];

__PORAVNANO(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_hid_read_sync(razred_nbr,

(1)

(ničen *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

40/174

konecview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. *
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. *
(1) Številka instance razreda, ustvarjena z funkcijo sl_usbd_hid_create_instance(), zagotavlja notranjo referenco za razred HID za usmerjanje prenosa do ustrezne končne točke prekinitve OUT ali IN.
(2) Aplikacija mora zagotoviti, da je medpomnilnik, ki je na voljo funkciji, dovolj velik, da sprejme vse podatke. V nasprotnem primeru lahko pride do težav s sinhronizacijo. Notranja operacija branja se izvede bodisi s kontrolno končno točko bodisi s končno točko prekinitve, odvisno od zastavice kontrolnega branja, nastavljene pri klicu sl_usbd_hid_create_instance().
(3) Da bi se izognili neskončnemu blokiranju, je mogoče določiti časovno omejitev, izraženo v milisekundah. Vrednost 809 povzroči, da bo naloga aplikacije čakala v nedogled.
(4) Aplikacija zagotavlja inicializiran oddajni medpomnilnik.
Naloga periodičnih vhodnih poročil HID
Za prihranek pasovne širine ima gostitelj možnost utišati poročila iz končne točke prekinitve IN z omejitvijo frekvence poročanja. V ta namen mora gostitelj poslati zahtevo SET_IDLE. Razred HID, ki ga je implementiral Silicon Labs, vsebuje notranjo nalogo, ki spoštuje omejitev frekvence poročanja in jo lahko uporabite za eno ali več vhodnih poročil. Slika Naloga periodičnih vhodnih poročil prikazuje delovanje nalog periodičnih vhodnih poročil.
Slika – Naloga periodičnih vhodnih poročil

(1) Naprava prejme zahtevo SET_IDLE. Ta zahteva določa trajanje nedejavnosti za dani ID poročila. Za več podrobnosti o zahtevi SET_IDLE glejte
(2) Struktura ID-ja poročila (dodeljena med fazo inicializacije razreda HID) se posodobi s trajanjem nedejavnosti. Števec trajanja nedejavnosti se inicializira z vrednostjo trajanja nedejavnosti. Struktura ID-ja poročila se vstavi na konec povezanega seznama, ki vsebuje vhodne strukture ID-ja poročil. Vrednost trajanja nedejavnosti je izražena v enoti 4 ms, kar daje razpon od 4 do 1020 ms.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

41/174

konecview
Če je trajanje nedejavnosti krajše od intervala anketiranja končne točke prekinitve IN, se poročila generirajo v intervalu anketiranja.
(3) Vsake 4 ms naloga periodičnega vnosa poročil pregleda seznam ID-jev vhodnih poročil. Za vsak ID vhodnega poročila naloga izvede eno od dveh možnih operacij. Trajanje obdobja naloge se ujema z enoto 4 ms, ki se uporablja za trajanje mirovanja. Če gostitelj ni poslal nobenih zahtev SET_IDLE, je seznam ID-jev vhodnih poročil prazen in naloga nima ničesar za obdelati. Naloga obdela samo ID-je poročil, ki so drugačni od 0 in imajo trajanje mirovanja večje od 0.
(4) Za dani ID vhodnega poročila naloga preveri, ali je trajanje mirovanja poteklo. Če trajanje mirovanja ni poteklo, se števec zmanjša in gostitelju se ne pošlje nobeno vhodno poročilo.
(5) Če je čas mirovanja potekel (torej je števec časa mirovanja dosegel nič), se gostitelju pošlje vhodno poročilo s klicem funkcije sl_usbd_hid_write_sync() prek končne točke prekinitve IN.
(6) Vhodni podatki poročila, ki jih pošlje naloga, prihajajo iz notranjega podatkovnega medpomnilnika, dodeljenega za vsako vhodno poročilo, opisano v deskriptorju poročila. Aplikacijska naloga lahko pokliče funkcijo sl_usbd_hid_write_sync() za pošiljanje vhodnega poročila. Po pošiljanju vhodnih podatkov poročila sl_usbd_hid_write_sync() posodobi notranji medpomnilnik, povezan z vhodnim ID-jem poročila, s pravkar poslanimi podatki. Nato naloga periodičnih vhodnih poročil vedno pošlje iste vhodne podatke poročila po vsakem preteku časa mirovanja in dokler aplikacijska naloga ne posodobi podatkov v notranjem medpomnilniku. Obstaja mehanizem zaklepanja, ki preprečuje poškodbo vhodnih ID-jev poročila v primeru spremembe, ki se zgodi točno v času prenosa, ki ga izvede naloga periodičnih vhodnih poročil.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

42/174

konecview
konecview
Razred MSC naprave USB
Naprava USB MSC razreda nadview Potrebe po virih razreda MSC za naprave USB iz osnovne konfiguracije razreda MSC za naprave USB Vodnik za programiranje razreda MSC za naprave USB Gonilniki za shranjevanje razreda MSC za naprave USB
Ta razdelek opisuje razred naprav za množično shranjevanje (MSC), ki jih podpira naprava Silicon Labs USB. MSC je protokol, ki omogoča prenos informacij med napravo USB in gostiteljem. Informacije, ki se prenašajo, so vse, kar je mogoče shraniti elektronsko, na primer izvedljivi programi, izvorna koda, dokumenti, slike, konfiguracijski podatki ali drugi besedilni ali številski podatki. Naprava USB se gostitelju prikaže kot zunanji medij za shranjevanje, ki omogoča prenos files funkcijo povleci in spusti.
A file sistem določa, kako fileso organizirani v nosilcu podatkov. Specifikacija razreda množičnega pomnilnika USB ne zahteva nobenih posebnih file sistem, ki se uporablja na ustreznih napravah. Namesto tega ponuja preprost vmesnik za branje in pisanje sektorjev podatkov z uporabo preglednega nabora ukazov SCSI (Small Computer System Interface). Kot taki lahko operacijski sistemi obravnavajo pogon USB kot trdi disk in ga lahko formatirajo s katerim koli file sistem, ki jim je všeč.
Razred naprav za množično shranjevanje USB podpira dva transportna protokola, in sicer:
Transport samo v razsutem stanju (BOT) Control/Business/Interrupt (CBI) (uporablja se samo za disketne pogone)
Razred naprav za množično shranjevanje podatkov implementira transparentni nabor ukazov SCSI samo z uporabo protokola BOT, kar pomeni, da se bodo za prenos podatkov in informacij o stanju uporabljale le končne točke v množičnem obsegu. Implementacija MSC podpira več logičnih enot.
Implementacija MSC je skladna z naslednjimi specifikacijami:
Specifikacija razreda množičnega pomnilnika univerzalnega serijskega vodila (USB)view, Revizija 1.3, 5. september 2008. Razred za masovno shranjevanje podatkov univerzalnega serijskega vodila, revizija 1.0, 31. september 1999.
Naprava USB MSC aCl ss Overview
Končne točke protokola Zahteve razreda Vmesnik majhnega računalniškega sistema (SCSI)
Protokol
V tem razdelku bomo obravnavali protokol Bulk-Only Transport (BOT) razreda za masovno shranjevanje. Protokol Bulk-Only Transport ima tritages:
Prenos ukazov Prenos podatkov Prenos stanja
Ukaze za množično shranjevanje gostitelj pošilja prek strukture, imenovane Command Block Wrapper (CBW). Za ukaze, ki zahtevajo prenos podatkov,tagt.j. bo gostitelj poskušal poslati ali prejeti natančno število bajtov iz naprave, kot je določeno v poljih dolžine in zastavice CBW. Po prenosu podatkovtagGostitelj poskuša od naprave prejeti ovitek o stanju ukaza (CSW), ki podrobno opisuje stanje ukaza in morebitne ostanke podatkov (če

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

43/174

konecview
(poljuben). Za ukaze, ki ne vključujejo prenosa podatkovtagGostitelj poskuša prejeti CSW takoj po pošiljanju CBW. Protokol je podrobno prikazan na sliki – Protokol MSC.
Slika – Protokol MSC

Končne točke
Na strani naprave je MSC v skladu s specifikacijo BOT sestavljen iz naslednjih končnih točk: para kontrolnih končnih točk IN in OUT, imenovanih privzeta končna točka. para končnih točk IN in OUT za množično uporabo.
Spodnja tabela prikazuje različne uporabe končnih točk.
Tabela – Uporaba končne točke MSC

Končna točka
Vhod krmiljenja Izhod krmiljenja Vhod za večji obseg Izhod za večji obseg

Smer
Naprava do gostitelja Gostitelj do naprave Naprava do gostitelja Gostitelj do naprave

Uporaba
Naštevanje in zahteve, specifične za razred MSC Naštevanje in zahteve, specifične za razred MSC Pošiljanje CSW in podatkov Prejemanje CBW in podatkov

Zahteve za tečaj
Za protokol MSC BOT sta definirani dve kontrolni zahtevi. Ti zahtevi in ​​njuni opisi so podrobno opisani v spodnji tabeli.

Tabela – Zahteve za razred množičnega shranjevanja

Zahteve za tečaj
Ponastavitev množičnega shranjevanja samo v razsutem stanju

Opis
Ta zahteva se uporablja za ponastavitev naprave za masovno shranjevanje in njenega povezanega vmesnika. Ta zahteva pripravi napravo za sprejem naslednjega ukaznega bloka.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

44/174

konecview

Zahteve za tečaj

Opis

Get Max Ta zahteva se uporablja za vrnitev najvišje logične številke enote (LUN), ki jo naprava podpira. Na primerample, a

LUN

Naprava z LUN 0 in LUN 1 bo vrnila vrednost 1. Naprava z eno samo logično enoto bo vrnila 0 ali pa bo zaustavila

zahteva. Najvišja vrednost, ki jo je mogoče vrniti, je 15.

Vmesnik za majhen računalniški sistem SCSI

Na ravni programskega vmesnika naprava MSC izvaja enega od standardnih komunikacijskih protokolov za pomnilniške medije, kot sta SCSI in SFF-8020i (ATAPI). »Programski vmesnik« določa, kateri protokol je implementiran, in pomaga gostiteljskemu operacijskemu sistemu naložiti ustrezen gonilnik naprave za komunikacijo s pomnilniško napravo USB. SCSI je najpogostejši protokol, ki se uporablja z pomnilniškimi napravami USB MSC. Za podrazred MSC SCSI ponujamo implementacijo, ki jo lahko naši uporabniki GSDK uporabljajo takoj po namestitvi.
SCSI je niz standardov za komunikacijo med računalniki in perifernimi napravami. Ti standardi vključujejo ukaze, protokole, električne vmesnike in optične vmesnike. Naprave za shranjevanje, ki uporabljajo druge strojne vmesnike, kot je USB, uporabljajo ukaze SCSI za pridobivanje informacij o napravi/gostitelju ter nadzor delovanja naprave in prenos blokov podatkov v nosilcu podatkov.
Ukazi SCSI pokrivajo širok spekter vrst in funkcij naprav, zato naprave potrebujejo podmnožico teh ukazov. Na splošno so za osnovno komunikacijo potrebni naslednji ukazi:
POVPRAŠEVANJE ZMOGLJIVOST BRANJA(10) BRANJE(10) ZAHTEVEK ZA ZAZNAVANJE TESTNA ENOTA PRIPRAVLJENA NA PISANJE(10)
Potrebe virov razreda MSC za naprave USB od Core

Vsakič, ko dodate primerek razreda MSC v konfiguracijo USB prek funkcije sl_usbd_msc_add_to_configuration(), bodo iz jedra dodeljeni naslednji viri.

Vir
Vmesniki Alternativni vmesniki Končne točke Skupine vmesnikov

Količina
1 1 2 0

Upoštevajte, da so te številke na konfiguracijo. Pri nastavljanju konfiguracijskih vrednosti SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY in SL_USBD_DESCRIPTOR_QUANTITY ne pozabite upoštevati, koliko konfiguracij bo razred dodan. Pri konfiguracijski vrednosti SL_USBD_OPEN_ENDPOINTS_QUANTITY morate upoštevati le število potrebnih končnih toček za primerek razreda, saj se končne točke odprejo le, ko gostitelj nastavi konfiguracijo.
Konfiguracija razreda MSC naprave USB

Za konfiguracijo razreda MSC se uporabljata dve skupini konfiguracijskih parametrov:
Konfiguracije, specifične za aplikacijo, razreda MSC naprave USB Konfiguracija logične enote razreda MSC naprave USB
Konfiguracije razreda MSC USB naprave, specifične za aplikacijo

Konfiguracije razreda med prevajanjem Ustvarjanje primerka razreda

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

45/174

konecview

Konfiguracije razreda med prevajanjem
Razred MSC in podrazred SCSI podjetja Silicon Labs USB Device je mogoče konfigurirati med prevajanjem prek #defines, ki se nahaja v datoteki sl_usbd_core_config.h. file.
Tabela – Generične konfiguracijske konstante

Ime konfiguracije

Opis

SL_USBD_MSC_CLASS_INST Število primerkov razreda, ki jih boste dodelili s klicem funkcije

ANCE_QUANTITY

sl_usbd_msc_scsi_create_instance().

SL_USBD_MSC_CONFIGURA Število konfiguracij, ki ji je mogoče dodati primerek razreda s klicem metode

KOLIČINA_CIJE

funkcija sl_usbd_msc_scsi_add_to_configuration().

SL_USBD_MSC_LUN_QUANT Število logičnih enot na primerek razreda, ki jih boste dodali s klicem funkcije

ITY

funkcija sl_usbd_msc_scsi_lun_add().

SL_USBD_MSC_SCSI_64_BIT Omogoči ali onemogoči podporo za 64-bitni logični blokovni naslov (LBA).
_LBA_EN

SL_USBD_MSC_DATA_BUFF Velikost podatkovnega medpomnilnika na primerek razreda v bajtih ER_SIZE

Privzeta vrednost
2
1
2
0
512

Ustvarjanje primerka razreda
Ustvarjanje primerka razreda USB Device MSC SCSI se izvede s klicem funkcije sl_usbd_msc_scsi_create_instance(). Ta funkcija sprejme en konfiguracijski argument, ki je opisan spodaj.
p_scsi_callbacks
p_scsi_callbacks je kazalec na konfiguracijsko strukturo tipa sl_usbd_msc_scsi_callbacks_t. Poleg običajnih povratnih klicev razreda USB naprav connect/disconnect zagotavlja razredu MSC nabor izbirnih funkcij povratnega klica, ki se klicejo, ko se na logični enoti zgodi dogodek. Temu argumentu se lahko posreduje ničelni kazalec (NULL), če povratni klici niso potrebni.
Spodnja tabela opisuje vsako konfiguracijsko polje, ki je na voljo v tej konfiguracijski strukturi.
Tabela – struktura konfiguracije sl_usbd_msc_scsi_callbacks_t

Polja

Opis

.omogočiti

Pokliče se, ko je primerek razreda USB uspešno omogočen.

.disable Kliče se, ko je primerek razreda USB onemogočen.

.host_eject Funkcija se pokliče, ko je logična enota izvržena iz gostitelja.

Podpis funkcije
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);

Konfiguracija logične enote razreda MSC naprave USB

Dodajanje logične enote instanci razreda MSC se izvede s klicem funkcije sl_usbd_msc_lun_add(). Ta funkcija sprejme en konfiguracijski argument, ki je opisan spodaj.

p_lu_info

p_lu_info je kazalec na strukturo tipa sl_usbd_msc_scsi_lun_info_t. Njegov namen je posredovati informacije o logični enoti razredu MSC.
Spodnja tabela opisuje vsako konfiguracijsko polje, ki je na voljo v tej konfiguracijski strukturi.

Tabela – struktura konfiguracije sl_usbd_msc_scsi_lun_info_t

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

46/174

konecview

Polje

Opis

Polje
.scsi_lun_api_p tr

Opis
Kazalec na API gonilnika medija, ki bo obravnaval to logično enoto. Za več informacij o gonilnikih pomnilnika glejte Gonilniki pomnilnika razreda MSC za naprave USB.

.ve nd o r_id _ p tr
.product_id_ptr
.product_revision_level .is_read_samo_za_branje

Kazalec na niz, ki vsebuje identifikacijo prodajalca logične enote. Največja dolžina niza je 8 znakov. Kazalec na niz, ki vsebuje identifikacijo izdelka logične enote. Največja dolžina niza je 16 znakov. Raven revizije izdelka.
Zastavica, ki označuje, ali naj se logična enota obravnava kot samo za branje z vidika view gostitelja (resnično) ali ne (napačno).

Vodnik za programiranje razreda MSC za naprave USB

V tem razdelku je razloženo, kako uporabljati razred MSC.
Inicializacija razreda MSC naprave USB Dodajanje primerka razreda MSC naprave USB v vašo napravo Ravnanje z logično enoto razreda MSC naprave USB
Inicializacija razreda MSC naprave USB

Če želite svoji napravi dodati funkcionalnost razreda MSC SCSI, najprej inicializirajte osnovni razred MSC in podrazred SCSI s klicem funkcij sl_usbd_msc_init() in sl_usbd_msc_scsi_init().
BivšiampSpodaj je prikazano, kako poklicati sl_usbd_msc_init() in sl_usbd_msc_scsi_init().

Example – Klic sl_usbd_msc_init() in sl_usbd_msc_scsi_init()

stanje sl_status_t;
status = sl_usbd_msc_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
status = sl_usbd_msc_scsi_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}
Dodajanje primerka razreda MSC SCSI naprave USB v vašo napravo
Če želite svoji napravi dodati funkcionalnost razreda MSC SCSI, najprej ustvarite instanco in jo nato dodajte v konfiguracijo(-e) naprave. Instanci morate dodati vsaj eno logično enoto.
Ustvarjanje primerka razreda MSC SCSI
Ustvarite primerek razreda MSC SCSI s klicem funkcije sl_usbd_msc_scsi_create_instance().
BivšiampSpodnji seznam prikazuje, kako poklicati funkcijo sl_usbd_msc_scsi_create_instance() z uporabo privzetih argumentov. Za več informacij o konfiguracijskih argumentih, ki jih je treba posredovati funkciji sl_usbd_msc_scsi_create_instance(), glejte Konfiguracije za specifične aplikacije razreda USB Device MSC.
Example – Klic funkcije sl_usbd_msc_scsi_create_instance()

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

47/174

konecview

uint8_t class_nbr; stanje sl_status_t;
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);
če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }
Dodajanje primerka razreda MSC v konfiguracijo(-e) vaše naprave
Ko ustvarite primerek razreda MSC, ga lahko dodate konfiguraciji s klicem funkcije
sl_usbd_msc_add_to_configuration().
BivšiampSpodaj je prikazano, kako poklicati funkcijo sl_usbd_msc_scsi_add_to_configuration() z uporabo privzetih argumentov.
Example – Klic funkcije sl_usbd_msc_scsi_add_to_configuration()

stanje sl_status_t;

status = sl_usbd_msc_scsi_add_to_configuration(številka_razreda,

(1)

config_nbr_fs);

(2)

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

(1) Številka razreda, ki jo je treba dodati konfiguraciji, ki jo vrne sl_usbd_msc_scsi_create_instance(). (32) Številka konfiguracije (tukaj jo dodajamo konfiguraciji s polno hitrostjo).
Ravnanje z logičnimi enotami razreda MSC naprave USB
Dodajanje logične enote Priklop/odklop nosilca podatkov
Dodajanje logične enote
Ko dodajate logično enoto v instanco razreda MSC SCSI, mora biti ta povezana s pomnilniškim medijem (RAMDisk, SD kartica, bliskovni pomnilnik itd.). Razred MSC za komunikacijo s pomnilniškim medijem uporablja gonilnik pomnilnika. Ta gonilnik bo treba namestiti pri dodajanju logične enote.
BivšiampSpodnja slika prikazuje, kako dodati logično enoto prek funkcije sl_usbd_msc_scsi_lun_add().
Example – Dodajanje logične enote prek sl_usbd_msc_scsi_lun_add()

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

48/174

konecview

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

= »Silicijevi laboratoriji«;

lu_info.product_id_ptr

= “blokirna naprava example”;

lu_info.level_revizije_producta = 0x1000u;

lu_info.je_samo_za_branje

= napačno;

status = sl_usbd_msc_scsi_lun_add(številka_razreda, &lu_info, &lu_object_ptr);
če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }

Priklop/odklop nosilca podatkov
Ko je logična enota dodana, je treba nanjo priključiti pomnilniški medij, da bo na voljo na strani gostitelja. Razred MSC ponuja dve funkciji za nadzor povezave pomnilniškega medija z logično enoto: sl_usbd_msc_scsi_lun_attach() in sl_usbd_msc_scsi_lun_detach(). Ti funkciji omogočata emulacijo odstranitve pomnilniške naprave, da po potrebi ponovno pridobite dostop iz vgrajene aplikacije.
BivšiampSpodaj je prikazano, kako uporabiti funkciji sl_usbd_msc_scsi_lun_attach() in sl_usbd_msc_scsi_lun_detach().
Example – Prilaganje/odklop medijev

stanje sl_status_t;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}

(1)

status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); če (status ! SL_STATUS_OK) {
/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}

(2)

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) če (status ! SL_STATUS_OK) {
/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */
}

(3)

(1) Od tega trenutka naprej, če je naprava MSC povezana z gostiteljem, je medij za shranjevanje dostopen.
(2) Če je naprava MSC povezana z gostiteljem, bo medij zdaj prikazan kot nedostopen. V tem trenutku je mogoče izvajati operacije na mediju iz vgrajene aplikacije.
(3) Če je naprava MSC povezana z gostiteljem, se bo medij za shranjevanje prikazal kot povezan.
Gonilniki za shranjevanje USB naprav MSC razreda
Naprava USB MSC razreda potrebuje gonilnik za komunikacijo s pomnilniškim medijem. Silicon Labs trenutno ne ponuja gonilnikov.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

49/174

konecview
Gonilnik TPY aa je definiran s typedef sl_usbd_msc_scsi_lun_api_t. Naš sl_usbd_msc_scsi_lun_api_t mora biti vključen v vaš sl_usbd_msc_scsi_lun_info_t, argument ssed s, ko dodate logično enoto s sl_usbd_msc_scsi_lun_add(). Za več podrobnosti o strukturah glejte poglavje USB Device MSC SCSI API. Implementacija gonilnika za shranjevanje je lahko tako preprosta kot niz sektorjev v RAM-u. Tipična velikost sektorja (tj. velikost bloka) je 512 za naprave za množično shranjevanje in 2048 za CD-ROM-e.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

50/174

konecview
konecview
Razred prodajalca naprav USB
Razred prodajalca USB naprave nadview Potrebe po virih razreda proizvajalca naprav USB iz konfiguracije razreda proizvajalca naprav Core USB Vodnik za programiranje razreda proizvajalca naprav USB Razred proizvajalec vam omogoča izdelavo naprav, specifičnih za proizvajalca, ki lahko implementirajo lastniški protokol. Za prenos podatkov med gostiteljem in napravo se zanaša na par končnih točk v množičnem obsegu. Prenosi v množičnem obsegu so priročni za prenos velikih količin nestrukturiranih podatkov in zagotavljajo zanesljivo izmenjavo podatkov z uporabo mehanizma za zaznavanje napak in ponovni poskus. Poleg končnih toček v množičnem obsegu lahko razred proizvajalec uporablja tudi izbirni par končnih toček za prekinitev. Vsak operacijski sistem (OS) lahko deluje z razredom proizvajalca, pod pogojem, da ima operacijski sistem gonilnik za upravljanje razreda proizvajalca. Glede na operacijski sistem je lahko gonilnik izvorni ali specifičen za proizvajalca. Na primer, v sistemu Microsoft Windows® vaša aplikacija komunicira z gonilnikom WinUSB, ki ga zagotavlja Microsoft, za komunikacijo z napravo proizvajalca.
Razred prodajalca USB naprave nadview
Slika – Splošna arhitektura med gostiteljem sistema Windows in razredom Vendor prikazuje splošno arhitekturo med gostiteljem in napravo z uporabo razreda Vendor. V tem primeruampgostiteljski operacijski sistem je MS Windows.
Slika – Splošna arhitektura med gostiteljem MS Windows in razredom proizvajalca

Na strani sistema MS Windows aplikacija komunicira z napravo prodajalca prek interakcije s knjižnico USB. Knjižnice, kot je libusb, ponujajo API za upravljanje naprave in z njo povezanih cevi ter za komunikacijo z napravo prek kontrolnih, množičnih in prekinitvenih končnih točk.
Na strani naprave je razred Vendor sestavljen iz naslednjih končnih točk:
Par kontrolnih končnih točk IN in OUT, imenovanih privzeta končna točka. Par končnih točk IN in OUT za množično uporabo.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

51/174

konecview

Par končnih točk prekinitve IN in OUT. Ta par ni obvezen. Spodnja tabela prikazuje uporabo različnih končnih točk:
Tabela – Uporaba končnih točk razreda prodajalcev

Smer končne točke

Nadzor IN
Nadzor
VEN
Vnos v večjem obsegu

Od naprave do gostitelja
>Od gostitelja do naprave
Od naprave do gostitelja

Razsuto
Prekinitev VHOD
Prekiniti
VEN

Od gostitelja do naprave
Od naprave do gostitelja
Od gostitelja do naprave

Uporaba
Standardne zahteve za naštevanje in zahteve, specifične za prodajalca.
Standardne zahteve za naštevanje in zahteve, specifične za prodajalca.
Komunikacija surovih podatkov. Podatki so lahko strukturirani v skladu z lastniškim protokolom.
Komunikacija surovih podatkov. Podatki so lahko strukturirani v skladu z lastniškim protokolom.
Komunikacija ali obveščanje s surovimi podatki. Podatki so lahko strukturirani v skladu z lastniškim protokolom. Komunikacija ali obveščanje s surovimi podatki. Podatki so lahko strukturirani v skladu z lastniškim protokolom.

Aplikacija naprave lahko uporablja končne točke za množično pošiljanje in prekinitev podatkov na gostitelja ali z njega. Za dekodiranje zahtev, specifičnih za prodajalca, ki jih pošlje gostitelj, lahko uporabi samo privzeto končno točko. Standardne zahteve interno upravlja jedrna plast USB naprave Silicon Labs.
Potrebe po virih razreda prodajalcev USB naprav od Core

Vsakič, ko dodate primerek razreda dobavitelja v konfiguracijo prek funkcije sl_usbd_vendor_add_to_configuration(), bodo iz jedra dodeljeni naslednji viri.

Vir
Vmesniki Alternativni vmesniki Končne točke Skupine vmesnikov

Količina
1 1 2 (4, če ste omogočili končne točke prekinitev) 0

Upoštevajte, da so te številke na konfiguracijo. Pri nastavljanju konfiguracijskih vrednosti SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY in SL_USBD_DESCRIPTOR_QUANTITY ne pozabite upoštevati, koliko konfiguracij bo razred dodan. Pri konfiguracijski vrednosti SL_USBD_OPEN_ENDPOINTS_QUANTITY morate upoštevati le število potrebnih končnih toček za primerek razreda, saj se končne točke odprejo le, ko gostitelj nastavi konfiguracijo.
Konfiguracija razreda proizvajalca naprav USB

Za konfiguracijo razreda dobavitelja se uporabljata dve skupini konfiguracijskih parametrov:
Konfiguracije razreda proizvajalca USB naprav, specifične za aplikacijo Konfiguracije primerkov razreda proizvajalca USB naprav
Konfiguracije za specifične aplikacije razreda proizvajalca USB naprav
Najprej, če želite uporabiti modul razreda Vendor USB naprave Silicon Labs, prilagodite konfiguracijske definicije Vendor med prevajanjem glede na potrebe vaše aplikacije. Pregrupirane so znotraj glave sl_usbd_core_config.h. file v razdelku Prodajalec. Namen konfiguracije količine je obvestiti modul naprave USB o tem, koliko objektov prodajalca USB naj dodeli.
Spodnja tabela opisuje vsako definicijo konfiguracije.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

52/174

konecview

Tabela – Definicije konfiguracije proizvajalca naprav USB

Ime konfiguracije

Opis

Privzeta vrednost

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Število primerkov razreda, ki jih boste dodelili s klicem funkcije 2 sl_usbd_vendor_create_instance().

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Število konfiguracij. Primerke razreda dobavitelja je mogoče dodati eni ali več konfiguracijam s klicem funkcije sl_usbd_vendor_add_to_configuration().

Konfiguracije primerkov razreda prodajalca naprav USB

Ta razdelek definira konfiguracije, povezane z instancami razreda Vendor.
Ustvarjanje primerka razreda intr_en interval p_vendor_callbacks
Ustvarjanje primerka razreda

Ustvarjanje primerka razreda Vendor se izvede s klicem funkcije sl_usbd_vendor_create_instance(), ki sprejme tri konfiguracijske argumente, ki so opisani spodaj.

intr_en
Logična vrednost, ki označuje, ali je treba dodati par končnih točk prekinitve ali ne.

Vrednost
res napačno

Opis
Dodan bo par končnih točk IN/OUT, ki bo na voljo vgrajeni aplikaciji. Dodana ne bo nobena končna točka prekinitve. Na voljo bosta le par končnih točk Bulk IN/OUT.

interval
Če nastavite intr_en na true, lahko določite interval poliranja končnih točk prekinitev (v milisekundah). Če nastavite intr_en na false, lahko interval nastavite na 0, saj ga bo razred prezrl.
povratni klici_proizvajalca_p
p_vendor_callbacks je kazalec na strukturno spremenljivko funkcij povratnega klica, ki jo lahko določite za obravnavo zahtev za nadzor, specifičnih za razred. Če ne uporabljate nobenih zahtev, specifičnih za razred, ali če morate omogočiti/onemogočiti obvestila, lahko to vrednost nastavite na NULL.
BivšiampSpodnji seznam vsebuje pričakovani podpis vašega upravljalnika zahtev, specifičnega za razred.
Example – Podpis funkcije zahteve, specifične za razred

void app_usbd_vendor_req_handle(uint8_t)

razred_št., (1)

const sl_usbd_setup_req_t *p_setup_req); (2)

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

(1) Številka primerka razreda prodajalca.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

53/174

konecview

(2) Kazalec na prejeto zahtevo za nastavitev od gostitelja.
Vodnik za programiranje razreda proizvajalcev USB naprav
V tem razdelku je pojasnjeno, kako uporabljati razred Vendor. Inicializacija razreda Vendor USB Device Dodajanje primerka razreda Vendor USB Device vaši napravi Komuniciranje z uporabo razreda Vendor USB Device
Inicializacija razreda proizvajalca naprav USB
Če želite svoji napravi dodati funkcionalnost razreda prodajalca, najprej inicializirajte razred s klicem funkcije USBD_Vendor_Init(). Npr.ampSpodaj je prikazano, kako poklicati funkcijo sl_usbd_vendor_init().
Example – Klic funkcije sl_usbd_vendor_init()

stanje sl_status_t;
status = sl_usbd_vendor_init(); če (status ! SL_STATUS_OK) { /* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */ }
Dodajanje primerka razreda dobavitelja USB naprav v vašo napravo
Če želite svoji napravi dodati funkcionalnost razreda prodajalca, morate najprej ustvariti primerek in ga nato dodati v konfiguracijo(-e) naprave.
Ustvarjanje primerka razreda dobavitelja Dodajanje primerka razreda dobavitelja v konfiguracijo(-e) vaše naprave
Ustvarjanje primerka razreda dobavitelja
Ustvarite primerek razreda Vendor s klicem funkcije sl_usbd_vendor_create_instance(). PrimerekampSpodnji diagram prikazuje, kako poklicati funkcijo sl_usbd_vendor_create_instance() z uporabo privzetih argumentov. Za več informacij o konfiguracijskih argumentih, ki jih je treba posredovati funkciji sl_usbd_vendor_create_instance(), glejte Konfiguracije primerkov razreda proizvajalca naprav USB.
Example – Klic funkcije sl_usbd_vendor_create_instance()

uint8_t class_nbr; stanje sl_status_t;

status = sl_usbd_vendor_create_instance(false,

(1)

0u,

(2)

funkcije_povratnega_klica_app_usbd_vendor, (3)

&razred_št.);

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

(1) S tem primerkom razreda ni končnih točk prekinitev. (2) Interval se prezre, ker so končne točke prekinitev onemogočene.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

54/174

konecview

(3) Funkcija povratnega klica, ki je del vaše aplikacije in obravnava zahteve razredov, specifičnih za prodajalca. Za več informacij glejte Komuniciranje z uporabo razreda prodajalca naprave USB. Dodajanje primerka razreda prodajalca v konfiguracijo(-e) vaše naprave Ko ustvarite primerek razreda prodajalca, ga lahko dodate v konfiguracijo s klicem funkcije USBD_Vendor_ConfigAdd(). Npr.ampSpodaj je prikazano, kako poklicati funkcijo sl_usbd_vendor_add_to_configuration() z uporabo privzetih argumentov.
Example – Klic funkcije sl_usbd_vendor_add_to_configuration()

stanje sl_status_t;

status = sl_usbd_vendor_add_to_configuration(številka_razreda,

(1)

config_nbr_fs);

(2)

če (stanje ! SL_STATUS_OK) {

/* Prišlo je do napake. Tukaj je treba dodati obravnavo napak. */

}

(1) Številka razreda, ki jo je treba dodati konfiguraciji, ki jo vrne sl_usbd_vendor_create_instance(). (2) Številka konfiguracije (tukaj jo dodajamo konfiguraciji s polno hitrostjo).
Komuniciranje z uporabo razreda proizvajalca USB naprav
Splošna sinhrona komunikacija Asinhrona komunikacija Zahteva dobavitelja Splošno Razred dobavitelj ponuja naslednje funkcije za komunikacijo z gostiteljem. Za več podrobnosti o parametrih funkcije glejte API dobavitelja USB naprav.
Tabela – Povzetek API-ja za komunikacijo s prodajalci

Ime funkcije
sl_usb d _v e nd o r_ read ad _bulk_sy nc() sl_usb d _v e nd o r_write _bulk_sy nc() sl_usb d _v e nd o r_ read ad _bulk_asy nc() sl_usb d _v e nd o r_ write _bulk_asy nc() sl_usb d _v e nd o r_ read ad _inte rrup t_sy nc() sl_usb d _v e nd o r_ write _inte rrup t_sy nc() sl_usb d _v e nd o r_ read ad _inte rrup t_asy nc
()
sl_usb d _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-
blokiranje.
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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

55/174

konecview

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

__PORAVNANO(4) uint8_t rx_buf[2];

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

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(4)

2u,

0u,

(3)

false,

(5)

&xfer_len);

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

(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) Aplikacija zagotavlja inicializiran oddajni medpomnilnik.
(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.
Asinhrona komunikacija
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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

56/174

konecview

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__PORAVNANO(4) uint8_t rx_buf[2];

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

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2u,

app_usbd_vendor_tx_completed,

NIČ,

(4)

false);

(6)

če (stanje ! SL_STATUS_OK) {

/* $$$$ Obravnavaj napako. */

}

}

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

{

če (stanje ! SL_STATUS_OK) {

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

} drugače {

/* $$$$ Obravnavaj napako. */

}

}

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)

{

če (stanje ! SL_STATUS_OK) {

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

} drugače {

/* $$$$ Obravnavaj napako. */

}

}

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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

57/174

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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

58/174

konecview

#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;

stanje sl_status_t;

uint16_t req_len;

uint32_t xfer_len;

(void)class_nbr;

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

(2) (3)

case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:

(4)

req_len = p_setup_req->wLength;

if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {

// Not enough room to receive data.

return (false);

}

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

case APP_VENDOR_REQ_SEND_DATA_TO_HOST:

(5)

req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;

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

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

privzeto:

(6)

// Request is not supported.

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

59/174

konecview

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

*/

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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

60/174

API dokumentacija
API dokumentacija
API dokumentacija
Seznam modulov
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

Opis
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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

61/174

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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
Moduli
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funkcije

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

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

63/174

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

64/174

USB Device ACM API

Vrsta
praznina

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
Vračila

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Opis

sl_usbd_cdc_acm_create_instance

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

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

Vrsta
uint16_t
uint16_t

Direction Argument Name

Opis

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.

Vračila

Return SL_STATUS_OK on success or another SL_STATUS code on failure.

sl_usbd_cdc_acm_add_to_configuration

sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t subclass_nbr, uint8_t config_nbr)

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

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

Vračila

Avtorske pravice © 2025 Silicon Laboratories. Vse pravice pridržane.

65/174

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

sl_usbd_cdc_acm_is_enabled

sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)

Get the CDC ACM serial emulation subclass enable state.
Parametri

Vrsta

Smer

Argument Name

Opis

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

Dokumenti / Viri

SILICON LABS USB Device Stack [pdf] Navodila za uporabo
USB Device Stack, Device Stack, Stack

Reference

Pustite komentar

Vaš elektronski naslov ne bo objavljen. Obvezna polja so označena *