SILICON LABS USB Device Stack
![]()
Specifikimet
- Versioni USB: 1.5.1
- Data e publikimit: 21 korrik 2025
- Versioni i SDK-së së Thjeshtësisë: 2025.6.1
Produkti Mbiview
Paketa e pajisjeve USB nga Silicon Labs ofron lidhje USB të gjithanshme dhe të lehtë për t’u përdorur për projektet IoT, duke lehtësuar komunikimin midis bashkëprocesorëve të rrjetit dhe hosteve.
Veçoritë
- Stivë efikase e pajisjeve USB
- Ideale për projektet IoT
- Mbështetje për komunikim midis bashkëprocesorëve të rrjetit dhe hosteve
Konfigurimi i Pajisjes USB
Konfiguroni cilësimet e pajisjes USB sipas kërkesave të projektit tuaj duke iu referuar seksionit Konfigurimi i Pajisjes USB në dokumentacion.
Udhëzues për Programimin e Pajisjeve USB
Ndiqni Udhëzuesin e Programimit të Pajisjes USB për të kuptuar se si të programoni dhe të bashkëveproni me pajisjen USB për aplikacione të ndryshme.
Klasat e Pajisjeve USB
Seksioni i Klasave të Pajisjeve USB ofron një mbiview të klasave të ndryshme si CDC ACM, HID, MSC SCSI dhe Klasa e Shitësit. Zgjidhni klasën e duhur bazuar në funksionalitetin e pajisjes suaj.
Zgjidhja e problemeve me pajisjen USB
Nëse hasni ndonjë problem me pajisjen USB, referojuni seksionit Zgjidhja e Problemeve të Pajisjes USB për zgjidhje dhe këshilla për korrigjimin e gabimeve.
Specifikimet dhe Karakteristikat Mbiview
Konfigurimi i Pajisjes USBview
Udhëzuesi i Programimit të Pajisjes USB Mbiview
Klasat e Pajisjeve USB Mbiview Klasa e Mbipërme e CDC ACMview Klasa HID Mbiview MSC SCSI Klasa Mbiview Klasa e Furnizuesit Mbiview
![]()
Dokumentacioni i API-t të API-t të USB API-t të Pajisjes USB ACM API i Pajisjes USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t CDC API i Pajisjes USB a sl_usbd_cdc_subcl ss_driver_t API i Bërthamës së Pajisjes USB
sl_usbd_device_config_t sl_usbd_setup_req_t
një API HID i Pajisjes USB sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t API-ja e MSC-së së Pajisjes USB
një API MSC SCSI i Pajisjes USB sl_usbd_msc_subcl ss_driver_t
sl_usbd_msc_scsi_thirrjet e kthimit të thirrjeve_t
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
![]()
1/174
USB me Autobus Serial Universal
një sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API-ja e Shpërndarësit të Pajisjeve USB sl_usbd_vendor_callbacks_t
Dokumentacioni i API-t Zgjidhja e Problemeve me Pajisjen USB
Mbiview USB Host i sistemit operativ Microsoft Windows
Mbiview
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
2/174
Mbiview
Mbiview
Pajisja USB![]()
USB është një nga ndërfaqet më të suksesshme të komunikimit në historinë e sistemeve kompjuterike dhe është standardi de facto për lidhjen e pajisjeve periferike të kompjuterit. Stack-u i Pajisjeve USB të Silicon Labs është një modul pajisjesh USB i projektuar posaçërisht për sistemet e ngulitura. I ndërtuar nga e para me cilësinë, shkallëzueshmërinë dhe besueshmërinë e Silicon Labs, ai ka kaluar nëpër një proces rigoroz validimi për t'u përputhur me specifikimet USB 2.0. Ky dokumentacion përshkruan se si të inicializohet, të fillohet dhe të përdoret stack-u i Pajisjeve USB të Silicon Labs. Ai shpjegon vlerat e ndryshme të konfigurimit dhe përdorimet e tyre. Ai gjithashtu përfshin një mbishkrim.view të teknologjisë, llojet e mundësive të konfigurimit, procedurat e zbatimit dhe, për shembull,ampmë pak përdorim tipik për çdo klasë të disponueshme.
![]()
Për t'ju ndihmuar të kuptoni shpejt konceptet e USB-së, dokumentacioni përmban shumë shembujamppak USB me funksione bazë. Këtoamples do t'ju ofrojnë një strukturë që ju lejon të ndërtoni pajisje shpejt. Këto ishampato përfshijnë:
Përshtatës USB-në-serial (Klasa e Pajisjeve të Komunikimit) Maus ose tastierë (Klasa e Pajisjeve të Ndërfaqes Njerëzore) Pajisje e lëvizshme e ruajtjes (Klasa e Ruajtjes Masive) Pajisje e personalizuar (Klasa e Furnizuesit)
Më poshtë është mbarimiview të seksioneve të dokumentacionit:
Specifikimet dhe Karakteristikat Konfigurimi i Pajisjes USB Udhëzuesi i Programimit të Pajisjes USB Klasat e Pajisjeve USB
Klasa CDC ACM Klasa HID Klasa MSC SCSI Klasa e Furnizuesit Klasa USB Zgjidhja e Problemeve me Sistemin Operativ Microsoft Windows USB Host
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
3/174
USB
USB![]()
Versioni USB 1.5.1 21 korrik 2025 – Shënime Versioni
Versioni 2025.6.1 i SDK-së së Thjeshtësisë
Grupi efikas i pajisjeve USB të Silicon Labs ofron lidhje USB të gjithanshme dhe të lehtë për t’u përdorur, ideale për projektet IoT, duke përfshirë komunikimin midis bashkëprocesorëve të rrjetit dhe hosteve. Klikoni këtu për versionet e mëparshme.
Përmbledhja e Lirimit
Karakteristikat Kryesore | Ndryshimet e API-t | Korrigjimet e Gabimeve | Aktivizimi i Çipit
Karakteristikat kryesore
Vetëm ndryshimet themelore të platformës.
Ndryshimet në API
Asnjë.
Rregullime të gabimeve
Asnjë.
Aktivizimi i Çipit
Asnjë.
Karakteristikat kryesore
Karakteristika të Reja | Përmirësime | Karakteristika të Hequra | Karakteristika të Vjetruara
Karakteristika të reja
Asnjë.
Përmirësimet
Vetëm ndryshimet themelore të platformës.
Karakteristikat e hequra
Asnjë.
Karakteristikat e amortizuara
Asnjë.![]()
Ndryshimet në API
API të reja | API të modifikuara | API të hequra | API të vjetruara
API-të e reja
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
4/174
USB
Asnjë.
API-të e modifikuara
Asnjë.
API-të e hequra
Asnjë.
API-të e vjetruara
Asnjë.
Rregullime të gabimeve
Asnjë.
Aktivizimi i Çipit
Asnjë.
Aplikimi P.shampNdryshimet
I ri Shemamples | Ex i Modifikuaramples | Hequr Examples | Ish i vjetëruaramples
I ri Shemamples
Asnjë.
Ex i modifikuaramples
Asnjë.
U hoq Examples
Asnjë.
Ish i vjetëruaramples
Asnjë.
Ndikimi i ndryshimeve të publikimit
Deklaratat e Ndikimit | Udhëzuesi i Migrimit
Deklaratat e Ndikimit
Asnjë.
Udhëzuesi i Migrimit
Asnjë.
Çështje dhe kufizime të njohura
Asnjë.
Duke përdorur këtë version
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
5/174
USB
Çfarë përmban versioni? | Softuer i pajtueshëm | Instalimi dhe përdorimi | Ndihmë dhe reagime
Çfarë përmban Publikimi?
Aplikacioni i Stack-ut të Pajisjeve USB Examples
Software i pajtueshëm
Software
SDK i Simplicity-t Simplicity Studio Simplicity Commander GCC Koleksioni i Kompiluesve GNU) Tabela e Punës së Integruar IAR për ARM IAR EWARM
Version ose Variant i Përputhshëm
2025.6.0 5.11.0 1.18.2 (ofrohet me Simplicity Studio) 12.2.1 (ofrohet me Simplicity Studio) 9.40.1 (ofrohet me Simplicity Studio)
Instalimi dhe përdorimi
Për të filluar zhvillimin tuaj, shihni tonën:
Udhëzues për Programimin e Pajisjeve USB. Dokumentacioni i API-t.
Për informacion në lidhje me Integrimin e Secure Vault, shihni Secure Vault.
Shqyerjeview Njoftimet e Këshillave për Sigurinë dhe Softuerin dhe menaxhoni preferencat tuaja të njoftimeve:
ò Shkoni te https://community.silabs.com/. ò Hyni me kredencialet e llogarisë suaj. ò Klikoni te profili juajfile ikona në këndin e sipërm të djathtë të faqes.
õ Zgjidhni Njoftimet nga menyja zbritëse. ö Në seksionin Njoftimet, shkoni te skeda Njoftimet e Produktit Tim për të rishikuarview Këshillimi historik për Sigurinë dhe Softuerin
njoftimet
÷ Për të menaxhuar preferencat tuaja, përdorni skedën Menaxho Njoftimet për të personalizuar se cilat përditësime dhe këshilla të produkteve dëshironi
marrin.
Për cilësimet e rekomanduara të konfigurimit, shihni këtu.
Për të mësuar më shumë rreth softuerit në këtë version, shikoni dokumentacionin tonë online.
Ndihmë dhe komente
Kontaktoni Ndihmën e Silicon Labs. Për të përdorur mjetin tonë Ask AI për të marrë përgjigje, shihni fushën e kërkimit në krye të kësaj faqeje.
Shënim: Ask AI është eksperimental.
Merrni ndihmë nga komuniteti ynë i zhvilluesve.
Politika e lëshimit dhe mirëmbajtjes së SDK-së
Shihni Politikën tonë të Publikimit dhe Mirëmbajtjes së SDK-së.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
6/174
Mbiview
Mbiview
Specifikimet
Përputhet me "revizionin 2.0 të specifikimit të Universal Serial Bus". Zbaton "Njoftimin e Ndryshimit të Inxhinierisë së Përshkruesit të Shoqërimit të Ndërfaqes (ECN)". Llojet e transferimit.
Klasat USB të Kontrollit të Ndërprerjes Bulk Klasa e Pajisjes së Komunikimit (CDC) Modeli Abstrakt i Kontrollit (ACM) Pajisja e Ndërfaqes Njerëzore (HID) Klasa e Ruajtjes Masive (MSC) Korniza e klasës specifike për shitësin
Veçoritë
I shkallëzueshëm për të përfshirë vetëm veçoritë e kërkuara për të minimizuar gjurmën e memories. Mbështet shpejtësi të plotë (12 Mbit/s). Mbështet pajisje të përbëra (shumëfunksionale). Mbështet pajisje me shumë konfigurime. Mbështet funksione USB për kursimin e energjisë (pezullim dhe rinisje e pajisjes). Integrim i plotë i Klasës së Storazhit Masiv në Micrium OS. File Moduli i sistemit është zhvilluar me shtresën abstraksionale CMSIS-RTOS2 në mënyrë që të mund të funksionojë me sisteme të ndryshme operative. Silicon Labs GSDK vjen me portat FreeRTOS dhe Micrium OS.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
7/174
Mbiview
Mbiview
Konfigurimi i Pajisjes USB
Ky seksion diskuton se si të konfiguroni Pajisjen USB të Silicon Labs. Ekzistojnë tre grupe parametrash konfigurimi, si më poshtë:
Konfigurimi i bërthamës së pajisjes USB Informacion mbi pajisjen USB Konfigurimi i pajisjeve USB Konfigurimi i pajisjeve USB
Konfigurimi i bërthamës së pajisjes USB
Pajisja USB e Silicon Labs mund të konfigurohet në kohën e kompilimit nëpërmjet një grupi #defines të vendosura në sl_usbd_core_config.h filePajisja USB përdor #defines kur është e mundur sepse ato lejojnë që madhësitë e kodit dhe të të dhënave të shkallëzohen në kohën e kompajlimit bazuar në veçoritë që janë aktivizuar. Kjo lejon që gjurmët e memories vetëm për lexim (ROM) dhe memories me akses të rastësishëm (RAM) të Pajisjes USB të Silicon Labs të rregullohen bazuar në kërkesat e aplikacionit tuaj.
Rekomandohet: Filloni procesin e konfigurimit me vlerat fillestare (të theksuara me shkronja të trasha).
Seksionet më poshtë janë të organizuara bazuar në rendin në konfigurimin e shabllonit file, sl_usbd_core_config.h.
Konfigurimi i Klasave të Konfigurimit Bërthamë
Konfigurimi bërthamë
Tabela – Konstantet e Konfigurimit të Bërthamës së Pajisjes USB
Përshkrimi i Konstantës
Vlera e paracaktuar
SL_USBD_TA SK_STACK_ SIZE
Konfiguron madhësinë e pirgut në bajt të detyrës kryesore USBD
4096
SL_USBD_TA SK_PRIORIT Y
Konfiguron përparësinë e detyrës kryesore USBD. Ky është një përparësi CMSIS-RTOS2.
osPriorityLartë
SL_USBD_A UTO_START _USB_DEVIC E
Nëse aktivizohet, pajisja USB do të niset automatikisht sapo të niset bërthama dhe të planifikohet për herë të parë 1 detyrë kryesore USBD. Nëse çaktivizohet, aplikacioni juaj do të duhet të thërrasë sl_usbd_core_start_device() kur të jetë gati për t'u zbuluar nga hosti USB.
SL_USBD_C Numri total i konfigurimeve që do të shtohen nëpërmjet funksionit sl_usbd_add_configuration()
1
Funksioni ONFIGURATI.
ON_SUANTI
TY
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
8/174
Mbiview
Konstante
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ SUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITET
SL_USBD _DESCRI
PTOR_Q
SHANTRBIMI
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY
Përshkrim Numri total i ndërfaqeve USB që do të shtohen për të gjitha konfigurimet tuaja. Kjo varet shumë nga klasa(t) e përdorura. Për më shumë informacion se sa ndërfaqe kërkon një instancë klase, referojuni seksionit "Nevojat për Burime nga bërthama" e klasës(ve) tuaj.
Numri total i ndërfaqeve alternative USB që do të shtohen për të gjitha konfigurimet tuaja. Kjo varet shumë nga klasa(t) e përdorura. Kjo vlerë duhet të jetë gjithmonë e barabartë ose më e madhe se SL_USBD_INTERFACE_QUANTITY. Për më shumë informacion se sa ndërfaqe alternative kërkon një instancë klase, referojuni seksionit "Nevojat për Burime nga Bërthama" e klasës(ve) tuaja.
Numri total i grupeve të ndërfaqes USB që do të shtohen për të gjitha konfigurimet tuaja. Kjo varet shumë nga klasa(t) e përdorura. Për më shumë informacion se sa grupe ndërfaqesh kërkojnë një instancë klase, referojuni seksionit "Nevojat për Burime nga Bërthama" e klasës(ve) tuaja.
Numri total i përshkruesve të pikës fundore që do të shtohen për të gjitha konfigurimet tuaja. Kjo varet shumë nga klasa(t) e përdorura. Për më shumë informacion se sa përshkrues të pikës fundore kërkon një instancë klase, referojuni "Numri i pikave fundore" në seksionin "Nevojat për Burime nga Bërthama" të klasës(ave) tuaj. Vini re se pikat fundore të kontrollit nuk kanë nevojë të merren në konsideratë këtu. Numri total i vargjeve USB. Vendosja e sasisë në zero do ta çaktivizojë funksionin. Çaktivizimi i kësaj do të bëjë që pajisja të mos ruajë asnjë varg përshkrimi USB të kaluar nga aplikacioni. Kjo do të thotë që hosti nuk do të jetë në gjendje të marrë vargjet e përshkrimit (siç janë prodhuesi dhe emri i produktit). Numri total i pikave fundore të hapura për konfigurim. Një pajisje kërkon të paktën dy pika fundore të hapura për transferimet e kontrollit, por ju duhet të shtoni edhe pikat fundore të klasës(ave) të përdorura. Për më shumë informacion se sa pika fundore të hapura kërkon një instancë klase, referojuni "Numri i pikave fundore" në seksionin "Nevojat për Burime nga Bërthama" të klasës(ave) tuaj.
Vlera e paracaktuar
10 10
2
20 30 20
Konfigurimi i Klasave
Klasat kanë konfigurime specifike në kohën e kompajlimit. Referojuni Klasave të Pajisjeve USB për më shumë informacion.
Konfigurimi i Informacionit të Pajisjes USB
Konfigurimi sl_usbd_device_config.h file rigrupon kohën e kompilimit #define-s për të vendosur informacionin bazë në lidhje me pajisjen tuaj, siç është ID-ja e Furnizuesit/Produktit, vargjet e pajisjes, etj. Tabela më poshtë përshkruan çdo informacion të konfigurimit të disponueshëm në këtë konfigurim. file.
Tabela – Përcakton Konfigurimin e Informacionit të Pajisjes USB
Konstante
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID
Përshkrim Numri juaj i identifikimit të shitësit, siç është dhënë nga Forumi i Implementuesve USB. Për më shumë informacion se si mund të merrni një ID shitësi, shihni http://www.usb.org/developers/vendor/. Numri juaj i identifikimit të produktit.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
9/174
Mbiview
Konstante
Përshkrimi
SL_USBD_DEVICE_RELEASE Numri i lëshimit të pajisjes suaj. _NUMBER
SL_USBD_DEVICE_MANUFA Vargu që përshkruan prodhuesin e pajisjes suaj. Ky konfigurim injorohet kur
CURER_STRING
Konfigurimi SL_USBD_STRING_QUANTITY është vendosur në 0.
SL_USBD_DEVICE_PRODUC Vargu që përshkruan produktin tuaj. Ky konfigurim injorohet kur konfigurimi
T_STRING
SL_USBD_STRING_QUANTITY është vendosur në 0.
SL_USBD_DEVICE_SERIAL_N Vargu që përmban numrin serial të pajisjes suaj. Ky konfigurim injorohet kur
NUMBER_STRING
Konfigurimi SL_USBD_STRING_QUANTITY është vendosur në 0.
SL_USBD_DEVICE_LANGUA Numri i identifikimit të gjuhës së vargjeve të pajisjes suaj. Vlerat e mundshme janë:
GE_ID
– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA
– SL_USBD_LANG_ID_KINEZE_TAJVAN
– SL_USBD_LANG_ID_ENGLISH_US
– SL_USBD_LANG_ID_ENGLISH_UK
– SL_USBD_LANG_ID_FRENCH
– SL_USBD_LANG_ID_GJERMANISHT
– SL_USBD_LANG_ID_GREEK
– SL_USBD_LANG_ID_ITALIAN
– SL_USBD_LANG_ID_PORTUGUESE
– SL_USBD_LANG_ID_SANSKRIT
Ky konfigurim injorohet kur konfigurimi SL_USBD_STRING_QUANTITY është vendosur në 0.
Konfigurimi i Pajisjes USB
Në varësi të pajisjes Silicon Labs që po përdorni, ndoshta do të keni pin-in dhe portën GPIO për të konfiguruar për sinjalin USB VBUS Sense. Përcaktimet e konfigurimit janë në kokën sl_usbd_hardware_config.h. file.
Konstante
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Përshkrimi
Porta GPIO për sinjalin USB VBUS Sense në pllakën tuaj. Pini GPIO për sinjalin USB VBUS Sense në pllakën tuaj.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
10/174
Mbiview
Mbiview
Udhëzues për Programimin e Pajisjeve USB
Ky seksion shpjegon se si të përdorni modulin e Pajisjes USB.
Konfigurimi fillestar i modulit të pajisjes USB
Ky seksion përshkruan hapat bazë të nevojshëm për të inicializuar modulin e Pajisjes USB dhe për të shtuar, përgatitur dhe nisur një pajisje. Inicializimi i Modulit të Pajisjes USB Inicializimi i Bërthamës së Pajisjes USB Inicializimi i ss(eve) aCl Shtimi i Pajisjes Suaj USB Ndërtimi i Pajisjes Suaj USB Shtimi i Konfigurimit(eve) Shtimi i Funksionit(eve) USB Nisja e Pajisjes Suaj USB
Funksionet e Ngjarjeve të Ngjarjeve
Inicializimi i Modulit të Pajisjes USB
Inicializimi i Bërthamës së Pajisjes USB
Filloni duke inicializuar bërthamën e modulit të pajisjes B duke plotësuar funksionin sl_usbd_core_init(). Shembulli më poshtë tregon plotësimin e sl_usbd_core_init().
Example – Thirrja e sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Inicializimi i Klasës/Klasave
Pasi të jetë inicializuar bërthama e modulit të pajisjes USB, duhet të inicializoni çdo klasë që keni ndërmend të përdorni. Shihni seksionin "Udhëzuesi i Programimit" të acl ss-së/s tuaj për më shumë informacion.
Ndërtimi i pajisjes suaj USB
Shtimi i Konfigurimit(eve)
Pasi ta keni inicializuar me sukses pajisjen tuaj, mund të filloni të shtoni funksionet USB në të, duke filluar me një konfigurim të ri. Një pajisje duhet të ketë të paktën një konfigurim. Për të shtuar një konfigurim(e), thirrni funksionin aa sl_usbd_core_dd_configur tion(). Ky funksion duhet të thirret për çdo konfigurim që dëshironi të shtoni. P.sh.ampMë poshtë tregon se si të shtoni një shpejtësi të plotë.
Example – Shtimi i Konfigurimit(eve) në Pajisjen Tuaj
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
11/174
Mbiview
statusi sl_status_t; uint8_t config_nbr_fs;
/* Duke shtuar një konfigurim me shpejtësi të plotë në pajisje. */
statusi = sl_usbd_core_add_configuration(0,
/* Nuk ka atribute të veçanta në konfigurim. */
100u,
/* Konsumi maksimal i energjisë: 100mA.
*/
SL_USBD_DEVICE_SPEED_FULL,
/* Konfigurimi me shpejtësi të plotë.
*/
"Konfiguro Shto Ex"ampKonfigurimi me shpejtësi të plotë",
&config_nbr_fs);
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Shtimi i funksionit(eve) USB
Pasi të keni shtuar me sukses të paktën një konfigurim në pajisjen tuaj, mund të shtoni ndërfaqet dhe pikat fundore në pajisjen tuaj. Çdo klasë USB ka nevojat e veta në lidhje me llojin, sasinë dhe parametrat e tjerë të ndërfaqes dhe pikave fundore. Pajisja USB e Silicon Labs shton ndërfaqe dhe pika fundore në klasat që ofron.
Nga aplikacioni juaj, mund të krijoni një instancë të një klase USB dhe ta shtoni atë në një konfigurim. Për më shumë informacion mbi konceptin e instancave të klasës së pajisjes USB, shihni Klasat e Pajisjeve USB. Vini re se mund të krijoni dhe të shtoni shumë instanca të ndryshme klasash në një konfigurim për të krijuar një pajisje shumëfunksionale (të përbërë).
IshampMë poshtë tregohet se si të krijoni një instancë klase dhe ta shtoni atë në një konfigurim.
Example – Shtimi i një Instance Klase në Pajisjen Tuaj
statusi sl_status_t; uint8_t class_nbr;
/* Krijo një instancë të klasës që dëshiron të përdorësh.*/ /* Vini re se në varësi të klasës, ky funksion mund të ketë më shumë argumente. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
/* Shto instancën e klasës në konfigurimin Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Numri i klasës i kthyer nga sl_usbd_ _create_instance. */
config_nbr_fs); /* Numri i konfigurimit i kthyer nga sl_usbd_core_add_configuration(). */ nëse (status ! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Nisja e pajisjes suaj USB
Si parazgjedhje, pajisja do të niset automatikisht nga detyra kryesore e pajisjes USB pasi të përfundojë inicializimi i pajisjes dhe të niset kerneli. Për të kontrolluar se kur pajisja niset dhe bëhet e dukshme nga hosti USB, përdorni përcaktimin e konfigurimit SL_USBD_AUTO_START_USB_DEVICE për të çaktivizuar funksionin e nisjes automatike. Kur është çaktivizuar, pasi të keni ndërtuar/përgatitur pajisjen tuaj, mund ta nisni atë dhe ta bëni të dukshme për hostin USB duke thirrur funksionin sl_usbd_core_start_device().
IshampMë poshtë tregon se si ta nisni pajisjen tuaj duke përdorur funksionin sl_usbd_core_start_device().
Example – Nisja e Pajisjes Suaj
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
12/174
Mbiview
statusi sl_status_t;
status = sl_usbd_core_start_device(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Funksionet e Ngjarjeve të Ngjarjeve
Moduli bazë i Pajisjes USB ofron dy funksione të dobëta që mund t'i ripërcaktoni në aplikacionin tuaj. Qëllimi i tyre është të njoftojnë kur ndodhin ngjarje të bus-it dhe konfigurimit.
Tabela – Funksionet e Ngjarjeve USB
Ngjarje
Përshkrimi
Autobus
Thirret kur ndodh ngjarja e USB Bus
Konfigurimi thirret kur ndodh ngjarja e Konfigurimit USB
Nënshkrimi i funksionit
void sl_usbd_on_bus_event(ngjarja sl_usbd_bus_event_t); void sl_usbd_on_config_event(ngjarja sl_usbd_config_event_t, uint8_t config_nbr);
Example – Funksionet e Ngjarjeve të Ngjarjeve
void sl_usbd_on_bus_event(ngjarja sl_usbd_bus_event_t) { switch (ngjarje) { rasti SL_USBD_EVENT_BUS_CONNECT:
// thirret kur kablloja USB futet në një ndërprerje të kontrolluesit pritës;
rasti SL_USBD_EVENT_BUS_DISCONNECT: // thirret kur kablli USB hiqet nga një ndërprerje e kontrolluesit pritës;
rasti SL_USBD_EVENT_BUS_RESET: // thirret kur hosti dërgon komandën e rivendosjes break;
rasti SL_USBD_EVENT_BUS_SUSPEND: // thirret kur hosti dërgon komandën pezullim break;
rasti SL_USBD_EVENT_BUS_RESUME: // thirret kur hosti dërgon komandën e zgjimit break;
parazgjedhur: pushim; } }
void sl_usbd_on_config_event(ngjarja sl_usbd_config_event_t, uint8_t config_nbr) { ndërrues (ngjarje) { rasti SL_USBD_EVENT_CONFIG_SET:
// thirret kur hosti vendos një ndërprerje konfigurimi;
rasti SL_USBD_EVENT_CONFIG_UNSET: // thirret kur një konfigurim është i pacaktuar break;
parazgjedhur: pushim; } }
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
13/174
Mbiview
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
14/174
Mbiview
Mbiview
Klasat e Pajisjeve USB
Klasat USB të disponueshme në Pajisjet USB të Silicon Labs ndajnë disa karakteristika të përbashkëta. Ky seksion shpjegon këto karakteristika dhe ndërveprimet e tyre me shtresën thelbësore.
Për më shumë informacion mbi një klasë specifike, shihni sa vijon:
Klasa CDC ACM Klasa HID Klasa MSC SCSI Klasa e Furnizuesit
Rreth Instancave të Klasave
Klasat USB të disponueshme në Pajisjen USB zbatojnë konceptin e instancave të klasës. Një instancë klase përfaqëson një funksion brenda një pajisjeje. Funksioni mund të përshkruhet nga një ndërfaqe ose nga një grup ndërfaqesh dhe i përket një klase specifike.
Çdo implementim i klasës USB ka disa konfigurime dhe funksione të përbashkëta, bazuar në konceptin e instancës së klasës. Konfigurimet dhe funksionet e përbashkëta paraqiten në tabelën më poshtë. Në titullin e kolonës 'Konstantet ose Funksioni', vendi XXXX mund të zëvendësohet me emrin e klasës: CDC, HID, MSC, CDC_ACM ose VENDOR (Furnizuesi për emrat e funksioneve).
Tabela – Konstantet dhe Funksionet që Lidhen me Konceptin e Instancave të Klasave të Shumëfishta
Konstante ose Funksion
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre ate _insta nce ()
Figura sl_usbd_XXXX_add_to_conf ()
Përshkrimi
Konfiguron numrin maksimal të instancave të klasës.
Konfiguron numrin maksimal të konfigurimeve. Gjatë inicializimit të klasës, një instancë e krijuar e klasës do t'i shtohet një ose më shumë konfigurimeve. Krijon një instancë të re të klasës.
Shton një instancë të klasës ekzistuese në konfigurimin e specifikuar të pajisjes.
Për sa i përket implementimit të kodit, klasa do të deklarojë një variabël globale lokale që përmban një strukturë kontrolli të klasës. Kjo strukturë kontrolli e klasës është e lidhur me një instancë klase dhe do të përmbajë informacione specifike për të menaxhuar instancën e klasës.
Figurat e mëposhtme tregojnë disa skenarë rastesh. Çdo figurë përfshin një kod p.sh.ampqë korrespondon me skenarin e rastit.
Figura – Instanca të Shumëfishta Klasash – Pajisja FS (1 Konfigurim me 1 Ndërfaqe) përfaqëson një pajisje tipike USB. Pajisja është me Shpejtësi të Plotë (FS) dhe përmban një konfigurim të vetëm. Funksioni i pajisjes përshkruhet nga një ndërfaqe e përbërë nga një palë pikash fundore për komunikimin e të dhënave. Krijohet një instancë klase e cila do t'ju lejojë të menaxhoni të gjithë ndërfaqen me pikën e saj fundore të shoqëruar.
Figura – Instanca të shumëfishta të klasës – Konfigurimi i Pajisjes FS 1 me 1 Ndërfaqe)
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
15/174
Mbiview
Kodi që korrespondon me Figurën - Instanca të Klasave të Shumëfishta - Pajisje FS (1 Konfigurim me 1 Ndërfaqe) është treguar në shembullinampmë poshtë.
Example – Instanca të Klasave të Shumëfishta – Konfigurimi i Pajisjes FS 1 me 1 Ndërfaqe)
statusi sl_status_t; uint8_t class_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Trajton ngjarjen e aktivizimit të klasës. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Trajton ngjarjen e çaktivizimit të klasës. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
statusi = sl_usbd_XXXX_init();
(2)
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
statusi = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&klasa_0);
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
statusi = sl_usbd_XXXX_add_to_configuration(klasa_0, konfigurimi_0);
(4)
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
(1) Çdo klasë ofron një grup funksionesh të rikthimit të thirrjes për ngjarjet e lidhjes/shkëputjes së pajisjes dhe për ngjarje specifike të klasës. Objekti i strukturës së rikthimit të thirrjes kalohet si argument kur krijohet instanca e klasës me sl_usbd_XXXX_create_instance()
funksionin.
(1) Inicializoni klasën. Të gjitha variablat e brendshme, strukturat dhe portet e klasës do të inicializohen. Vini re se funksioni Init() në disa klasa mund të marrë argumente të tjera.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
16/174
Mbiview
(2) Krijoni instancën e klasës, e cila është class_0. Funksioni sl_usbd_XXXX_create_instance() ndan një strukturë kontrolli të klasës të shoqëruar me class_0. Në varësi të klasës, sl_usbd_XXXX_create_instance() mund të ketë parametra shtesë përveç numrit të klasës që përfaqësojnë informacionin specifik të klasës të ruajtur në strukturën e kontrollit të klasës. aaa (3) Shtoni instancën cl ss, class_0, në numrin e specifikuar të konfigurimit, config_0. sl_usbd_XXXX_add_to_configuration() do të krijojë ndërfaqen 0 dhe pikat fundore IN dhe OUT të shoqëruara me të. Si rezultat, instanca e klasës përfshin ndërfaqen 0 dhe pikat fundore të saj. Çdo komunikim i bërë në ndërfaqen 0 do të përdorë numrin e instancës së klasës, class_0. Figura - Instanca të Shumëfishta Klasash - Pajisja FS (2 Konfigurime dhe Ndërfaqe të Shumëfishta) përfaqëson një shembull më kompleks.ampp.sh. Një pajisje me shpejtësi të plotë përbëhet nga dy konfigurime. Pajisja ka dy funksione që i përkasin të njëjtës klasë, por secili funksion përshkruhet nga dy ndërfaqe dhe ka një palë pikash fundore dypalëshe. Në këtë shembullample të themi, krijohen dy instanca të klasës. Çdo instancë klase shoqërohet me një grup ndërfaqesh në ndryshim nga Figura – Instanca të shumëfishta të klasës – Pajisje FS (1 Konfigurim me 1 Ndërfaqe) dhe Figura – Instanca të shumëfishta të klasës – Pajisje FS (2 Konfigurime dhe Ndërfaqe të shumëfishta) ku instanca e klasës shoqërohej me një ndërfaqe të vetme.
Figura – Instanca të shumëfishta të klasës – Konfigurimet dhe ndërfaqet e shumëfishta të pajisjes FS
Kodi që korrespondon me Figurën - Instanca të Klasave të Shumëfishta - Pajisja FS (2 Konfigurime dhe Ndërfaqe të Shumëfishta) është treguar në shembullin e mëparshëm.ampmë poshtë. Trajtimi i gabimeve është lënë jashtë për qartësi.
Example – Instanca të Klasave të Shumëfishta – Konfigurimet dhe Ndërfaqet e Shumëfishta të Pajisjes FS 2)
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
17/174
Mbiview
statusi sl_status_t; uint8_t klasa_0; uint8_t klasa_1;
statusi = sl_usbd_XXXX_init();
statusi = sl_usbd_XXXX_create_instance(&class_0); statusi = sl_usbd_XXXX_create_instance(&class_1);
statusi = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); statusi = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
statusi = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); statusi = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Inicializoni klasën. Çdo variabël, strukturë dhe portë e klasës së brendshme do të inicializohet.
(2) Krijo instancën e klasës, class_0. Funksioni sl_usbd_XXXX_create_instance() ndan një strukturë kontrolli të klasës të shoqëruar me class_0.
(3) Krijo instancën e klasës, class_1. Funksioni sl_usbd_XXXX_create_instance() ndan një strukturë tjetër kontrolli të klasës të shoqëruar me class_1.
(4) Shtoni instancën e klasës, class_0, në konfigurimin, cfg_0. sl_usbd_XXXX_add_to_configuration() do të krijojë ndërfaqen 0, ndërfaqen 1, ndërfaqet alternative dhe pikat fundore IN dhe OUT të shoqëruara. Numri i instancës së klasës, class_0, do të përdoret për çdo komunikim të dhënash në ndërfaqen 0 ose ndërfaqen 1.
(5) Shtoni instancën e klasës, class_1, në konfigurimin, cfg_0. sl_usbd_XXXX_add_to_configuration() do të krijojë ndërfaqen 2, ndërfaqen 3 dhe pikat fundore IN dhe OUT të shoqëruara me to. Numri i instancës së klasës, class_1, do të përdoret për çdo komunikim të dhënash në ndërfaqen 2 ose ndërfaqen 3.
(6) Shtoni të njëjtat instanca të klasës, class_0 dhe class_1, në konfigurimin tjetër, cfg_1.
Çdo klasë përcakton strukturën e tipit sl_usbd_XXXX_callbacks_t. Qëllimi i saj është t'i japë çdo klase një bashkësi funksionesh të rikthimit të thirrjes që do të thirren kur ndodh një ngjarje. Në secilën klasë janë të pranishme dy funksione të rikthimit të thirrjes. Ato paraqiten në tabelën më poshtë.
Tabela – Funksionet e zakonshme të kthimit të thirrjes së klasës
Fushat Përshkrimi .enable Thirret kur instanca e klasës USB aktivizohet me sukses. .disable Thirret kur instanca e klasës USB çaktivizohet.
Nënshkrimi i funksionit void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
18/174
Mbiview
Mbiview
Klasa ACM e Pajisjes USB CDC
Klasa Bazë CDC e Pajisjes USB Mbiview Nevojat për Burime të Klasës ACM CDC të Pajisjes USB nga Nënklasa ACM CDC e Pajisjes Bërthamore USBview Konfigurimi i Klasës ACM CDC të Pajisjes USB Udhëzuesi i Programimit të Klasës ACM CDC të Pajisjes USB
Ky seksion përshkruan klasën e Klasës së Pajisjeve të Komunikimit (CDC) dhe nënklasën e lidhur CDC të mbështetur nga pirgu i Pajisjeve USB të Silicon Labs. Pajisjet USB të Silicon Labs aktualisht mbështesin nënklasën e Modelit të Kontrollit Abstrakt (ACM), i cili përdoret zakonisht për emulimin serial.
CDC përfshin pajisje të ndryshme telekomunikacioni dhe rrjetëzimi. Pajisjet e telekomunikacionit përfshijnë modemët analogë, telefonat analogë dhe dixhitalë, adaptorët e terminalit ISDN, etj. Për shembullampPër shembull, pajisjet e rrjetit përmbajnë modemë ADSL dhe kabllorë, adaptorë Ethernet dhe shpërndarës. CDC përcakton një kornizë për të përfshirë standardet ekzistuese të shërbimeve të komunikimit, të tilla si V.250 (për modemët përmes rrjetit telefonik) dhe Ethernet (për pajisjet e rrjetit lokal), duke përdorur një lidhje USB. Një pajisje komunikimi është përgjegjëse për menaxhimin e pajisjeve, menaxhimin e thirrjeve kur është e nevojshme dhe transmetimin e të dhënave.
CDC përcakton shtatë grupe kryesore të pajisjeve. Çdo grup i përket një modeli komunikimi, i cili mund të përfshijë disa nënklasa. Çdo grup pajisjesh ka dokumentin e vet të specifikimeve përveç klasës bazë CDC. Shtatë grupet janë:
Rrjeti Publik Telefonik me Ndërprerje (PSTN), pajisje duke përfshirë modemët e bandës zanore, telefonat dhe pajisjet e emulimit serial. Pajisjet e Rrjetit Dixhital të Shërbimeve të Integruara (ISDN), duke përfshirë adaptorët terminalë dhe telefonat. Pajisjet e Modelit të Kontrollit Ethernet (ECM), duke përfshirë pajisjet që mbështesin familjen IEEE 802 (p.sh.: modemët kabllorë dhe ADSL, adaptorët WiFi). Pajisjet e Modalitetit të Transferimit Asinkron (ATM), duke përfshirë modemët ADSL dhe pajisje të tjera të lidhura me rrjetet ATM (stacione pune, ruterë, ndërprerës LAN). Pajisjet e Komunikimit Mobile Pa Tel (WMC), duke përfshirë pajisjet e celularëve të komunikimit shumëfunksionalë të përdorura për të menaxhuar komunikimet zanore dhe të të dhënave. Pajisjet e Modelit të Emulimit Ethernet (EEM) të cilat shkëmbejnë të dhëna të përshtatura me Ethernet. Pajisjet e Modelit të Kontrollit të Rrjetit (NCM), duke përfshirë pajisjet e rrjetit me shpejtësi të lartë (modemët e Qasjes së Paketave me Shpejtësi të Lartë, Pajisjet Terminale Linjore).
CDC dhe implementimi i nënklasës së lidhur përputhen me specifikimet e mëposhtme:
Bus Universal Serial, Përkufizimet e Klasave për Pajisjet e Komunikimit, Rishikimi 1.2, 3 Nëntor 2010. Bus Universal Serial, Komunikimet, Nënklasa për Pajisjet PSTN, Rishikimi 1.2, 9 Shkurt 2007.
Klasa Bazë CDC e Pajisjes USB Mbiview
Një pajisje CDC përbëhet nga ndërfaqet e mëposhtme për të zbatuar aftësinë e komunikimit:
Ndërfaqja e Klasës së Komunikimit (CCI) është përgjegjëse për menaxhimin e pajisjes dhe opsionalisht për menaxhimin e thirrjeve.
Menaxhimi i pajisjes mundëson konfigurimin dhe kontrollin e përgjithshëm të pajisjes dhe njoftimin e ngjarjeve te hosti. Menaxhimi i thirrjeve mundëson vendosjen dhe përfundimin e thirrjeve. Menaxhimi i thirrjeve mund të multipleksohet përmes një DCI. Një CCI është i detyrueshëm për të gjitha pajisjet CDC. Ai identifikon funksionin CDC duke specifikuar modelin e komunikimit të mbështetur nga pajisja CDC. Ndërfaqja(t) që pasojnë CCI mund të jetë çdo ndërfaqe e përcaktuar e klasës USB, siç është Audio ose një ndërfaqe specifike e shitësit. Ndërfaqja specifike e shitësit përfaqësohet posaçërisht nga një DCI.
Ndërfaqja e Klasës së të Dhënave (DCI) është përgjegjëse për transmetimin e të dhënave. Të dhënat e transmetuara dhe/ose të marra nuk ndjekin një rregull specifik.
format. Të dhënat mund të jenë të dhëna të papërpunuara nga një linjë komunikimi, të dhëna që ndjekin një format të patentuar, etj. Të gjitha DCI-të që ndjekin CCI-në mund të shihen si ndërfaqe vartëse.
Një pajisje CDC duhet të ketë të paktën një CCI dhe zero ose më shumë DCI. Një CCI dhe çdo DCI vartëse së bashku ofrojnë një veçori për hostin. Kjo aftësi quhet edhe një funksion. Në një pajisje të përbërë CDC, mund të keni disa
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
19/174
Mbiview
funksione. Prandaj, pajisja do të përbëhet nga disa grupe CCI dhe DCI(s) siç tregohet në Figurën - Pajisja e Përbërë CDC.
Figura – Pajisja e përbërë CDC
Një pajisje CDC ka të ngjarë të përdorë kombinimin e mëposhtëm të pikave fundore:
Një palë pikash fundore kontrolli IN dhe OUT të quajtura pika fundore parazgjedhur. Një pikë fundore opsionale IN me shumicë ose ndërprerje. Një palë pikash fundore IN dhe OUT me shumicë ose izokrone. Vini re se pirgu i pajisjeve USB të Silicon Labs aktualisht nuk i mbështet pikat fundore izokrone.
Tabela më poshtë tregon përdorimin e pikave të ndryshme fundore dhe nga cila ndërfaqe e CDC-së përdoren ato.
Tabela – Përdorimi i pikës fundore të CDC-së
Pika përfundimtare
Kontrolli IN
Kontrollo OUT
Ndërprerje ose pjesërisht IN Pjesërisht ose izokron IN Pjesërisht ose izokron
JASHTË
Drejtimi
Pajisje-për-host
Strehuesi-në-pajisje
Pajisje-për-host
Pajisje-për-host
Strehuesi-në-pajisje
Përdorimi i ndërfaqes
CCI
Kërkesa standarde për numërim, kërkesa specifike për klasën, pajisje
menaxhimi dhe opsionalisht menaxhimi i thirrjeve.
CCI
Kërkesa standarde për numërim, kërkesa specifike për klasën, pajisje
menaxhimi dhe opsionalisht menaxhimi i thirrjeve.
CCI
Njoftim për ngjarje, të tilla si zbulimi i ziles, statusi i linjës seriale, statusi i rrjetit.
DCI
Komunikim i të dhënave të papërpunuara ose të formatuara.
DCI
Komunikim i të dhënave të papërpunuara ose të formatuara.
Shumica e pajisjeve të komunikimit përdorin një pikë fundore ndërprerjeje për të njoftuar hostin për ngjarjet. Pikat fundore izokrone nuk duhet të përdoren për transmetimin e të dhënave kur një protokoll i patentuar mbështetet në ritransmetimin e të dhënave në rast të gabimeve të protokollit USB. Komunikimi izokron mund të humbasë në mënyrë të natyrshme të dhëna pasi nuk ka mekanizma ripërpjekjeje.
Shtatë modelet kryesore të komunikimit përfshijnë disa nënklasa. Një nënklasë përshkruan mënyrën se si pajisja duhet të përdorë CCI-në për të trajtuar menaxhimin e pajisjes dhe menaxhimin e thirrjeve. Tabela më poshtë tregon të gjitha nënklasat e mundshme dhe modelin e komunikimit të cilit i përkasin.
Tabela – Nënklasat e CDC-së
Nënklasa
Modeli i Kontrollit të Linjës Direkte Modeli Abstrakt i Kontrollit
Modeli i Komunikimit
PSTN
PSTN
Exampnjë numër pajisjesh që përdorin këtë nënklasë
Pajisjet modem të kontrolluara direkt nga hosti USB
Pajisjet e emulimit serial, pajisjet modem të kontrolluara përmes një grupi komandash seriale
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
20/174
Mbiview
Nënklasa
Modeli i Komunikimit
Exampnjë numër pajisjesh që përdorin këtë nënklasë
Modeli i Kontrollit të Telefonit
PSTN
Modeli ISDN i Kontrollit me Shumë Kanale
Modeli i Kontrollit CAPI ISDN
Modeli i Kontrollit ECM të Rrjetit Ethernet
Rrjetëzimi i ATM-ve
ATM
Modeli i kontrollit
Modeli i Kontrollit të Telefonit Pa Tel
WMC
Menaxhimi i Pajisjeve WMC
Modeli i Linjës së Drejtpërdrejtë Mobile
WMC
OBEX
WMC
Modeli EEM i Emulimit Ethernet
Modeli i kontrollit të rrjetit
NCM
Pajisjet e telefonisë zanore
Adaptorë terminali me tarifë bazë, adaptorë terminali me tarifë parësore, telefona
Adaptorë terminalë me shpejtësi bazë, adaptorë terminalë me shpejtësi parësore, telefona, modemë kabllorë DOC-SIS, modemë ADSL që mbështesin emulimin PPPoE, adaptorë Wi-Fi (familja IEEE 802.11), adaptorë IEEE 802.3, modemë ADSL
Pajisjet terminale mobile që lidhen me pajisjet pa tel
Pajisje terminale mobile që lidhen me pajisje pa tel Pajisje terminale mobile që lidhen me pajisje pa tel
Pajisje terminale mobile që lidhen me pajisje pa tel Pajisje që përdorin korniza Ethernet si shtresën tjetër të transportit. Nuk është menduar për pajisje të rrugëzimit dhe lidhjes me internetin Adaptorët IEEE 802.3 që mbajnë bandwidth të të dhënave me shpejtësi të lartë në rrjet
Nevojat për Burime të Klasës ACM CDC të Pajisjes USB nga Bërthama
Çdo herë që shtoni një instancë të klasës CDC ACM në një konfigurim USB nëpërmjet një thirrjeje në funksionin sl_usbd_cdc_acm_add_to_configuration(), burimet e mëposhtme do të ndahen nga bërthama.
Burim
Ndërfaqet Ndërfaqet alternative Pikat fundore Grupet e ndërfaqeve
Sasia
2 2 3 1
Vini re se këto numra janë për çdo konfigurim. Kur konfiguroni vlerat e konfigurimit SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY dhe SL_USBD_DESCRIPTOR_QUANTITY, mos harroni të merrni parasysh se sa konfigurime do të shtohen në klasë. Për vlerën e konfigurimit SL_USBD_OPEN_ENDPOINTS_QUANTITY, meqenëse pikat fundore hapen vetëm kur një konfigurim vendoset nga hosti, thjesht duhet të merrni parasysh numrin e pikave fundore të nevojshme për një instancë të klasës.
Nënklasa CDC ACM e Pajisjes USB Mbiview
Klasa bazë CDC përbëhet nga një Ndërfaqe e Klasës së Komunikimit (CCI) dhe një Ndërfaqe e Klasës së të Dhënave (DCI), e cila diskutohet në detaje në Klasën Bazë CDC të Pajisjes USB.view Ky seksion diskuton një CCI të tipit ACM. Ai përbëhet nga një pikë fundore e parazgjedhur për elementin e menaxhimit dhe një pikë fundore ndërprerjeje për elementin e njoftimit. Një palë pikash fundore të mëdha përdoren për të mbartur të dhëna të paspecifikuara përmes DCI-së.
Nënklasa ACM përdoret nga dy lloje pajisjesh komunikimi:
Pajisje që mbështesin komandat AT (për shembull, modemet me bandë zanore). Pajisjet e emulimit serial të cilat quhen edhe pajisje me port virtual COM.
Ekzistojnë disa kërkesa specifike për nënklasën për nënklasën ACM. Ato ju lejojnë të kontrolloni dhe konfiguroni pajisjen. Lista dhe përshkrimi i plotë i të gjitha kërkesave ACM mund të gjendet në specifikim.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
21/174
Mbiview Nënklasa për Pajisjet PSTN, rishikimi 1.2, 9 shkurt 2007=, seksioni 6.2.2.
Nga kjo listë, nënklasa Silicon Labs9 ACM mbështet sa vijon:
Tabela – Kërkesat ACM të Mbështetura nga Silicon Labs
Përshkrimi i Kërkesës së Nënklasës
SetCommFeature GetCommFeature ClearCommFeature
Hosti e dërgon këtë kërkesë për të kontrolluar cilësimet për një veçori të caktuar komunikimi. Nuk përdoret për emulim serial.
Hosti dërgon këtë kërkesë për të marrë cilësimet aktuale për një veçori të caktuar komunikimi. Nuk përdoret për emulim serial.
Hosti dërgon këtë kërkesë për të pastruar cilësimet për një veçori të caktuar komunikimi. Nuk përdoret për emulim serial.
SetLineCoding
Hosti dërgon këtë kërkesë për të konfiguruar cilësimet e pajisjes ACM: shpejtësinë e baud-it, numrin e biteve të ndalimit, llojin e paritetit dhe numrin e biteve të të dhënave. Për një emulim serial, kjo kërkesë dërgohet automatikisht nga një terminal serial sa herë që konfiguroni cilësimet seriale për një port virtual COM të hapur.
GetLineCoding
Hosti dërgon këtë kërkesë për të marrë cilësimet aktuale të ACM-së (shpejtësia e baud-it, bitët e ndalimit, pariteti, bitët e të dhënave). Për një emulim serial, terminalet serialë e dërgojnë këtë kërkesë automatikisht gjatë hapjes së portit virtual COM.
SetControlLineState. Hosti dërgon këtë kërkesë për të kontrolluar operatorin për modemet gjysmë-dupleks dhe për të treguar nëse Pajisjet Terminale të të Dhënave (DTE) janë gati apo jo. Në rastin e emulimit serial, DTE është një terminal serial. Për një emulim serial, disa terminale seriale ju lejojnë të dërgoni këtë kërkesë me kontrollet e vendosura.
SetBreak
Hosti dërgon këtë kërkesë për të gjeneruar një ndërprerje në stilin RS-232. Për një emulim serial, disa terminale seriale ju lejojnë të dërgoni këtë kërkesë.
Nënklasa Silicon Labs9 ACM përdor pikën fundore të ndërprerjes IN për të njoftuar hostin rreth gjendjes aktuale të linjës seriale.
Gjendja e linjës është një bitmap që informon hostin rreth:
Të dhënat e hedhura për shkak të tejkalimit Gabim pariteti Gabim në kornizë Gjendja e zbulimit të sinjalit të unazës Gjendja e mekanizmit të zbulimit të ndërprerjes Gjendja e bartësit të transmetimit Gjendja e zbulimit të bartësit të marrësit
Implementimi i nënklasës Silicon Labs9 ACM përputhet me specifikimet e mëposhtme:
Bus Universal Serial, Komunikime, Nënklasa për Pajisjet PSTN, rishikimi 1.2, 9 shkurt 2007.
Konfigurimi i Klasës ACM CDC të Pajisjes USB
Ky seksion diskuton se si të konfigurohet Klasa CDC ACM (Klasa e Pajisjeve të Komunikimit, Modeli Abstrakt i Kontrollit). Ekzistojnë dy grupe parametrash të konfigurimit:
Konfigurimet specifike të aplikacionit të klasës ACM të pajisjes USB CDC Konfigurimet e instancës së klasës ACM të pajisjes USB CDC
Konfigurimet specifike të aplikacionit të klasës CDC ACM të pajisjes USB
Klasa Bazë CDC Nënklasa ACM
Klasa Bazë e CDC-së
Së pari, për të përdorur modulin e klasës CDC të pajisjes USB të Silicon Labs, do t'ju duhet të rregulloni konfigurimin e kohës së kompajlimit të CDC #define-s sipas nevojave të aplikacionit tuaj. Ato rigrupohen brenda kokës sl_usbd_core_config.h. file nën seksionin CDC. Qëllimi i tyre është të informojnë modulin e pajisjes USB se sa objekte CDC USB duhet të ndajnë.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
22/174
Mbiview
Tabela më poshtë përshkruan çdo fushë konfigurimi të disponueshme në këtë strukturë konfigurimi.
Tabela – Përcaktimet e Konfigurimit CDC të Pajisjes USB
Emri i konfigurimit
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY
Përshkrimi
Numri i instancave të klasës që do të ndani nëpërmjet një thirrjeje për funksionin
sl_usbd_cdc_acm_create_instance().
Numri i konfigurimeve. Instancat e klasës ACM mund të shtohen në një ose më shumë konfigurime aaaa duke i bashkangjitur funksionit sl_usbd_cdc_acm_add_to_configuration().
Numri total i ndërfaqeve të të dhënave (DCI) për të gjitha funksionet CDC. Çdo funksion CDC ACM i shtuar vi c ll në funksionin sl_usbd_cdc_acm_create_instance() do të shtojë dt interf ce.
Vlera e paracaktuar
2
1
2
Nënklasa ACM
Nënklasa ACM ka një konfigurim në kohën e kompajlimit të paraqitur në tabelën më poshtë.
Tabela – Konfigurimi i Pajisjes USB CDC ACM Përcaktimi
Emri i konfigurimit
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Përshkrimi
Konfiguron numrin e instancave të nënklasave që do të caktoni nëpërmjet një thirrjeje për
funksioni sl_usbd_cdc_acm_create_instance().
Vlera e paracaktuar
2
Konfigurimet e Instancës së Klasës ACM të CDC të Pajisjes USB
Ky seksion përcakton konfigurimet që lidhen me instancat e klasës seriale CDC ACM. Krijimi i instancës së klasës, gjendja e linjës, intervali i thirrjes, aftësitë e menaxhimit të p_acm_callbacks
Krijimi i Instancës së Klasës
Për të krijuar një instancë të klasës seriale CDC ACM, thirrni funksionin T a sl_usbd_cdc_acm_create_instance(). Ky funksion merr tre argumente konfigurimi, siç përshkruhet këtu.
intervali_i_gjendjes_së_vijës
Ky është intervali (në milisekonda) që instanca juaj e klasës seriale CDC ACM do të raportojë njoftimet e gjendjes së linjës te hosti T aa. Ky v lue duhet të jetë në fuqi të dys (1, 2, 4, 8, 16, etj.).
call_mgmt_capabilities
Bitmap i Aftësive të Menaxhimit të Thirrjeve. Vlerat e mundshme të bitmap janë si më poshtë:
Vlera (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Përshkrimi
Pajisja merret vetë me menaxhimin e thirrjeve. Pajisja mund të dërgojë/marrë informacion mbi menaxhimin e thirrjeve nëpërmjet një ndërfaqeje të Klasës së të Dhënave.
p_acm_callbacks
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
23/174
Mbiview
aa M aa p_acm_callbacks është tregues për strukturën e tipit sl_usbd_cdc_acm_callbacks_t. Qëllimi i tij është t'i japë CDC AC Cl ss bashkësinë e funksioneve të rikthimit të thirrjes që do të thirren kur ndodh një ngjarje CDC ACM. Jo të gjitha rikthimet e thirrjes janë të detyrueshme dhe një tregues null (NULL) mund të kalohet në variablin e strukturës callbacks kur rikthimi i thirrjes nuk është i nevojshëm. Tabela më poshtë përshkruan çdo fushë konfigurimi të disponueshme në këtë strukturë konfigurimi.
Tabela – Struktura e Konfigurimit sl_usbd_cdc_acm _callbacks_t
Fushat
Përshkrimi
.aktivizo
Thirret kur instanca e klasës USB është e aktivizuar
me sukses.
.disable
Thirret kur instanca e klasës USB është e çaktivizuar.
.line_control_changed Thirret kur pranohet një ndryshim i kontrollit të linjës.
line_coding_changed Thirret kur pranohet një ndryshim në kodimin e linjës.
Nënshkrimi i funksionit
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Shih seksionin Regjistrimi i Thirrjeve të Njoftimit të Ngjarjeve për funksionet e kthimit të thirrjeve, p.sh.ample.
Udhëzuesi i Programimit të Klasës CDC ACM të Pajisjes USB
Ky seksion shpjegon se si të përdoret klasa e Modelit Abstrakt të Kontrollit CDC. Inicializimi i Klasës ACM CDC të Pajisjes USB Shtimi i një Instance të Klasës ACM CDC të Pajisjes USB në Pajisjen Tuaj Komunikimi duke përdorur Klasën ACM CDC
Inicializimi i Klasës ACM CDC të Pajisjes USB
Për të shtuar funksionalitetin e klasës CDC ACM në pajisjen tuaj, së pari duhet të inicializoni klasën bazë CDC dhe nënklasën ACM duke plotësuar funksionet sl_usbd_cdc_init() dhe sl_usbd_cdc_acm_init(). Shembulli më poshtë tregon se si të plotësoni sl_usbd_cdc_init() dhe sl_usbd_cdc_acm_init() duke përdorur argumente standarde.
Example – Inicializimi i Klasës CDC ACM
statusi sl_status_t;
status = sl_usbd_cdc_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
status = sl_usbd_cdc_acm_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Shtimi i një instance të klasës CDC ACM të pajisjes USB në pajisjen tuaj
Për të shtuar funksionalitetin e klasës CDC ACM në pajisjen tuaj, duhet të krijoni një instancë dhe pastaj ta shtoni atë në konfigurimin(et) e pajisjes suaj.
Krijimi i një instance të klasës CDC ACM
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
24/174
Mbiview
Shtimi i Instancës së Klasës CDC ACM në Konfigurimin(et) e Pajisjes Suaj Regjistrimi i Thirrjeve Kthyese të Njoftimeve të Ngjarjeve
Krijimi i një instance të klasës CDC ACM
aa M aaa Krijo instancën e klasit CDC AC duke thirrur funksionin sl_usbd_cdc_acm_create_instance(). Shembulli më poshtë tregon se si të krijoni instancën e klasit CDC AC duke përdorur sl_usbd_cdc_acm_create_instance().
Example – Krijimi i një Funksioni CDC ACM nëpërmjet sl_usbd_cdc_acm_create_instance()
uint8_t nënklasa_nbr; statusi sl_status_t;
statusi = 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);
nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Shtimi i Instancës së Klasës CDC ACM në Konfigurimin(et) e Pajisjes Suaj
Pasi të keni krijuar një instancë të klasës CDC ACM, mund ta shtoni atë në një konfigurim duke thirrur funksionin
sl_usbd_cdc_acm_add_to_configuration().
Shembulli më poshtë tregon se si të ekzekutohet funksioni sl_usbd_cdc_acm_add_to_configuration().
Example – Thirrje për USBD ACM sl_usbd_cdc_acm_add_to_configuration()
statusi sl_status_t;
statusi = sl_usbd_cdc_acm_add_to_configuration(nënklasa_nbr,
(1)
config_nbr_fs);
(2)
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
aaa (1) Numri ss i Cl që duhet shtuar në konfigurim i kthyer nga sl_usbd_cdc_acm_create_instance(). (2) Numri i konfigurimit (këtu duke e shtuar në një konfigurim me shpejtësi të plotë).
Regjistrimi i Thirrjeve Kthyese të Njoftimeve të Ngjarjeve
Klasa CDC ACM Serial mund të njoftojë aplikacionin tuaj për çdo ndryshim në kontrollin e linjës ose kodimin nëpërmjet funksioneve të njoftimit të rikthimit të thirrjes. Një strukturë e funksioneve të rikthimit të thirrjes mund të kalohet si argument gjatë krijimit të instancës ACM. Vini re se këto rikthime të thirrjes janë opsionale. P.sh.ample – Regjistrimi i Thirrjeve të Kthyera në CDC ACM ilustron përdorimin e funksioneve të regjistrimit të thirrjeve të kthimit. P.sh.ample – Implementimi i thirrjeve të CDC ACM tregon një ishample e zbatimit të funksioneve të rikthimit të thirrjes.
Example – Regjistrimi i Thirrjeve të Kthyera të CDC ACM
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
25/174
Mbiview
uint8_t nënklasa_nbr; statusi sl_status_t;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
statusi = 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);
nëse (status ! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Example – Implementimi i Thirrjeve të Kthyera të CDC ACM
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
nënklasa_nbr,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t baudrate_new;
uint8_t parity_new;
uint8_t stop_bits_new;
uint8_t data_bits_new;
/* PËR TË BËRË Apliko kodim të ri të linjës.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Parity; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;
kthim (i vërtetë);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO Zbato kontrollin e linjës së re. */ 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 = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? e vërtetë : e gabuar;
}
(1) Është e rëndësishme t'i ktheni këtij funksioni vlerën false nëse kodimi i linjës që zbatohet dështon. Përndryshe, ktheni vlerën true.
Komunikimi duke përdorur klasën CDC ACM
Statusi serial
Kodimi i linjës Kontrolli i linjës
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
26/174
Mbiview
Komunikimi i Instancës së Nënklasës së Gjendjes së Linjës
Statusi serial
Kodimi i linjës
Pritësi USB kontrollon kodimin e linjës (shpejtësia e baud-it, pariteti, etj.) të pajisjes CDC ACM. Kur është e nevojshme, aplikacioni është përgjegjës për caktimin e kodimit të linjës. Ofrohen dy funksione për të marrë dhe vendosur kodimin aktual të linjës, siç përshkruhet në tabelën më poshtë.
Tabela – Funksionet e Kodimit të Linjës CDC ACM
Funksioni
sl_usbd_cdc_acm_g e t_line _cod ing ()
sl_usbd_cdc_acm_s e t_line _cod ing ()
Përshkrimi
Aplikacioni juaj mund të marrë cilësimet aktuale të kodimit të linjës të vendosura ose nga hosti me kërkesat SetLineCoding ose me funksionin sl_usbd_cdc_acm_set_line_coding().
Aplikacioni juaj mund të caktojë kodimin e linjës. Pritësi mund t'i marrë cilësimet me kërkesën GetLineCoding.
Kontrolli i linjës
Pritësi USB kontrollon kontrollin e linjës (kunjat RTS dhe DTR, sinjalin e ndërprerjes, etj.) të pajisjes CDC ACM. Kur është e nevojshme, aplikacioni juaj është përgjegjës për zbatimin e kontrolleve të linjës. Ofrohet një funksion për të marrë dhe vendosur kontrollet aktuale të linjës, siç përshkruhet në tabelën më poshtë.
Tabela – Funksionet e Kontrollit të Linjës CDC ACM
Funksioni
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()
Aplikacioni juaj mund të marrë gjendjen aktuale të linjës së kontrollit të vendosur nga hosti me kërkesën SetControlLineState.
Shteti i linjës
Pritësi USB merr gjendjen e linjës në një interval të rregullt. Aplikacioni juaj duhet ta përditësojë gjendjen e linjës sa herë që ajo ndryshon. Kur është e nevojshme, aplikacioni juaj është përgjegjës për caktimin e gjendjes së linjës. Ofrohen dy funksione për të marrë dhe vendosur kontrollet aktuale të linjës, siç përshkruhet në tabelën më poshtë.
Tabela – Funksionet e gjendjes së linjës CDC ACM
Funksioni
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Aplikacioni juaj mund të caktojë çdo ngjarje të gjendjes së linjës. Gjatë caktimit të gjendjes së linjës, një transferim i ndërprerjes IN i dërgohet hostit për të informuar për një ndryshim në gjendjen e linjës seriale.
Aplikacioni mund të fshijë dy ngjarje të gjendjes së linjës: zbulimin e bartësit të transmetimit dhe zbulimin e bartësit të marrësit. Të gjitha ngjarjet e tjera vetë-fshihen nga nënklasa e emulimit serial ACM.
Komunikimi i Instancës së Nënklasës
Nënklasa ACM e Silicon Labs ofron funksionet e mëposhtme për të komunikuar me hostin. Për më shumë detaje rreth parametrave functions9, shihni referencën e Funksioneve të Nënklasës ACM të CDC.
Emri i funksionit
sl_usb d _cd c_acm_ re ad () sl_usb d _cd c_acm_write ()
Operacioni
Merr të dhëna nga hosti përmes një pike fundore bulk OUT. Ky funksion po bllokon. Dërgon të dhëna te hosti përmes një pike fundore bulk IN. Ky funksion po bllokon.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
27/174
Mbiview
Tabela – Përmbledhja e API-t të Komunikimit CDC ACM aaaaa sl_usbd_cdc_acm_read() dhe sl_usbd_cdc_acm_write() ofrojnë komunikim sinkron, që do të thotë se transferimi po bllokohet. Me fjalë të tjera, me thirrjen e funksionit, aplikacioni bllokohet derisa transferimi të përfundojë me ose pa gabim. Mund të specifikohet një kohëzgjatje për të shmangur pritjen e përjetshme. ShembulliampMë poshtë tregohet një shembull leximi dhe shkrimiample që merr të dhëna nga hosti duke përdorur pikën fundore bulk OUT dhe dërgon të dhëna te hosti duke përdorur pikën fundore bulk IN.
Listimi – Lexim dhe Shkrim Serial Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statusi;
statusi = sl_usbd_cdc_acm_read(nënklasa_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
statusi = sl_usbd_cdc_acm_write(nënklasa_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
T aaaaa M (1) numri i instancës së klasës u krijua me sl_usbd_cdc_acm_create_instance() ofron një referencë të brendshme për nënklasën AC për të drejtuar transferimin në pikën fundore të duhur OUT ose IN. (2) Aplikacioni juaj duhet të sigurojë që buffer-i i ofruar funksionit është mjaftueshëm i madh për të akomoduar të gjitha të dhënat. Përndryshe, mund të ndodhin probleme me sinkronizimin. (3) Për të shmangur një situatë bllokimi të pafund, specifikoni një kohëzgjatje të shprehur në milisekonda. Një vlerë prej 809 bën që detyra e aplikacionit të presë përgjithmonë. (4) Aplikacioni ofron buffer-in e inicializuar të transmetimit.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
28/174
Mbiview
Mbiview
Klasa HID e Pajisjes USB
Klasa HID e Pajisjes USB Mbiview Nevojat për Burime të Klasës HID të Pajisjes USB nga Pajisja Bërthamore USB Konfigurimi i Klasës HID të Pajisjes USB Udhëzuesi i Programimit të Klasës HID të Pajisjes USB Detyrë për Raportet Periodike të Hyrjes HID
Ky seksion përshkruan klasën e Pajisjes së Ndërfaqes Njerëzore (HID) të mbështetur nga Pajisja USB e Silicon Labs.
Klasa HID përfshin pajisjet e përdorura nga njerëzit për të kontrolluar operacionet e kompjuterit, të tilla si tastierat, mausët, pajisjet e drejtimit dhe pajisjet e lojërave.
Klasa HID mund të përdoret gjithashtu në një pajisje të përbërë që përmban kontrolle të tilla si doreza, çelësa, butona dhe rrëshqitës. Për shembullampKontrollet e zërit, të heshtjes dhe të volumit në një kufje audio kontrollohen nga funksioni HID i kufjeve. Klasa HID mund të shkëmbejë të dhëna për çdo qëllim duke përdorur vetëm transferimet e kontrollit dhe ndërprerjeve.
Klasa HID është një nga klasat USB më të vjetra dhe më të përdorura gjerësisht. Të gjitha sistemet kryesore operative të hostit ofrojnë një drajver nativ për të menaxhuar pajisjet HID, prandaj një sërë pajisjesh specifike të shitësit funksionojnë me klasën HID. Kjo klasë përfshin gjithashtu lloje të ndryshme të artikujve të daljes, të tilla si LED, audio, reagime taktile, etj.
Implementimi i HID përputhet me specifikimet e mëposhtme:
Përkufizimi i Klasës së Pajisjes për Pajisjet e Ndërfaqes Njerëzore (HID), 27/6/01, Versioni 1.11. Tabelat e Përdorimit të Autobusit Universal Serial HID, 28/10/2004, Versioni 1.12.
Klasa HID e Pajisjes USB Mbiview
Mbiview
Një pajisje HID përbëhet nga pikat fundore të mëposhtme:
Një palë pikash fundore kontrolli IN dhe OUT të quajtura pika fundore e parazgjedhur Një pikë fundore ndërprerjeje IN Një pikë fundore ndërprerjeje opsionale OUT
Tabela më poshtë përshkruan përdorimin e pikave të ndryshme fundore:
Tabela – Përdorimi i Pikave Endore të Klasës HID
Përdorimi i Drejtimit të Pikës Funale
Kontrolli IN
Kontrolli
JASHTË
Ndërprerje Hyrjeje
Ndërprisni
JASHTË
Pajisje-për-host
Strehuesi-në-pajisje
Pajisje-për-host
Strehuesi-në-pajisje
Kërkesa standarde për numërim, kërkesa specifike për klasën dhe komunikim të të dhënave (Hyrje, Raportet e karakteristikave të dërguara te hosti me kërkesën GET_REPORT). Kërkesa standarde për numërim, kërkesa specifike për klasën dhe komunikim të të dhënave (Dalje, Raportet e karakteristikave të marra nga hosti me kërkesën SET_REPORT). Komunikim të dhënash (Hyrje dhe Raportet e karakteristikave).
Komunikimi i të dhënave (Raportet e daljes dhe të karakteristikave).
Raportoni
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
29/174
Mbiview
Një host dhe një pajisje HID shkëmbejnë të dhëna duke përdorur raporte. Një raport përmban të dhëna të formatuara që japin informacion në lidhje me kontrollet dhe entitetet e tjera fizike të pajisjes HID. Një kontroll është i manipulueshëm nga përdoruesi dhe operon një aspekt të pajisjes. Për shembullampP.sh., një kontroll mund të jetë një buton në një maus ose tastierë, një çelës, etj. Entitete të tjera e informojnë përdoruesin për gjendjen e disa veçorive të pajisjes. Për shembullampLe të themi, dritat LED në tastierë njoftojnë përdoruesin për kyçjen e kapitalit të ndezur, për aktivizimin e tastierës numerike, etj.
Formati dhe përdorimi i të dhënave të raportit kuptohet nga hosti duke analizuar përmbajtjen e një përshkruesi raporti. Analizimi i përmbajtjes bëhet nga një analizues. Përshkruesi i raportit përshkruan të dhënat e ofruara nga secili kontroll në një pajisje. Ai përbëhet nga artikuj që janë pjesë informacioni rreth pajisjes dhe përbëhen nga një parashtesë 1-bajtëshe dhe një gjatësi të ndryshueshme.
të dhëna. Për më shumë detaje rreth formatit të artikullit, referojuni
1.11=, seksioni 5.6 dhe 6.2.2.
Ekzistojnë tre lloje kryesore të artikujve:
Artikulli kryesor përcakton ose grupon lloje të caktuara të fushave të të dhënave.
Elementi global përshkruan karakteristikat e të dhënave të një kontrolli.
Elementi lokal përshkruan karakteristikat e të dhënave të një kontrolli.
Çdo lloj artikulli përcaktohet nga funksione të ndryshme. Një funksion artikulli mund të quhet edhe tagNjë funksion i artikullit mund të shihet si një nën-artikull që i përket njërit prej tre llojeve kryesore të artikujve. Tabela më poshtë ofron një përmbledhje të shkurtër.view të funksioneve të artikullit 9 në secilin lloj artikulli. Për një përshkrim të plotë të artikujve në secilën kategori, shihni
Tabela – Përshkrimi i Funksionit të Artikullit për Çdo Lloj Artikulli
Funksioni i Llojit të Artikullit
Përshkrimi
Hyrja kryesore
Përshkruan informacion në lidhje me të dhënat e ofruara nga një ose më shumë kontrolle fizike.
Dalja Kryesore Përshkruan të dhënat e dërguara në pajisje.
Veçori kryesore
Përshkruan informacionin e konfigurimit të pajisjes të dërguar ose të marrë nga pajisja, i cili ndikon në sjelljen e përgjithshme të pajisjes ose të njërit prej përbërësve të saj.
Artikuj të lidhur me Grupin Kryesor të Koleksionit (Hyrje, Dalje ose Karakteristikë).
Fundi kryesor i Mbyll një koleksion. Koleksioni
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
30/174
Mbiview
Funksioni i Llojit të Artikullit
Përshkrimi
Faqja e Përdorimit Global
Identifikon një funksion të disponueshëm brenda pajisjes.
Logjika Globale Përcakton kufirin e poshtëm të vlerave të raportuara në njësi logjike. Minimumi
Logjika Globale Përcakton kufirin e sipërm të vlerave të raportuara në njësi logjike. Maksimumi
Fizika Globale Përcakton limitin e poshtëm të vlerave të raportuara në njësi fizike, që është Minimumi Logjik i shprehur në njësi fizike.
Fizika Globale Përcakton limitin e sipërm të vlerave të raportuara në njësi fizike, që është Maksimumi Logjik i shprehur në njësi fizike.
Njësia Globale
Tregon eksponentin e njësisë në bazën 10. Eksponenti varion nga -8 në +7.
Eksponent
Njësia Globale
Tregon njësinë e vlerave të raportuara. Për shembull, gjatësia, masa, njësitë e temperaturës, etj.
Madhësia e Raportit Global
Tregon madhësinë e fushave të raportit në bit.
ID-ja Globale e Raportit Tregon prefiksin e shtuar në një raport të caktuar.
Numri Global i Raporteve
Tregon numrin e fushave të të dhënave për një artikull.
Shtytje Globale
Vendos një kopje të tabelës globale të gjendjes së artikujve në grumbullin e CPU-së.
Pop Global
Zëvendëson tabelën e gjendjes së artikullit me strukturën e fundit nga pirgu.
Përdorimi lokal
Përfaqëson një indeks për të përcaktuar një Përdorim specifik brenda një Faqeje Përdorimi. Ai tregon përdorimin e sugjeruar nga shitësi për një kontroll ose grup kontrollesh specifik. Një përdorim i jep informacion një zhvilluesi aplikacioni rreth asaj që po mat në të vërtetë një kontroll.
Përdorimi lokal
Përcakton përdorimin fillestar të shoqëruar me një varg ose bitmap.
Minimumi
Përdorimi lokal
Përcakton përdorimin përfundimtar të shoqëruar me një varg ose bitmap.
Maksimumi
Emërtuesi Lokal Përcakton pjesën e trupit të përdorur për një kontroll. Indeksi tregon një emërtues në Fizik.
Indeksi
përshkrues.
Përcaktuesi Lokal Përcakton indeksin e përcaktuesit fillestar të shoqëruar me një varg ose bitmap. Minimumi
Përcaktuesi Lokal Përcakton indeksin e përcaktuesit përfundimtar të shoqëruar me një varg ose bitmap. Maksimumi
Indeksi Lokal i Vargut
Indeksi i vargut për një përshkrues të vargut. Ai lejon që një varg të shoqërohet me një artikull ose kontroll të caktuar.
Vargu Lokal
Specifikon indeksin e vargut të parë kur caktohet një grup vargjesh të njëpasnjëshme në kontrollet në një varg.
Minimumi ose bitmap.
Lokal Lokal
Maksimumi i vargut
Kufizues
Specifikon indeksin e vargut të fundit kur caktohet një grup vargjesh sekuenciale te kontrollet në një varg ose bitmap.
Përcakton fillimin ose fundin e një bashkësie artikujsh lokalë.
Të dhënat e kontrollit 9 duhet të përcaktojnë të paktën artikujt e mëposhtëm:
Hyrje, Dalje ose Karakteristikë Artikujt kryesorë Përdorimi Artikull lokal Përdorimi Faqja Artikull global Minimum logjik Artikull global Maksimum logjik Artikull global Madhësia e raportit Artikull global
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
31/174
Mbiview
Artikulli Global i Numërimit të Raporteve Tabela më poshtë tregon përfaqësimin e një përmbajtjeje përshkruese të Raportit të Mouse nga perspektiva e një analizuesi HID të hostit. Mausi ka tre butona (majtas, djathtas dhe rrotë). Kodi i paraqitur në shembullinampMë poshtë është një implementim kodi që korrespondon me këtë përfaqësim të përshkruesit të raportit të miut.
Figura – Përmbajtja e Përshkruesit të Raportit nga një Analizues HID i Hostit View
(1) Funksioni i artikullit të Faqes së Përdorimit përcakton funksionin e përgjithshëm të pajisjes. Në këtë shembullample, pajisja HID i përket një
kontroll i përgjithshëm i desktopit.
(2) Aplikacioni i Koleksionit grupon artikujt Kryesorë që kanë një qëllim të përbashkët dhe mund të jenë të njohur për aplikacionet. Në diagramë, grupi përbëhet nga tre artikuj Kryesorë të Hyrjes. Për këtë koleksion, përdorimi i sugjeruar për kontrollet është një mi siç tregohet nga artikulli i Përdorimit. (3) Koleksionet e ndërthurura mund të përdoren për të dhënë më shumë detaje rreth përdorimit të një kontrolli të vetëm ose një grupi kontrollesh për aplikacionet. Në këtë shembullample të themi, Koleksioni Fizik, i vendosur në Aplikacionin e Koleksionit, përbëhet nga të njëjtat tre artikuj Hyrës që formojnë Aplikacionin e Koleksionit. Koleksioni Fizik përdoret për një grup artikujsh të dhënash që përfaqësojnë pikat e të dhënave të mbledhura në një pikë gjeometrike. Në shembullample, përdorimi i sugjeruar është një tregues siç tregohet nga artikulli i Përdorimit. Këtu përdorimi i treguesit i referohet koordinatave të pozicionit të miut dhe softueri i sistemit do t'i përkthejë koordinatat e miut në lëvizjen e kursorit të ekranit. (4) Faqet e përdorimit të ndërthurura janë gjithashtu të mundshme dhe japin më shumë detaje rreth një aspekti të caktuar brenda funksionit të përgjithshëm të pajisjes. Në këtë rast, dy artikuj të Hyrjes janë grupuar dhe korrespondojnë me butonat e miut. Një artikull Hyrjeje përcakton tre butonat e miut (djathtas, majtas dhe rrotë) në lidhje me numrin e fushave të të dhënave për artikullin (artikull i Numërimit të Raportit), madhësinë e një fushe të dhënash (artikull i Madhësisë së Raportit) dhe vlerat e mundshme për secilën fushë të dhënash (artikuj të Minimumit dhe Maksimumit të Përdorimit, Artikuj të Minimumit dhe Maksimumit Logjik). Artikulli tjetër i Hyrjes është një konstante 13-bitëshe që lejon që të dhënat e raportit të Hyrjes të rreshtohen në një kufi bajtesh. Ky artikull Hyrjeje përdoret vetëm për qëllime mbushjeje. (5) Një faqe tjetër e përdorimit të ndërthurur që i referohet një kontrolli të përgjithshëm të desktopit është përcaktuar për koordinatat e pozicionit të miut. Për këtë faqe përdorimi, artikulli Hyrjeje përshkruan fushat e të dhënave që korrespondojnë me boshtin x dhe y siç specifikohet nga dy Përdorimi.
artikuj.
Pas analizimit të përmbajtjes së përshkruesit të mëparshëm të Raportit të miut, analizuesi HID i host9s është në gjendje të interpretojë të dhënat e raportit Hyrës të dërguara nga pajisja me një transferim IN me ndërprerje ose në përgjigje të një kërkese GET_REPORT. Të dhënat e raportit Hyrës që korrespondojnë me përshkruesin e Raportit të miut të paraqitura në Figurën - Përmbajtja e Përshkruesit të Raportit nga një Analist HID i Hostit. View is
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
32/174
Mbiview
tregohet në tabelën më poshtë. Madhësia totale e të dhënave të raportit është 4 bajt. Lloje të ndryshme raportesh mund të dërgohen në të njëjtën pikë fundore. Për qëllim të dallimit të llojeve të ndryshme të raporteve, një prefiks ID raporti prej 1 bajt i shtohet raportit të të dhënave. Nëse një ID raporti është përdorur në shembullinamptë raportit të miut, madhësia totale e të dhënave të raportit do të ishte 5 bajt.
Tabela – Raporti i të Dhënave të Dërguara te Hosti dhe që Korrespondon me Gjendjen e një Mausi me 3 Butona
Kompensimi i bitit
0 1 2 3 16 24
Numri i biteve 1 1 1 13 8 8
Përshkrim Butoni 1 (butoni i majtë). Butoni 2 (butoni i djathtë). Butoni 3 (butoni i rrotës). Nuk përdoret. Pozicioni në boshtin X. Pozicioni në boshtin Y.
Një përshkrues fizik tregon pjesën ose pjesët e trupit që synojnë të aktivizojnë një kontroll ose kontrolle. Një aplikacion mund ta përdorë këtë informacion për të caktuar një funksionalitet në kontrollin e një pajisjeje. Një përshkrues fizik është një përshkrues opsional specifik për klasën dhe shumica e pajisjeve kanë pak përfitim nga përdorimi i tij. Referojuni
Nevojat e Burimeve të Klasës HID të Pajisjes USB nga Bërthama
Çdo herë që shtoni një instancë të klasës HID në një konfigurim USB nëpërmjet një thirrjeje në funksionin sl_usbd_hid_add_to_configuration(), burimet e mëposhtme do të ndahen nga bërthama.
Burim
Ndërfaqet Ndërfaqet alternative Pikat fundore Grupet e ndërfaqeve
Sasia
1 1 1 (2 nëse pika fundore e ndërprerjes OUT është e aktivizuar) 0
Vini re se këto numra janë për çdo konfigurim. Kur konfiguroni vlerat e konfigurimit SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY dhe SL_USBD_DESCRIPTOR_QUANTITY, mos harroni të merrni parasysh se sa konfigurime do të shtohen në klasë. Për vlerën e konfigurimit SL_USBD_OPEN_ENDPOINTS_QUANTITY, meqenëse pikat fundore hapen vetëm kur një konfigurim vendoset nga hosti, thjesht duhet të merrni parasysh numrin e pikave fundore të nevojshme për një instancë të klasës.
Konfigurimi i Klasës HID të Pajisjes USB
Dy grupe parametrash konfigurimi përdoren për të konfiguruar klasën HID:
Konfigurimet specifike të aplikacionit të klasës HID të pajisjes USB Konfigurimet e instancës së klasës HID të pajisjes USB
Konfigurimet specifike të aplikacionit të klasës HID të pajisjes USB
Së pari, për të përdorur modulin e klasës HID të pajisjes USB të Silicon Labs, rregulloni përkufizimet e konfigurimit të kohës së kompajlimit HID sipas nevojave të aplikacionit tuaj. Ato rigrupohen brenda kokës sl_usbd_core_config.h. file nën seksionin HID. Ato mund të ndahen në dy seksione, konfigurimet e sasisë dhe konfigurimet e detyrave HID. Qëllimi i konfigurimeve të sasisë është të informojë modulin e pajisjes USB se sa objekte USB HID duhet të ndajë.
Tabela më poshtë përshkruan secilin përkufizim të konfigurimit.
Tabela – Përcaktimet e Konfigurimit HID të Pajisjes USB
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
33/174
Mbiview
Emri i konfigurimit
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_QUANTITY
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Përshkrimi
Numri i instancave të klasës që do të ndani nëpërmjet një thirrjeje për funksionin
sl_usbd_hid_create_instance().
Numri i konfigurimeve. Instancat e klasës HID mund të shtohen në një ose më shumë konfigurime aaaa duke përdorur funksionin sl_usbd_hid_add_to_configuration(). Konfiguron numrin total të ID-ve të raporteve që duhen alokuar.
Konfiguron numrin total të artikujve Push/Pop që do të ndahen.
Detyra e kohëmatësit trajton të gjitha operacionet HID të bazuara në kohëmatës. Ky konfigurim ju lejon të vendosni madhësinë e pirgut (në numër bajtesh). Prioriteti i detyrës HID. Ky është një prioritet CMSIS-RTOS2.
Vlera e paracaktuar
2 1 2 0 2048
osPriorityLartë
Konfigurimet e Instancës së Klasës HID të Pajisjes USB, Nënklasa e Krijimit të Instancës së Klasës
kodi_i_vendit_të_protokollit
interval_in dhe interval_out p_hid_callback Përshkruesi i Raportit të Klasës HID ExampKy seksion përcakton konfigurimet që lidhen me instancat e klasës HID.
Krijimi i Instancës së Klasës
Krijimi i një instance të klasës HID bëhet duke thirrur funksionin aaa sl_usbd_hid_create_instance(), i cili përdor disa argumente konfigurimi që përshkruhen më poshtë.
nënklasë
Kodi i nënklasës HID. Vlerat e mundshme janë:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Një pajisje HID që përdor nënklasën e nisjes duhet të përdorë formate standarde të raportit. Për më shumë informacion mbi kodet e nënklasave, shihni seksionin 4.2 të rishikimit 1.11 të specifikimit HID.
protokoll
Protokolli i përdorur nga pajisja HID. Vlerat e mundshme janë:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Nëse funksioni juaj HID është një mi, protokolli duhet të vendoset në SL_USBD_HID_PROTOCOL_MOUSE. Nëse është tastierë, duhet të vendoset në SL_USBD_HID_PROTOCOL_KBD. Përndryshe, protokolli duhet të vendoset në SL_USBD_HID_PROTOCOL_NONE. Për më shumë informacion mbi kodet e nënklasave, shihni seksionin 4.3 të rishikimit 1.11 të specifikimit HID.
kodi i vendit
ID-ja e kodit të vendit. Vlerat e mundshme janë:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
34/174
Mbiview
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODE_ÇEKE_REPUBLIC SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GJERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_HID_COUNTRY_CODE_HEBREY SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_HOLANDË DHE HOLLANDË SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL DHE SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL DHE SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_USG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Kodi i vendit identifikon se për cilin vend është lokalizuar pajisja. Shumica e pajisjeve nuk janë të lokalizuara dhe për këtë arsye kjo vlerë do të ishte SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Megjithatë, tastierat mund ta përdorin fushën për të treguar gjuhën e shkronjave të mëdha të tasteve.
Për më shumë informacion mbi kodet e vendeve, shihni seksionin 6.2.1 të rishikimit 1.11 të specifikimit HID.
interval_in dhe interval_out
interval_in dhe interval_out përfaqësojnë intervalin e sondazhit të pikës fundore të ndërprerjes IN dhe pikës fundore të ndërprerjes OUT.
Kjo përfaqëson intervalin e sondazhit të pikës fundore, në milisekonda. Vendosja e kësaj vlere varet nga sa shpesh pajisja juaj është e ndjeshme të gjenerojë një raport të ri për hostin. Për shembull, nëse një raport gjenerohet çdo 16 milisekonda, intervali duhet të jetë 16 ose më pak.
Vlera duhet të jetë një fuqi e 2 (1, 2, 4, 8, 16, etj.).
Një vlerë interval_out v lue injorohet nëse ctrl_rd_en është vendosur në true.
p_hid_callback
aaaa p_hid_callback është tregues për strukturën e tipit sl_usbd_hid_callbacks_t. Qëllimi i tij është t'i japë HID Cl ss bashkësisë së funksioneve të rikthimit të thirrjes që do të thirren kur ndodh një ngjarje HID.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
35/174
Mbiview
Jo të gjitha thirrjet mbrapsht janë të detyrueshme dhe një tregues null (NULL) mund të kalohet në variablin e strukturës së thirrjeve mbrapsht kur thirrja mbrapsht nuk është e nevojshme. Tabela më poshtë përshkruan çdo fushë konfigurimi të disponueshme në këtë strukturë konfigurimi.
Tabela – Struktura e Konfigurimit sl_usbd_hid_callbacks_t
Fushat
Përshkrimi
Nënshkrimi i funksionit
.enable .disable .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Thirret kur instanca e klasës USB aktivizohet me sukses. Thirret kur instanca e klasës USB çaktivizohet.
Thirret gjatë krijimit të Instancës HID për të kaluar përshkruesin e raportit tuaj. Për secilin nga funksionet tuaja HID, duhet të jepni një përshkrues raporti. Përshkruesi i raportit i tregon hostit se si duhet të analizohet raporti periodik që do të dërgohet nga pajisja. Shkrimi i përshkruesit tuaj të raportit mund të jetë sfidues, dhe për këtë arsye ka disa burime për t'ju ndihmuar. Ky është i vetmi funksion i detyrueshëm i rikthimit të thirrjes. Thirret gjatë krijimit të Instancës HID për të kaluar përshkruesin tuaj fizik. Përshkruesi fizik është një përshkrues që ofron informacion në lidhje me pjesën ose pjesët specifike të trupit të njeriut që aktivizojnë një kontroll ose kontrolle. Për më shumë informacion mbi përshkruesit fizikë, shihni seksionin 6.2.3 të rishikimit 1.11 të specifikimit HID. Përshkruesi fizik është opsional dhe shumicën e kohës injorohet. Memoria e kaluar këtu mund të vendoset në NULL dhe gjatësia të vendoset në 0. Thirret kur hosti vendos një raport siç përshkruhet në përshkruesin e raportit tuaj (kur dërgon një raport).
Thirret kur hosti kërkon një raport veçorie siç përshkruhet në përshkruesin e raportit tuaj.
Thirret kur hosti cakton një raport veçorie siç përshkruhet në përshkruesin e raportit tuaj.
void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Rikthen protokollin aktual aktiv.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Cakton protokollin aktual aktiv.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Përshkruesi i Raportit të Klasës HID Example
Klasa HID e Silicon LabsampAplikacioni ofron një shembullample të një përshkruesi raporti për një mi të thjeshtë. IshampMë poshtë tregon një përshkrues të raportit të miut.
Example – Përshkruesi i Raportit të Miut
statik 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)
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
36/174
Mbiview
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_RELATIVE,
KOLEKSIONI SL_USBD_HID_MAIN_END,(10)
KOLEKSIONI SL_USBD_HID_MAIN_END
(11)};
(1) Tabela që përfaqëson një përshkrues të raportit të miut inicializohet në një mënyrë të tillë që çdo rresht korrespondon me një artikull të shkurtër. Ky i fundit formohet nga një parashtesë 1-bajt dhe një e dhënë 1-bajt. Referojuni viewredaktuar nga një analizues HID i hostit në Figurë - Përmbajtja e Përshkruesit të Raportit nga një analizues HID i hostit View.
(2) Përdoret faqja e përdorimit të përgjithshëm të desktopit.
(3) Brenda faqes së përdorimit të përgjithshëm të desktopit, përdorimi tag sugjeron që grupi i kontrolleve është për të kontrolluar një mi. Një koleksion miu zakonisht përbëhet nga dy akse (X dhe Y) dhe një, dy ose tre butona.
(4) Mbledhja e minjve ka filluar.
(5) Brenda koleksionit të miut, një përdorim tag sugjeron më konkretisht që kontrollet e miut i përkasin koleksionit të pointer-ave. Një koleksion pointer-ash është një koleksion boshtesh që gjeneron një vlerë për të drejtuar, treguar ose treguar qëllimet e përdoruesit drejt një aplikacioni.
(6) Mbledhja e treguesve ka filluar.
(7) Faqja e Përdorimit të Butonave përcakton një element Hyrjeje të përbërë nga tre fusha 1-bitëshe. Çdo fushë 1-bitëshe përfaqëson butonin 1, 2 dhe 3 të mouse9s përkatësisht dhe mund të kthejë një vlerë prej 0 ose 1.
(8) Artikulli i të dhënave hyrëse për faqen e përdorimit të butonave është i mbushur me 13 bit të tjerë.
(9) Një faqe tjetër e Përdorimit të Përgjithshëm të Desktopit tregohet për të përshkruar pozicionin e miut me boshtet X dhe Y. Artikulli Input përbëhet nga dy fusha 8-bitëshe, vlera e të cilave mund të jetë midis -127 dhe 127.
(10) Koleksioni i treguesve është mbyllur.
(11) Koleksioni i minjve është mbyllur.
Faqja HID e USB.org
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
37/174
Mbiview
Forumi i Implementuesve të USB-së (USB-IF) ofron një mjet të quajtur “Mjeti i Përshkruesit HID” së bashku me informacione të tjera mbi formatin e përshkruesit të raportit. Shihni http://www.usb.org/developers/hidpage/ për më shumë informacion.
Udhëzuesi i Programimit të Klasës HID të Pajisjes USB
Ky seksion shpjegon se si të përdoret klasa HID. Inicializimi i Klasës HID të Pajisjes USB Shtimi i një Instance të Klasës HID të Pajisjes USB në Pajisjen tuaj Komunikimi duke përdorur Klasën HID të Pajisjes USB
Inicializimi i klasës HID të pajisjes USB
Për të shtuar funksionalitetin e Klasës HID në pajisjen tuaj, së pari duhet të inicializoni klasën duke thirrur funksionin sl_usbd_hid_init().ampMë poshtë tregohet se si të thirret sl_usbd_hid_init() duke përdorur argumentet parazgjedhur. Për më shumë informacion mbi argumentet e konfigurimit që duhen kaluar te sl_usbd_hid_init(), shihni Konfigurimet Specifike të Aplikacionit të Klasës HID të Pajisjes USB.
Example – Thirrja e sl_usbd_hid_init()
statusi sl_status_t;
status = sl_usbd_hid_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Shtimi i një instance të klasës HID të një pajisjeje USB në pajisjen tuaj
Për të shtuar funksionalitetin e klasës HID në pajisjen tuaj, duhet të krijoni një instancë dhe pastaj ta shtoni atë në konfigurimin(et) e pajisjes suaj.
Krijimi i një instance të klasës HID
Krijo një instancë të klasës HID duke thirrur funksionin sl_usbd_hid_create_instance(). ShembulliampMë poshtë tregohet se si të krijoni një funksion të thjeshtë të miut nëpërmjet sl_usbd_hid_create_instance() duke përdorur argumentet e parazgjedhura. Për më shumë informacion mbi argumentet e konfigurimit që duhen kaluar te sl_usbd_hid_create_instance(), shihni Konfigurimet e Instancës së Klasës HID të Pajisjes USB.
Example – Shtimi i një Funksioni të Mausit nëpërmjet sl_usbd_hid_create_instance()
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
38/174
Mbiview
/* Konstante globale. */ 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 };
/* Variablat lokale.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
statusi = 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, e vërtetë, &app_usbd_hid_callbacks, &class_nbr);
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
39/174
Mbiview
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */}
Shtimi i Instancës së Klasës HID në Konfigurimin(et) e Pajisjes Suaj Pasi të keni krijuar një instancë të klasës HID, mund ta shtoni atë në një konfigurim duke thirrur funksionin
sl_usbd_hid_add_to_configuration().
IshampMë poshtë tregohet se si të thirret sl_usbd_hid_add_to_configuration().
Example – Thirrja e sl_usbd_hid_add_to_configuration()
statusi sl_status_t;
sl_usbd_hid_add_to_configuration(klasa_nbr,
(1)
config_nbr_fs); (2)
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
(1) Numri i klasës që duhet shtuar në konfigurimin e kthyer nga sl_usbd_hid_create_instance(). (2) Numri i konfigurimit (këtu duke e shtuar në një konfigurim me shpejtësi të plotë).
Komunikimi duke përdorur klasën HID të pajisjes USB
Komunikimi i Instancës së Klasës Komunikimi Sinkron Komunikimi i Instancës së Klasës Klasa HID ofron funksionet e mëposhtme për të komunikuar me hostin.
Tabela – Përmbledhje e API-t të Komunikimit HID
Emri i funksionit
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()
Operacioni Merr të dhëna nga hosti përmes pikës fundore të ndërprerjes OUT. Ky funksion po bllokon. Dërgon të dhëna te hosti përmes pikës fundore të ndërprerjes IN. Ky funksion po bllokon.
Komunikimi Sinkron Komunikimi sinkron do të thotë që transferimi po bllokohet. Me thirrjen e funksionit, aplikacionet bllokohen derisa transferimi të përfundojë me ose pa gabim. Mund të specifikohet një kohëzgjatje për të shmangur pritjen e përjetshme.ampFigura më poshtë tregon një proces leximi dhe shkrimi që merr të dhëna nga hosti duke përdorur pikën fundore të ndërprerjes OUT dhe i dërgon të dhëna hostit duke përdorur pikën fundore të ndërprerjes IN.
Example – Lexim dhe Shkrim Sinkron HID
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statusi;
statusi = sl_usbd_hid_read_sync(klasa_nbr,
(1)
(void *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
40/174
Mbiview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */}
(1) Numri i instancës së klasës i krijuar nga sl_usbd_hid_create_instance() ofron një referencë të brendshme për klasën HID për të drejtuar transferimin në pikën fundore të ndërprerjes OUT ose IN të duhur.
(2) Aplikacioni duhet të sigurojë që memoria e përkohshme e ofruar për funksionin është mjaftueshëm e madhe për të akomoduar të gjitha të dhënat. Përndryshe, mund të ndodhin probleme me sinkronizimin. Brenda, operacioni i leximit kryhet ose me pikën fundore të kontrollit ose me pikën fundore të ndërprerjes, varësisht nga flamuri i leximit të kontrollit i vendosur gjatë thirrjes së sl_usbd_hid_create_instance().
(3) Për të shmangur një situatë bllokimi të pafund, mund të specifikohet një kohëzgjatje e shprehur në milisekonda. Një vlerë prej 809 bën që detyra e aplikacionit të presë përgjithmonë.
(4) Aplikacioni ofron bufferin e transmetimit të inicializuar.
Detyra e Raporteve Periodike të Futjes HID
Për të kursyer bandwidth, hosti ka aftësinë të heshtë raportet nga një pikë fundore IN e ndërprerjes duke kufizuar frekuencën e raportimit. Për ta bërë këtë, hosti duhet të dërgojë kërkesën SET_IDLE. Klasa HID e implementuar nga Silicon Labs përmban një detyrë të brendshme që respekton kufizimin e frekuencës së raportimit që mund ta aplikoni në një ose disa raporte hyrëse. Figura Detyra e Raporteve të Hyrjes Periodike tregon funksionimin e detyrave të raporteve të hyrjes periodike.
Figura – Detyra e Raporteve Periodike të Futjes
(1) Pajisja merr një kërkesë SET_IDLE. Kjo kërkesë specifikon një kohëzgjatje joaktive për një ID raporti të caktuar. Për më shumë detaje rreth kërkesës SET_IDLE, shihni
(2) Një strukturë e ID-së së raportit (e ndarë gjatë fazës së inicializimit të klasës HID) përditësohet me kohëzgjatjen e mosveprimit. Një numërues i kohëzgjatjes së mosveprimit inicializohet me vlerën e kohëzgjatjes së mosveprimit. Struktura e ID-së së raportit futet në fund të një liste të lidhur që përmban strukturat e ID-së së raporteve hyrëse. Vlera e kohëzgjatjes së mosveprimit shprehet në njësi 4 ms që jep një diapazon nga 4 deri në 1020 ms.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
41/174
Mbiview
Nëse kohëzgjatja e mosveprimit është më e vogël se intervali i sondazhit të pikës fundore të hyrjes së ndërprerjes, raportet gjenerohen në intervalin e sondazhit.
(3) Çdo 4 ms, detyra e raportit periodik të hyrjes shfleton listën e ID-ve të raporteve të hyrjes. Për çdo ID të raportit të hyrjes, detyra kryen një nga dy operacionet e mundshme. Kohëzgjatja e periudhës së detyrës përputhet me njësinë 4 ms të përdorur për kohëzgjatjen e mosveprimit. Nëse nuk janë dërguar kërkesa SET_IDLE nga hosti, lista e ID-ve të raporteve të hyrjes është bosh dhe detyra nuk ka asgjë për të përpunuar. Detyra përpunon vetëm ID-të që janë të ndryshme nga 0 dhe me një kohëzgjatje mosveprimi më të madhe se 0.
(4) Për një ID të dhënë të raportit të hyrjes, detyra verifikon nëse kohëzgjatja e mosveprimit ka kaluar. Nëse kohëzgjatja e mosveprimit nuk ka kaluar, numëruesi zvogëlohet dhe nuk i dërgohet asnjë raport hyrjeje hostit.
(5) Nëse kohëzgjatja e mosveprimit ka kaluar (domethënë, numëruesi i kohëzgjatjes së mosveprimit ka arritur në zero), një raport hyrës i dërgohet hostit duke thirrur funksionin sl_usbd_hid_write_sync() nëpërmjet pikës fundore të ndërprerjes IN.
(6) Të dhënat e raportit hyrës të dërguara nga detyra vijnë nga një memorje e brendshme e të dhënave e ndarë për secilin raport hyrës të përshkruar në përshkruesin e raportit. Një detyrë aplikacioni mund të thërrasë funksionin sl_usbd_hid_write_sync() për të dërguar një raport hyrës. Pas dërgimit të të dhënave të raportit hyrës, sl_usbd_hid_write_sync() përditëson memorjen e brendshme të shoqëruar me një ID të raportit hyrës me të dhënat e sapodërguara. Pastaj, detyra e raporteve periodike të hyrjes dërgon gjithmonë të njëjtat të dhëna të raportit hyrës pas çdo kohe të papërgatitur dhe derisa detyra e aplikacionit të përditësojë të dhënat në memorjen e brendshme. Ekziston një mekanizëm bllokimi për të shmangur korruptimin e të dhënave të ID të raportit hyrës në rast se ndodh një modifikim në kohën e saktë të transmetimit të bërë nga detyra e raportit periodik të hyrjes.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
42/174
Mbiview
Mbiview
Pajisje USB Klasa MSC
Pajisje USB Klasa MSC Mbiview Nevojat për Burime të Klasës MSC të Pajisjes USB nga Konfigurimi i Klasës MSC të Pajisjes USB Udhëzues për Programimin e Klasës MSC të Pajisjes USB Drajverët e Ruajtjes së Klasës MSC të Pajisjes USB
Ky seksion përshkruan klasën e pajisjeve të ruajtjes masive (MSC) të mbështetur nga Silicon Labs USB Device. MSC është një protokoll që mundëson transferimin e informacionit midis një pajisjeje USB dhe një hosti. Informacioni që transferohet është çdo gjë që mund të ruhet elektronikisht, siç janë programet e ekzekutueshme, kodi burimor, dokumentet, imazhet, të dhënat e konfigurimit ose të dhëna të tjera tekstuale ose numerike. Pajisja USB shfaqet si një medium i jashtëm ruajtjeje për hostin, duke mundësuar transferimin e files nëpërmjet funksionit "zvarrit dhe lësho".
A file sistemi përcakton se si filejanë të organizuara në median e ruajtjes. Specifikimi i klasës së ruajtjes masive USB nuk kërkon ndonjë specifikim të veçantë. file sistemi që do të përdoret në pajisjet konformuese. Në vend të kësaj, ai ofron një ndërfaqe të thjeshtë për të lexuar dhe shkruar sektorë të të dhënave duke përdorur grupin transparent të komandave të Ndërfaqes së Sistemit të Kompjuterit të Vogël (SCSI). Si i tillë, sistemet operative mund ta trajtojnë pajisjen USB si një hard disk dhe mund ta formatojnë atë me çdo file sistemi që u pëlqen atyre.
Klasa e pajisjes së ruajtjes masive USB mbështet dy protokolle transporti, si më poshtë:
Transporti vetëm me shumicë (BOT) Kontroll/Bulk/Ndërprerje (CBI) (përdoret vetëm për disqet e disketave)
Klasa e pajisjeve të ruajtjes masive zbaton grupin e komandave transparente SCSI duke përdorur vetëm protokollin BOT, që do të thotë se vetëm pikat fundore të mëdha do të përdoren për të transmetuar të dhëna dhe informacion mbi statusin. Implementimi i MSC mbështet njësi të shumëfishta logjike.
Implementimi i MSC është në përputhje me specifikimet e mëposhtme:
Specifikimi i Klasës së Magazinimit Masiv të Autobusit Serial Universal Mbiview, Rishikimi 1.3 5 shtator 2008. Universal Serial Bus Mass Storage Mass Class Bulk-Only Transport, Rishikimi 1.0 31 shtator 1999.
Pajisje USB MSC aCl ss Overview
Kërkesat e Klasës së Pikave Endore të Protokollit Ndërfaqja e Sistemit të Vogël Kompjuterik (SCSI)
Protokolli
Në këtë seksion, do të diskutojmë protokollin Bulk-Only Transport (BOT) të Klasës së Magazinimit Masiv. Protokolli Bulk-Only Transport ka tre stages:
Transporti i Komandës Transporti i të Dhënave Transporti i Statusit
Komandat e ruajtjes masive dërgohen nga hosti përmes një strukture të quajtur Mbështjellësi i Bllokut të Komandave (CBW). Për komandat që kërkojnë një sistem transporti të dhënashtage, hosti do të përpiqet të dërgojë ose të marrë numrin e saktë të bajteve nga pajisja siç specifikohet nga fushat e gjatësisë dhe flamurit të CBW. Pas transportit të të dhënavetage, hosti përpiqet të marrë një Mbështjellës të Statusit të Komandës (CSW) nga pajisja që detajon statusin e komandës, si dhe çdo mbetje të të dhënave (nëse
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
43/174
Mbiview
çdo). Për komandat që nuk përfshijnë një transport të të dhënavetagp.sh., hosti përpiqet të marrë CSW direkt pasi të jetë dërguar CBW. Protokolli është detajuar në Figurën - Protokolli MSC.
Figura – Protokolli MSC
Pikat e fundit
Nga ana e pajisjes, në përputhje me specifikimin BOT, MSC përbëhet nga pikat fundore të mëposhtme: Një palë pikash fundore kontrolli IN dhe OUT të quajtura pika fundore parazgjedhjeje. Një palë pikash fundore me shumicë IN dhe OUT.
Tabela më poshtë tregon përdorimet e ndryshme të pikave fundore.
Tabela – Përdorimi i Pikës Endore MSC
Pika përfundimtare
Kontroll IN Kontroll OUT Bulk IN Bulk OUT
Drejtimi
Pajisja në Host Hostin në Pajisje Pajisja në Host Hostin në Pajisje
Përdorimi
Kërkesat e numërimit dhe MSC specifike për klasën Kërkesat e numërimit dhe MSC specifike për klasën Dërgimi i CSW dhe të dhënave Merr CBW dhe të dhëna
Kërkesat e Klasës
Ekzistojnë dy kërkesa kontrolli të përcaktuara për protokollin MSC BOT. Këto kërkesa dhe përshkrimet e tyre janë të detajuara në tabelën më poshtë.
Tabela – Kërkesat e Klasës së Magazinimit Masiv
Kërkesat e Klasës
Rivendosja e ruajtjes masive vetëm në masë
Përshkrimi
Kjo kërkesë përdoret për të rivendosur pajisjen e ruajtjes masive dhe ndërfaqen e saj të lidhur. Kjo kërkesë e përgatit pajisjen për të marrë bllokun tjetër të komandës.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
44/174
Mbiview
Kërkesat e Klasës
Përshkrimi
Get Max Kjo kërkesë përdoret për të kthyer numrin më të lartë të njësisë logjike (LUN) të mbështetur nga pajisja. Për shembullample, a
LUN
Një pajisje me LUN 0 dhe LUN 1 do të kthejë vlerën 1. Një pajisje me një njësi të vetme logjike do të kthejë 0 ose do ta bllokojë
kërkesë. Vlera maksimale që mund të kthehet është 15.
Ndërfaqja e Sistemit të Vogël Kompjuterik SCSI
Në nivelin e ndërfaqes së programimit, pajisja MSC zbaton një nga protokollet standarde të komunikimit të medias së ruajtjes, si SCSI dhe SFF-8020i (ATAPI). "Ndërfaqja e Programimit" përcakton se cili protokoll zbatohet dhe ndihmon sistemin operativ pritës të ngarkojë drajverin e përshtatshëm të pajisjes për komunikim me pajisjen e ruajtjes USB. SCSI është protokolli më i zakonshëm që përdoret me pajisjet e ruajtjes USB MSC. Ne ofrojmë një zbatim për nënklasën SCSI MSC që përdoruesit tanë të GSDK mund ta përdorin menjëherë.
SCSI është një grup standardesh për trajtimin e komunikimit midis kompjuterëve dhe pajisjeve periferike. Këto standarde përfshijnë komanda, protokolle, ndërfaqe elektrike dhe ndërfaqe optike. Pajisjet e ruajtjes që përdorin ndërfaqe të tjera harduerike, të tilla si USB, përdorin komandat SCSI për të marrë informacionin e pajisjes/hostit dhe për të kontrolluar funksionimin e pajisjes dhe për të transferuar blloqe të dhënash në median e ruajtjes.
Komandat SCSI mbulojnë një gamë të gjerë të llojeve dhe funksioneve të pajisjeve dhe si të tilla, pajisjet kanë nevojë për një nëngrup të këtyre komandave. Në përgjithësi, komandat e mëposhtme janë të nevojshme për komunikimin bazë:
KAPACITET LEXIMI PËR KËRKESË (10) LEXIM (10) KËRKESË NJËSI TESTIMI PËR NDJESIME GATI SHKRIM (10)
Nevojat për Burime të Klasës MSC të Pajisjes USB nga Core
Çdo herë që shtoni një instancë të klasës MSC në një konfigurim USB nëpërmjet funksionit sl_usbd_msc_add_to_configuration(), burimet e mëposhtme do të ndahen nga bërthama.
Burim
Ndërfaqet Ndërfaqet alternative Pikat fundore Grupet e ndërfaqeve
Sasia
1 1 2 0
Vini re se këto numra janë për çdo konfigurim. Kur konfiguroni vlerat e konfigurimit SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY dhe SL_USBD_DESCRIPTOR_QUANTITY, mos harroni të merrni parasysh se sa konfigurime do të shtohen në klasë. Për vlerën e konfigurimit SL_USBD_OPEN_ENDPOINTS_QUANTITY, meqenëse pikat fundore hapen vetëm kur një konfigurim vendoset nga hosti, thjesht duhet të merrni parasysh numrin e pikave fundore të nevojshme për një instancë të klasës.
Konfigurimi i Klasës MSC të Pajisjes USB
Dy grupe parametrash konfigurimi përdoren për të konfiguruar klasën MSC:
Konfigurimet specifike të aplikacionit të klasës MSC të pajisjes USB Konfigurimi i njësisë logjike të klasës MSC të pajisjes USB
Konfigurimet specifike të aplikacionit të klasës MSC të pajisjes USB
Konfigurimet e kohës së kompilimit të klasës Krijimi i instancës së klasës
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
45/174
Mbiview
Konfigurimet e kohës së kompilimit të klasës
Klasa MSC dhe nënklasa SCSI e Pajisjes USB të Silicon Labs mund të konfigurohen në kohën e kompajlimit nëpërmjet #defines të vendosur në sl_usbd_core_config.h file.
Tabela – Konstantet e Konfigurimit të Përgjithshëm
Emri i konfigurimit
Përshkrimi
SL_USBD_MSC_CLASS_INST Numri i instancave të klasës që do të caktoni nëpërmjet një thirrjeje për funksionin
ANCE_SASIA
sl_usbd_msc_scsi_create_instance().
SL_USBD_MSC_CONFIGURA Numri i konfigurimit në të cilin mund të shtohet një instancë klase nëpërmjet një thirrjeje për
TION_QUANTITY
funksioni sl_usbd_msc_scsi_add_to_configuration().
SL_USBD_MSC_LUN_QUANT Numri i njësive logjike për instancë të klasës që do t'i shtoni nëpërmjet një thirrjeje në
ITY
funksioni sl_usbd_msc_scsi_lun_add().
SL_USBD_MSC_SCSI_64_BIT Aktivizon ose çaktivizon mbështetjen për Adresën Logjike të Bllokut (LBA) prej 64 bitësh.
_LBA_EN
SL_USBD_MSC_DATA_BUFF Madhësia e bufferit të të dhënave për instancë të klasës në bajt ER_SIZE
Vlera e paracaktuar
2
1
2
0
512
Krijimi i Instancës së Klasës
Krijimi i një instance të klasës SCSI të një pajisjeje USB MSC bëhet duke thirrur funksionin sl_usbd_msc_scsi_create_instance(). Ky funksion merr një argument konfigurimi që përshkruhet më poshtë.
p_scsi_callbacks
p_scsi_callbacks është një tregues për një strukturë konfigurimi të tipit sl_usbd_msc_scsi_callbacks_t. Përveç klasës së zakonshme të pajisjeve USB callbacks connect/disconnect, ai i ofron klasës MSC një grup funksionesh opsionale të rikthimit të thirrjes që thirren kur ndodh një ngjarje në njësinë logjike. Një tregues null (NULL) mund t'i kalohet këtij argumenti nëse nuk nevojiten rikthime të thirrjes.
Tabela më poshtë përshkruan çdo fushë konfigurimi të disponueshme në këtë strukturë konfigurimi.
Tabela – Struktura e Konfigurimit sl_usbd_msc_scsi_callbacks_t
Fushat
Përshkrimi
.aktivizo
Thirret kur instanca e klasës USB aktivizohet me sukses.
.disable Thirret kur instanca e klasës USB është e çaktivizuar.
Funksioni .host_eject thirret kur një njësi logjike nxirret nga hosti.
Nënshkrimi i funksionit
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);
Konfigurimi i Njësisë Logjike të Klasës MSC të Pajisjes USB
Shtimi i një njësie logjike në një instancë të klasës MSC bëhet duke thirrur funksionin sl_usbd_msc_lun_add(). Ky funksion merr një argument konfigurimi që përshkruhet më poshtë.
p_lu_info
p_lu_info është një tregues për një strukturë të tipit sl_usbd_msc_scsi_lun_info_t. Qëllimi i tij është t'i ofrojë klasës MSC informacionin mbi njësinë logjike.
Tabela më poshtë përshkruan çdo fushë konfigurimi të disponueshme në këtë strukturë konfigurimi.
Tabela – Struktura e Konfigurimit sl_usbd_msc_scsi_lun_info_t
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
46/174
Mbiview
Fusha
Përshkrimi
Fusha
.scsi_lun_api_p tr
Përshkrimi
Tregues për API-n e drajverit të medias që do të trajtojë këtë njësi logjike. Shihni Drajverët e Ruajtjes së Klasit MSC të Pajisjes USB për më shumë informacion mbi drajverët e ruajtjes.
.ve nd o r_id _ p tr
.product_id_ptr
.pro d uct_re_vis on_level .is_read_ad _only
Tregues për një varg që përmban identifikimin e shitësit të njësisë logjike. Gjatësia maksimale e vargut është 8 karaktere. Tregues për një varg që përmban identifikimin e produktit të njësisë logjike. Gjatësia maksimale e vargut është 16 karaktere. Niveli i rishikimit të produktit.
Flamuri që tregon nëse njësia logjike duhet të shihet si vetëm e lexuar nga pika e view e hostit (e vërtetë) ose jo (e gabuar).
Udhëzuesi i Programimit të Pajisjes USB për Klasën MSC
Ky seksion shpjegon se si të përdoret klasa MSC.
Inicializimi i Klasës MSC të Pajisjes USB Shtimi i një Instance të Klasës SCSI MSC të Pajisjes USB në Pajisjen Tuaj Klasa MSC e Pajisjes USB Trajtimi i Njësisë Logjike
Inicializimi i Klasës MSC të Pajisjes USB
Për të shtuar funksionalitetin e klasës MSC SCSI në pajisjen tuaj, së pari inicializoni klasën bazë MSC dhe nënklasën SCSI duke thirrur funksionin sl_usbd_msc_init() dhe sl_usbd_msc_scsi_init().
IshampMë poshtë tregohet se si të thirret sl_usbd_msc_init() dhe sl_usbd_msc_scsi_init().
Example – Thirrja e sl_usbd_msc_init() dhe sl_usbd_msc_scsi_init()
statusi sl_status_t;
status = sl_usbd_msc_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
status = sl_usbd_msc_scsi_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
Shtimi i një Instance të Klasës MSC SCSI të Pajisjes USB në Pajisjen Tuaj
Për të shtuar funksionalitetin e klasës MSC SCSI në pajisjen tuaj, së pari krijoni një instancë, pastaj shtojeni atë në konfigurimin(et) e pajisjes suaj. Duhet të shtoni të paktën një njësi logjike në instancën tuaj.
Krijimi i një instance të klasës MSC SCSI
Krijo një instancë të klasës MSC SCSI duke thirrur funksionin sl_usbd_msc_scsi_create_instance().
IshampMë poshtë tregohet se si të thirret sl_usbd_msc_scsi_create_instance() duke përdorur argumentet parazgjedhur. Për më shumë informacion mbi argumentet e konfigurimit që duhen kaluar te sl_usbd_msc_scsi_create_instance(), shihni Konfigurimet Specifike të Aplikacionit të Klasës MSC të Pajisjes USB.
Example – Thirrja e sl_usbd_ msc_scsi_create_instance()
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
47/174
Mbiview
uint8_t class_nbr; sl_status_t status;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
statusi = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
nëse (status ! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Shtimi i Instancës së Klasës MSC në Konfigurimin(et) e Pajisjes Suaj
Pasi të keni krijuar një instancë të klasës MSC, mund ta shtoni atë në një konfigurim duke thirrur funksionin
sl_usbd_msc_add_to_configuration().
IshampMë poshtë tregohet se si të thirret sl_usbd_msc_scsi_add_to_configuration() duke përdorur argumentet parazgjedhur.
Example – Thirrja e sl_usbd_ msc_scsi_add_to_configuration()
statusi sl_status_t;
statusi = sl_usbd_msc_scsi_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
(1) Numri i klasës që duhet shtuar në konfigurimin e kthyer nga sl_usbd_msc_scsi_create_instance(). (32) Numri i konfigurimit (këtu duke e shtuar në një konfigurim me shpejtësi të plotë).
Trajtimi i njësisë logjike të klasës MSC të pajisjes USB
Shtimi i një njësie logjike Bashkangjitja/Shkëputja e një mediumi ruajtjeje
Shtimi i një njësie logjike
Kur shtoni një njësi logjike në instancën tuaj të klasës MSC SCSI, ajo duhet të jetë e lidhur me një medium ruajtjeje (RAMDisk, kartë SD, memorie flash, etj.). Klasa MSC përdor një drajver ruajtjeje për të komunikuar me median e ruajtjes. Ky drajver do të duhet të furnizohet kur të shtohet njësia logjike.
IshampMë poshtë tregohet se si të shtoni një njësi logjike nëpërmjet sl_usbd_msc_scsi_lun_add().
Example – Shtimi i një Njësie Logjike nëpërmjet sl_usbd_msc_scsi_lun_add()
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
48/174
Mbiview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
statusi;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= “Laboratorët e Silikonit”;
lu_info.product_id_ptr
= "pajisje bllokuese p.sh.ample”;
lu_info.niveli_i_revizionit_të_produktit = 0x1000u;
lu_info.është vetëm_lexim
= e gabuar;
statusi = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
nëse (status ! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Bashkangjitja/Shkëputja e një mediumi ruajtjeje
Pasi të jetë shtuar njësia logjike, duhet të bashkëngjitet një medium ruajtjeje që të jetë i disponueshëm nga ana e hostit. Klasa MSC ofron dy funksione për të kontrolluar lidhjen e medias së ruajtjes me njësinë logjike: sl_usbd_msc_scsi_lun_attach() dhe sl_usbd_msc_scsi_lun_detach(). Këto funksione ju lejojnë të imitoni heqjen e një pajisjeje ruajtjeje në mënyrë që të rifitoni aksesin nga aplikacioni i integruar nëse është e nevojshme.
IshampMë poshtë tregohet se si të përdoret funksioni sl_usbd_msc_scsi_lun_attach() dhe sl_usbd_msc_scsi_lun_detach().
Example – Bashkëngjit/Shkëput Median
statusi sl_status_t;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
…
(1)
statusi = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
…
(2)
statusi = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) nëse (status! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
…
(3)
(1) Nga ky moment, nëse pajisja MSC është e lidhur me një host, media e ruajtjes është e arritshme.
(2) Nëse pajisja MSC është e lidhur me një host, media tani do të shfaqet si e padisponueshme. Në këtë moment, operacionet mund të kryhen në media nga aplikacioni i integruar.
(3) Përsëri, nëse pajisja MSC është e lidhur me hostin, media e ruajtjes do të shfaqet si e lidhur.
Drajverët e ruajtjes së klasës MSC të pajisjes USB
Klasa e Pajisjes USB MSC ka nevojë për një drajver ruajtjeje për të komunikuar me një medium ruajtjeje. Për momentin, Silicon Labs nuk ofron drajverë.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
49/174
Mbiview
TPY aa AI i drajverit përcaktohet nga typedef sl_usbd_msc_scsi_lun_api_t. sl_usbd_msc_scsi_lun_api_t ynë duhet të përfshihet në sl_usbd_msc_scsi_lun_info_t tuaj, duke përdorur argumentin kur shtoni njësinë logjike l me sl_usbd_msc_scsi_lun_add(). Shih seksionin Pajisje USB MSC SCSI API për më shumë detaje mbi strukturat. Implementimi i drajverit të ruajtjes mund të jetë aq i thjeshtë sa një varg sektorësh në RAM. Madhësia tipike e sektorit (domethënë, madhësia e bllokut) është 512 për pajisjet e ruajtjes masive dhe 2048 për CD-ROM.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
50/174
Mbiview
Mbiview
Klasa e Shitësit të Pajisjeve USB
Klasa e Furnizuesit të Pajisjes USB Mbiview Nevojat për Burime të Klasës së Shpërndarësit të Pajisjeve USB nga Konfigurimi i Klasës së Shpërndarësit të Pajisjeve USB Udhëzues Programimi i Klasës së Shpërndarësit të Pajisjeve USB Klasa Shpërndarëse ju lejon të ndërtoni pajisje specifike për shitësin që mund të zbatojnë një protokoll të patentuar. Ajo mbështetet në një palë pikash fundore me shumicë për të transferuar të dhëna midis hostit dhe pajisjes. Transferimet me shumicë janë të përshtatshme për transferimin e sasive të mëdha të të dhënave të pastrukturuara dhe ofrojnë një shkëmbim të besueshëm të të dhënave duke përdorur një mekanizëm zbulimi dhe riprovimi të gabimeve. Përveç pikave fundore me shumicë, klasa Shpërndarëse mund të përdorë gjithashtu një palë pikash fundore opsionale ndërprerjeje. Çdo sistem operativ (OS) mund të funksionojë me klasën Shpërndarëse me kusht që OS të ketë një drajver për të trajtuar klasën Shpërndarëse. Në varësi të OS-it, drajveri mund të jetë vendas ose specifik për shitësin. Për shembull, nën Microsoft Windows®, aplikacioni juaj bashkëvepron me drajverin WinUSB të ofruar nga Microsoft për të komunikuar me pajisjen e shitësit.
Klasa e Furnizuesit të Pajisjes USB Mbiview
Figura – Arkitektura e Përgjithshme Midis Klasës Windows Host dhe Vendor tregon arkitekturën e përgjithshme midis hostit dhe pajisjes duke përdorur klasën Vendor. Në këtë shembullample të themi, sistemi operativ pritës është MS Windows.
Figura – Arkitektura e Përgjithshme Midis Klasës Host dhe Vendor të MS Windows
Në anën e MS Windows, aplikacioni komunikon me pajisjen shitëse duke bashkëvepruar me një bibliotekë USB. Bibliotekat, si libusb, ofrojnë një API për të menaxhuar një pajisje dhe tubat e saj të shoqëruar, dhe për të komunikuar me pajisjen përmes pikave fundore të kontrollit, grumbullimit dhe ndërprerjes.
Nga ana e pajisjes, klasa Vendor përbëhet nga pikat fundore të mëposhtme:
Një palë pikash fundore kontrolli IN dhe OUT të quajtura pika fundore e parazgjedhur. Një palë pikash fundore IN dhe OUT me shumicë.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
51/174
Mbiview
Një palë pikash fundore IN dhe OUT të ndërprerjes. Ky çift është opsional. Tabela më poshtë tregon përdorimin e pikave të ndryshme fundore:
Tabela – Përdorimi i Pikave Endjatore të Klasës së Furnizuesit
Drejtimi i pikës fundore
Kontrolli IN
Kontrolli
JASHTË
Hyrje me shumicë
Pajisje-në-host
>Host-to-pajisje
Pajisje-në-host
Bulk OUT
Ndërprerje Hyrjeje
Ndërprisni
JASHTË
Strehuesi-në-pajisje
Pajisje-në-host
Strehuesi-në-pajisje
Përdorimi
Kërkesa standarde për numërim dhe kërkesa specifike për shitësin.
Kërkesa standarde për numërim dhe kërkesa specifike për shitësin.
Komunikimi i të dhënave të papërpunuara. Të dhënat mund të strukturohen sipas një protokolli të patentuar.
Komunikimi i të dhënave të papërpunuara. Të dhënat mund të strukturohen sipas një protokolli të patentuar.
Komunikimi ose njoftimi i të dhënave të papërpunuara. Të dhënat mund të strukturohen sipas një protokolli pronësor. Komunikimi ose njoftimi i të dhënave të papërpunuara. Të dhënat mund të strukturohen sipas një protokolli pronësor.
Aplikacioni i pajisjes mund të përdorë pika fundore me shumicë dhe ndërprerje për të dërguar ose marrë të dhëna te ose nga hosti. Mund të përdorë vetëm pikën fundore të parazgjedhur për të deshifruar kërkesat specifike të shitësit të dërguara nga hosti. Kërkesat standarde menaxhohen në mënyrë të brendshme nga shtresa thelbësore e Pajisjes USB të Silicon Labs.
Nevojat e Burimeve të Klasës së Shitësit të Pajisjeve USB nga Core
Çdo herë që shtoni një instancë të klasës së shitësit në një konfigurim nëpërmjet funksionit sl_usbd_vendor_add_to_configuration(), burimet e mëposhtme do të ndahen nga bërthama.
Burim
Ndërfaqet Ndërfaqet alternative Pikat fundore Grupet e ndërfaqeve
Sasia
1 1 2 (4 nëse keni aktivizuar pikat fundore të ndërprerjes) 0
Vini re se këto numra janë për çdo konfigurim. Kur konfiguroni vlerat e konfigurimit SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY dhe SL_USBD_DESCRIPTOR_QUANTITY, mos harroni të merrni parasysh se sa konfigurime do të shtohen në klasë. Për vlerën e konfigurimit SL_USBD_OPEN_ENDPOINTS_QUANTITY, meqenëse pikat fundore hapen vetëm kur një konfigurim vendoset nga hosti, thjesht duhet të merrni parasysh numrin e pikave fundore të nevojshme për një instancë të klasës.
Konfigurimi i Klasës së Shpërndarësit të Pajisjes USB
Dy grupe parametrash konfigurimi përdoren për të konfiguruar klasën e Furnizuesit:
Konfigurimet specifike të aplikacionit të klasës së shitësit të pajisjes USB Konfigurimet e instancës së klasës së shitësit të pajisjes USB
Konfigurimet specifike të aplikacionit të klasës së shitësit të pajisjes USB
Së pari, për të përdorur modulin e klasës së shitësit të pajisjes USB të Silicon Labs, rregulloni përkufizimet e konfigurimit të kohës së kompajlimit të shitësit sipas nevojave të aplikacionit tuaj. Ato rigrupohen brenda kokës sl_usbd_core_config.h. file nën seksionin Furnizuesi. Qëllimi i konfigurimeve të sasisë është të informojë modulin e pajisjes USB se sa objekte të Furnizuesit USB duhet të ndajnë.
Tabela më poshtë përshkruan secilin përkufizim të konfigurimit.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
52/174
Mbiview
Tabela – Përcaktimet e Konfigurimit të Shitësit të Pajisjes USB
Emri i konfigurimit
Përshkrimi
Vlera e paracaktuar
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Numri i instancave të klasës që do të caktoni nëpërmjet një thirrjeje në funksionin 2 sl_usbd_vendor_create_instance().
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Numri i konfigurimeve. Instancat e klasës së shitësit mund të shtohen në një ose më shumë konfigurime nëpërmjet një thirrjeje në funksionin sl_usbd_vendor_add_to_configuration().
Konfigurimet e Instancës së Klasës së Shpërndarësit të Pajisjeve USB
Ky seksion përcakton konfigurimet që lidhen me instancat e klasës Vendor.
Krijimi i Instancës së Klasës intervali intr_en p_vendor_callbacks
Krijimi i Instancës së Klasës
Krijimi i një instance të klasës Vendor bëhet duke thirrur funksionin sl_usbd_vendor_create_instance(), i cili merr tre argumente konfigurimi që përshkruhen më poshtë.
intr_en
Vlera booleane që tregon nëse një palë pikash fundore të ndërprerjes duhet të shtohet apo jo.
Vlera
e vërtetë e rreme
Përshkrimi
Një palë pikash fundore IN/OUT do të shtohet dhe do të vihet në dispozicion të aplikacionit të integruar. Nuk do të shtohet asnjë pikë fundore ndërprerjeje. Vetëm një palë pikash fundore Bulk IN/OUT do të jetë në dispozicion.
intervali
Nëse e vendosni intr_en në true, mund të specifikoni intervalin e sondazhit të pikave fundore të ndërprerjes (në milisekonda). Nëse e vendosni intr_en në false, mund ta vendosni intervalin në 0 pasi do të injorohet nga klasa.
p_vendor_callbacks
p_vendor_callbacks është një tregues për një variabël strukture të funksioneve të rikthimit të thirrjes. që mund ta specifikoni për të trajtuar kërkesat e kontrollit specifik të klasës. Nëse nuk përdorni ndonjë kërkesë specifike të klasës ose keni nevojë për njoftime aktivizimi/çaktivizimi, mund ta vendosni këtë në NULL.
IshampMë poshtë jepet nënshkrimi i pritur i trajtuesit të kërkesave specifike të klasës suaj.
Example – Nënshkrimi i Funksionit të Kërkesës Specifike për Klasën
void app_usbd_vendor_req_handle(uint8_t
class_nbr, (1)
const sl_usbd_setup_req_t *p_setup_req); (2)
sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};
(1) Numri i instancës së klasës së shitësit.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
53/174
Mbiview
(2) Tregues për një kërkesë konfigurimi të marrë nga hosti.
Udhëzues për Programimin e Klasës së Shitësit të Pajisjeve USB
Ky seksion shpjegon se si të përdoret klasa Vendor. Inicializimi i Klasës së Vendorit të Pajisjes USB Shtimi i një Instance të Klasës së Vendorit të Pajisjes USB në Pajisjen tuaj Komunikimi duke përdorur Klasën e Vendorit të Pajisjes USB
Inicializimi i Klasës së Shpërndarësit të Pajisjeve USB
Për të shtuar një funksionalitet të Klasës së Furnizuesit në pajisjen tuaj, së pari inicializoni klasën duke thirrur funksionin USBD_Vendor_Init(). P.sh.ampMë poshtë tregohet se si të thirret sl_usbd_vendor_init().
Example – Thirrja e sl_usbd_vendor_init()
statusi sl_status_t;
status = sl_usbd_vendor_init(); nëse (status! SL_STATUS_OK) { /* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */ }
Shtimi i një Instance të Klasës së Furnizuesit të Pajisjeve USB në Pajisjen tuaj
Për të shtuar funksionalitetin e klasës së shitësit në pajisjen tuaj, së pari duhet të krijoni një instancë dhe pastaj ta shtoni atë në konfigurimin(et) e pajisjes suaj.
Krijimi i një Instance të Klasës së Furnizuesit Shtimi i Instancës së Klasës së Furnizuesit në Konfigurimin(et) e Pajisjes Suaj
Krijimi i një Instance të Klasës së Furnizuesit
Krijo një instancë të klasës Vendor duke thirrur funksionin sl_usbd_vendor_create_instance(). ShembulliampMë poshtë tregohet se si të thirret sl_usbd_vendor_create_instance() duke përdorur argumentet parazgjedhur. Për më shumë informacion në lidhje me argumentet e konfigurimit që duhen kaluar te sl_usbd_vendor_create_instance(), shihni Konfigurimet e Instancës së Klasës së Furnizuesit të Pajisjeve USB.
Example – Thirrja e sl_usbd_vendor_create_instance()
uint8_t class_nbr; sl_status_t status;
statusi = sl_usbd_vendor_create_instance(e rreme,
(1)
0u,
(2)
funksionet_e_kthimit_të_callback-ut të aplikacionit_usbd_vendor, (3)
&numri_i_klasës);
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
(1) Nuk ka pika fundore ndërprerjeje me këtë instancë të klasës. (2) Intervali injorohet meqenëse pikat fundore të ndërprerjes janë të çaktivizuara.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
54/174
Mbiview
(3) Funksioni i rikthimit të thirrjes që është pjesë e aplikacionit tuaj që trajton kërkesat e klasës specifike të shitësit. Shihni Komunikimi duke përdorur Klasën e Shpërndarësit të Pajisjes USB për më shumë informacion. Shtimi i Instancës së Klasës së Shpërndarësit në Konfigurimin(et) e Pajisjes Suaj Pasi të keni krijuar një instancë të klasës së shitësit, mund ta shtoni atë në një konfigurim duke thirrur funksionin USBD_Vendor_ConfigAdd(). ShembulliampMë poshtë tregohet se si të thirret sl_usbd_vendor_add_to_configuration() duke përdorur argumentet parazgjedhur.
Example – Thirrja e sl_usbd_vendor_add_to_configuration()
statusi sl_status_t;
statusi = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
nëse (statusi! SL_STATUS_OK) {
/* Ndodhi një gabim. Trajtimi i gabimeve duhet të shtohet këtu. */
}
(1) Numri i klasës që duhet shtuar në konfigurimin e kthyer nga sl_usbd_vendor_create_instance(). (2) Numri i konfigurimit (këtu duke e shtuar në një konfigurim me shpejtësi të plotë).
Komunikimi duke përdorur klasën e shitësit të pajisjeve USB
Komunikim Sinkron i Përgjithshëm Komunikim Asinkron Kërkesë për Furnizuesin Të Përgjithshme Klasa Furnizues ofron funksionet e mëposhtme për të komunikuar me hostin. Për më shumë detaje rreth parametrave të funksionit, shihni API-n e Furnizuesit të Pajisjeve USB.
Tabela – Përmbledhje e API-t të Komunikimit të Furnizuesit
Emri i funksionit
sl_usb d _v e nd or r_ re ad _b ulk_sy nc() sl_usb d _v e nd or r_ write _b ulk_sy nc() sl_usb d _v e nd or r_ re ad _b ulk_asy nc() sl_usb d _v e nd or r_ write _b ulk_asy nc() sl_usb d _v e nd or r_ re ad _inte rrup t_sy nc() sl_usb d _v e nd or r_ write _inte rrup t_sy nc() sl_usb d _v e nd or r_ re ad _inte rrup t_asy nc
()
sl_usb d _v e nd ose r_write _inte rrup t_asy nc
()
Operacioni Merr të dhëna nga hosti përmes pikës fundore bulk OUT. Ky funksion është bllokues. Dërgon të dhëna te hosti përmes pikës fundore bulk IN. Ky funksion është bllokues. Merr të dhëna nga hosti përmes pikës fundore bulk OUT. Ky funksion nuk është bllokues. Dërgon të dhëna te hosti përmes pikës fundore bulk IN. Ky funksion nuk është bllokues. Merr të dhëna nga hosti përmes pikës fundore ndërprerëse OUT. Ky funksion është bllokues. Dërgon të dhëna te hosti përmes pikës fundore ndërprerëse IN. Ky funksion është bllokues. Merr të dhëna nga hosti përmes pikës fundore ndërprerëse OUT. Ky funksion nuk është-
duke bllokuar.
Dërgon të dhëna te host përmes pikës fundore të ndërprerjes IN. Ky funksion nuk është bllokues.
Kërkesat e shitësit janë gjithashtu një mënyrë tjetër për të komunikuar me hostin. Kur menaxhohen kërkesat e shitësit të dërguara nga hosti, aplikacioni mund të marrë ose dërgojë të dhëna nga ose te hosti duke përdorur pikën fundore të kontrollit; do t'ju duhet të jepni një thirrje mbrapsht të aplikacionit të kaluar si një parametër i sl_usbd_vendor_create_instance(). Komunikimi Sinkron
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
55/174
Mbiview
Komunikimi sinkron do të thotë që transferimi po bllokohet. Kur thirret një funksion, aplikacioni bllokohet derisa transferimi të përfundojë me ose pa gabim. Mund të specifikohet një kohëzgjatje për të shmangur pritjen e përjetshme.ampFigura më poshtë tregon një proces leximi dhe shkrimi që merr të dhëna nga hosti duke përdorur pikën fundore bulk OUT dhe dërgon të dhëna te hosti duke përdorur pikën fundore bulk IN.
Example – Lexim dhe Shkrim Sinkron në Masë
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
statusi;
statusi = sl_usbd_vendor_read_bulk_sync(klasa_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
statusi = sl_usbd_vendor_write_bulk_sync(klasa_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
i rremë,
(5)
&xfer_len);
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
(1) Numri i instancës së klasës i krijuar me sl_usbd_vendor_create_instance() ofron një referencë të brendshme për klasën Vendor për të drejtuar transferimin në pikën fundore të duhur OUT ose IN.
(2) Aplikacioni duhet të sigurojë që memoria e përkohshme (buffer) e ofruar për funksionin është mjaftueshëm e madhe për të akomoduar të gjitha të dhënat. Përndryshe, mund të ndodhin probleme me sinkronizimin.
(3) Për të shmangur një situatë bllokimi të pafund, mund të specifikohet një kohëzgjatje e shprehur në milisekonda. Një vlerë prej 809 bën që detyra e aplikacionit të presë përgjithmonë.
(4) Aplikacioni ofron bufferin e transmetimit të inicializuar.
(5) Nëse ky flamur është vendosur në "true" dhe gjatësia e transferimit është shumëfish i madhësisë maksimale të paketës në pikën fundore, pirgu i pajisjes do të dërgojë një paketë me gjatësi zero te hosti për të sinjalizuar fundin e transferimit.
Përdorimi i funksioneve të komunikimit me ndërprerje të pikave fundore, sl_usbd_vendor_read_interrupt_sync() dhe sl_usbd_vendor_write_interrupt_sync(), është i ngjashëm me funksionet e komunikimit me shumicë të pikave fundore të paraqitura në Ex.ample – Lexim dhe Shkrim Sinkron në Masë.
Komunikimi asinkron
Komunikimi asinkron do të thotë që transferimi nuk është bllokues. Kur thirret një funksion, aplikacioni ia kalon informacionin e transferimit stekëve të pajisjeve dhe nuk e bllokon. Përpunime të tjera të aplikacionit mund të bëhen ndërsa transferimi është në proces përmes autobusit USB. Pasi transferimi të ketë përfunduar, një funksion kthimi i thirrjes thirret nga stekët e pajisjeve për të informuar aplikacionin rreth përfundimit të transferimit. P.sh.ampMë poshtë tregohet leximi dhe shkrimi asinkron.
Example – Lexim dhe Shkrim Asinkron në Masë
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
56/174
Mbiview
void app_usbd_vendor_comm (uint8_t class_nbr)
{
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
sl_status_t
statusi;
statusi = sl_usbd_vendor_read_bulk_async(klasa_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
statusi = sl_usbd_vendor_write_bulk_async(klasa_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
I PAVLEFSHËM,
(4)
i rremë);
(6)
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Përballo gabimin. */
}
}
(1) (3)
(1) (3)
statik void app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
boshllëk *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
statusi sl_status_t)
{
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Bëj disa përpunime. */
} tjeter {
/* $$$$ Përballo gabimin. */
}
}
statik void app_usbd_vendor_tx_completed(uint8_t class_nbr,
(3)
boshllëk *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
statusi sl_status_t)
{
nëse (statusi! SL_STATUS_OK) {
/* $$$$ Bëj disa përpunime. */
} tjeter {
/* $$$$ Përballo gabimin. */
}
}
(1) Numri i instancës së klasës ofron një referencë të brendshme për klasën Vendor për të drejtuar transferimin në pikën fundore të duhur OUT ose IN. (2) Aplikacioni duhet të sigurojë që buffer-i i ofruar është mjaftueshëm i madh për të akomoduar të gjitha të dhënat. Përndryshe, mund të ketë probleme me sinkronizimin. (3) Aplikacioni ofron një tregues të funksionit të rikthimit të kalohet si parametër. Pas përfundimit të transferimit, pirgu i pajisjeve e thërret këtë funksion të rikthimit në mënyrë që aplikacioni të mund ta finalizojë transferimin duke analizuar rezultatin e transferimit. Për shembull, pas përfundimit të një operacioni leximi, aplikacioni mund të kryejë përpunimin e të dhënave të marra. Pas përfundimit të shkrimit, aplikacioni mund të tregojë nëse shkrimi ishte i suksesshëm dhe sa bajt u dërguan.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
57/174
Mbiview
(4) Mund të kalohet edhe një argument i lidhur me thirrjen mbrapsht. Pastaj, në kontekstin e thirrjes mbrapsht, mund të merren disa informacione private. (5) Aplikacioni ofron buffer-in e inicializuar të transmetimit. (6) Nëse ky flamur është vendosur në true dhe gjatësia e transferimit është një shumëfish i madhësisë maksimale të paketës së pikës fundore, pirgu i pajisjes do të dërgojë një paketë me gjatësi zero te hosti për të sinjalizuar fundin e transferimit. Përdorimi i funksioneve të komunikimit të pikës fundore me ndërprerje, sl_usbd_vendor_read_interrupt_async() dhe sl_usbd_vendor_write_interrupt_async(), është i ngjashëm me funksionet e komunikimit të pikës fundore me shumicë të paraqitura në Ex.ampLeximi dhe shkrimi në masë asinkrone.
Kërkesë për Furnizues
Specifikimi USB 2.0 përcakton tre lloje kërkesash: standarde, klasë dhe shitës. Të gjitha kërkesat standarde trajtohen direkt nga shtresa bazë, ndërsa kërkesat e klasës menaxhohen nga klasa e duhur e shoqëruar. Kërkesat e shitësit mund të përpunohen nga klasa e shitësit. Për të përpunuar kërkesat e shitësit, duhet të jepni një thirrje të aplikacionit si një parametër të sl_usbd_vendor_create_instance(). Pasi një kërkesë e shitësit të pranohet nga pajisja USB, ajo duhet të dekodohet siç duhet.ampMë poshtë tregohet dekodimi i kërkesave të shitësit. Disa kërkesa mund të kërkohen të merren nga ose të dërgohen te hosti gjatë transmetimit të të dhënave.tage një transferimi kontrolli. Nëse nuk ka të dhënatage është e pranishme, ju vetëm duhet të deshifroni paketën Setup. Ky shembullampFigura tregon tre llojet e të dhënavetagmenaxhimi elektronik: pa të dhëna, të dhëna DALJE dhe të dhëna HYRJE.
Example – Dekodimi i Kërkesës së Furnizuesit
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
58/174
Mbiview
#define APP_VENDOR_REQ_NO_DATA
0x01u
#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u
#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u
#define APP_VENDOR_REQ_DATA_BUF_SIZE
50u
statik uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];
statik bool app_usbd_vendor_req (uint8_t
class_nbr,
const sl_usbd_setup_req_t *p_setup_req)
(1)
{
bool i vlefshëm;
statusi sl_status_t;
uint16_t req_len;
uint32_t xfer_len;
(void)nr_klase;
ndërroni(p_setup_req->bRequest) { rast APP_VENDOR_REQ_NO_DATA: valid = true; pushim;
(2) (3)
rasti APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:
(4)
req_len = p_setup_req->wLength;
nëse (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {
// Nuk ka hapësirë të mjaftueshme për të marrë të dhëna.
kthim (i rremë);
}
// Merr të dhëna nëpërmjet Control OUT EP. // Prit përfundimin e transferimit përgjithmonë. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); nëse (statusi! SL_STATUS_OK) { valid = false; } përndryshe { valid = true; } pushim;
rasti APP_VENDOR_REQ_SEND_DATA_TO_HOST:
(5)
req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;
// Mbush bufin me një model. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
req_len);
// Dërgoni të dhëna nëpërmjet Control IN EP. // Prisni përfundimin e transferimit përgjithmonë. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); nëse (statusi! SL_STATUS_OK) { valid = DEF_FAIL; } përndryshe { valid = DEF_OK; } pushim;
default:
(6)
// Kërkesa nuk mbështetet.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
59/174
Mbiview
valid = i vërtetë; pushim;
rasti APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Nuk ka hapësirë të mjaftueshme për të marrë të dhëna.return(false);}// Merr të dhëna nëpërmjet Control OUT EP.// Prit përfundimin e transferimit përgjithmonë. 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;
rasti APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Mbush buf-in me një pattern.Mem_Set((void *)&AppVendorReqBuf[0u],'A',
req_len);// Dërgoni të dhëna nëpërmjet Control IN EP.// Prisni përfundimin e transferimit përgjithmonë. 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;
parazgjedhur:(6)// Kërkesa nuk mbështetet. valid = DEF_FAIL;break;}return(valid);}
(1) Bërthama do t'ia kalojë përmbajtjen e paketës së Konfigurimit aplikacionit tuaj. Struktura sl_usbd_setup_req_t përmban të njëjtat fusha siç përcaktohen nga specifikimi USB 2.0 (referojuni seksionit "9.3 Kërkesat për Pajisje USB" të specifikimit për më shumë detaje):
typedef struct {
uint8_t bmRequestType; /* Karakteristikat e kërkesës.
*/
uint8_t bRequest; /* Kërkesë specifike.
*/
uint16_t wValue; /* Ndryshon sipas kërkesës.
*/
uint16_t wIndex; /* Ndryshon sipas kërkesës; zakonisht përdoret si indeks.*/
uint16_t wLength; /* Gjatësia e transferimit nëse të dhënat janë stage pranishme.
*/
} sl_usbd_setup_req_t;
(2) Përcaktoni kërkesën. Mund të përdorni një deklaratë switch nëse përdorni kërkesa të ndryshme. Në këtë shembullampPra, ekzistojnë tre kërkesa të ndryshme që korrespondojnë me tre llojet e të dhënave.tage: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST dhe APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) Nëse nuk ka të dhënatage është e pranishme, ju vetëm duhet të deshifroni fushat e tjera. Prania e një të dhënash stagNëse e ose jo tregohet nga fusha wLength që nuk është null ose null.
(4) Nëse hosti dërgon të dhëna në pajisje, duhet të thirrni funksionin sl_usbd_core_read_control_sync(). Buferi i ofruar duhet të jetë në gjendje të përmbajë deri në wLength bajt. Nëse ndodh ndonjë gabim, ktheni false në bërthamë që do të bllokojë statusin s.tage transferimit të kontrollit, duke i treguar hostit se kërkesa nuk mund të përpunohet. Vlera "e vërtetë" kthehet në rast suksesi.
(5) Nëse hosti merr të dhëna nga pajisja, duhet të thirrni funksionin sl_usbd_core_write_control_sync(). Nëse ndodh ndonjë gabim, ktheni vlerën false në bërthamë, gjë që do të bllokojë statusin.tage transferimit të kontrollit, duke i treguar hostit se kërkesa nuk mund të përpunohet. Vlera "e vërtetë" kthehet në rast suksesi.
(6) Në këtë ishample të themi, të gjitha kërkesat që nuk njihen shënohen duke kthyer vlerën false në bërthamë. Kjo do të bllokojë të dhënat ose statusin.tage transferimit të kontrollit që i tregon hostit se kërkesa nuk mbështetet.
Hosti dërgon kërkesa për shitës përmes një aplikacioni shitësi pritës. Bibliotekat USB, të tilla si libusb, mund të përdoren për t'ju ndihmuar të zhvilloni aplikacionin tuaj të personalizuar të shitësit pritës.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
60/174
Dokumentacioni API
Dokumentacioni API
Dokumentacioni API
Lista e moduleve
API i Pajisjes USB API i Pajisjes USB ACM API i Pajisjes USB CDC API i Pajisjes USB API Core i Pajisjes USB API i HID i Pajisjes USB API i MSC i Pajisjes USB MSC SCSI API i Furnizuesit të Pajisjes USB
Përshkrimi
API i Pajisjes USB API i Pajisjes USB ACM API i Pajisjes USB CDC API i Pajisjes USB API Core i Pajisjes USB API i HID i Pajisjes USB API i MSC i Pajisjes USB MSC SCSI API i Furnizuesit të Pajisjes USB
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
61/174
API-ja e Pajisjes USB
API-ja e Pajisjes USB
API-ja e Pajisjes USB
API-ja e Pajisjes USB.
Modulet
Pajisja USB ACM API Pajisja USB CDC API Pajisja USB API Core Pajisja USB HID API Pajisja USB MSC API Pajisja USB MSC SCSI API Pajisja USB e Furnizuesit
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
62/174
API-ja ACM e Pajisjes USB
API-ja ACM e Pajisjes USB
API-ja ACM e Pajisjes USB
API-ja CDC ACM e Pajisjes USB.
Modulet
një sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funksionet
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
një sl_usbd_cdc_ cm_init(void)
VARIABLA GLOBALE.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Shtoni një instancë të re të nënklasës së emulimit serial CDC ACM.
aaaa sl_usbd_cdc_ cm_ dd_to_configur tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
Shtoni një instancë të klasës së nënklasës CDC ACM në konfigurimin e pajisjes USB.
aa sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Merrni gjendjen e aktivizimit të nënklasës së emulimit serial CDC ACM.
aaa sl_usbd_cdc_ cm_re d(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t kohëzgjatje, uint32_t
*p_xfer_len) Merr të dhëna në nënklasën e emulimit serial CDC ACM.
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)
Merr të dhëna në nënklasën e emulimit serial CDC ACM në mënyrë asinkrone.
aa sl_usbd_cdc_ cm_write(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t kohëzgjatje, uint32_t
*p_xfer_len) Dërgoni të dhëna në nënklasën e emulimit serial CDC ACM.
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)
Dërgoni të dhëna në nënklasën e emulimit serial CDC ACM në mënyrë asinkrone.
aaa sl_usbd_cdc_ cm_get_line_control_st te(uint8_t subcl ss_nbr, uint8_t *p_line_ctrl)
Kthen gjendjen e linjave të kontrollit.
aaa sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Merrni gjendjen aktuale të kodimit të linjës.
aaa sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Vendosni një kodim të ri të linjës.
aaa sl_usbd_cdc_ cm_set_line_st te_event(uint8_t subcl ss_nbr, uint8_t ngjarje)
Cakto një ngjarje/ngjarje të gjendjes së linjës.
aaaa sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t subcl ss_nbr, uint8_t ngjarje)
Pastroni një ngjarje(e) të gjendjes së vijës.
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
63/174
API-ja ACM e Pajisjes USB
Makrot
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODULI.
#define SL_USBD_CDC_ACM_PARITY_NONE 0u
CILËSIMET E PORTEVE PËRKUFIZOJNË.
#define SL_USBD_CDC_ACM_PARITY_ODD 1u #define SL_USBD_CDC_ACM_PARITY_EVEN 2u #define SL_USBD_CDC_ACM_PARITY_MARK 3u #define SL_USBD_CDC_ACM_PARITY_SPACE 4u #define SL_USBD_CDC_ACM_STOP_BIT_1 0u #define SL_USBD_CDC_ACM_STOP_BIT_1_5 1u #define SL_USBD_CDC_ACM_STOP_BIT_2 2u #define SL_USBD_CDC_ACM_CTRL_BREAK 0 01u
FLAMURËT E NGJARJEVE TË LINJËS PËRKUFIZOJNË.
#define SL_USBD_CDC_ACM_CTRL_RTS 0 02u #define SL_USBD_CDC_ACM_CTRL_DTR 0 04u #define SL_USBD_CDC_ACM_STATE_DCD 0 01u #define SL_USBD_CDC_ACM_STATE_DSR 0 02u #define SL_USBD_CDC_ACM_STATE_BREAK 0 04u #define SL_USBD_CDC_ACM_STATE_RING 0 08u #define SL_USBD_CDC_ACM_STATE_FRAMING 0 10u #define SL_USBD_CDC_ACM_STATE_PARITY 0 20u #define SL_USBD_CDC_ACM_STATE_OVERUN 0 40u #define SL_USBD_CDC_ACM_CALL_MGMT_DEV 0 01u
AFTËSITË E MENAXHIMIT TË THIRRJEVE.
#përcaktoni SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI 0 02u #përcaktoni SL_USBD_CDC_ACM_CALL_MGMT_DATA_OVER_DCI 0 02u | 0 01u)
Dokumentacioni i Funksionit
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (i pavlefshëm)
VARIABLA GLOBALE. Parametrat
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
64/174
API-ja ACM e Pajisjes USB
Lloji
i pavlefshëm
Drejtimi N/A
Emri i Argumentit
MAKRO KONSTANTA GLOBALE PROTOTIPE FUNKSIONI CDC FUNKSIONET ACM
Inicializoni nënklasën e emulimit serial CDC ACM.
Kthimet
Kthen SL_STATUS_OK në rast suksesi ose një kod tjetër SL_STATUS në rast dështimi.
Përshkrimi
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)
Shtoni një instancë të re të nënklasës së emulimit serial CDC ACM.
Parametrat
Lloji
uint16_t
uint16_t
Emri i Argumentit të Drejtimit
Përshkrimi
N/A
line_state_interval Intervali i njoftimit të gjendjes së linjës në milisekonda (vlera duhet të
të jetë një fuqi e 2).
N/A
call_mgmt_capabilities Bitmap i Aftësive të Menaxhimit të Thirrjeve. OR i
flamujt e mëposhtëm:
SL_USBD_CDC_ACM_CALL_MGMT_DEV Pajisja merret vetë me menaxhimin e thirrjeve. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Pajisja mund të dërgojë/marrë informacion të menaxhimit të thirrjeve nëpërmjet një ndërfaqeje të Klasës së të Dhënave.
sl_usbd_cdc_acm_callbacks_t N/A
*
uint8_t *
N/A
p_acm_callbacks p_subclass_nbr
Tregues opsionalë për funksionet e rikthimit të thirrjes që do të thirren në ngjarje të ndryshme.
Parametri i ndryshores që do të marrë numrin e instancës së nënklasës së emulimit serial CDC ACM.
Kthimet
Kthe SL_STATUS_OK në rast suksesi ose një kod tjetër SL_STATUS në rast dështimi.
sl_usbd_cdc_acm_add_to_configuration
sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t nënklasë_nbr, uint8_t config_nbr)
Shtoni një instancë të klasës së nënklasës CDC ACM në konfigurimin e pajisjes USB.
Parametrat
Lloji
uint8_t uint8_t
Drejtimi N/AN/A
Emri i Argumentit
subclass_nbr config_nbr
Përshkrim Numri i instancës së nënklasës së emulimit serial CDC ACM. Indeksi i konfigurimit për të shtuar ndërfaqen e re të klasës së testimit.
Kthimet
E drejta e autorit © 2025 Silicon Laboratories. Të gjitha të drejtat e rezervuara.
65/174
API-ja ACM e Pajisjes USB
Kthen SL_STATUS_OK në rast suksesi ose një kod tjetër SL_STATUS në rast dështimi.
sl_usbd_cdc_acm_is_enabled
sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)
Merrni gjendjen e aktivizimit të nënklasës së emulimit serial CDC ACM.
Parametrat
Lloji
Drejtimi
Emri i Argumentit
Përshkrimi
uint8_t N/A
subclass_nbr Numri i instancës së nënklasës së emulimit serial CDC ACM.
bool * N/A
p_enabled
Boolean për një variabël që do të marrë statusin e aktivizuar. Variabli është vendosur në të vërtetë, emulimi serial CDC ACM është i aktivizuar. VA
Dokumentet / Burimet
![]() |
SILICON LABS USB Device Stack [pdf] Manuali i Udhëzimeve Stivë Pajisjesh USB, Stivë Pajisjesh, Stivë |
