SILICON LABS USB-laitepino

Tekniset tiedot

  • USB-versio: 1.5.1
  • Julkaisupäivä: 21
  • Simplicity SDK -versio: 2025.6.1

Tuote loppuview

Silicon Labsin USB-laitepino tarjoaa monipuolisen ja helppokäyttöisen USB-liitännän IoT-projekteihin ja helpottaa verkon apuprosessorien ja isäntien välistä kommunikointia.

Ominaisuudet

  • Tehokas USB-laitepino
  • Ihanteellinen IoT-projekteihin
  • Tuki verkon apuprosessoreiden ja isäntien väliselle viestinnälle

USB-laitteen määritys

Määritä USB-laitteen asetukset projektisi vaatimusten mukaisesti dokumentaation USB-laitteen konfigurointi -osion mukaisesti.

USB-laitteen ohjelmointiopas
Noudata USB-laitteen ohjelmointiopasta ymmärtääksesi, miten USB-laitetta ohjelmoidaan ja miten sitä käytetään eri sovelluksissa.

USB-laiteluokat
USB-laiteluokat-osio tarjoaa yleiskuvanview eri luokista, kuten CDC ACM, HID, MSC SCSI ja toimittajaluokka. Valitse sopiva luokka laitteesi toimintojen perusteella.

USB-laitteen vianmääritys
Jos USB-laitteen kanssa ilmenee ongelmia, katso ratkaisuja ja virheenkorjausvinkkejä USB-laitteen vianmääritys -osiosta.

Julkaisutiedot USB
Tekniset tiedot ja ominaisuudet yliview
USB-laitteen konfigurointiview
USB-laitteen ohjelmointiopasview
USB-laiteluokat yliview CDC ACM-luokka yliview HID-luokka yliview MSC SCSI -luokka yliview Toimittajaluokka yliview


USB API API:n dokumentaatio USB-laitteen API USB-laitteen ACM-API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB-laitteen CDC-API a sl_usbd_cdc_subcl ss_driver_t USB-laitteen ydin-API
sl_usbd_device_config_t sl_usbd_setup_req_t
sl_usbd_cl ss_driver_t USB-laitteen HID-API
sl_usbd_hid_callbacks_t USB-laitteen MSC-API
sl_usbd_msc_subcl ss_driver_t USB-laite MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

1/174

Universal Serial Bus USB
sl_usbd_msc_scsi_lun_pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB-laitteen toimittajan API sl_usbd_vendor_callbacks_t
API-dokumentaatio USB-laitteen vianmääritys
Yliview Microsoft Windows -käyttöjärjestelmän USB-isäntä
Yliview

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

2/174

Yliview
Yliview
USB-laite
USB on yksi tietokoneiden historian menestyneimmistä tietoliikenneliitännöistä ja tosiasiallinen standardi tietokoneiden oheislaitteiden liittämiseen. Silicon Labsin USB-laitepino on USB-laitemoduuli, joka on suunniteltu erityisesti sulautettuihin järjestelmiin. Se on rakennettu alusta alkaen Silicon Labsin laadun, skaalautuvuuden ja luotettavuuden mukaisesti, ja se on käynyt läpi tiukan validointiprosessin täyttääkseen USB 2.0 -spesifikaation. Tässä dokumentaatiossa kuvataan Silicon Labsin USB-laitepinon alustaminen, käynnistäminen ja käyttö. Se selittää eri määritysarvot ja niiden käyttötarkoitukset. Se sisältää myös yleiskuvauksen...view teknologiasta, konfigurointimahdollisuuksista, toteutusmenettelyistä ja esim.amptyypillisiä käyttötarkoituksia jokaiselle saatavilla olevalle luokalle.


Jotta ymmärtäisit USB-käsitteet nopeasti, dokumentaatio sisältää monia esimerkkejäampUSB-muistitikkuja perustoiminnoilla. Nämä esimerkitamptarjoaa sinulle kehyksen, jonka avulla voit rakentaa laitteita nopeasti. Nämä esimerkitampsisältää:
USB-sarjasovitin (tietoliikennelaiteluokka) Hiiri tai näppäimistö (käyttöliittymälaiteluokka) Irrotettava tallennuslaite (massamuistiluokka) Mukautettu laite (toimittajaluokka)
Seuraava on loppuview dokumentaatio-osioista:
Tekniset tiedot ja ominaisuudet USB-laitteen konfigurointi USB-laitteen ohjelmointiopas USB-laiteluokat
CDC ACM-luokka HID-luokka MSC SCSI-luokka Valmistajan luokka USB-laitteen vianmääritys Microsoft Windows -käyttöjärjestelmä USB-isäntä

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

3/174

USB
USB

USB-versio 1.5.1 21. heinäkuuta 2025 – Julkaisutiedot
Simplicity SDK:n versio 2025.6.1
Silicon Labsin tehokas USB-laitepino tarjoaa monipuolisen ja helppokäyttöisen USB-liitännän, joka sopii ihanteellisesti IoT-projekteihin, mukaan lukien verkon apuprosessorien ja isäntäkoneiden välinen tiedonsiirto. Klikkaa tästä nähdäksesi aiemmat julkaisut.
Julkaisuyhteenveto
Tärkeimmät ominaisuudet | API-muutokset | Virheenkorjaukset | Sirun käyttöönotto
Tärkeimmät ominaisuudet
Vain pohjana oleva alusta muuttuu.
API-muutokset
Ei mitään.
Virheenkorjauksia
Ei mitään.
Sirun käyttöönotto
Ei mitään.
Tärkeimmät ominaisuudet
Uudet ominaisuudet | Parannukset | Poistetut ominaisuudet | Vanhentuneet ominaisuudet
Uusia ominaisuuksia
Ei mitään.
Parannukset
Vain pohjana oleva alusta muuttuu.
Poistetut ominaisuudet
Ei mitään.
Vanhentuneet ominaisuudet
Ei mitään.
API-muutokset
Uudet API:t | Muokatut API:t | Poistetut API:t | Vanhentuneet API:t
Uudet sovellusliittymät

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

4/174

USB
Ei mitään.
Muokatut API:t
Ei mitään.
Poistetut API:t
Ei mitään.
Vanhentuneet API:t
Ei mitään.
Virheenkorjauksia
Ei mitään.
Sirun käyttöönotto
Ei mitään.
Sovellus esimampMuutokset
Uusi Examples | Muokattu esimerkkiamples | Poistettu Examples | Vanhentunut esimerkkiamples
Uusi Examples
Ei mitään.
Muokattu esimamples
Ei mitään.
Poistettu Examples
Ei mitään.
Vanhentunut entinenamples
Ei mitään.
Julkaisumuutosten vaikutus
Vaikutuslausunnot | Muutto-opas
Vaikutuslausunnot
Ei mitään.
Siirtymäopas
Ei mitään.
Tunnetut ongelmat ja rajoitukset
Ei mitään.
Tämän julkaisun käyttäminen

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

5/174

USB

Mitä julkaisu sisältää? | Yhteensopivat ohjelmistot | Asennus ja käyttö | Ohjeet ja palaute

Mitä julkaisu sisältää?

USB-laitepinon sovellusesimerkkiamples
Yhteensopiva ohjelmisto

Ohjelmisto
Simplicity SDK Simplicity Studio Simplicity Commander GCC (GNU-kääntäjäkokoelma) IAR Embedded Workbench ARM:lle IAR EWARM

Yhteensopiva versio tai variantti
2025.6.0 5.11.0 1.18.2 (mukana Simplicity Studio) 12.2.1 (mukana Simplicity Studio) 9.40.1 (mukana Simplicity Studio)

Asennus ja käyttö

Aloita kehitystyösi tutustumalla seuraaviin tuotteisiimme:
USB-laitteen ohjelmointiopas. API-dokumentaatio.
Lisätietoja Secure Vault -integraatiosta on kohdassa Secure Vault.
Uudelleenview Tietoturva- ja ohjelmistotiedotteet ja ilmoitusasetusten hallinta:
ò Siirry osoitteeseen https://community.silabs.com/. Kirjaudu sisään tilisi tunnuksilla. Napsauta profiiliasi.file kuvaketta sivun oikeassa yläkulmassa.
õ Valitse Ilmoitukset pudotusvalikosta. ö Siirry Ilmoitukset-osiossa Omat tuoteilmoitukset -välilehdelle tarkistaaksesiview historiallinen tietoturva- ja ohjelmistoneuvonta
ilmoituksia
÷ Voit hallita asetuksiasi Hallitse ilmoituksia -välilehdellä ja mukauttaa haluamasi tuotepäivitykset ja tiedotteet.
vastaanottaa.
Suositellut määritysasetukset löytyvät täältä.
Lisätietoja tämän version ohjelmistosta saat tutustumalla verkkodokumentaatioomme.
Apua ja palautetta

Ota yhteyttä Silicon Labsin tukeen. Saadaksesi vastauksia Ask AI -työkalullamme, katso tämän sivun yläreunassa olevaa hakukenttää.

Huomautus: Ask AI on kokeellinen.

Hanki apua kehittäjäyhteisöltämme.
SDK:n julkaisu- ja ylläpitokäytäntö
Katso SDK:n julkaisu- ja ylläpitokäytäntömme.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

6/174

Yliview
Yliview
Tekniset tiedot
Täyttää Universal Serial Bus -spesifikaation version 2.0 vaatimukset. Toteuttaa Interface Association Descriptor Engineering Change Notice (ECN) -vaatimukset. Tiedonsiirtotyypit.
Ohjauskeskeytysten USB-luokat Tiedonsiirtolaiteluokka (CDC) Abstrakti ohjausmalli (ACM) Human Interface Device (HID) Massamuistiluokka (MSC) Toimittajakohtainen luokkakehys
Ominaisuudet
Skaalattavissa sisältämään vain tarvittavat ominaisuudet muistintarpeen minimoimiseksi Tukee täyttä nopeutta (12 Mbit/s) Tukee komposiittilaitteita (monitoimilaitteita) Tukee useita kokoonpanoja sisältäviä laitteita Tukee USB:n virransäästötoimintoja (laitteen keskeytys ja palautus) Massamuistiluokan täydellinen integrointi Micrium-käyttöjärjestelmään File Järjestelmämoduuli Kehitetty CMSIS-RTOS2-abstraktiokerroksella, jotta se toimii eri käyttöjärjestelmien kanssa. Silicon Labs GSDK sisältää FreeRTOS- ja Micrium-käyttöjärjestelmäportit.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

7/174

Yliview
Yliview

USB-laitteen määritys

Tässä osiossa käsitellään Silicon Labsin USB-laitteen konfigurointia. Konfiguraatioparametrit jaetaan kolmeen ryhmään seuraavasti:
USB-laitteen ydinkonfiguraatio USB-laitteen tietojen konfiguraatio USB-laitteen laitteistokonfiguraatio
USB-laitteen ydinkonfiguraatio
Silicon Labsin USB-laite voidaan konfiguroida käännösaikana sl_usbd_core_config.h-tiedostossa olevien #define-määrittelyjen avulla. fileUSB-laite käyttää #define-määrityksiä aina kun mahdollista, koska ne mahdollistavat koodin ja datan koon skaalaamisen käännösaikana sen perusteella, mitkä ominaisuudet ovat käytössä. Tämä mahdollistaa Silicon Labs USB-laitteen vain luku -muistin (ROM) ja RAM-muistin (RAM) jalanjälkien säätämisen sovelluksesi vaatimusten mukaan.
Suositus: Aloita määritysprosessi oletusarvoilla (korostettu lihavoituna).
Alla olevat osiot on järjestetty mallipohjan kokoonpanon mukaiseen järjestykseen. file, sl_usbd_core_config.h.
Ydinkonfiguraatioluokkien konfigurointi
Ydinkokoonpano
Taulukko – USB-laitteen ydinkonfiguraatiovakiot

Vakiokuvaus

Oletusarvo

SL_USBD_TA SK_PINON KOKO

Määrittää pinon koon tavuina USBD-ydintehtävässä

4096

SL_USBD_TA SK_PRIORIT Y

Määrittää USBD-ydintehtävän prioriteetin. Tämä on CMSIS-RTOS2-prioriteetti.

osPrioriteettiKorkea

SL_USBD_A UTO_START _USB_DEVIC E

Jos tämä asetus on käytössä, USB-laite käynnistyy automaattisesti, kun kernel on käynnistetty ja kyseinen USBD-ydintehtävä on ajoitettu ensimmäistä kertaa. Jos tämä asetus on poistettu käytöstä, sovelluksesi on kutsuttava sl_usbd_core_start_device()-funktiota, kun USB-isäntä on valmis havaitsemaan sen.

SL_USBD_C Sl_usbd_add_configuration()-funktion kautta lisättävien kokoonpanojen kokonaismäärä

1

ONFIGURATI-funktio.

ON_QUANTI

TY

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

8/174

Yliview

Jatkuva
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ MÄÄRÄ
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITY
SL_USBD _KUVAUS
PTOR_Q
UANTITY
SL_USBD _MERKINNÄT _MÄÄRÄ
TY
SL_USBD _OPEN_E NDPOIN TS_QUANTITY

Kuvaus Kaikkiin kokoonpanoihisi lisättävien USB-liitäntöjen kokonaismäärä. Tämä riippuu suuresti käytetyistä luokista/luokista. Lisätietoja luokkainstanssin tarvitsemien liitäntöjen määrästä on luokkasi/luokkasi osiossa ”Resurssitarpeet ytimestä”.
Kaikkiin kokoonpanoihisi lisättävien vaihtoehtoisten USB-liitäntöjen kokonaismäärä. Tämä riippuu suuresti käytetyistä luokista/luokista. Tämän arvon on aina oltava yhtä suuri tai suurempi kuin SL_USBD_INTERFACE_QUANTITY. Lisätietoja siitä, kuinka monta vaihtoehtoista liitäntää luokkainstanssi tarvitsee, on luokkiesi osiossa ”Resurssitarpeet ytimestä”.
Kaikkiin kokoonpanoihisi lisättävien USB-liitäntäryhmien kokonaismäärä. Tämä riippuu suuresti käytetyistä luokista/luokista. Lisätietoja siitä, kuinka monta liitäntäryhmää luokkainstanssi vaatii, on luokkiesi osiossa ”Resurssitarpeet ytimestä”.
Kaikkiin kokoonpanoihisi lisättävien päätepisteiden kuvaajien kokonaismäärä. Tämä riippuu suuresti käytetyistä luokista/luokista. Lisätietoja siitä, kuinka monta päätepisteen kuvaajaa luokkainstanssi tarvitsee, on luokkiesi osiossa "Resurssitarpeet ytimestä" kohdassa "Päätepisteiden määrä". Huomaa, että ohjauspäätepisteitä ei tarvitse ottaa tässä huomioon. USB-merkkijonojen kokonaismäärä. Määrän asettaminen nollaksi poistaa ominaisuuden käytöstä. Tämän poistaminen käytöstä aiheuttaa sen, että laite ei tallenna sovelluksesta välitettyjä USB-kuvausmerkkijonoja. Tämä tarkoittaa, että isäntä ei voi hakea kuvausmerkkijonoja (kuten valmistaja ja tuotteen nimi). Avattujen päätepisteiden kokonaismäärä kokoonpanoa kohden. Laite vaatii vähintään kaksi avattua päätepistettä ohjauksen siirtoon, mutta sinun on myös lisättävä käytettyjen luokkien päätepisteet. Lisätietoja siitä, kuinka monta avointa päätepistettä luokkainstanssi tarvitsee, on luokkiesi osiossa "Resurssitarpeet ytimestä" kohdassa "Päätepisteiden määrä".

Oletusarvo
10 10
2
20 30 20

Luokkien konfigurointi
Luokilla on tietyt käännösaikaiset asetukset. Lisätietoja on kohdassa USB-laiteluokat.
USB-laitteen tietojen määritys

Sl_usbd_device_config.h-tiedoston konfigurointi file ryhmittelee uudelleen käännösaikaiset #define-s-määritykset asettaakseen laitteen perustiedot, kuten toimittajan/tuotteen tunnuksen, laitemerkkijonot jne. Alla olevassa taulukossa kuvataan kaikki tässä kokoonpanossa käytettävissä olevat tietomääritykset. file.

Taulukko – USB-laitteen tiedot Konfiguraatio Määritykset

Jatkuva
SL_USBD_LAITEMYYJÄN_TUNNUS
SL_USBD_LAITE E_TUOTTEEN_TUNNUS

Kuvaus USB Implementers Forumin toimittama toimittajan tunnistenumerosi. Lisätietoja toimittajan tunnuksen hankkimisesta on osoitteessa http://www.usb.org/developers/vendor/. Tuotetunnistenumerosi.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

9/174

Yliview

Jatkuva

Kuvaus

SL_USBD_DEVICE_RELEASE Laitteesi versionumero. _NUMBER

SL_USBD_DEVICE_MANUFA Merkkijono, joka kuvaa laitteen valmistajaa. Tätä määritystä ei huomioida, kun

CTURER_STRING

SL_USBD_STRING_QUANTITY-konfiguraatioksi on asetettu 0.

SL_USBD_DEVICE_PRODUC Tuotettasi kuvaava merkkijono. Tätä määritystapaa ei huomioida määrityksessä

T_STRING

SL_USBD_STRING_QUANTITY on asetettu arvoon 0.

SL_USBD_DEVICE_SERIAL_N Merkkijono, joka sisältää laitteesi sarjanumeron. Tätä määritystä ei huomioida, kun

NUMERO_STRING

SL_USBD_STRING_QUANTITY-konfiguraatioksi on asetettu 0.

SL_USBD_DEVICE_LANGUA Laitteesi merkkijonojen kielen tunnistenumero. Mahdollisia arvoja ovat:
GE_ID

– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA

– SL_USBD_LANG_ID_CHINESE_TAIWAN

– SL_USBD_LANG_ID_FIN_US

– SL_USBD_LANG_ID_FINNISH_UK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_GERMAN

– SL_USBD_LANG_ID_KREIKKA

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGALI

– SL_USBD_LANG_ID_SANSKRIT

Tätä konfiguraatiota ei oteta huomioon, kun SL_USBD_STRING_QUANTITY -konfiguraation arvoksi on asetettu 0.

USB-laitteen laitteistokokoonpano

Käyttämästäsi Silicon Labs -laitteesta riippuen sinulla saattaa olla GPIO-pinni ja -portti USB VBUS Sense -signaalin konfigurointia varten. Konfiguraatiot löytyvät sl_usbd_hardware_config.h-otsikkotiedostosta. file.

Jatkuva
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Kuvaus
GPIO-portti USB VBUS Sense -signaalille emolevylläsi. GPIO-pinni USB VBUS Sense -signaalille emolevylläsi.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

10/174

Yliview
Yliview
USB-laitteen ohjelmointiopas
Tässä osiossa selitetään, miten USB-laitemoduulia käytetään.
USB-laitemoduulin alkuasetukset
Tässä osiossa kuvataan USB-laitemoduulin alustamisen sekä laitteen lisäämisen, valmistelun ja käynnistämisen perusvaiheet. USB-laitemoduulin alustaminen USB-laiteytimen alustaminen aCl-sovittimien alustaminen USB-laitteen lisääminen USB-laitteen kokoaminen Kokoonpanojen lisääminen USB-toimintojen lisääminen USB-laitteen käynnistäminen
Tapahtumakoukkufunktiot
USB-laitemoduulin alustaminen
USB-laitteen ytimen alustaminen
Aloita alustamalla B-laitemoduulin ydin kutsumalla funktiota sl_usbd_core_init(). Alla oleva esimerkki näyttää sl_usbd_core_init()-funktion kutsumisen.
Example – sl_usbd_core_init()-funktion kutsuminen
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
Luokan/luokkien alustaminen
Kun USB-laitemoduulin ydin on alustettu, sinun on alustettava jokainen luokka, jota aiot käyttää. Lisätietoja on acl-laitemoduulisi osiossa ”Ohjelmointiopas”.
USB-laitteen rakentaminen
Kokoonpanojen lisääminen
Kun olet alustanut laitteen onnistuneesti, voit aloittaa USB-toimintojen lisäämisen siihen uudella kokoonpanolla. Laitteella on oltava vähintään yksi kokoonpano. Lisää kokoonpano(t) kutsumalla funktiota sl_usbd_core_dd_configuration(). Tätä funktiota on kutsuttava jokaista lisättävää kokoonpanoa varten. Esim.ampAlla oleva kuva näyttää, kuinka täyden nopeuden lisätään.
Example – Konfiguraatioiden lisääminen laitteellesi

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

11/174

Yliview

sl_status_t tila; uint8_t config_nbr_fs;

/* Lisätään laitteeseen täyden nopeuden kokoonpano. */

tila = sl_usbd_core_add_configuration(0,

/* Konfiguraatiolla ei ole erityisattribuutteja. */

100u,

/* Suurin virrankulutus: 100 mA.

*/

SL_USBD_DEVICE_SPEED_FULL,

/* Täyden nopeuden kokoonpano.

*/

"Määritä Lisää ExampTäyden nopeuden määritys”,

&config_nbr_fs);

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

USB-toimintojen lisääminen
Kun olet lisännyt laitteeseesi ainakin yhden kokoonpanon, voit lisätä siihen rajapinnat ja päätepisteet. Jokaisella USB-luokalla on omat tarpeensa rajapinnan ja päätepisteiden tyypin, määrän ja muiden parametrien suhteen. Silicon Labs USB Device lisää rajapintoja ja päätepisteitä tarjoamiinsa luokkiin.
Sovelluksestasi käsin voit luoda USB-luokan instanssin ja lisätä sen kokoonpanoon. Lisätietoja USB-laiteluokkainstanssien käsitteestä on kohdassa USB-laiteluokat. Huomaa, että voit luoda instanssin ja lisätä kokoonpanoon useita eri luokkainstansseja luodaksesi monitoimisen (komposiitti)laitteen.
ExampAlla oleva kuva näyttää, kuinka luokkainstanssi luodaan ja lisätään kokoonpanoon.
Example – Luokkainstanssin lisääminen laitteellesi

sl_status_t tila; uint8_t luokka_nbr;
/* Luo instanssi luokasta, jota haluat käyttää.*/ /* Huomaa, että luokasta riippuen tällä funktiolla voi olla useampia argumentteja. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }
/* Lisää luokan ilmentymä Full-Speed-kokoonpanoon. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* sl_usbd_ palauttama luokan numero _luo_instanssi. */
config_nbr_fs); /* Sl_usbd_core_add_configuration()-funktion palauttama konfiguraationumero. */ if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }
USB-laitteen käynnistäminen
Oletusarvoisesti USB-laiteydintehtävä käynnistää laitteen automaattisesti laitteen alustuksen ja ytimen käynnistymisen jälkeen. Voit hallita laitteen käynnistymistä ja USB-isännän näkyvyyttä poistamalla automaattisen käynnistyksen käytöstä konfiguraatiolla define SL_USBD_AUTO_START_USB_DEVICE. Kun toiminto on poistettu käytöstä laitteen rakentamisen/valmistelemisen jälkeen, voit käynnistää sen ja tehdä siitä näkyvän USB-isännälle kutsumalla funktiota sl_usbd_core_start_device().
ExampAlla oleva kuva näyttää, kuinka laite käynnistetään sl_usbd_core_start_device()-funktiolla.
Example – Laitteen käynnistäminen

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

12/174

Yliview

sl_status_t-tila;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }

Tapahtumakoukkufunktiot
USB-laiteydinmoduuli tarjoaa kaksi heikkoa koukkufunktiota, jotka voit määrittää uudelleen sovelluksessasi. Niiden tarkoituksena on ilmoittaa väylä- ja konfigurointitapahtumista.
Taulukko – USB-tapahtumakoukun toiminnot

Tapahtuma

Kuvaus

Bussi

Kutsutaan, kun USB-väylätapahtuma tapahtuu

Konfiguraatio Kutsutaan, kun USB-konfiguraatiotapahtuma tapahtuu

Toiminnon allekirjoitus
void sl_usbd_on_bus_event(sl_usbd_bus_event_t tapahtuma); void sl_usbd_on_config_event(sl_usbd_config_event_t tapahtuma, uint8_t config_nbr);

Example – Tapahtumakoukkufunktiot

void sl_usbd_on_bus_event(sl_usbd_bus_event_t tapahtuma) { kytkin (tapahtuma) { case SL_USBD_EVENT_BUS_CONNECT: }
// kutsutaan, kun USB-kaapeli kytketään isäntäohjaimeen break;
case SL_USBD_EVENT_BUS_DISCONNECT: // kutsutaan, kun USB-kaapeli irrotetaan isäntäohjaimesta break;
case SL_USBD_EVENT_BUS_RESET: // kutsutaan, kun isäntä lähettää nollauskomennon break;
case SL_USBD_EVENT_BUS_SUSPEND: // kutsutaan, kun isäntä lähettää keskeytyskomennon break;
case SL_USBD_EVENT_BUS_RESUME: // kutsutaan, kun isäntä lähettää herätyskomennon break;
oletusarvo: tauko; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t tapahtuma, uint8_t config_nbr) { kytkin (tapahtuma) { tapaus SL_USBD_EVENT_CONFIG_SET: }
// kutsutaan, kun isäntä asettaa konfiguraatiokatkoksen;
case SL_USBD_EVENT_CONFIG_UNSET: // kutsutaan, kun konfiguraatiota ei ole asetettu break;
oletusarvo: tauko; } }

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

13/174

Yliview

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

14/174

Yliview
Yliview

USB-laiteluokat

Silicon Labsin USB-laitteessa saatavilla olevilla USB-luokilla on joitakin yhteisiä ominaisuuksia. Tässä osiossa selitetään nämä ominaisuudet ja niiden vuorovaikutus ydinkerroksen kanssa.
Lisätietoja tietystä luokasta on seuraavassa:
CDC ACM -luokka HID-luokka MSC SCSI -luokka Toimittajaluokka
Tietoja luokkainstansseista
USB-laitteessa käytettävissä olevat USB-luokat toteuttavat luokkainstanssien käsitteen. Luokkainstanssi edustaa yhtä toimintoa laitteen sisällä. Toiminto voidaan kuvata yhdellä rajapinnalla tai rajapintojen ryhmällä, ja se kuuluu tiettyyn luokkaan.
Jokaisella USB-luokan toteutuksella on joitakin yhteisiä konfiguraatioita ja funktioita, jotka perustuvat luokkainstanssin käsitteeseen. Yhteiset konfiguraatiot ja funktiot on esitetty alla olevassa taulukossa. Sarakkeen otsikossa 'Vakiot tai funktio' paikkamerkki XXXX voidaan korvata luokan nimellä: CDC, HID, MSC, CDC_ACM tai VENDOR (funktioiden nimien toimittaja).
Taulukko – Useiden luokkainstanssien käsitteeseen liittyvät vakiot ja funktiot

Vakio tai funktio
SL_USBD_XXXX_CL ASS_INS-MÄÄRÄ
SL_USBD_XXXX_MÄÄRÄYSMÄÄRÄ
sl_usb d _XXXX_create _instan ce ()
sl_usbd_XXXX_add_to_conf iguraatio()

Kuvaus
Määrittää luokkainstanssien enimmäismäärän.
Konfiguroi enimmäismäärän konfiguraatioita. Luokan alustuksen aikana luotu luokkainstanssi lisätään yhteen tai useampaan konfiguraatioon. Luo uuden luokkainstanssin.
Lisää olemassa olevan luokkaesiintymän määritettyyn laitekokoonpanoon.

Koodin toteutuksen kannalta luokka määrittelee paikallisen globaalin muuttujan, joka sisältää luokan ohjausrakenteen. Tämä luokan ohjausrakenne liittyy yhteen luokkainstanssiin ja sisältää erityisiä tietoja luokkainstanssin hallintaan.
Seuraavissa kuvissa on esitetty useita tapauskohtaisia ​​skenaarioita. Jokainen kuva sisältää koodiesimerkinample, joka vastaa tapauskohtaista tilannetta.
Kuva – Useita luokkainstanssien versioita – FS-laite (1 kokoonpano ja 1 liitäntä) esittää tyypillistä USB-laitetta. Laite on täyden nopeuden (FS) laite ja sisältää yhden kokoonpanon. Laitteen toiminto kuvataan yhdellä rajapinnalla, joka koostuu kahdesta päätepisteestä tiedonsiirtoa varten. Yksi luokkainstanssi luodaan ja sen avulla voit hallita koko rajapintaa siihen liittyvän päätepisteen kanssa.
Kuva – Useita luokkainstanssien kokoonpanoja – FS-laitteen 1 konfigurointi yhdellä rajapinnalla)

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

15/174

Yliview

Kuvaa – Useita luokkainstanssien – FS-laitteen (1 kokoonpano ja 1 rajapinta) vastaava koodi on esitetty esimerkissä.ample alla.
Example – Useita luokkainstanssien – FS-laitteen 1 kokoonpano yhdellä rajapinnalla)

sl_status_t tila; uint8_t luokka_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Käsittelee luokan käyttöönottotapahtuman. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Käsittelee luokan käytöstäpoistotapahtuman. */ }

sl_usbd_XXXX_callbacks_t luokka_callbacks = {

(1)

.enable = sovellus_usbd_XXXX_käyttöönotto,

.disable = sovellus_usbd_XXXX_pois käytöstä

};

tila = sl_usbd_XXXX_init();

(2)

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

status = sl_usbd_XXXX_create_instance(&class_callbackit,

(3)

&luokka_0);

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

tila = sl_usbd_XXXX_add_to_configuration(luokka_0, kokoonpano_0);

(4)

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

(1) Jokainen luokka tarjoaa joukon takaisinkutsufunktioita laitteen yhdistämis-/katkaisutapahtumille ja luokkakohtaisille tapahtumille. Takaisinkutsurakenneobjekti annetaan argumenttina, kun luokkainstanssi luodaan sl_usbd_XXXX_create_instance()-funktiolla.
toiminto.
(1) Alusta luokka. Kaikki sisäiset muuttujat, rakenteet ja luokan portit alustetaan. Huomaa, että joidenkin luokkien Init()-funktio voi ottaa vastaan ​​muita argumentteja.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

16/174

Yliview
(2) Luo luokan instanssi, joka on class_0. Funktio sl_usbd_XXXX_create_instance() varaa luokan_0 luokkaohjausrakenteen. Luokasta riippuen sl_usbd_XXXX_create_instance()-funktiolla voi olla luokkanumeron lisäksi muita parametreja, jotka edustavat luokan ohjausrakenteeseen tallennettuja luokkakohtaisia ​​tietoja. aaa (3) Lisää luokan instanssi class_0 määritettyyn konfiguraationumeroon config_0. sl_usbd_XXXX_add_to_configuration() luo rajapinnan 0 ja siihen liittyvät IN- ja OUT-päätepisteet. Tämän seurauksena luokan instanssi kattaa rajapinnan 0 ja sen päätepisteet. Kaikki rajapinnan 0 kautta tapahtuva kommunikointi käyttää luokan instanssinumeroa class_0. Kuva – Useita luokan instanssien – FS-laite (2 konfiguraatiota ja useita rajapintoja) edustaa monimutkaisempaa esimerkkiäampesim. Täyden nopeuden laite koostuu kahdesta konfiguraatiosta. Laitteella on kaksi samaan luokkaan kuuluvaa toimintoa, mutta kutakin toimintoa kuvaavat kaksi rajapintaa ja sillä on pari kaksisuuntaista päätepistettä. Tässä esimerkissäampTässä tapauksessa luodaan kaksi luokkainstanssia. Jokainen luokkainstanssi on liitetty rajapintaryhmään, toisin kuin kuvassa Kuva – Useita luokkainstanssien – FS-laite (1 kokoonpano, jossa on 1 rajapinta) ja kuvassa Kuva – Useita luokkainstanssien – FS-laite (2 kokoonpanoa ja useita rajapintoja), joissa luokkainstanssi on liitetty yhteen rajapintaan.
Kuva – Useita luokkainstanssien kokoonpanoja – FS-laitteen 2 kokoonpanot ja useat liittymät)

Kuvaa – Useita luokkainstanssien – FS-laitteen (2 konfiguraatiota ja useita rajapintoja) vastaava koodi on esitetty esimerkissä.ampalla oleva. Virheenkäsittely on jätetty pois selkeyden vuoksi.
Example – Useita luokkainstanssien – FS-laitteen 2 konfiguraatiot ja useat rajapinnat)

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

17/174

Yliview

sl_status_t tila; uint8_t luokka_0; uint8_t luokka_1;
tila = sl_usbd_XXXX_init();
tila = sl_usbd_XXXX_create_instance(&luokka_0); tila = sl_usbd_XXXX_create_instance(&luokka_1);
tila = sl_usbd_XXXX_add_to_configuration(luokka_0, cfg_0); tila = sl_usbd_XXXX_add_to_configuration(luokka_1, cfg_0);
tila = sl_usbd_XXXX_add_to_configuration(luokka_0, cfg_1); tila = sl_usbd_XXXX_add_to_configuration(luokka_1, cfg_1);

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

(1) Alusta luokka. Kaikki sisäiset muuttujat, rakenteet ja luokan portit alustetaan.
(2) Luo luokan instanssi class_0. Funktio sl_usbd_XXXX_create_instance() varaa luokan ohjausrakenteen, joka liittyy class_0:aan.
(3) Luo luokan instanssi class_1. Funktio sl_usbd_XXXX_create_instance() varaa toisen luokan ohjausrakenteen, joka liittyy class_1:een.
(4) Lisää luokan instanssi class_0 konfiguraatioon cfg_0. sl_usbd_XXXX_add_to_configuration() luo rajapinnan 0, rajapinnan 1, vaihtoehtoiset rajapinnat ja niihin liittyvät IN- ja OUT-päätepisteet. Luokan instanssinumeroa class_0 käytetään kaikkeen dataliikenteeseen rajapinnan 0 tai rajapinnan 1 kautta.
(5) Lisää luokan instanssi class_1 konfiguraatioon cfg_0. sl_usbd_XXXX_add_to_configuration() luo rajapinnan 2, rajapinnan 3 ja niihin liittyvät IN- ja OUT-päätepisteet. Luokan instanssinumeroa class_1 käytetään kaikkeen rajapinnan 2 tai 3 väliseen tietoliikenteeseen.
(6) Lisää samat luokkainstanssit, class_0 ja class_1, toiseen konfiguraatioon, cfg_1.
Jokainen luokka määrittelee sl_usbd_XXXX_callbacks_t -tyyppisen rakenteen. Sen tarkoituksena on antaa jokaiselle luokalle joukko takaisinkutsufunktioita, joita kutsutaan tapahtuman sattuessa. Jokaisessa luokassa on kaksi takaisinkutsufunktiota. Ne on esitetty alla olevassa taulukossa.
Taulukko – Yleiset luokan takaisinkutsufunktiot

Kentät Kuvaus .enable Kutsutaan, kun USB-luokkainstanssi on otettu käyttöön onnistuneesti. .disable Kutsutaan, kun USB-luokkainstanssi on poistettu käytöstä.

Funktion allekirjoitus void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

18/174

Yliview
Yliview
USB-laitteen CDC ACM-luokka
USB-laite CDC Base Class Overview USB-laitteen CDC ACM-luokan resurssitarpeet ytimestä USB-laitteen CDC ACM-aliluokka Yliview USB-laitteen CDC ACM -luokan konfigurointi USB-laitteen CDC ACM -luokan ohjelmointiopas
Tässä osiossa kuvataan Silicon Labsin USB-laitepinon tukema Communications Device Class (CDC) -luokka ja siihen liittyvä CDC-alaluokka. Silicon Labsin USB-Device tukee tällä hetkellä Abstract Control Model (ACM) -alaluokkaa, jota käytetään yleisesti sarjaemulointiin.
CDC sisältää erilaisia ​​televiestintä- ja verkkolaitteita. Televiestintälaitteisiin kuuluvat analogiset modeemit, analogiset ja digitaaliset puhelimet, ISDN-päätesovittimet jne. EsimerkiksiampVerkkolaitteet sisältävät ADSL- ja kaapelimodeemeja, Ethernet-sovittimia ja keskittimiä. CDC määrittelee kehyksen, joka kapseloi olemassa olevat tietoliikennepalvelustandardit, kuten V.250 (puhelinverkon modeemeille) ja Ethernet (lähiverkkolaitteille), USB-linkin avulla. Tietoliikennelaite vastaa laitteen hallinnasta, tarvittaessa puheluiden hallinnasta ja tiedonsiirrosta.
CDC määrittelee seitsemän pääryhmää laitteille. Jokainen ryhmä kuuluu tietoliikennemalliin, joka voi sisältää useita alaluokkia. Jokaisella laiteryhmällä on oma spesifikaatioasiakirjansa CDC-perusluokan lisäksi. Nämä seitsemän ryhmää ovat:
Yleisen puhelinverkon (PSTN) laitteet, mukaan lukien äänikaistamodeemit, puhelimet ja sarjaliikenneemulointilaitteet. Integroitujen palveluiden digitaalisen verkon (ISDN) laitteet, mukaan lukien päätesovittimet ja puhelimet. Ethernet-ohjausmallin (ECM) laitteet, mukaan lukien IEEE 802 -perhettä tukevat laitteet (esim. kaapeli- ja ADSL-modeemit, WiFi-sovittimet). Asynkronisen siirtotilan (ATM) laitteet, mukaan lukien ADSL-modeemit ja muut ATM-verkkoihin liitetyt laitteet (työasemat, reitittimet, lähiverkkokytkimet). Langattomat matkaviestinlaitteet (WMC), mukaan lukien monitoimiset tietoliikennepäätelaitteet, joita käytetään ääni- ja dataliikenteen hallintaan. Ethernet-emulointimallin (EEM) laitteet, jotka vaihtavat Ethernet-kehyksillä varustettua dataa. Verkonohjausmallin (NCM) laitteet, mukaan lukien nopeat verkkolaitteet (High Speed ​​Packet Access -modeemit, linjapäätelaitteet).
CDC ja siihen liittyvä alaluokan toteutus noudattavat seuraavia spesifikaatioita:
Universal Serial Bus, luokkamääritelmät tietoliikennelaitteille, versio 1.2, 3. marraskuuta 2010. Universal Serial Bus, tietoliikenne, PSTN-laitteiden alaluokka, versio 1.2, 9. helmikuuta 2007.
USB-laite CDC Base Class Overview
CDC-laite koostuu seuraavista rajapinnoista tiedonsiirtokyvyn toteuttamiseksi:
Communications Class Interface (CCI) vastaa laitteen hallinnasta ja valinnaisesti puheluiden hallinnasta.
Laitehallinta mahdollistaa laitteen yleisen konfiguroinnin ja hallinnan sekä tapahtumista ilmoittamisen isännälle. Puhelunhallinta mahdollistaa puheluiden muodostamisen ja lopettamisen. Puhelunhallinta voidaan multipleksoida DCI:n kautta. CCI on pakollinen kaikille CDC-laitteille. Se tunnistaa CDC-toiminnon määrittämällä CDC-laitteen tukeman tietoliikennemallin. CCI:tä seuraava(t) liitäntä(t) voi(vat) olla mikä tahansa määritelty USB-luokan liitäntä, kuten ääni- tai toimittajakohtainen liitäntä. Toimittajakohtaista liitäntää edustaa erityisesti DCI.
Data Class Interface (DCI) vastaa tiedonsiirrosta. Lähetetyt ja/tai vastaanotetut tiedot eivät noudata tiettyä
muoto. Data voi olla raakadataa tietoliikennelinjalta, dataa omassa formaatissa jne. Kaikkia CCI:tä seuraavia DCI:itä voidaan pitää alisteisina rajapintoina.
CDC-laitteella on oltava vähintään yksi CCI ja nolla tai useampi DCI. Yksi CCI ja mikä tahansa sen alainen DCI tarjoavat yhdessä ominaisuuden isännälle. Tätä ominaisuutta kutsutaan myös funktioksi. CDC-yhdistelmälaitteessa voi olla useita

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

19/174

Yliview
toimintoja. Siksi laite koostuisi useista CCI- ja DCI-sarjoista, kuten kuvassa CDC-komposiittilaite on esitetty.
Kuva – CDC-komposiittilaite

CDC-laite käyttää todennäköisesti seuraavaa päätepisteiden yhdistelmää:
Pari ohjauksen IN- ja OUT-päätepisteitä, joita kutsutaan oletuspäätepisteiksi. Valinnainen joukko- tai keskeytys-IN-päätepiste. Pari joukko- tai isokronisia IN- ja OUT-päätepisteitä. Huomaa, että Silicon Labsin USB-laitepino ei tällä hetkellä tue isokronisia päätepisteitä.
Alla oleva taulukko näyttää eri päätepisteiden käytön ja sen, minkä CDC:n rajapinnan kautta niitä käytetään.
Taulukko – CDC-päätepisteiden käyttö

Päätepiste
Ohjaus IN
Ohjaus OUT
Keskeytys tai massa IN Bulk tai isokroninen IN Bulk tai isokroninen
OUT

Suunta
Laitteesta isäntään
Isännästä laitteeseen
Laitteesta isäntään
Laitteesta isäntään
Isännästä laitteeseen

Käyttöliittymän käyttö

CCI

Vakiopyynnöt luettelointia, luokkakohtaisia ​​pyyntöjä, laitetta varten

hallinta ja valinnaisesti puheluiden hallinta.

CCI

Vakiopyynnöt luettelointia, luokkakohtaisia ​​pyyntöjä, laitetta varten

hallinta ja valinnaisesti puheluiden hallinta.

CCI

Tapahtumailmoitukset, kuten soiton tunnistus, sarjalinjan tila, verkon tila.

DCI

Raaka- tai muotoiltu dataviestintä.

DCI

Raaka- tai muotoiltu dataviestintä.

Useimmat tietoliikennelaitteet käyttävät keskeytyspäätepistettä ilmoittaakseen tapahtumista isännälle. Isokronisia päätepisteitä ei tule käyttää tiedonsiirtoon, jos jokin omistettu protokolla on riippuvainen tiedon uudelleenlähetyksestä USB-protokollavirheiden sattuessa. Isokronisessa tietoliikenteessä voi luonnostaan ​​kadota tietoja, koska siinä ei ole uudelleenyritysmekanismeja.
Seitsemän pääasiallista viestintämallia kattavat useita alaluokkia. Alaluokka kuvaa tapaa, jolla laitteen tulisi käyttää CCI:tä laitteenhallinnan ja puheluiden hallinnan hoitamiseen. Alla oleva taulukko näyttää kaikki mahdolliset alaluokat ja viestintämallin, johon ne kuuluvat.
Taulukko – CDC-alaluokat

Alaluokka
Suoraviivainen ohjausmalli Abstrakti ohjausmalli

Viestintämalli
PSTN
PSTN

ExampTätä alaluokkaa käyttävien laitteiden luettelo
USB-isännän suoraan ohjaamat modeemilaitteet
Sarjaemulointilaitteet, modeemilaitteet, joita ohjataan sarjakomentosarjan kautta

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

20/174

Yliview

Alaluokka

Viestintämalli

ExampTätä alaluokkaa käyttävien laitteiden luettelo

Puhelinohjausmalli

PSTN

Monikanavainen ohjaus ISDN-malli

CAPI-ohjausmalli ISDN

Ethernet-verkon ECM-ohjausmalli

Pankkiautomaattien verkottuminen

Pankkiautomaatti

Ohjausmalli

Langattoman luurin ohjausmalli

WMC

Laitehallinnan WMC

Mobiili suoralinjamalli

WMC

OBEX

WMC

Ethernet-emuloinnin EEM-malli

Verkon ohjausmalli

NCM

Puhepuhelinlaitteet
Perusmaksupäätesovittimet, ensisijaisen maksupäätesovittimet, puhelimet
Perusnopeuden päätesovittimet, ensisijaisen nopeuden päätesovittimet, puhelimet, DOC-SIS-kaapelimodeemit, PPPoE-emulointia tukevat ADSL-modeemit, Wi-Fi-sovittimet (IEEE 802.11-perhe), IEEE 802.3 -sovittimet, ADSL-modeemit
Langattomiin laitteisiin yhteyden muodostava mobiilipäätelaite
Mobiilipäätelaitteet yhteyden muodostamiseen langattomiin laitteisiin Mobiilipäätelaitteet yhteyden muodostamiseen langattomiin laitteisiin
Langattomiin laitteisiin yhdistettävät mobiilipäätelaitteet. Laitteet, jotka käyttävät Ethernet-kehyksiä seuraavana siirtokerroksena. Ei tarkoitettu reititykseen tai internet-yhteyslaitteisiin. IEEE 802.3 -sovittimet, jotka kuljettavat suurta tiedonsiirtonopeutta verkossa.

USB-laitteen CDC ACM-luokan resurssitarpeet Corelta

Joka kerta, kun lisäät CDC ACM -luokan instanssin USB-kokoonpanoon kutsumalla funktiota sl_usbd_cdc_acm_add_to_configuration() , seuraavat resurssit allokoidaan ytimestä.

Resurssi
Rajapinnat Vaihtoehtoiset rajapinnat Päätepisteet Rajapintaryhmät

Määrä
2 2 3 1

Huomaa, että nämä luvut ovat kokoonpanokohtaisia. Kun määrität SL_USBD_INTERFACE_QUANTITY-, SL_USBD_ALT_INTERFACE_QUANTITY-, SL_USBD_INTERFACE_GROUP_QUANTITY- ja SL_USBD_DESCRIPTOR_QUANTITY-määritysarvoja, muista ottaa huomioon, kuinka monta kokoonpanoa luokka lisätään. SL_USBD_OPEN_ENDPOINTS_QUANTITY-määritysarvon osalta, koska päätepisteet avataan vain, kun isäntä asettaa kokoonpanon, sinun tarvitsee ottaa huomioon vain tarvittavien päätepisteiden määrä luokkainstanssia varten.
USB-laitteen CDC ACM-alaluokka yliview

CDC-perusluokka koostuu tietoliikenneluokkarajapinnasta (CCI) ja dataluokkarajapinnasta (DCI), jota käsitellään yksityiskohtaisesti USB-laitteen CDC-perusluokan ylitys -osiossa.view Tässä osiossa käsitellään ACM-tyyppistä CCI:tä. Se koostuu hallintaelementin oletusarvoisesta päätepisteestä ja ilmoituselementin keskeytyspäätepisteestä. Määrittämättömän datan siirtämiseen DCI:n kautta käytetään kahta massapäätepistettä.
ACM-alaluokkaa käyttävät kahdenlaiset tietoliikennelaitteet:
AT-komentoja tukevat laitteet (esimerkiksi äänikaistamodeemit). Sarjaliikennettä jäljittelevät laitteet, joita kutsutaan myös virtuaalisiksi COM-porttilaitteiksi.
ACM-alikategorialla on useita alaluokkakohtaisia ​​pyyntöjä. Niiden avulla voit hallita ja konfiguroida laitetta. Täydellinen luettelo ja kuvaus kaikista ACM-pyynnöistä löytyy määrityksestä.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

21/174

Yliview PSTN-laitteiden alaluokka, versio 1.2, 9. helmikuuta 2007=, kohta 6.2.2.
Tästä luettelosta Silicon Labs9:n ACM-alaluokka tukee seuraavia:
Taulukko – Silicon Labsin tukemat ACM-pyynnöt

Alaluokkapyynnön kuvaus

AsetaViestintäominaisuus HaeViestintäominaisuus TyhjennäViestintäominaisuus

Isäntä lähettää tämän pyynnön tietyn tietoliikenneominaisuuden asetusten hallitsemiseksi. Ei käytetä sarjaemulointiin.
Isäntä lähettää tämän pyynnön saadakseen tietyn tietoliikenneominaisuuden nykyiset asetukset. Ei käytetä sarjaemulointiin.
Isäntä lähettää tämän pyynnön tietyn tietoliikenneominaisuuden asetusten tyhjentämiseksi. Ei käytetä sarjaemulointiin.

SetLineCoding

Isäntä lähettää tämän pyynnön ACM-laitteen asetusten määrittämiseksi: baudinopeus, stop-bittien määrä, pariteettityyppi ja databittien määrä. Sarjaemulointia käytettäessä sarjapääte lähettää tämän pyynnön automaattisesti aina, kun määrität avoimen virtuaalisen COM-portin sarja-asetukset.

GetLineCoding

Isäntä lähettää tämän pyynnön saadakseen nykyiset ACM-asetukset (baudinopeus, stop-bitit, pariteetti, databitit). Sarjaemulointia varten sarjapäätteet lähettävät tämän pyynnön automaattisesti virtuaalisen COM-portin avauduttua.

SetControlLineState Isäntä lähettää tämän pyynnön ohjatakseen half-duplex-modeemien kantoaaltoa ja ilmaistakseen, onko päätelaite (DTE) valmis vai ei. Sarjaemuloinnin tapauksessa DTE on sarjapääte. Sarjaemuloinnin tapauksessa tietyt sarjapäätteet sallivat tämän pyynnön lähettämisen asetettujen ohjausten kanssa.

SetBreak

Isäntä lähettää tämän pyynnön luodakseen RS-232-tyyppisen katkaisun. Sarjaliikenneemulointia varten tietyt sarjapäätteet sallivat tämän pyynnön lähettämisen.

Silicon Labs9:n ACM-alaluokka käyttää keskeytys-IN-päätepistettä ilmoittaakseen isännälle sarjaportin nykyisestä tilasta. Sarjaportti
rivin tila on bittikartta, joka kertoo isännälle seuraavista asioista:

Ylivuotovirhe. Kehysvirhe. Rengassignaalin havaitsemisen tila. Katkoksen havaitsemismekanismin tila. Lähetyskantoaallon tila. Vastaanottimen kantoaallon havaitsemisen tila.

Silicon Labs9:n ACM-alaluokan toteutus on seuraavan spesifikaation mukainen:
Universal Serial Bus, tietoliikenne, PSTN-laitteiden alaluokka, versio 1.2, 9. helmikuuta 2007.
USB-laitteen CDC ACM-luokan määritys

Tässä osiossa käsitellään CDC:n ACM-luokan (Communication Device Class, Abstract Control Model) konfigurointia. Konfiguraatioparametrit jaetaan kahteen ryhmään:
USB-laite CDC ACM -luokka Sovelluskohtaiset kokoonpanot USB-laite CDC ACM -luokan instanssikokoonpanot
USB-laitteen CDC ACM-luokan sovelluskohtaiset kokoonpanot

CDC-perusluokka ACM-alaluokka
CDC-perusluokka

Käyttääksesi Silicon Labsin USB-laitteen CDC-luokkamoduulia, sinun on ensin mukautettava CDC:n käännösaikaista konfiguraatiota #define-s sovellustarpeidesi mukaan. Ne on ryhmitelty uudelleen sl_usbd_core_config.h-otsikkotiedoston sisällä. file CDC-osiossa. Niiden tarkoitus on kertoa USB-laitemoduulille, kuinka monta USB CDC -objektia varataan.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

22/174

Yliview

Alla olevassa taulukossa kuvataan kaikki tässä konfiguraatiorakenteessa käytettävissä olevat konfiguraatiokentät.
Taulukko – USB-laitteen CDC-konfiguraatiomääritykset

Kokoonpanon nimi
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

Kuvaus
Funktiolle kutsumalla varattavien luokkainstanssien määrä
sl_usbd_cdc_acm_create_instance().
Konfiguraatioiden määrä. ACM-luokan instanssit voidaan lisätä yhteen tai useampaan aaaa-konfiguraatioon sl_usbd_cdc_acm_add_to_configuration()-funktion kautta.
Kaikkien CDC-funktioiden dataliitäntöjen (DCI) kokonaismäärä. Jokainen CDC ACM -funktio, joka lisäsi vi c ll -funktion sl_usbd_cdc_acm_create_instance() -funktioon, lisää dataliitäntöjä.

Oletusarvo
2
1
2

ACM-alaluokka
ACM-alikategorialla on yksi käännösaikainen konfiguraatio, joka on esitetty alla olevassa taulukossa.
Taulukko – USB-laitteen CDC ACM-konfiguraation määritys

Kokoonpanon nimi
SL_USBD_CDC_ACM_SUBCL ASS_I NOSTANCE_QUANTITY

Kuvaus
Määrittää kutsun kautta allokoitavien aliluokan instanssien määrän
funktio sl_usbd_cdc_acm_create_instance().

Oletusarvo
2

USB-laitteen CDC ACM-luokan instanssikonfiguraatiot

Tässä osiossa määritellään CDC ACM -sarjaluokan instanssien konfiguroinnit. Luokkainstanssin luontilinjan tilavälin puheluiden hallintaominaisuudet p_acm_callbacks
Luokkainstanssin luominen

Luodaksesi CDC ACM -sarjaluokkainstanssin, kutsu funktiota T a sl_usbd_cdc_acm_create_instance(). Tämä funktio käyttää kolmea määritysargumenttia, kuten tässä on kuvattu.

rivin_tilan_väli
Tämä on aikaväli (millisekunteina), jonka CDC ACM -sarjaluokan instanssi raportoi linjan tilailmoitukset T aa -isännälle. Tämän arvon on oltava kahden potenssi (1, 2, 4, 8, 16 jne.).

puheluiden_hallinnan_ominaisuudet
Puhelunhallintaominaisuuksien bittikartta. Bittikartan mahdolliset arvot ovat seuraavat:

Arvo (bitti)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI

Kuvaus
Laite hoitaa puheluiden hallinnan itse. Laite voi lähettää/vastaanottaa puheluidenhallintatietoja Data Class -rajapinnan kautta.

p_acm_callbackit

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

23/174

Yliview

aa M aa p_acm_callbacks on osoitin sl_usbd_cdc_acm_callbacks_t-tyyppiseen rakenteeseen. Sen tarkoituksena on antaa CDC AC Cl:lle joukko takaisinkutsufunktioita, joita kutsutaan, kun CDC ACM -tapahtuma tapahtuu. Kaikki takaisinkutsut eivät ole pakollisia, ja takaisinkutsut-rakennemuuttujassa voidaan välittää null-osoitin (NULL), kun takaisinkutsua ei tarvita. Alla oleva taulukko kuvaa kaikki tässä konfiguraatiorakenteessa käytettävissä olevat konfiguraatiokentät.
Taulukko – sl_usbd_cdc_acm _callbacks_t Konfiguraatiorakenne

Kentät

Kuvaus

.käyttöönotto

Kutsutaan, kun USB-luokkainstanssi on käytössä

onnistuneesti.

.poista käytöstä

Kutsutaan, kun USB-luokan instanssi on poistettu käytöstä.

.line_control_changed Kutsutaan, kun linjan ohjauksen muutos vastaanotetaan.

line_coding_changed Kutsutaan, kun vastaanotetaan rivikoodauksen muutos.

Toiminnon allekirjoitus
void app_usbd_cdc_acm_enable(uint8_t alaluokka_nbr);
void app_usbd_cdc_acm_disable(uint8_t alaluokka_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_koodaus

Katso osiosta Tapahtumailmoitusten takaisinkutsujen rekisteröinti lisätietoja takaisinkutsutoiminnoista, esim.ample.
USB-laitteen CDC ACM-luokan ohjelmointiopas

Tässä osiossa selitetään CDC Abstract Control Model -luokan käyttö. USB-laitteen CDC ACM -luokan alustaminen USB-laitteen CDC ACM -luokkainstanssin lisääminen laitteeseen Kommunikointi CDC ACM -luokan avulla
USB-laitteen CDC ACM -luokan alustaminen

Lisätäksesi CDC ACM -luokkatoiminnallisuuden laitteeseesi, sinun on ensin alustattava CDC-perusluokka ja ACM-alaluokka suorittamalla funktiot sl_usbd_cdc_init() ja sl_usbd_cdc_acm_init(). Alla oleva esimerkki näyttää, kuinka kutsua sl_usbd_cdc_init()- ja sl_usbd_cdc_acm_init()-funktioita käyttämällä oletusargumentteja.

Example – CDC ACM -luokan alustus

sl_status_t-tila;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
USB-laitteen CDC ACM -luokkainstanssin lisääminen laitteellesi
Lisätäksesi CDC ACM -luokan toiminnallisuuden laitteeseesi, sinun on luotava instanssi ja lisättävä se sitten laitteesi kokoonpanoon/kokoonpanoihin.
CDC ACM -luokkainstanssin luominen

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

24/174

Yliview
CDC ACM -luokkainstanssin lisääminen laitteen kokoonpanoon/kokoonpanoihin Tapahtumailmoitusten takaisinkutsujen rekisteröinti
CDC ACM -luokkainstanssin luominen
aa M aaa Luo CDC AC -luokkainstanssi kutsumalla funktiota sl_usbd_cdc_acm_create_instance(). T aaa M aaa Alla oleva esimerkki näyttää, kuinka CDC AC -luokkainstanssi luodaan sl_usbd_cdc_acm_create_instance()-funktiolla.
Example – CDC ACM -funktion luominen sl_usbd_cdc_acm_create_instance()-funktion avulla

uint8_t alaluokan_nbr; sl_status_t tila;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
jos (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
CDC ACM -luokkainstanssin lisääminen laitteesi kokoonpanoon/kokoonpanoihin
Kun olet luonut CDC ACM -luokkainstanssin, voit lisätä sen konfiguraatioon kutsumalla funktiota
sl_usbd_cdc_acm_add_to_configuration() . (Tämä näyttää olevan merkkijono, jossa on satunnaisia ​​merkkejä, eikä sitä voida kääntää mielekkäästi.)
Alla oleva esimerkki näyttää, miten sl_usbd_cdc_acm_add_to_configuration()-funktiota kutsutaan.
Example – Kutsu USBD ACM:ään sl_usbd_cdc_acm_add_to_configuration()

sl_status_t-tila;

tila = sl_usbd_cdc_acm_add_to_configuration(alaluokan_numero,

(1)

config_nbr_fs);

(2)

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

aaa (1) Luokan numero, joka lisätään sl_usbd_cdc_acm_create_instance():n palauttamaan konfiguraatioon. (2) Konfiguraationumero (tässä lisätään se täyden nopeuden konfiguraatioon).
Tapahtumailmoitusten takaisinsoittojen rekisteröinti
CDC ACM Serial -luokka voi ilmoittaa sovelluksellesi linjanohjauksen tai koodauksen muutoksista ilmoituskutsufunktioiden avulla. Kutsufunktioiden rakenne voidaan antaa argumenttina ACM-instanssin luomisen aikana. Huomaa, että nämä kutsut ovat valinnaisia. Esim.ample – CDC ACM:n takaisinsoittojen rekisteröinti havainnollistaa takaisinsoittojen rekisteröintifunktioiden käyttöä. Esim.ample – CDC ACM-takaisinkutsujen toteutus näyttää esimerkinamptakaisinkutsufunktioiden toteutuksen esimerkki.
Example – CDC ACM-takaisinsoittojen rekisteröinti

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

25/174

Yliview

uint8_t alaluokan_nbr; sl_status_t tila;
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);
jos (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }
Example – CDC ACM-takaisinkutsujen toteutus

bool app_usbd_cdc_acm_line_coding_changed (uint8_t

alaluokan_nr,

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t baudrate_new;

uint8_t pariteetti_uusi;

uint8_t stop_bits_new;

uint8_t data_bits_new;

/* TEHTÄVÄT Käytä uutta linjakoodausta.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Pariteetti; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;

paluu (tosi);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t alaluokan_nbr, uint8_t tapahtuma, uint8_t tapahtuma_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;}

/* TODO Käytä uutta riviohjausta. */ 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 = ((tapahtuman_muutos & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}

(1) On tärkeää palauttaa tälle funktiolle arvo false, jos rivikoodauksen soveltaminen epäonnistui. Muussa tapauksessa palauta arvo true.
Kommunikointi CDC ACM -luokan avulla
Sarjanumerotila
Linjakoodaus Linjaohjaus

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

26/174

Yliview

Rivin tilan aliluokan instanssin tiedonsiirto
Sarjanumerotila
Linjakoodaus
USB-isäntä ohjaa CDC ACM -laitteen linjakoodausta (baudinopeus, pariteetti jne.). Sovellus vastaa tarvittaessa linjakoodauksen asettamisesta. Nykyisen linjakoodauksen hakemiseen ja asettamiseen on kaksi toimintoa, kuten alla olevassa taulukossa on kuvattu.
Taulukko – CDC ACM -linjakoodaustoiminnot

Toiminto
sl_usbd_cdc_acm_g e t_line _coding ()
sl_usbd_cdc_acm_s e t_line _coding ()

Kuvaus
Sovelluksesi voi hakea nykyiset linjakoodausasetukset joko isännältä SetLineCoding-pyynnöillä tai funktiolla sl_usbd_cdc_acm_set_line_coding() .
Sovelluksesi voi asettaa rivikoodauksen. Isäntä voi hakea asetukset GetLineCoding-pyynnöllä.

Line Control
USB-isäntä ohjaa CDC ACM -laitteen linjaohjausta (RTS- ja DTR-nastat, katkaisusignaali jne.). Sovelluksesi vastaa linjaohjauksen käytöstä tarvittaessa. Käytössä on funktio, jolla voi hakea ja asettaa nykyiset linjaohjaukset alla olevan taulukon mukaisesti.
Taulukko – CDC ACM -linjan ohjaustoiminnot

Toiminto
sl_usb d _cd c_acm_get e t_line _control_state ()

Sovelluksesi voi saada isännän asettaman ohjauslinjan nykyisen tilan SetControlLineState-pyynnöllä.

Linjan tila
USB-isäntä hakee linjan tilan säännöllisin väliajoin. Sovelluksesi on päivitettävä linjan tila aina, kun se muuttuu. Tarvittaessa sovelluksesi vastaa linjan tilan asettamisesta. Nykyisten linja-asetusten hakemiseen ja asettamiseen on kaksi funktiota, kuten alla olevassa taulukossa on kuvattu.
Taulukko – CDC ACM -linjan tilafunktiot

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

Sovelluksesi voi asettaa minkä tahansa linjan tilan tapahtuman/tapahtumia. Linjan tilaa asetettaessa isännälle lähetetään keskeytystulosignaali (IN), joka ilmoittaa sille sarjaliikenteen tilan muutoksesta.
Sovellus voi tyhjentää kaksi linjatilan tapahtumaa: lähetyskantoaallon ja vastaanotinkantoaallon tunnistuksen. ACM-sarjaemulointialiluokka tyhjentää kaikki muut tapahtumat itsestään.

Alaluokan instanssikommunikaatio

Silicon Labsin ACM-alaluokka tarjoaa seuraavat funktiot isännän kanssa kommunikointiin. Lisätietoja functions9-parametreista on CDC:n ACM-alaluokan funktioiden viitejulkaisussa.

Toiminnon nimi
sl_usb d _cd c_acm_ luku () sl_usb d _cd c_acm_kirjoitus ()

Toiminta
Vastaanottaa dataa isännältä bulk OUT -päätepisteen kautta. Tämä funktio estää. Lähettää dataa isännältä bulk IN -päätepisteen kautta. Tämä funktio estää.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

27/174

Yliview

Taulukko – CDC ACM -tiedonsiirto-API:n yhteenveto aaaaa sl_usbd_cdc_acm_read() ja sl_usbd_cdc_acm_write() tarjoavat synkronisen tiedonsiirron, mikä tarkoittaa, että siirto estyy. Toisin sanoen funktiota kutsuttaessa sovellus estää sen, kunnes siirto on valmis virheellä tai ilman. Aikakatkaisun määrittämisen avulla voidaan välttää ikuinen odottaminen. Esim.ampAlla oleva kuva näyttää luku- ja kirjoitusesimerkinamptiedosto, joka vastaanottaa tietoja isännältä bulk OUT -päätepisteen kautta ja lähettää tietoja isäntäkoneelle bulk IN -päätepisteen kautta.
Listaus – Sarjallinen luku- ja kirjoitusliitäntäample

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

tila = sl_usbd_cdc_acm_read(alaluokan_numero,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

tila = sl_usbd_cdc_acm_write(alaluokan_numero,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

T aaaaa M (1) sl_usbd_cdc_acm_create_instance()-funktiolla luotu luokan instanssinumero antaa sisäisen viittauksen AC-alikategoriaan reitittääkseen siirron oikeaan bulk OUT- tai IN-päätepisteeseen. (2) Sovelluksesi on varmistettava, että funktiolle annettu puskuri on riittävän suuri kaiken datan tallentamiseksi. Muuten synkronointiongelmia saattaa esiintyä. (3) Äärettömän eston välttämiseksi määritä aikakatkaisu millisekunteina. Arvo 809 saa sovellustehtävän odottamaan ikuisesti. (4) Sovellus tarjoaa alustetun lähetyspuskurin.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

28/174

Yliview
Yliview

USB-laitteen HID-luokka

USB-laitteen HID-luokka yliview USB-laitteen HID-luokan resurssitarpeet ytimeltä USB-laitteen HID-luokan konfigurointi USB-laitteen HID-luokan ohjelmointiopas HID:n säännölliset tuloraportit Tehtävä
Tässä osiossa kuvataan Silicon Labsin USB-laitteen tukema Human Interface Device (HID) -luokka.
HID-luokka kattaa laitteet, joita ihmiset käyttävät tietokoneiden toimintojen ohjaamiseen, kuten näppäimistöt, hiiret, osoitinlaitteet ja pelilaitteet.
HID-luokkaa voidaan käyttää myös komposiittilaitteessa, joka sisältää ohjaimia, kuten nuppeja, kytkimiä, nappeja ja liukusäätimiä. EsimerkiksiampKuulokkeiden HID-toiminto ohjaa ääni-, mykistys- ja äänenvoimakkuussäätimiä. HID-luokka voi vaihtaa tietoja mihin tahansa tarkoitukseen käyttämällä vain ohjaus- ja keskeytyssiirtoja.
HID-luokka on yksi vanhimmista ja laajimmin käytetyistä USB-luokista. Kaikki tärkeimmät isäntäkäyttöjärjestelmät tarjoavat natiivin ajurin HID-laitteiden hallintaan, minkä vuoksi useat valmistajakohtaiset laitteet toimivat HID-luokan kanssa. Tähän luokkaan kuuluu myös erityyppisiä lähtölaitteita, kuten LEDejä, äänisignaaleja, tuntopalautetta jne.
HID-toteutus on seuraavien eritelmien mukainen:
Human Interface Devices (HID) -laiteluokan määritelmä, 27.6.2001, versio 1.11. Universal Serial Bus HID -käyttötaulukot, 28.10.2004, versio 1.12.
USB-laitteen HID-luokka yliview
Yliview
HID-laite koostuu seuraavista päätepisteistä:
Pari ohjauksen IN- ja OUT-päätepisteitä, joita kutsutaan oletuspäätepisteeksi. Keskeytys IN -päätepiste. Valinnainen keskeytys OUT-päätepiste.
Alla oleva taulukko kuvaa eri päätepisteiden käyttöä:
Taulukko – HID-luokan päätepisteiden käyttö

Päätepisteen suunnan käyttö

Ohjaus IN
Ohjaus
OUT
Keskeytys SISÄÄN
Keskeyttää
OUT

Laitteesta isäntään
Isännästä laitteeseen
Laitteesta isäntään
Isännästä laitteeseen

Vakiopyynnöt luetteloinnille, luokkakohtaisille pyynnöille ja tietoliikenteelle (syöte, ominaisuusraportit lähetetään isäntäkoneelle GET_REPORT-pyynnöllä). Vakiopyynnöt luetteloinnille, luokkakohtaisille pyynnöille ja tietoliikenteelle (tuloste, ominaisuusraportit vastaanotetaan isännältä SET_REPORT-pyynnöllä). Tietoliikenne (syöte ja ominaisuusraportit).
Tiedonsiirto (tulos- ja ominaisuusraportit).

Raportoi

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

29/174

Yliview

Isäntä ja HID-laite vaihtavat tietoja raporttien avulla. Raportti sisältää muotoiltua dataa, joka antaa tietoa HID-laitteen ohjaimista ja muista fyysisistä yksiköistä. Käyttäjä voi muokata ohjausta, joka ohjaa laitteen osaa. EsimerkiksiampEsimerkiksi ohjain voi olla hiiren tai näppäimistön painike, kytkin jne. Muut entiteetit ilmoittavat käyttäjälle tiettyjen laitteen ominaisuuksien tilasta. EsimerkiksiampEsimerkiksi näppäimistön LED-valot ilmoittavat käyttäjälle, kun isojen kirjainten lukko on päällä, numeronäppäimistö on aktiivinen jne.
Isäntä ymmärtää raporttidatan muodon ja käytön analysoimalla raporttideskriptorin sisällön. Sisällön analysoinnin suorittaa jäsennin. Raporttideskriptori kuvaa laitteen kunkin ohjausobjektin toimittamia tietoja. Se koostuu laitetta koskevista tiedoista, jotka koostuvat yhden tavun etuliitteestä ja muuttuvan pituisesta tunnuksesta.
tiedot. Lisätietoja kohteen muodosta on kohdassa
1.11=, kohdat 5.6 ja 6.2.2.
Esineitä on kolme päätyyppiä:
Pääkohta määrittelee tai ryhmittelee tietyntyyppisiä tietokenttiä.
Globaali kohde kuvaa ohjausobjektin dataominaisuuksia.
Paikallinen kohde kuvaa ohjausobjektin dataominaisuuksia.
Jokainen kohdetyyppi määritellään eri funktioilla. Kohdefunktiota voidaan kutsua myös tagKohdefunktio voidaan nähdä alikohdaksi, joka kuuluu johonkin kolmesta pääasiallisesta kohdetyypistä. Alla oleva taulukko antaa lyhyen yleiskatsauksenview esineiden toiminnoista kussakin esinetyypissä. Katso täydellinen kuvaus kunkin luokan esineistä
Taulukko – Kunkin kohdetyypin kohteen funktion kuvaus

Kohde Kohteen tyyppi Toiminto

Kuvaus

Päätulo

Kuvaa tietoa yhden tai useamman fyysisen kontrollin toimittamista tiedoista.

Päälähtö Kuvaa laitteeseen lähetettyä dataa.

Pääominaisuus

Kuvaa laitteelle lähetettyjä tai laitteelta vastaanotettuja laitekokoonpanotietoja, jotka vaikuttavat laitteen tai jonkin sen komponentin yleiseen toimintaan.

Pääkokoelmaryhmään liittyvät kohteet (tulo, tuloste tai ominaisuus).

Kokoelman pään loppu.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

30/174

Yliview

Kohde Kohteen tyyppi Toiminto

Kuvaus

Globaali käyttösivu

Ilmaisee laitteen sisällä käytettävissä olevan toiminnon.

Globaali looginen Määrittää raportoitujen arvojen alarajan loogisissa yksiköissä. Minimi

Globaali looginen Määrittää raportoitujen arvojen ylärajan loogisissa yksiköissä. Maksimi

Globaali fyysinen Määrittää raportoitujen arvojen alarajan fyysisinä yksiköinä eli loogisen minimin fyysisinä yksiköinä ilmaistuna.

Globaali fyysinen Määrittää raportoitujen arvojen ylärajan fyysisinä yksiköinä eli loogisen maksimin.

Globaali yksikkö

Ilmaisee yksikön eksponentin kymmenjärjestelmässä. Eksponentti vaihtelee välillä -8 - +7.

Eksponentti

Globaali yksikkö

Ilmaisee raportoitujen arvojen yksikön. Esimerkiksi pituus-, massa- tai lämpötilayksiköt.

Globaalin raportin koko

Ilmaisee raporttikenttien koon bitteinä.

Globaali raporttitunnus Ilmaisee tiettyyn raporttiin lisätyn etuliitteen.

Globaali raporttien määrä

Ilmaisee kohteen tietokenttien määrän.

Globaali työntö

Sijoittaa kopion globaalista nimikkeen tilataulukosta CPU-pinoon.

Globaali pop

Korvaa kohteen tilataulukon pinon viimeisellä rakenteella.

Paikallinen käyttö

Edustaa indeksiä, joka osoittaa tietyn käyttötarkoituksen käyttösivulla. Se osoittaa toimittajan ehdottaman käytön tietylle ohjausobjektille tai ohjausobjektien ryhmälle. Käyttötarkoitus antaa sovelluskehittäjälle tietoa siitä, mitä ohjausobjekti todellisuudessa mittaa.

Paikallinen käyttö

Määrittää taulukkoon tai bittikarttaan liittyvän aloituskäytön.

Minimi

Paikallinen käyttö

Määrittää taulukkoon tai bittikarttaan liittyvän loppukäytön.

Maksimi

Paikallinen tunniste Määrittää kontrollissa käytetyn ruumiinosan. Indeksi osoittaa fyysisen tunnisteen kohdalle.

Indeksi

kuvaaja.

Paikallinen merkintä Määrittää taulukkoon tai bittikarttaan liittyvän aloitusmerkinnän indeksin. Minimi

Paikallinen merkintä Määrittää taulukkoon tai bittikarttaan liittyvän lopetusmerkinnän indeksin.

Paikallinen merkkijonoindeksi

Merkkijonoindeksi merkkijonodeskriptorille. Sen avulla merkkijono voidaan liittää tiettyyn kohteeseen tai ohjausobjektiin.

Paikallinen merkkijono

Määrittää ensimmäisen merkkijonoindeksin, kun taulukon ohjausobjekteille määritetään ryhmä peräkkäisiä merkkijonoja

Minimi tai bittikartta.

Paikallinen Paikallinen

Merkkijonon maksimi
Erotin

Määrittää viimeisen merkkijonoindeksin, kun peräkkäisten merkkijonojen ryhmä liitetään ohjausobjekteihin taulukossa tai bittikartassa.
Määrittää paikallisten kohteiden joukon alun tai lopun.

Ohjausobjektin datan on määriteltävä ainakin seuraavat tiedot:
Tulo, tuloste tai ominaisuus Pääkohteet Käyttö Paikallinen kohde Käyttö Sivu Globaali kohde Looginen minimi Globaali kohde Looginen maksimi Globaali kohde Raportin koko Globaali kohde

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

31/174

Yliview
Raporttien lukumäärä Yleinen kohde Alla oleva taulukko näyttää hiiren raporttikuvauksen sisällön isäntä-HID-jäsentimen näkökulmasta. Hiiressä on kolme painiketta (vasen, oikea ja rulla). Esimerkissä esitetty koodiampAlla oleva kooditoteutus vastaa tätä hiiren raporttideskriptorin esitystapaa.
Kuva – Isännän HID-jäsentimen raporttikuvauksen sisältö View

(1) Käyttösivun kohdefunktio määrittää laitteen yleisen toiminnon. Tässä esimerkissäampHID-laite kuuluu esimerkiksi
yleinen työpöydän hallinta.
(2) Kokoelmasovellus ryhmittelee pääelementtejä, joilla on yhteinen tarkoitus ja jotka saattavat olla sovelluksille tuttuja. Kaaviossa ryhmä koostuu kolmesta syötteen pääelementistä. Tässä kokoelmassa ohjausobjektien ehdotettu käyttötarkoitus on hiiri, kuten Käyttö-elementti osoittaa. (3) Sisäkkäisiä kokoelmia voidaan käyttää antamaan lisätietoja yksittäisen ohjausobjektin tai ohjausobjektiryhmän käytöstä sovelluksissa. Tässä esimerkissäampKokoelmasovellukseen sisäkkäin oleva kokoelmafyysinen objekti koostuu samoista kolmesta syöttöelementistä, jotka muodostavat kokoelmasovelluksen. Kokoelmafyysistä objektia käytetään joukolle tietoja, jotka edustavat yhdessä geometrisessa pisteessä kerättyjä datapisteitä. EsimerkissäampEsimerkiksi suositeltu käyttötarkoitus on osoitin, kuten Käyttö-kohta osoittaa. Tässä osoittimen käyttö viittaa hiiren sijaintikoordinaatteihin, ja järjestelmäohjelmisto muuntaa hiiren koordinaatit näytön kohdistimen liikkeen mukaan. (4) Myös sisäkkäiset käyttösivut ovat mahdollisia, ja ne antavat lisätietoja tietystä laitteen yleisen toiminnan osa-alueesta. Tässä tapauksessa kaksi Inputs-kohtaa on ryhmitelty ja ne vastaavat hiiren painikkeita. Yksi Input-kohta määrittelee hiiren kolme painiketta (oikea, vasen ja rullapainike) kohteen tietokenttien lukumäärän (Raporttien määrä), tietokentän koon (Raporttien koko) ja kunkin tietokentän mahdollisten arvojen (Käyttöminimi ja -maksimi, Looginen minimi ja maksimi) perusteella. Toinen Input-kohta on 13-bittinen vakio, jonka avulla Input-raporttitiedot voidaan kohdistaa tavurajalle. Tätä Input-kohtaa käytetään vain täyttötarkoitukseen. (5) Toinen sisäkkäinen käyttösivu, joka viittaa yleiseen työpöytäohjaukseen, on määritelty hiiren sijaintikoordinaateille. Tällä käyttösivulla Input-kohta kuvaa x- ja y-akseleita vastaavat tietokentät, kuten kaksi Käyttö-kohtaa määrittelevät.
kohteita.
Analysoituaan edellisen hiiren raporttideskriptorin sisällön, host9s HID -jäsennin pystyy tulkitsemaan laitteen keskeytys-IN-siirrolla tai vastauksena GET_REPORT-pyyntöön lähettämät Input-raporttitiedot. Kuvassa näkyvät hiiren raporttideskriptoria vastaavat Input-raporttitiedot – Host HID -jäsentimen raporttideskriptorin sisältö. View is

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

32/174

Yliview

alla olevassa taulukossa. Raporttidatan kokonaiskoko on 4 tavua. Saman päätepisteen kautta voidaan lähettää erityyppisiä raportteja. Erityyppisten raporttien erottamiseksi dataraporttiin lisätään 1-tavuinen raporttitunnuksen etuliite. Jos raporttitunnusta käytettiin aiemminampHiiriraportin tapauksessa raporttitietojen kokonaiskoko olisi 5 tavua.
Taulukko – Isännälle lähetetty syöteraportti, joka vastaa kolmipainikkeisen hiiren tilaa

Bittisiirtymä
0 1 2 3 16 24

Bittimäärä 1 1 1 13 8 8

Kuvaus Painike 1 (vasen painike). Painike 2 (oikea painike). Painike 3 (pyörän painike). Ei käytössä. Sijainti akselilla X. Sijainti akselilla Y.

Fyysinen deskriptori osoittaa kehon osan tai osia, joiden tarkoituksena on aktivoida ohjaus tai ohjaimia. Sovellus voi käyttää tätä tietoa määrittääkseen toiminnon laitteen ohjaukselle. Fyysinen deskriptori on valinnainen luokkakohtainen deskriptori, ja useimmilla laitteilla on vain vähän hyötyä sen käytöstä. Katso
USB-laitteen HID-luokan resurssitarpeet Corelta

Joka kerta, kun lisäät HID-luokan instanssin USB-kokoonpanoon kutsumalla funktiota sl_usbd_hid_add_to_configuration() , seuraavat resurssit allokoidaan ytimestä.

Resurssi
Rajapinnat Vaihtoehtoiset rajapinnat Päätepisteet Rajapintaryhmät

Määrä
1 1 1 (2, jos keskeytyslähtöpäätepiste on käytössä) 0

Huomaa, että nämä luvut ovat kokoonpanokohtaisia. Kun määrität SL_USBD_INTERFACE_QUANTITY-, SL_USBD_ALT_INTERFACE_QUANTITY-, SL_USBD_INTERFACE_GROUP_QUANTITY- ja SL_USBD_DESCRIPTOR_QUANTITY-määritysarvoja, muista ottaa huomioon, kuinka monta kokoonpanoa luokka lisätään. SL_USBD_OPEN_ENDPOINTS_QUANTITY-määritysarvon osalta, koska päätepisteet avataan vain, kun isäntä asettaa kokoonpanon, sinun tarvitsee ottaa huomioon vain tarvittavien päätepisteiden määrä luokkainstanssia varten.
USB-laitteen HID-luokan määritys

HID-luokan konfigurointiin käytetään kahta konfigurointiparametrien ryhmää:
USB-laitteen HID-luokan sovelluskohtaiset kokoonpanot USB-laitteen HID-luokan instanssikokoonpanot
USB-laitteen HID-luokan sovelluskohtaiset kokoonpanot

Käyttääksesi Silicon Labsin USB-laitteen HID-luokkamoduulia, säädä ensin HID:n käännösaikaisia ​​konfiguraatiomäärityksiä sovellustarpeidesi mukaan. Ne on ryhmitelty uudelleen sl_usbd_core_config.h-otsikkotiedoston sisällä. file HID-osion alla. Ne voidaan jakaa kahteen osioon: määräkonfiguraatioihin ja HID-tehtäväkonfiguraatioihin. Määräkonfiguraatioiden tarkoituksena on ilmoittaa USB-laitemoduulille, kuinka monta USB HID -objektia varataan.
Alla oleva taulukko kuvaa jokaisen kokoonpanomääritelmän.
Taulukko – USB-laitteen HID-konfiguraatio määrittää

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

33/174

Yliview

Kokoonpanon nimi
SL_USBD_HID_CL ASS_I NOSTANKOMÄÄRÄ
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_RAPORTTI_ ID_MÄÄRÄ
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY

Kuvaus
Funktiolle kutsumalla varattavien luokkainstanssien määrä
sl_usbd_hid_create_instance().
Konfiguraatioiden lukumäärä. HID-luokan instanssit voidaan lisätä yhteen tai useampaan aaaa-konfiguraatioon funktion sl_usbd_hid_add_to_configuration() kautta. Määrittää allokoitavien raportti-ID:iden kokonaismäärän.
Määrittää allokoitavien Push/Pop-kohteiden kokonaismäärän.
Ajastintehtävä käsittelee kaikki ajastinpohjaiset HID-toiminnot. Tämän kokoonpanon avulla voit asettaa pinon koon (tavumääränä). HID-tehtävän prioriteetti. Tämä on CMSIS-RTOS2-prioriteetti.

Oletusarvo
2 1 2 0 2048
osPrioriteettiKorkea

USB-laitteen HID-luokan instanssikonfiguraatiot Luokan instanssin luontialaluokka
protokollan maakoodi
interval_in ja interval_out p_hid_callback HID-luokan raportin kuvaus Esim.ample Tässä osiossa määritellään HID-luokan instanssien määritykset.
Luokkainstanssin luominen
HID-luokkainstanssi luodaan kutsumalla funktiota aaa sl_usbd_hid_create_instance(), joka käyttää useita alla kuvattuja määritysargumentteja.
alaluokka
HID-alaluokan koodi. Mahdollisia arvoja ovat:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Käynnistysaliluokkaa käyttävän HID-laitteen on käytettävä standardoituja raporttimuotoja. Lisätietoja alaluokkakoodeista on HID-spesifikaation version 1.11 osiossa 4.2.
protokollaa
HID-laitteen käyttämä protokolla. Mahdollisia arvoja ovat:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Jos HID-toimintosi on hiiri, protokollaksi tulisi asettaa SL_USBD_HID_PROTOCOL_MOUSE. Jos se on näppäimistö, protokollaksi tulisi asettaa SL_USBD_HID_PROTOCOL_KBD. Muussa tapauksessa protokollaksi tulisi asettaa SL_USBD_HID_PROTOCOL_NONE. Lisätietoja alaluokkakoodeista on HID-spesifikaation version 1.11 osiossa 4.3.
maakoodi
Maakoodin tunnus. Mahdollisia arvoja ovat:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

34/174

Yliview
SL_USBD_HID_MAA_KOODI_ARABIA SL_USBD_HID_MAA_KOODI_BELGIA SL_USBD_HID_MAA_KOODI_KANADAN_KAKSIKIELINEN SL_USBD_HID_MAA_KOODI_KANADAN_RANSKA SL_USBD_HID_MAA_KOODI_TŠEKIN_TASAVALTA SL_USBD_HID_MAA_KOODI_TANSKA SL_USBD_HID_MAA_KOODI_SUOMI SL_USBD_HID_MAA_KOODI_RANSKA SL_USBD_HID_MAA_KOODI_SAKSA SL_USBD_HID_MAA_KREIKKA SL_USBD_HID_MAA_KOODI_HEBREW SL_USBD_HID_MAA_KOODI_UNKARI SL_USBD_HID_MAA_KOODI_KANSINVÄLINEN SL_USBD_HID_MAA_KOODI_ITALIAN SL_USBD_HID_MAA_KOODI_JAPANI_KATAKANA SL_USBD_HID_MAA_KOODI_KOREA SL_USBD_HID_MAA_KOODI_LATIINA_AMERIKKA SL_USBD_HID_MAA_KOODI_ALANTI JA HOLLANTI SL_USBD_HID_MAA_KOODI_NORJA SL_USBD_HID_MAA_KOODI_PERSIAN_FARSI SL_USBD_HID_MAA_KOODI_PUOLA JA SL_USBD_HID_MAA_KOODI_PORTUGALI SL_USBD_HID_MAA_KOODI_VENÄJÄ SL_USBD_HID_MAA_KOODI_SLOVAKIA SL_USBD_HID_MAA_KOODI_ESPANJA SL_USBD_HID_MAA_KOODI_RUOTS SL_USBD_HID_MAA_KOODI_SVEITSI_RANSKA SL_USBD_HID_MAAKOODI_SVEITSIN_SAKSAN SL_USBD_HID_MAAKOODI_SVEITSIN JA SL_USBD_HID_MAAKOODI_TAIWANIN SL_USBD_HID_MAAKOODI_TURKISH_Q SL_USBD_HID_MAAKOODI_UK SL_USBD_HID_MAAKOODI_US SL_USBD_HID_MAAKOODI_YUG OSL AVIA SL_USBD_HID_MAAKOODI_TURKISH_F
Maakoodi ilmaisee, mihin maahan laitteisto on lokalisoitu. Useimmat laitteistot eivät ole lokalisoituja, joten tämä maakoodi olisi SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Näppäimistöt voivat kuitenkin käyttää kenttää näppäinhakujen kielen ilmaisemiseen.
Lisätietoja maakoodeista on HID-spesifikaation version 1.11 kohdassa 6.2.1.
interval_in ja interval_out
interval_in ja interval_out edustavat IN-keskeytyspäätepisteen ja OUT-keskeytyspäätepisteen kyselyväliä.
Tämä edustaa päätepisteen kyselyväliä millisekunteina. Tämän arvon asettaminen riippuu siitä, kuinka usein laitteesi on altis luomaan uuden raportin isännälle. Jos esimerkiksi raportti luodaan 16 millisekunnin välein, aikavälin tulisi olla 16 tai vähemmän.
Arvon on oltava luvun 2 potenssi (1, 2, 4, 8, 16 jne.).
interval_out v lue ohitetaan, jos ctrl_rd_en on asetettu arvoon true.
p_hid_callback
aaaa p_hid_callback on osoitin sl_usbd_hid_callbacks_t-tyyppiseen rakenteeseen. Sen tarkoitus on antaa HID-luokkaan ss joukko takaisinkutsufunktioita, joita kutsutaan HID-tapahtuman sattuessa.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

35/174

Yliview

Kaikki takaisinkutsut eivät ole pakollisia, ja takaisinkutsut-rakennemuuttujassa voidaan välittää null-osoitin (NULL), kun takaisinkutsua ei tarvita. Alla olevassa taulukossa kuvataan kaikki tässä konfiguraatiorakenteessa käytettävissä olevat konfiguraatiokentät.
Taulukko – sl_usbd_hid_callbacks_t Konfiguraatiorakenne

Kentät

Kuvaus

Toiminnon allekirjoitus

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

Kutsutaan, kun USB-luokkainstanssi on otettu käyttöön onnistuneesti. Kutsutaan, kun USB-luokkainstanssi on poistettu käytöstä.
Kutsutaan HID-instanssin luomisen aikana raporttideskriptorin välittämiseksi. Jokaiselle HID-funktiolle on annettava raporttideskriptori. Raportideskriptori osoittaa isännälle, miten laitteen lähettämä säännöllinen raportti tulisi jäsentää. Oman raporttideskriptorin kirjoittaminen voi olla haastavaa, ja siksi on olemassa joitakin resursseja avuksi. Tämä on ainoa pakollinen takaisinkutsufunktio. Kutsutaan HID-instanssin luomisen aikana fyysisen deskriptorin välittämiseksi. Fyysinen deskriptori on deskriptori, joka antaa tietoa ihmiskehon tietystä osasta tai osista, jotka aktivoivat ohjausta tai ohjaimia. Lisätietoja fyysisistä deskriptoreista on HID-spesifikaation version 1.11 osiossa 6.2.3. Fyysinen deskriptori on valinnainen ja useimmiten ohitetaan. Tässä välitettävä puskuri voidaan asettaa arvoon NULL ja pituudeksi 0. Kutsutaan, kun isäntä asettaa raportin raporttideskriptorissa kuvatulla tavalla (kun se lähettää raportin).
Kutsutaan, kun isäntä pyytää ominaisuusraporttia raporttikuvauksessasi kuvatulla tavalla.
Kutsutaan, kun isäntä asettaa ominaisuusraportin raporttideskriptorissa kuvatulla tavalla.

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); } } Muokkaa asetusta, jos haluat määrittää asetukset automaattisesti.
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);

.get_protocol

Hakee nykyisen aktiivisen protokollan.

void app_usbd_hid_get_protocol(uint8_t luokka_nbr, uint8_t *p_protocol);

.set_protocol

Asettaa nykyisen aktiivisen protokollan.

void app_usbd_hid_set_protocol(uint8_t luokka_nbr, uint8_t protokolla);

HID-luokan raportin kuvaus Example

Silicon Labsin HID-luokatampsovellus tarjoaa esimerkinampyksinkertaisen hiiren raporttideskriptorin esimerkki.ampAlla oleva kuva näyttää hiiren raporttikuvauksen.
Example – Hiiren raportin kuvaus

staattinen uint8_t app_usbd_hid_report_desc[] = {

(1) (2)

SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE,

(3)

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

36/174

Yliview

SL_USBD_HID_PÄÄKOKOELMA +1, SL_USBD_HID_KOKOELMA_SOVELLUS,(4)

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_PÄÄKOKOELMA +1, SL_USBD_HID_KOKOELMA_FYSIKAALINEN,(6)

SL_USBD_HID_GLOBAL_USAGE_SIVU +1, SL_USBD_HID_USAGE_SIVUN_PAINIKE,(7)

SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,

SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_PÄÄMUUTTUJA |

SL_USBD_HID_MAIN_ABSOLUTE,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_PÄÄMUUTTUJA |

SL_USBD_HID_MAIN_RELATIVE,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Hiiriraportin kuvaajaa edustava taulukko alustetaan siten, että jokainen rivi vastaa lyhyttä alkiota. Jälkimmäinen muodostetaan 1-tavuisesta etuliitteestä ja 1-tavuisesta datasta. Katso viewkuvassa olevan isäntä-HID-jäsentimen muokkaama – Raportin kuvaajan sisältö isäntä-HID-jäsentimestä View.
(2) Käytetään yleistä työpöydän käyttösivua.
(3) Yleisen työpöydän käyttö -sivulla käyttö tag viittaa siihen, että ohjauselementtiryhmä on hiiren ohjaamiseen. Hiirikokoelma koostuu tyypillisesti kahdesta akselista (X ja Y) ja yhdestä, kahdesta tai kolmesta painikkeesta.
(4) Hiirien kerääminen aloitetaan.
(5) Hiirikokoelmassa on käyttötarkoitus tag viittaa tarkemmin sanottuna siihen, että hiiren ohjaimet kuuluvat osoitinkokoelmaan. Osoitinkokoelma on kokoelma akseleita, jotka luovat arvon käyttäjän aikeiden ohjaamiseksi, ilmaisemiseksi tai osoittamiseksi sovellukseen.
(6) Osoitinten kerääminen aloitetaan.
(7) Painikkeiden käyttö -sivu määrittelee syötekentän, joka koostuu kolmesta 1-bittisestä kentästä. Jokainen 1-bittinen kenttä edustaa hiiren painikkeita 1, 2 ja 3 ja voi palauttaa arvon 0 tai 1.
(8) Painikkeiden käyttö -sivun syöttökenttään on lisätty 13 muuta bittiä.
(9) Toinen yleinen työpöydän käyttöopas on tarkoitettu hiiren sijainnin kuvaamiseen X- ja Y-akseleiden suhteen. Syöte-alkio koostuu kahdesta 8-bittisestä kentästä, joiden arvo voi olla välillä -127 ja 127.
(10) Osoitinkokoelma on suljettu.
(11) Hiirikokoelma on suljettu.
USB.org HID-sivu

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

37/174

Yliview
USB Implementers Forum (USB-IF) tarjoaa työkalun nimeltä "HID Descriptor Tool" sekä muita tietoja raporttideskriptorin muodosta. Lisätietoja on osoitteessa http://www.usb.org/developers/hidpage/.
USB-laitteen HID-luokan ohjelmointiopas
Tässä osiossa selitetään HID-luokan käyttö. USB-laitteen HID-luokan alustaminen USB-laitteen HID-luokkainstanssin lisääminen laitteeseen Tiedonsiirto USB-laitteen HID-luokan avulla
USB-laitteen HID-luokan alustaminen
Lisätäksesi HID-luokkatoiminnot laitteeseesi, sinun on ensin alustettava luokka kutsumalla funktiota sl_usbd_hid_init(). Esim.ampAlla oleva tiedosto näyttää, miten sl_usbd_hid_init()-funktiota kutsutaan oletusargumenttien avulla. Lisätietoja sl_usbd_hid_init()-funktiolle välitettävistä määritysargumenteista on kohdassa USB-laitteen HID-luokan sovelluskohtaiset konfiguraatiot.
Example – sl_usbd_hid_init()-funktion kutsuminen
sl_status_t-tila;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
USB-laitteen HID-luokkainstanssin lisääminen laitteellesi
Lisätäksesi HID-luokkatoiminnot laitteeseesi, sinun on luotava instanssi ja lisättävä se sitten laitteesi kokoonpanoon/kokoonpanoihin.
HID-luokkainstanssin luominen
Luo HID-luokan instanssi kutsumalla funktiota sl_usbd_hid_create_instance(). Esim.ampAlla oleva kuva näyttää, kuinka luodaan yksinkertainen hiirifunktio sl_usbd_hid_create_instance()-funktiolla käyttäen oletusargumentteja. Lisätietoja sl_usbd_hid_create_instance()-funktiolle välitettävistä määritysargumenteista on kohdassa USB-laitteen HID-luokan instanssien konfiguroinnit.
Example – Hiirifunktion lisääminen sl_usbd_hid_create_instance()-funktion avulla

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

38/174

Yliview
/* Globaalit vakiot. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0,03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0,00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0,01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0,03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0,01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Paikalliset muuttujat.*/ 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 luokka_nbr, vakio uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)luokka_nro;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = koko(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);
Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

39/174

Yliview
/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */
HID-luokkainstanssin lisääminen laitteen kokoonpanoon/kokoonpanoihin Kun olet luonut HID-luokkainstanssin, voit lisätä sen kokoonpanoon kutsumalla funktiota
sl_usbd_hid_add_to_configuration() . (Tämä näyttää olevan merkkijono, jossa on satunnaisia ​​merkkejä, eikä sitä voida kääntää mielekkäästi.)
ExampAlla oleva tiedosto näyttää, miten sl_usbd_hid_add_to_configuration()-funktiota kutsutaan.
Example – sl_usbd_hid_add_to_configuration()-funktion kutsuminen

sl_status_t-tila;

sl_usbd_hid_add_to_configuration(luokkanumero,

(1)

config_nbr_fs); (2)

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

(1) Luokan numero, joka lisätään sl_usbd_hid_create_instance()-funktion palauttamaan konfiguraatioon. (2) Konfiguraatioon liittyvä numero (tässä lisätään se täyden nopeuden konfiguraatioon).
Tiedonsiirto USB-laitteen HID-luokan avulla
Luokan instanssin tiedonsiirto Synkroninen tiedonsiirto Luokan instanssin tiedonsiirto HID-luokka tarjoaa seuraavat toiminnot isännän kanssa kommunikointiin.
Taulukko – HID-tiedonsiirto-API:n yhteenveto

Toiminnon nimi
sl_usb d _hid _read _sy nc() sl_usb d _hid _write _sy nc()

Toiminto Vastaanottaa dataa isännältä keskeytyslähtöpäätepisteen kautta. Tämä toiminto estää. Lähettää dataa isännältä keskeytystulopäätepisteen kautta. Tämä toiminto estää.

Synkroninen tiedonsiirto Synkroninen tiedonsiirto tarkoittaa, että siirto estyy. Funktiokutsussa sovellus estää siirron, kunnes se on valmis virheellä tai virheettömästi. Aikakatkaisun määrittämisellä voidaan välttää ikuinen odottaminen.ampAlla oleva kuva näyttää luku- ja kirjoitusoperaation, jossa dataa vastaanotetaan isännältä keskeytyslähtöpäätepisteen kautta ja dataa lähetetään isännälle keskeytystulopäätepisteen kautta.
Example – Synkroninen HID-luku ja -kirjoitus

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

tila = sl_usbd_hid_read_sync(luokkanumero,

(1)

(tyhjä *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

40/174

Yliview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
(1) Funktiolla sl_usbd_hid_create_instance() luotu luokan esiintymänumero tarjoaa sisäisen viitteen HID-luokalle siirron reitittämiseksi oikeaan keskeytyksen OUT- tai IN-päätepisteeseen.
(2) Sovelluksen on varmistettava, että funktiolle tarjottu puskuri on riittävän suuri kaiken datan säilyttämiseen. Muuten synkronointiongelmia voi esiintyä. Sisäisesti lukuoperaatio tehdään joko ohjauspäätepisteen tai keskeytyspäätepisteen kanssa riippuen sl_usbd_hid_create_instance()-funktiota kutsuttaessa asetetusta ohjauslukulipusta.
(3) Äärettömän estotilanteen välttämiseksi voidaan määrittää millisekunteina ilmaistava aikakatkaisu. Arvo 809 saa sovellustehtävän odottamaan ikuisesti.
(4) Sovellus tarjoaa alustetun lähetyspuskurin.
HID-säännöllisten tuloraporttien tehtävä
Kaistanleveyden säästämiseksi isäntäkone voi hiljentää keskeytyspäätepisteestä tulevat raportit rajoittamalla raportointitiheyttä. Tätä varten isännän on lähetettävä SET_IDLE-pyyntö. Silicon Labsin toteuttama HID-luokka sisältää sisäisen tehtävän, joka kunnioittaa raportointitiheysrajoitusta, jota voit soveltaa yhteen tai useampaan syöttöraporttiin. Kuvassa Periodic Input Reports Task (Jaksolliset syöttöraportit -tehtävä) näytetään säännöllisten syöttöraporttitehtävien toiminta.
Kuva – Säännöllisten syöttöraporttien tehtävä

(1) Laite vastaanottaa SET_IDLE-pyynnön. Tämä pyyntö määrittää tietyn raporttitunnuksen käyttämättömyysajan. Lisätietoja SET_IDLE-pyynnöstä on kohdassa
(2) Raporttitunnusrakenne (joka allokoidaan HID-luokan alustusvaiheen aikana) päivitetään lepotilan kestolla. Lepotilan keston laskuri alustetaan lepotilan keston arvolla. Raporttitunnusrakenne lisätään linkitetyn listan loppuun, joka sisältää syötettyjen raporttien tunnusrakenteita. Lepotilan keston arvo ilmaistaan ​​4 ms:n yksikössä, joka antaa alueen 4–1020 ms.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

41/174

Yliview
Jos lepotilan kesto on lyhyempi kuin keskeytyksen tulopäätepisteen kyselyväli, raportit luodaan kyselyvälin mukaisesti.
(3) Säännöllinen syöteraporttitehtävä selaa syöteraporttien tunnisteluetteloa 4 ms:n välein. Jokaista syöteraportin tunnistetta kohden tehtävä suorittaa yhden kahdesta mahdollisesta toiminnosta. Tehtäväjakson kesto vastaa käyttämättömyysajan 4 ms:n yksikköä. Jos isäntä ei ole lähettänyt SET_IDLE-pyyntöjä, syöteraporttien tunnisteluettelo on tyhjä eikä tehtävällä ole mitään käsiteltävää. Tehtävä käsittelee vain raporttitunnisteet, jotka ovat muita kuin 0 ja joiden käyttämättömyysaika on suurempi kuin 0.
(4) Annetun syöteraportin tunnuksen osalta tehtävä tarkistaa, onko käyttämättömyysaika kulunut. Jos käyttämättömyysaika ei ole kulunut, laskuria vähennetään eikä isännälle lähetetä syöteraporttia.
(5) Jos lepoaika on kulunut umpeen (eli lepoaikalaskuri on saavuttanut nollan), isäntäkoneelle lähetetään syöteraportti kutsumalla sl_usbd_hid_write_sync()-funktiota keskeytystulopäätepisteen kautta.
(6) Tehtävän lähettämä syöttöraporttidata tulee sisäisestä datapuskurista, joka on varattu kullekin raporttikuvauksessa kuvatulle syöttöraportille. Sovellustehtävä voi kutsua sl_usbd_hid_write_sync()-funktiota lähettääkseen syöttöraportin. Syöteraporttidatan lähettämisen jälkeen sl_usbd_hid_write_sync() päivittää syöttöraportti-ID:hen liittyvän sisäisen puskurin juuri lähetetyillä tiedoilla. Tämän jälkeen jaksoittainen syöttöraporttitehtävä lähettää aina saman syöttöraporttidatan jokaisen käyttämättömyysajan kuluttua ja kunnes sovellustehtävä päivittää tiedot sisäisessä puskurissa. Syöttöraportti-ID-tietojen vioittumisen estämiseksi on olemassa jonkinlainen lukitusmekanismi, jos jaksoittainen syöttöraporttitehtävän tekemän lähetysajankohdan aikana tapahtuu muutoksia.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

42/174

Yliview
Yliview
USB-laitteen MSC-luokka
USB-laitteen MSC-luokan ylitysview USB-laitteen MSC-luokan resurssien tarpeet Corelta USB-laitteen MSC-luokan konfigurointi USB-laitteen MSC-luokan ohjelmointiopas USB-laitteen MSC-luokan tallennusajurit
Tässä osiossa kuvataan Silicon Labsin USB-laitteen tukema massamuistilaiteluokka (MSC). MSC on protokolla, joka mahdollistaa tiedonsiirron USB-laitteen ja isännän välillä. Siirrettävät tiedot voivat olla mitä tahansa sähköisesti tallennettavissa olevaa tietoa, kuten suoritettavia ohjelmia, lähdekoodia, asiakirjoja, kuvia, määritystietoja tai muuta teksti- tai numeerista dataa. USB-laite näkyy isännälle ulkoisena tallennusvälineenä, joka mahdollistaa tiedonsiirron. files vetämällä ja pudottamalla.
A file järjestelmä määrittelee, miten fileon järjestetty tallennusvälineeseen. USB-massamuistiluokan määritys ei vaadi mitään erityisiä file järjestelmää käytettäväksi yhteensopivissa laitteissa. Sen sijaan se tarjoaa yksinkertaisen käyttöliittymän datasektoreiden lukemiseen ja kirjoittamiseen käyttämällä Small Computer System Interface (SCSI) -läpinäkyvää komentosarjaa. Siten käyttöjärjestelmät voivat käsitellä USB-asemaa kiintolevynä ja alustaa sen millä tahansa file järjestelmä, josta he pitävät.
USB-massamuistilaiteluokka tukee kahta siirtoprotokollaa seuraavasti:
Vain massasiirtoa (BOT) ohjaava/massasiirtoa/keskeytyssiirtoa (CBI) (käytetään vain levykeasemille)
Massamuistilaiteluokka toteuttaa SCSI-läpinäkyvän komentosarjan käyttämällä vain BOT-protokollaa, mikä tarkoittaa, että datan ja tilatietojen lähettämiseen käytetään vain joukkopäätepisteitä. MSC-toteutus tukee useita loogisia yksiköitä.
MSC-toteutus on seuraavien spesifikaatioiden mukainen:
Universal Serial Bus -massamuistiluokan spesifikaatio yliview, Versio 1.3, 5. syyskuuta 2008. Universal Serial Bus Mass Storage Class Bulk-Only Transport, Versio 1.0, 31. syyskuuta 1999.
USB-laite MSC aCl ss Overview
Protokollan päätepisteet Luokkapyynnöt Pienen tietokoneen järjestelmärajapinta (SCSI)
pöytäkirja
Tässä osiossa käsittelemme massamuistiluokan Bulk-Only Transport (BOT) -protokollaa. Bulk-Only Transport -protokollalla on kolme periaatettatages:
Komentosiirto Tiedonsiirto Tilasiirto
Isäntä lähettää massamuistikomennot komentolohkokääreeksi (CBW) kutsutun rakenteen kautta. Tiedonsiirtolohkoa vaativille komennoilletagesim. isäntä yrittää lähettää tai vastaanottaa laitteelta tarkalleen CBW:n pituus- ja lippukenttien määrittämän tavumäärän. Tiedonsiirron jälkeentage. isäntä yrittää vastaanottaa laitteelta komentotilan kääreen (CSW), joka kertoo komennon tilan sekä mahdolliset datajäämät (jos niitä on).

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

43/174

Yliview
any). Komennoille, jotka eivät sisällä tiedonsiirto-osiotatagesim. isäntä yrittää vastaanottaa CSW:n heti CBW:n lähettämisen jälkeen. Protokolla on kuvattu yksityiskohtaisesti kuvassa – MSC-protokolla.
Kuva – MSC-protokolla

Endpoints
Laitepuolella MSC koostuu BOT-spesifikaation mukaisesti seuraavista päätepisteistä: Pari ohjauksen IN- ja OUT-päätepisteitä, joita kutsutaan oletuspäätepisteiksi. Pari joukkoliikenteen IN- ja OUT-päätepisteitä.
Alla oleva taulukko osoittaa päätepisteiden eri käyttötarkoitukset.
Taulukko – MSC-päätepisteen käyttö

Päätepiste
Ohjaus SISÄÄN Ohjaus ULOS Irtotavarana SISÄÄN Irtotavarana ULOS

Suunta
Laitteesta isäntään Isännästä laitteeseen Laiteesta isäntään Isännästä laitteeseen

Käyttö
Luettelointi- ja MSC-luokkakohtaiset pyynnöt Luettelointi- ja MSC-luokkakohtaiset pyynnöt Lähetä CSW ja dataa Vastaanota CBW ja dataa

Kurssipyynnöt
MSC BOT -protokollalle on määritelty kaksi ohjauspyyntöä. Nämä pyynnöt ja niiden kuvaukset on esitetty alla olevassa taulukossa.

Taulukko – Massamuistiluokkapyynnöt

Kurssipyynnöt
Vain joukkomuistin nollaus

Kuvaus
Tätä pyyntöä käytetään massamuistilaitteen ja siihen liittyvän liitännän nollaamiseen. Tämä pyyntö valmistelee laitteen vastaanottamaan seuraavan komentolohkon.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

44/174

Yliview

Kurssipyynnöt

Kuvaus

Hae maksimi Tätä pyyntöä käytetään palauttamaan laitteen tukema suurin looginen yksikkönumero (LUN). Esim.ample, a

LUN

Laite, jonka LUN-arvot ovat 0 ja LUN 1, palauttaa arvon 1. Laite, jossa on vain yksi looginen yksikkö, palauttaa arvon 0 tai pysäyttää

pyyntö. Palautettava enimmäisarvo on 15.

Pieni tietokonejärjestelmäliitäntä SCSI

Ohjelmointirajapinnan tasolla MSC-laite toteuttaa jonkin tallennusmediatiedonsiirtoprotokollan, kuten SCSI:n ja SFF-8020i:n (ATAPI). ”Ohjelmointirajapinta” määrittää, mikä protokolla on käytössä, ja auttaa isäntäkäyttöjärjestelmää lataamaan sopivan laiteajurin USB-tallennuslaitteen kanssa kommunikointiin. SCSI on yleisin USB MSC -tallennuslaitteiden kanssa käytetty protokolla. Tarjoamme toteutuksen MSC SCSI -alaluokalle, jota GSDK-käyttäjämme voivat käyttää suoraan paketista.
SCSI on joukko standardeja tietokoneiden ja oheislaitteiden välisen tiedonsiirron käsittelyyn. Näihin standardeihin kuuluvat komennot, protokollat, sähköiset rajapinnat ja optiset rajapinnat. Muita laitteistorajapintoja, kuten USB:tä, käyttävät tallennuslaitteet käyttävät SCSI-komentoja laite-/isäntätietojen hankkimiseen, laitteen toiminnan ohjaamiseen ja tietolohkojen siirtämiseen tallennusvälineessä.
SCSI-komennot kattavat laajan valikoiman laitetyyppejä ja toimintoja, ja siksi laitteet tarvitsevat osan näistä komennoista. Yleisesti ottaen seuraavat komennot ovat välttämättömiä peruskommunikaatioon:
KYSELY LUKUKAPASIITE(10) LUKU(10) PYYNTÖ TUNNISTUS TESTI YKSIKKÖ VALMIS KIRJOITUS(10)
USB-laitteen MSC-luokan resurssitarpeet Coresta

Aina kun lisäät MSC-luokan instanssin USB-kokoonpanoon funktion sl_usbd_msc_add_to_configuration() avulla, seuraavat resurssit allokoidaan ytimestä.

Resurssi
Rajapinnat Vaihtoehtoiset rajapinnat Päätepisteet Rajapintaryhmät

Määrä
1 1 2 0

Huomaa, että nämä luvut ovat kokoonpanokohtaisia. Kun määrität SL_USBD_INTERFACE_QUANTITY-, SL_USBD_ALT_INTERFACE_QUANTITY-, SL_USBD_INTERFACE_GROUP_QUANTITY- ja SL_USBD_DESCRIPTOR_QUANTITY-määritysarvoja, muista ottaa huomioon, kuinka monta kokoonpanoa luokka lisätään. SL_USBD_OPEN_ENDPOINTS_QUANTITY-määritysarvon osalta, koska päätepisteet avataan vain, kun isäntä asettaa kokoonpanon, sinun tarvitsee ottaa huomioon vain tarvittavien päätepisteiden määrä luokkainstanssia varten.
USB-laitteen MSC-luokan määritys

MSC-luokan konfigurointiin käytetään kahta konfigurointiparametrien ryhmää:
USB-laitteen MSC-luokka Sovelluskohtaiset kokoonpanot USB-laitteen MSC-luokka Loogisen yksikön kokoonpano
USB-laitteen MSC-luokan sovelluskohtaiset kokoonpanot

Luokan käännösaikaiset konfiguraatiot Luokan instanssin luonti

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

45/174

Yliview

Luokan käännösaikaiset konfiguraatiot
Silicon Labsin USB-laitteen MSC-luokka ja SCSI-alaluokka ovat konfiguroitavissa käännösaikana sl_usbd_core_config.h-tiedostossa olevien #defines-määritteiden avulla. file.
Taulukko – Yleiset määritysvakiot

Kokoonpanon nimi

Kuvaus

SL_USBD_MSC_CLASS_INST Funktiolle kutsuttaessa allokoitavien luokkainstanssien määrä

MÄÄRÄ

sl_usbd_msc_scsi_create_instance().

SL_USBD_MSC_CONFIGURA Konfiguraatioiden lukumäärä, johon luokkainstanssi voidaan lisätä kutsumalla

MÄÄRÄ

funktio sl_usbd_msc_scsi_add_to_configuration().

SL_USBD_MSC_LUN_QUANT Loogisten yksiköiden määrä luokkainstanssia kohden, jotka lisätään kutsun kautta

ITY

funktio sl_usbd_msc_scsi_lun_add().

SL_USBD_MSC_SCSI_64_BIT Ottaa käyttöön tai poistaa käytöstä 64-bittisen loogisen lohkoosoitteen (LBA) tuen.
_LBA_EN

SL_USBD_MSC_DATA_BUFF Tietopuskurin koko luokkainstanssia kohden tavuina ER_SIZE

Oletusarvo
2
1
2
0
512

Luokkainstanssin luominen
USB-laitteen MSC SCSI -luokkainstanssi luodaan kutsumalla sl_usbd_msc_scsi_create_instance()-funktiota. Tämä funktio ottaa vastaan ​​yhden määritysargumentin, joka on kuvattu alla.
p_scsi_callbackit
p_scsi_callbacks on osoitin sl_usbd_msc_scsi_callbacks_t-tyyppiseen konfiguraatiorakenteeseen. Yleisten USB-laiteluokan takaisinkutsufunktioiden connect/disconnect lisäksi se tarjoaa MSC-luokalle joukon valinnaisia ​​takaisinkutsufunktioita, joita kutsutaan, kun loogisessa yksikössä tapahtuu tapahtuma. Tälle argumentille voidaan antaa null-osoitin (NULL), jos takaisinkutsufunktioita ei tarvita.
Alla olevassa taulukossa kuvataan kaikki tässä konfiguraatiorakenteessa käytettävissä olevat konfiguraatiokentät.
Taulukko – sl_usbd_msc_scsi_callbacks_t -konfiguraatiorakenne

Kentät

Kuvaus

.käyttöönotto

Kutsutaan, kun USB-luokkainstanssi on otettu käyttöön onnistuneesti.

.disable Kutsutaan, kun USB-luokan instanssi on poistettu käytöstä.

.host_eject Funktiota kutsutaan, kun looginen yksikkö poistetaan isännästä.

Toiminnon allekirjoitus
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);

USB-laitteen MSC-luokan loogisen yksikön konfigurointi

Looginen yksikkö lisätään MSC-luokkainstanssiin kutsumalla funktiota sl_usbd_msc_lun_add(). Tämä funktio ottaa vastaan ​​yhden määritysargumentin, joka on kuvattu alla.

p_lu_info

p_lu_info on osoitin sl_usbd_msc_scsi_lun_info_t-tyyppiseen rakenteeseen. Sen tarkoituksena on antaa MSC-luokalle tiedot loogisesta yksiköstä.
Alla olevassa taulukossa kuvataan kaikki tässä konfiguraatiorakenteessa käytettävissä olevat konfiguraatiokentät.

Taulukko – sl_usbd_msc_scsi_lun_info_t Konfiguraatiorakenne

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

46/174

Yliview

Ala

Kuvaus

Ala
.scsi_lun_api_p tr

Kuvaus
Osoitin mediaohjaimen API:in, joka käsittelee tätä loogista yksikköä. Katso lisätietoja tallennusohjaimista kohdasta USB-laitteen MSC-luokan tallennusohjaimet.

.ve nd or r_id _p tr
.tuotetunnus_osio
.tuote_tarkistustaso .is_vain_luettava

Osoitin merkkijonoon, joka sisältää loogisen yksikön toimittajan tunnisteen. Merkkijonon enimmäispituus on 8 merkkiä. Osoitin merkkijonoon, joka sisältää loogisen yksikön tuotetunnisteen. Merkkijonon enimmäispituus on 16 merkkiä. Tuotteen versiotaso.
Merkintä, joka osoittaa, pitäisikö looginen yksikkö nähdä vain luettavana osoitteesta view isännän (tosi) vai ei (epätosi).

USB-laitteen MSC-luokan ohjelmointiopas

Tässä osiossa selitetään, miten MSC-luokkaa käytetään.
USB-laitteen MSC-luokan alustaminen USB-laitteen MSC SCSI -luokan instanssin lisääminen laitteellesi USB-laitteen MSC-luokan loogisen yksikön käsittely
USB-laitteen MSC-luokan alustaminen

Lisätäksesi MSC SCSI -luokkatoiminnallisuuden laitteeseesi, alusta ensin MSC-perusluokka ja SCSI-alaluokka kutsumalla funktioita sl_usbd_msc_init() ja sl_usbd_msc_scsi_init() .
ExampAlla oleva tiedosto näyttää, miten sl_usbd_msc_init():ia ja sl_usbd_msc_scsi_init():ia kutsutaan.

Example – sl_usbd_msc_init():n ja sl_usbd_msc_scsi_init():n kutsuminen

sl_status_t-tila;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}
USB-laitteen MSC SCSI -luokkainstanssin lisääminen laitteellesi
Lisätäksesi MSC SCSI -luokan toiminnallisuuden laitteeseesi, luo ensin instanssi ja lisää se sitten laitteesi kokoonpanoon/kokoonpanoihin. Sinun on lisättävä instanssiisi vähintään yksi looginen yksikkö.
MSC SCSI -luokkainstanssin luominen
Luo MSC SCSI -luokan instanssi kutsumalla funktiota sl_usbd_msc_scsi_create_instance().
ExampAlla oleva tiedosto näyttää, miten sl_usbd_msc_scsi_create_instance()-funktiota kutsutaan oletusargumenttien avulla. Lisätietoja sl_usbd_msc_scsi_create_instance()-funktiolle välitettävistä määritysargumenteista on kohdassa USB-laitteen MSC-luokan sovelluskohtaiset kokoonpanot.
Example – sl_usbd_ msc_scsi_create_instance()-funktion kutsuminen

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

47/174

Yliview

uint8_t luokan_nbr; sl_status_t tila;
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);
jos (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }
MSC-luokkainstanssin lisääminen laitteesi kokoonpanoon/kokoonpanoihin
Kun olet luonut MSC-luokkainstanssin, voit lisätä sen konfiguraatioon kutsumalla funktiota
sl_usbd_msc_add_to_configuration() . (Tämä näyttää olevan merkkijono, jossa on satunnaisia ​​merkkejä, eikä sitä voida kääntää mielekkäästi.)
ExampAlla oleva näyttää, miten sl_usbd_msc_scsi_add_to_configuration()-funktiota kutsutaan oletusargumentteja käyttäen.
Example – sl_usbd_ msc_scsi_add_to_configuration()-funktion kutsuminen

sl_status_t-tila;

status = sl_usbd_msc_scsi_add_to_configuration(luokkanumero,

(1)

config_nbr_fs);

(2)

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

(1) Luokan numero, joka lisätään sl_usbd_msc_scsi_create_instance()-funktion palauttamaan konfiguraatioon. (32) Konfiguraatioon liittyvä numero (tässä lisätään se täyden nopeuden konfiguraatioon).
USB-laitteen MSC-luokan loogisen yksikön käsittely
Loogisen yksikön lisääminen Tallennusvälineen liittäminen/irrottaminen
Loogisen yksikön lisääminen
Kun lisäät loogisen yksikön MSC SCSI -luokkainstanssiisi, se on sidottava tallennusvälineeseen (RAM-levy, SD-kortti, flash-muisti jne.). MSC-luokka käyttää tallennusvälineiden kanssa kommunikointiin tallennusajuria. Tämä ajuri on toimitettava loogista yksikköä lisättäessä.
ExampAlla oleva tiedosto näyttää, miten looginen yksikkö lisätään sl_usbd_msc_scsi_lun_add():n avulla.
Example – Loogisen yksikön lisääminen sl_usbd_msc_scsi_lun_add()-funktion avulla

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

48/174

Yliview

sl_usbd_msc_scsi_lun_t *lu_object_ptr = TYHJÄ;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_status_t

status;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.vendor_id_ptr

= ”Silicon Labs”;

lu_info.product_id_ptr

= “estolaite esim.ample”;

lu_info.tuoteversiotaso = 0x1000u;

lu_info.on_vain_luettava

= epätosi;

tila = sl_usbd_msc_scsi_lun_add(luokka_nbr, &lu_info, &lu_object_ptr);
jos (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }

Tallennusvälineen kiinnittäminen/irrottaminen
Kun looginen yksikkö on lisätty, tallennusväline on liitettävä, jotta se on käytettävissä isäntäpuolella. MSC-luokka tarjoaa kaksi funktiota tallennusvälineen liittämisen hallitsemiseksi loogiseen yksikköön: sl_usbd_msc_scsi_lun_attach() ja sl_usbd_msc_scsi_lun_detach(). Näiden funktioiden avulla voit emuloida tallennuslaitteen poistamista, jotta voit tarvittaessa palauttaa pääsyn upotettuun sovellukseen.
ExampAlla oleva kuva näyttää, miten funktioita sl_usbd_msc_scsi_lun_attach() ja sl_usbd_msc_scsi_lun_detach() käytetään.
Example – Median kiinnitys/irrotus

sl_status_t-tila;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */
}

(1)

tila = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); jos (tila ! SL_STATUS_OK) {
/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */
}

(2)

tila = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) jos (tila ! SL_STATUS_OK) {
/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */
}

(3)

(1) Tästä hetkestä lähtien, jos MSC-laite on yhdistetty isäntään, tallennusväline on käytettävissä.
(2) Jos MSC-laite on yhdistetty isäntään, media näkyy nyt ei-käytettävinä. Tällä hetkellä medialle voidaan suorittaa toimintoja upotetusta sovelluksesta.
(3) Jos MSC-laite on jälleen yhdistetty isäntään, tallennusväline näkyy yhdistettynä.
USB-laitteen MSC-luokan tallennuslaitteen ohjaimet
USB-laitteen MSC-luokka tarvitsee tallennusajurin kommunikoidakseen tallennusvälineen kanssa. Tällä hetkellä Silicon Labs ei tarjoa ajureita.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

49/174

Yliview
TPY aa ajurin tekoäly määritellään typedef sl_usbd_msc_scsi_lun_api_t:llä. Sl_usbd_msc_scsi_lun_api_t-vri-objekti on sisällytettävä sl_usbd_msc_scsi_lun_info_t-vri-objektiin, kun lisäät logiikkayksikön sl_usbd_msc_scsi_lun_add():lla. Katso lisätietoja rakenteista osiosta USB-laite MSC SCSI API. Tallennusajurin toteutus voi olla niinkin yksinkertainen kuin sektoritaulukko RAM-muistissa. Tyypillinen sektorikoko (eli lohkokoko) on 512 massamuistilaitteille ja 2048 CD-ROM-levyille.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

50/174

Yliview
Yliview
USB-laitteen valmistajan luokka
USB-laitteen toimittajan luokan yliview USB-laitetoimittajaluokan resurssitarpeet Coresta USB-laitetoimittajaluokan konfigurointi USB-laitetoimittajaluokan ohjelmointiopas Vendor-luokan avulla voit rakentaa toimittajakohtaisia ​​laitteita, jotka voivat toteuttaa omaa protokollaa. Se perustuu kahteen massapäätepisteeseen tiedonsiirtoon isännän ja laitteen välillä. Massasiirrot ovat käteviä suurten määrien strukturoimattoman tiedon siirtämiseen ja tarjoavat luotettavan tiedonvaihdon virheiden havaitsemis- ja uudelleenyritysmekanismin avulla. Massapäätepisteiden lisäksi Vendor-luokka voi käyttää myös valinnaista keskeytyspäätepisteparia. Mikä tahansa käyttöjärjestelmä (OS) voi toimia Vendor-luokan kanssa, jos käyttöjärjestelmässä on ohjain Vendor-luokan käsittelemiseen. Käyttöjärjestelmästä riippuen ohjain voi olla natiivi tai toimittajakohtainen. Esimerkiksi Microsoft Windows® -käyttöjärjestelmässä sovelluksesi on vuorovaikutuksessa Microsoftin toimittaman WinUSB-ohjaimen kanssa kommunikoidakseen toimittajalaitteen kanssa.
USB-laitteen toimittajan luokan yliview
Kuva – Windows-isännän ja toimittajaluokan yleinen arkkitehtuuri näyttää isännän ja laitteen välisen yleisen arkkitehtuurin toimittajaluokan avulla. Tässä esimerkissäampEli isäntäkäyttöjärjestelmä on MS Windows.
Kuva – Yleinen arkkitehtuuri MS Windows Hostin ja Vendor Classin välillä

MS Windows -puolella sovellus kommunikoi toimittajan laitteen kanssa vuorovaikuttamalla USB-kirjaston kanssa. Kirjastot, kuten libusb, tarjoavat API:n laitteen ja siihen liittyvien putkien hallintaan sekä kommunikointiin laitteen kanssa ohjaus-, joukkokäsittely- ja keskeytyspäätepisteiden kautta.
Laitepuolella Vendor-luokka koostuu seuraavista päätepisteistä:
Pari ohjauksen IN- ja OUT-päätepisteitä, joita kutsutaan oletuspäätepisteiksi. Pari joukko-IN- ja OUT-päätepisteitä.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

51/174

Yliview

Pari keskeytyksen IN- ja OUT-päätepisteitä. Tämä pari on valinnainen. Alla oleva taulukko osoittaa eri päätepisteiden käytön:
Taulukko – Toimittajaluokan päätepisteiden käyttö

Päätepisteen suunta

Ohjaus IN
Ohjaus
OUT
Irtotavarana

Laitteesta isäntään
Isännästä laitteeseen
Laitteesta isäntään

Irtotavarana
Keskeytys SISÄÄN
Keskeyttää
OUT

Isännästä laitteeseen
Laitteesta isäntään
Isännästä laitteeseen

Käyttö
Vakiopyynnöt luettelointia ja toimittajakohtaisia ​​pyyntöjä varten.
Vakiopyynnöt luettelointia ja toimittajakohtaisia ​​pyyntöjä varten.
Raakadatan tiedonsiirto. Data voidaan jäsentää oman protokollan mukaisesti.
Raakadatan tiedonsiirto. Data voidaan jäsentää oman protokollan mukaisesti.
Raakadatan tiedonsiirto tai ilmoitus. Data voidaan jäsentää tietyn protokollan mukaisesti. Raakadatan tiedonsiirto tai ilmoitus. Data voidaan jäsentää tietyn protokollan mukaisesti.

Laitesovellus voi käyttää joukko- ja keskeytyspäätepisteitä datan lähettämiseen isäntäkoneeseen tai vastaanottamiseen isäntäkoneesta. Se voi käyttää oletuspäätepistettä vain isännän lähettämien toimittajakohtaisten pyyntöjen dekoodaamiseen. Vakiopyyntöjä hallinnoi sisäisesti Silicon Labs USB -laitteen ydinkerros.
USB-laitetoimittajan luokan resurssitarpeet Coresta

Joka kerta, kun lisäät toimittajaluokan instanssin konfiguraatioon funktion sl_usbd_vendor_add_to_configuration() avulla, seuraavat resurssit allokoidaan ytimestä.

Resurssi
Rajapinnat Vaihtoehtoiset rajapinnat Päätepisteet Rajapintaryhmät

Määrä
1 1 2 (4, jos keskeytyspäätepisteet on otettu käyttöön) 0

Huomaa, että nämä luvut ovat kokoonpanokohtaisia. Kun määrität SL_USBD_INTERFACE_QUANTITY-, SL_USBD_ALT_INTERFACE_QUANTITY-, SL_USBD_INTERFACE_GROUP_QUANTITY- ja SL_USBD_DESCRIPTOR_QUANTITY-määritysarvoja, muista ottaa huomioon, kuinka monta kokoonpanoa luokka lisätään. SL_USBD_OPEN_ENDPOINTS_QUANTITY-määritysarvon osalta, koska päätepisteet avataan vain, kun isäntä asettaa kokoonpanon, sinun tarvitsee ottaa huomioon vain tarvittavien päätepisteiden määrä luokkainstanssia varten.
USB-laitteen toimittajan luokan määritys

Toimittajaluokan konfigurointiin käytetään kahta konfigurointiparametrien ryhmää:
USB-laitetoimittajan luokan sovelluskohtaiset kokoonpanot USB-laitetoimittajan luokan instanssikokoonpanot
USB-laitteen toimittajan luokan sovelluskohtaiset kokoonpanot
Käyttääksesi Silicon Labsin USB-laitetoimittajan luokkamoduulia, säädä ensin Toimittajan käännösaikaiset kokoonpanomääritykset sovellustarpeidesi mukaan. Ne on ryhmitelty uudelleen sl_usbd_core_config.h-otsikkotiedoston sisällä. file Määrämääritysten tarkoituksena on kertoa USB-laitemoduulille, kuinka monta USB-toimittajaobjektia varataan.
Alla oleva taulukko kuvaa jokaisen kokoonpanomääritelmän.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

52/174

Yliview

Taulukko – USB-laitteen toimittajan kokoonpanon määritelmät

Kokoonpanon nimi

Kuvaus

Oletusarvo

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Funktiolle sl_usbd_vendor_create_instance() varattavien luokkainstanssien määrä.

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Konfiguraatioiden lukumäärä. Toimittajaluokan instansseja voidaan lisätä yhteen tai useampaan konfiguraatioon kutsumalla funktiota sl_usbd_vendor_add_to_configuration() .

USB-laitteen toimittajan luokan instanssikonfiguraatiot

Tässä osiossa määritellään Vendor-luokan instanssien määritykset.
Luokan instanssin luonti intr_en interval p_vendor_callbacks
Luokkainstanssin luominen

Vendor-luokan instanssi luodaan kutsumalla funktiota sl_usbd_vendor_create_instance() , joka ottaa vastaan ​​kolme alla kuvattua määritysargumenttia.

intr_en
Totuusarvo, joka ilmaisee, lisätäänkö keskeytyspäätepistepari vai ei.

Arvo
tosi väärä

Kuvaus
Pari IN/OUT-päätepisteitä lisätään ja asetetaan upotetun sovelluksen saataville. Keskeytyspäätepistettä ei lisätä. Käytettävissä on vain pari Bulk IN/OUT-päätepisteitä.

intervalli
Jos asetat intr_en-arvoksi true, voit määrittää keskeytysten päätepisteiden kyselyvälin (millisekunteina). Jos asetat intr_en-arvoksi false, voit asettaa intervallin arvoksi 0, koska luokka jättää sen huomiotta.
p_vendor_backit
p_vendor_callbacks on osoitin takaisinkutsufunktioiden rakennemuuttujaan, jonka voit määrittää käsittelemään luokkakohtaisia ​​ohjauspyyntöjä. Jos et käytä luokkakohtaisia ​​pyyntöjä tai tarvitset ilmoitusten käyttöönoton/poistamisen, voit asettaa tämän arvoksi NULL.
ExampAlla oleva tiedosto antaa luokkasi erityisten pyyntöjen käsittelijän odotetun allekirjoituksen.
Example – Luokkakohtaisen pyyntöfunktion allekirjoitus

void app_usbd_vendor_req_handle(uint8_t

luokka_nro, (1)

vakio 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) Toimittajaluokan instanssinumero.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

53/174

Yliview

(2) Osoitin isännältä vastaanotettuun asennuspyyntöön.
USB-laitevalmistajan luokan ohjelmointiopas
Tässä osiossa selitetään, miten Toimittaja-luokkaa käytetään. USB-laitteen Toimittaja-luokan alustaminen USB-laitteen Toimittaja-luokan instanssin lisääminen laitteellesi Tiedonsiirto USB-laitteen Toimittaja-luokan avulla
USB-laitteen toimittajaluokan alustaminen
Lisätäksesi laitteeseesi toimittajaluokan toiminnallisuuden, alusta ensin luokka kutsumalla funktiota USBD_Vendor_Init(). Esim.ampAlla oleva tiedosto näyttää, miten sl_usbd_vendor_init()-funktiota kutsutaan.
Example – sl_usbd_vendor_init()-funktion kutsuminen

sl_status_t-tila;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Tapahtui virhe. Tähän tulisi lisätä virheenkäsittely. */ }
USB-laitetoimittajan luokkainstanssin lisääminen laitteellesi
Lisätäksesi toimittajaluokan toiminnallisuuden laitteeseesi, sinun on ensin luotava instanssi ja lisättävä se sitten laitteesi kokoonpanoon/kokoonpanoihin.
Toimittajaluokan instanssin luominen Toimittajaluokan instanssin lisääminen laitteen kokoonpanoon/kokoonpanoihin
Toimittajaluokan instanssin luominen
Luo Vendor-luokan instanssi kutsumalla funktiota sl_usbd_vendor_create_instance(). Esim.ampAlla oleva tiedosto näyttää, miten sl_usbd_vendor_create_instance()-funktiota kutsutaan oletusargumenttien avulla. Lisätietoja sl_usbd_vendor_create_instance()-funktiolle välitettävistä määritysargumenteista on kohdassa USB-laitetoimittajan luokan instanssien konfiguroinnit.
Example – sl_usbd_vendor_create_instance()-funktion kutsuminen

uint8_t luokan_nbr; sl_status_t tila;

tila = sl_usbd_vendor_create_instance(false,

(1)

0u,

(2)

sovellus_usbd_toimittajan_takaisinkutsun_toiminnot, (3)

&luokka_nbr);

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

(1) Tässä luokkainstanssissa ei ole keskeytyspäätepisteitä. (2) Väliä ei huomioida, koska keskeytyspäätepisteet ovat poissa käytöstä.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

54/174

Yliview

(3) Sovelluksesi osa, joka käsittelee toimittajakohtaisia ​​luokkapyyntöjä, on takaisinkutsufunktio. Lisätietoja on kohdassa USB-laitteen toimittajaluokan käyttäminen tiedonsiirtoon. Toimittajaluokan instanssin lisääminen laitteen kokoonpanoon/kokoonpanoihin Kun olet luonut toimittajaluokan instanssin, voit lisätä sen kokoonpanoon kutsumalla funktiota USBD_Vendor_ConfigAdd(). Esim.ampAlla oleva tiedosto näyttää, miten sl_usbd_vendor_add_to_configuration()-funktiota kutsutaan oletusargumentteja käyttäen.
Example – sl_usbd_vendor_add_to_configuration()-funktion kutsuminen

sl_status_t-tila;

status = sl_usbd_vendor_add_to_configuration(luokkanumero,

(1)

config_nbr_fs);

(2)

jos (tila ! SL_STATUS_OK) {

/* Tapahtui virhe. Tähän pitäisi lisätä virheenkäsittely. */

}

(1) Luokan numero, joka lisätään sl_usbd_vendor_create_instance():n palauttamaan konfiguraatioon. (2) Konfiguraatioon liittyvä numero (tässä lisätään se täyden nopeuden konfiguraatioon).
Tiedonsiirto USB-laitetoimittajaluokan avulla
Yleinen synkroninen tiedonsiirto Asynkroninen tiedonsiirto Toimittajapyyntö Yleinen Toimittaja-luokka tarjoaa seuraavat funktiot isännän kanssa kommunikointiin. Lisätietoja funktion parametreista on USB-laitetoimittajan API:ssa.
Taulukko – Toimittajan tiedonsiirto-API:n yhteenveto

Toiminnon nimi
sl_usb d _v e nd tai r_ luku _bulk_sy nc() sl_usb d _v e nd tai r_kirjoitus _bulk_sy nc() sl_usb d _v e nd tai r_luku _bulk_asy nc() sl_usb d _v e nd tai r_kirjoitus _bulk_asy nc() sl_usb d _v e nd tai r_luku _inter rrup t_sy nc() sl_usb d _v e nd tai r_kirjoitus _inter rrup t_sy nc() sl_usb d _v e nd tai r_luku _inter rrup t_asy nc
()
sl_usb d _v e nd or_write _inte rrup t_asy nc
()

Toiminto Vastaanottaa dataa isännältä bulk OUT -päätepisteen kautta. Tämä toiminto estää. Lähettää dataa isäntään bulk IN -päätepisteen kautta. Tämä toiminto estää. Vastaanottaa dataa isännältä bulk OUT -päätepisteen kautta. Tämä toiminto ei ole estävä. Lähettää dataa isäntään bulk IN -päätepisteen kautta. Tämä toiminto ei ole estävä. Vastaanottaa dataa isännältä keskeytys OUT -päätepisteen kautta. Tämä toiminto estää. Lähettää dataa isäntään keskeytys IN -päätepisteen kautta. Tämä toiminto estää. Vastaanottaa dataa isännältä keskeytys OUT -päätepisteen kautta. Tämä toiminto ei ole-
esto.
Lähettää dataa isännälle keskeytystulopäätepisteen kautta. Tämä funktio ei ole estävä.

Toimittajapyynnöt ovat myös toinen tapa kommunikoida isännän kanssa. Isännän lähettämiä toimittajapyyntöjä hallitessa sovellus voi vastaanottaa tai lähettää tietoja isännältä tai isännälle ohjauspäätepisteen avulla; sinun on annettava sovelluksen takaisinkutsu, joka välitetään sl_usbd_vendor_create_instance()-funktion parametrina. Synkroninen tiedonsiirto

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

55/174

Yliview

Synkroninen tiedonsiirto tarkoittaa, että siirto estyy. Kun funktiota kutsutaan, sovellus estyy, kunnes siirto on valmis virheellä tai virheettömästi. Aikakatkaisun määrittämisellä voidaan välttää ikuinen odottaminen. Esim.ampAlla oleva kuva näyttää luku- ja kirjoitusoperaation, jossa vastaanotetaan dataa isännältä bulk OUT -päätepisteen kautta ja lähetetään dataa isännältä bulk IN -päätepisteen kautta.
Example – Synkroninen joukkoluku ja -kirjoitus

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

tila = sl_usbd_vendor_read_bulk_sync(luokkanumero,

(1)

(tyhjä *)&rx_buf[0],

(2)

2u,

0u,

(3)

&xfer_len);

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

tila = sl_usbd_vendor_write_bulk_sync( luokan_nbr,

(1)

(tyhjä *)&tx_buf[0],

(4)

2u,

0u,

(3)

väärä,

(5)

&xfer_len);

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

(1) Funktiolla sl_usbd_vendor_create_instance() luotu luokan esiintymänumero tarjoaa sisäisen viittauksen Vendor-luokkaan, jotta siirto voidaan reitittää oikeaan joukkosiirtopäätepisteeseen OUT- tai IN-muodossa.
(2) Sovelluksen on varmistettava, että funktiolle tarjottu puskuri on riittävän suuri kaiken datan säilyttämiseen. Muuten synkronointiongelmia voi esiintyä.
(3) Äärettömän estotilanteen välttämiseksi voidaan määrittää millisekunteina ilmaistava aikakatkaisu. Arvo 809 saa sovellustehtävän odottamaan ikuisesti.
(4) Sovellus tarjoaa alustetun lähetyspuskurin.
(5) Jos tämä lippu on asetettu arvoon true ja siirron pituus on päätepisteen enimmäispaketin koon monikerta, laitepino lähettää isännälle nollapituisen paketin viestittääkseen siirron päättymisestä.
Keskeytyspäätepisteiden tiedonsiirtofunktioiden sl_usbd_vendor_read_interrupt_sync() ja sl_usbd_vendor_write_interrupt_sync() käyttö on samanlaista kuin joukkopäätepisteiden tiedonsiirtofunktiot, jotka on esitetty esimerkissäample – Synkroninen joukkoluku ja -kirjoitus.
Asynkroninen viestintä
Asynkroninen tiedonsiirto tarkoittaa, että siirto ei ole estävää. Kun funktiota kutsutaan, sovellus välittää siirtotiedot laitepinolle eikä estä siirtoa. Muita sovellusprosessointeja voidaan tehdä siirron ollessa käynnissä USB-väylän kautta. Kun siirto on valmis, laitepino kutsuu takaisinkutsufunktiota ilmoittaakseen sovellukselle siirron valmistumisesta. Esim.ampAlla oleva kuva näyttää asynkronisen lukemisen ja kirjoittamisen.
Example – Asynkroninen joukkoluku ja -kirjoitus

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

56/174

Yliview

void app_usbd_vendor_comm (uint8_t luokan_nbr)

{

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

sl_status_t

status;

tila = sl_usbd_vendor_read_bulk_async(luokka_nbr,

(tyhjä *)&rx_buf[0],

(2)

2u,

sovellus_usbd_toimittajan_vastaanotto_valmis,

TYHJÄ);

(4)

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

tila = sl_usbd_vendor_write_bulk_async(luokka_nbr,

(tyhjä *)&tx_buf[0],

(5)

2u,

sovellus_usbd_toimittajan_lähetys_valmis,

TYHJÄ,

(4)

väärä);

(6)

jos (tila ! SL_STATUS_OK) {

/* $$$$ Käsittele virhe. */

}

}

(1) (3)
(1) (3)

static void app_usbd_vendor_rx_completed(uint8_t class_nbr,)

(3)

tyhjä *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

tyhjä *p_callback_arg,

sl_status_t-tila)

{

jos (tila ! SL_STATUS_OK) {

/* $$$$ Suorita jonkin verran käsittelyä. */

} muu {

/* $$$$ Käsittele virhe. */

}

}

static void app_usbd_vendor_tx_completed(uint8_t class_nbr,)

(3)

tyhjä *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

tyhjä *p_callback_arg,

sl_status_t-tila)

{

jos (tila ! SL_STATUS_OK) {

/* $$$$ Suorita jonkin verran käsittelyä. */

} muu {

/* $$$$ Käsittele virhe. */

}

}

(1) Luokan instanssinumero tarjoaa sisäisen viittauksen Vendor-luokkaan siirron reitittämiseksi oikeaan bulk OUT- tai IN-päätepisteeseen. (2) Sovelluksen on varmistettava, että annettu puskuri on riittävän suuri kaiken datan säilyttämiseen. Muuten voi esiintyä synkronointiongelmia. (3) Sovellus tarjoaa takaisinkutsufunktion osoittimen parametrina. Siirron valmistuttua laitepino kutsuu tätä takaisinkutsufunktiota, jotta sovellus voi viimeistellä siirron analysoimalla siirtotuloksen. Esimerkiksi lukutoiminnon valmistuttua sovellus voi suorittaa käsittelyn vastaanotetulle datalle. Kirjoituksen valmistuttua sovellus voi ilmoittaa, onnistuiko kirjoitus ja kuinka monta tavua lähetettiin.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

57/174

Yliview
(4) Myös takaisinkutsutoimintoon liittyvä argumentti voidaan välittää. Tällöin takaisinkutsutoiminnossa voidaan hakea joitakin yksityisiä tietoja. (5) Sovellus tarjoaa alustetun lähetyspuskurin. (6) Jos tämä lippu on asetettu arvoon true ja siirron pituus on päätepisteen enimmäispaketin koon monikerta, laitepino lähettää isännälle nollapituisen paketin viestiäkseen siirron päättymisestä. Keskeytyspäätepistekommunikaatiofunktioiden, sl_usbd_vendor_read_interrupt_async() ja sl_usbd_vendor_write_interrupt_async(), käyttö on samanlaista kuin esimerkissä esitetyt joukkopäätepistekommunikaatiofunktiot.ampAsynkroninen joukkoluku ja -kirjoitus.
Toimittajan pyyntö
USB 2.0 -spesifikaatio määrittelee kolmen tyyppisiä pyyntöjä: standardi, luokka ja toimittaja. Kaikki standardipyynnöt käsittelee suoraan ydinkerros, kun taas luokkapyyntöjä hallinnoi asianmukainen luokka. Toimittajapyynnöt voi käsitellä toimittajaluokka. Toimittajapyyntöjen käsittelemiseksi sinun on annettava sovelluksen takaisinkutsu sl_usbd_vendor_create_instance()-funktion parametrina. Kun USB-laite on vastaanottanut toimittajapyynnön, se on dekoodattava oikein. Esim.ampAlla oleva kuva näyttää toimittajan pyyntöjen dekoodauksen. Tietyt pyynnöt saatetaan joutua vastaanottamaan isännältä tai lähettämään sille datasiirron aikana.tagohjauksen siirron e. Jos tietoja ei oletagJos e on läsnä, sinun tarvitsee vain dekoodata asennuspaketti. Tämä esim.ample näyttää kolmen tyyppiset tiedottagsähköinen hallinta: ei dataa, dataa ulos ja dataa sisään.
Example – Toimittajan pyynnön dekoodaus

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

58/174

Yliview

#määrittele APP_VENDOR_REQ_NO_DATA

0x01u

#määrittele APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u

#määrittele APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u

#määrittele APP_VENDOR_REQ_DATA_BUF_SIZE

50u

staattinen uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];

staattinen totuusarvo app_usbd_vendor_req (uint8_t

luokka_nr,

vakio sl_usbd_setup_req_t *p_setup_req)

(1)

{

totuusarvo kelvollinen;

sl_status_t-tila;

uint16_t pyyntö_pituus;

uint32_t xfer_len;

(tyhjä) luokkanumero;

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

(2) (3)

tapaus APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:

(4)

req_len = p_setup_req->wLength;

jos (pyyntö_pituus > APP_VENDOR_REQ_DATA_BUF_SIZE) {

// Ei tarpeeksi tilaa datan vastaanottamiseen.

paluu (false);

}

// Vastaanota data Control OUT EP:n kautta. // Odota siirron valmistumista ikuisesti. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); jos (status ! SL_STATUS_OK) { kelvollinen = epätosi; } muuten { kelvollinen = tosi; } break;

tapaus APP_VENDOR_REQ_SEND_DATA_TO_HOST:

(5)

req_len = SOVELLUSTOIMITTAJAN_REQ_DATA_BUF_SIZE;

// Täytetään buf kuviolla. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
pyyntö_pituus);

// Lähetä data Control IN EP:n kautta. // Odota siirron valmistumista ikuisesti. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); jos (status ! SL_STATUS_OK) { valid = DEF_FAIL; } muuten { valid = DEF_OK; } break;

oletus:

(6)

// Pyyntöä ei tueta.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

59/174

Yliview

kelvollinen =tosi;tauko;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Ei tarpeeksi tilaa datan vastaanottamiseen.return(false);}// Vastaanota data Control OUT EP:n kautta.// Odota siirron valmistumista ikuisesti. 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;// Täytä buf kuviolla.Mem_Set((void *)&AppVendorReqBuf[0u],'A',
req_len);// Lähetä data Control IN EP:n kautta.// Odota siirron valmistumista ikuisesti. 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;}
oletusarvo:(6)// Pyyntöä ei tueta. valid = DEF_FAIL;break;}return(valid);}

(1) Ydin välittää asennuspaketin sisällön sovelluksellesi. Rakenne sl_usbd_setup_req_t sisältää samat kentät kuin USB 2.0 -spesifikaatiossa on määritelty (lisätietoja on spesifikaation osiossa ”9.3 USB-laitepyynnöt”):

typedef struct {

uint8_t bmRequestType; /* Pyynnön ominaisuudet.

*/

uint8_t bRequest; /* Yksilöllinen pyyntö.

*/

uint16_t wValue; /* Vaihtelee pyynnön mukaan.

*/

uint16_t wIndex; /* Vaihtelee pyynnön mukaan; käytetään tyypillisesti indeksinä.*/

uint16_t wLength; /* Siirron pituus, jos dataa ontage läsnä.

*/

} sl_usbd_setup_req_t;

(2) Määritä pyyntö. Voit käyttää switch-lausetta, jos käytät eri pyyntöjä. Tässä esimerkissäampeli on olemassa kolme erilaista pyyntöä, jotka vastaavat kolmea datatyyppiätagesim. APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST ja APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) Jos tietoja ei oletagJos e on läsnä, sinun tarvitsee vain dekoodata muut kentät. Tietojen s läsnäolotagOnko wLength-kenttä e vai ei, sen arvo on joko non-null tai null.
(4) Jos isäntä lähettää dataa laitteelle, sinun on kutsuttava funktiota sl_usbd_core_read_control_sync(). Annetun puskurin tulisi sisältää enintään wLength tavua. Jos tapahtuu virhe, palauta ytimelle false, mikä pysäyttää tilanmäärityksen.tagOhjauksen siirron e, joka osoittaa isännälle, että pyyntöä ei voida käsitellä. Onnistuessaan palautetaan true.
(5) Jos isäntä vastaanottaa dataa laitteelta, sinun on kutsuttava funktiota sl_usbd_core_write_control_sync(). Jos tapahtuu virhe, palauta ytimelle arvon false, mikä pysäyttää tilanmäärityksen.tagOhjauksen siirron e, joka osoittaa isännälle, että pyyntöä ei voida käsitellä. Onnistuessaan palautetaan true.
(6) Tässä esimerkissäampKaikki tunnistamattomat pyynnöt merkitään palauttamalla ytimeen false-arvo. Tämä pysäyttää data- tai tilatietojen lähettämisen.tagohjauksen siirron e, joka osoittaa isännälle, että pyyntöä ei tueta.
Isäntä lähettää toimittajapyyntöjä isäntätoimittajasovelluksen kautta. USB-kirjastoja, kuten libusb, voidaan käyttää apuna mukautetun isäntätoimittajasovelluksen kehittämisessä.

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

60/174

API-dokumentaatio
API-dokumentaatio
API-dokumentaatio
Luettelo moduuleista
USB-laitteen API USB-laitteen ACM-sovellusliittymä USB-laitteen CDC-sovellusliittymä USB-laitteen ydinsovellusliittymä USB-laitteen HID-sovellusliittymä USB-laitteen MSC-sovellusliittymä USB-laitteen MSC SCSI-sovellusliittymä USB-laitteen toimittajan sovellusliittymä

Kuvaus
USB-laitteen API USB-laitteen ACM-sovellusliittymä USB-laitteen CDC-sovellusliittymä USB-laitteen ydinsovellusliittymä USB-laitteen HID-sovellusliittymä USB-laitteen MSC-sovellusliittymä USB-laitteen MSC SCSI-sovellusliittymä USB-laitteen toimittajan sovellusliittymä

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

61/174

USB-laitteen API
USB-laitteen API
USB-laitteen API
USB-laitteen API.
Moduulit
USB-laite ACM-rajapinta USB-laite CDC-rajapinta USB-laitteen ydinrajapinta USB-laite HID-rajapinta USB-laite MSC-rajapinta USB-laite MSC SCSI-rajapinta USB-laitteen toimittajan rajapinta

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

62/174

USB-laitteen ACM-rajapinta

USB-laitteen ACM-rajapinta

USB-laitteen ACM-rajapinta

USB-laitteen CDC ACM-rajapinta.
Moduulit
sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Toiminnot

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

sl_usbd_cdc_ cm_init(tyhjä)
GLOBAALIT MUUTTUJAT.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Lisää uusi esiintymä CDC ACM -sarjaemulointialikategoriasta.
aaaa sl_usbd_cdc_ cm_ dd_to_configuration(uint8_t subcl ss_nbr, uint8_t config_nbr)
Lisää CDC ACM -alaluokan luokkainstanssi USB-laitteen kokoonpanoon.
aa sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Hae CDC ACM -sarjaemuloinnin aliluokan käyttöönottotila.
aaa sl_usbd_cdc_ cm_re d(uint8_t aliluokka ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t aikakatkaisu, uint32_t
*p_xfer_len) Vastaanottaa tietoja CDC ACM -sarjaemulointialikategoriassa.
aaaa sl_usbd_cdc_ cm_re d_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Vastaanota dataa CDC ACM -sarjaemulointialikategoriassa asynkronisesti.
aa sl_usbd_cdc_ cm_write(uint8_t aliluokka ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t aikakatkaisu, uint32_t
*p_xfer_len) Lähetä tiedot CDC ACM -sarjaemuloinnin alikategoriassa.
aaa sl_usbd_cdc_cm_write_sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_sync_function_t sync_fnct, void *p_sync_rg)
Lähetä tiedot CDC ACM -sarjaemulointialikategoriassa asynkronisesti.
aaa sl_usbd_cdc_ cm_get_line_control_st te(uint8_t alivalikko ss_nbr, uint8_t *p_line_ctrl)
Palauta ohjausviivojen tila.
aaa sl_usbd_cdc_ cm_get_line_coding(uint8_t aliluokka ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Hanki linjakoodauksen nykyinen tila.
aaa sl_usbd_cdc_ cm_set_line_coding(uint8_t aliluokka ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Aseta uusi linjakoodaus.
aaa sl_usbd_cdc_ cm_set_line_st te_event(uint8_t aliluokka ss_nbr, uint8_t tapahtumat)
Aseta rivin tilatapahtuma(t).
aaaa sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t aliluokka ss_nbr, uint8_t tapahtumat)
Tyhjennä linjan tilatapahtuma(t).

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

63/174

USB-laitteen ACM-rajapinta
Makrot
#määrittele SL_USBD_CDC_ACM_NBR_NONE 255u
MODUULI.
#määrittele SL_USBD_CDC_ACM_PARITY_NONE 0u
PORTIN ASETUKSET MÄÄRITTELEVÄT.
#määritä SL_USBD_CDC_ACM_PARITY_ODD 1u #määritä SL_USBD_CDC_ACM_PARITY_EVEN 2u #määritä SL_USBD_CDC_ACM_PARITY_MARK 3u #määritä SL_USBD_CDC_ACM_PARITY_SPACE 4u #määritä SL_USBD_CDC_ACM_STOP_BIT_1 0u #määritä SL_USBD_CDC_ACM_STOP_BIT_1_5 1u #määritä SL_USBD_CDC_ACM_STOP_BIT_2 2u #määritä SL_USBD_CDC_ACM_CTRL_BREAK 0 01u
LINJATAPAHTUMIEN LIPUT MÄÄRITTELEVÄT.
#määritä SL_USBD_CDC_ACM_CTRL_RTS 0 02u #määritä SL_USBD_CDC_ACM_CTRL_DTR 0 04u #määritä SL_USBD_CDC_ACM_STATE_DCD 0 01u #määritä SL_USBD_CDC_ACM_STATE_DSR 0 02u #määritä SL_USBD_CDC_ACM_STATE_BREAK 0 04u #määritä SL_USBD_CDC_ACM_STATE_RING 0 08u #määritä SL_USBD_CDC_ACM_STATE_FRAMING 0 10u #määritä SL_USBD_CDC_ACM_STATE_PARITY 0 20u #määritä SL_USBD_CDC_ACM_STATE_OVERUN 0 40u #määritä SL_USBD_CDC_ACM_CALL_MGMT_DEV 0 01u
PUHELUJEN HALLINTAOMINAISUUDET.
#määritä SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI 0 02u #määritä SL_USBD_CDC_ACM_CALL_MGMT_DATA_OVER_DCI 0 02u | 0 01u)
Toimintodokumentaatio
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (tyhjä)
GLOBAALIT MUUTTUVAT. Parametrit
Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

64/174

USB-laitteen ACM-rajapinta

Tyyppi
mitätön

Suunta Ei tiedossa

Argumentin nimi

MAKROT GLOBAALIT VAKIOT FUNKTIOPROTOTYYPIT CDC ACM-FUNKTIOT

Alusta CDC ACM -sarjaemuloinnin aliluokka.
Palauttaa

Palauttaa SL_STATUS_OK onnistumisen yhteydessä tai toisen SL_STATUS-koodin epäonnistumisen yhteydessä.

Kuvaus

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)

Lisää uusi esiintymä CDC ACM -sarjaemulointialikategoriasta.
Parametrit

Tyyppi
uint16_t
uint16_t

Suunta-argumentin nimi

Kuvaus

Ei käytössä

line_state_interval Rivin tilan ilmoitusväli millisekunteina (arvon on oltava

olla luvun 2 potenssi).

Ei käytössä

call_mgmt_capabilities Puhelunhallintaominaisuudet-bittikartta. TAI-operaattorilla muunnettu.

seuraavat liput:

SL_USBD_CDC_ACM_CALL_MGMT_DEV Laite hoitaa puheluiden hallinnan itse. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Laite voi lähettää/vastaanottaa puheluidenhallintatietoja Data Class -rajapinnan kautta.

sl_usbd_cdc_acm_callbacks_t Ei saatavilla
*

uint8_t *

Ei käytössä

p_acm_callbacks p_alaluokan_nbr

Valinnaiset osoittimet takaisinkutsufunktioille, joita kutsutaan erilaisten tapahtumien yhteydessä.
Parametri muuttujalle, joka vastaanottaa CDC ACM -sarjaemuloinnin alaluokan instanssinumeron.

Palauttaa

Palauta SL_STATUS_OK onnistumisen yhteydessä tai toinen SL_STATUS-koodi epäonnistumisen yhteydessä.

sl_usbd_cdc_acm_lisää_kokoonpanoon

sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t alaluokan_nbr, uint8_t konfigurointi_nbr)

Lisää CDC ACM -alaluokan luokkainstanssi USB-laitteen kokoonpanoon.
Parametrit

Tyyppi
uint8_t uint8_t

Suunta Ei tiedossa

Argumentin nimi
alaluokan_nbr konfigurointin_nbr

Kuvaus CDC ACM -sarjaemuloinnin aliluokan instanssinumero. Konfiguraatioindeksi, johon uusi testiluokan rajapinta lisätään.

Palauttaa

Copyright © 2025 Silicon Laboratories. Kaikki oikeudet pidätetään.

65/174

USB-laitteen ACM-rajapinta
Palauttaa SL_STATUS_OK onnistumisen yhteydessä tai toisen SL_STATUS-koodin epäonnistumisen yhteydessä.

sl_usbd_cdc_acm_is_enabled

sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t alaluokan_nbr, bool * p_enabled)

Hae CDC ACM -sarjaemuloinnin aliluokan käyttöönottotila.
Parametrit

Tyyppi

Suunta

Argumentin nimi

Kuvaus

uint8_t Ei saatavilla

alaluokan_nbr CDC ACM-sarjaemuloinnin alaluokan instanssinumero.

totuusarvo * Ei saatavilla

p_käytössä

Totuusarvo muuttujalle, joka saa käyttöönoton tilan. Jos muuttujan arvoksi asetetaan true, CDC ACM -sarjaemulointi on käytössä. Muuttuja

Asiakirjat / Resurssit

SILICON LABS USB-laitepino [pdfKäyttöohje
USB-laitepino, laitepino, pino

Viitteet

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *