SILICON LABS USB Device Stack qo'llanmasi

USB qurilmalar to'plami

Texnik xususiyatlari

  • USB versiyasi: 1.5.1
  • Chiqarilgan sana: 21 yil 2025 iyul
  • Simplicity SDK versiyasi: 2025.6.1

Mahsulot tugadiview

Silicon Labs tomonidan yaratilgan USB qurilmalar to'plami ko'p qirrali va
IoT loyihalari uchun foydalanish uchun qulay USB ulanishi
tarmoq protsessorlari va xostlar o'rtasidagi aloqa.

Xususiyatlari

  • Samarali USB qurilmalar to'plami
  • IoT loyihalari uchun ideal
  • Tarmoq protsessorlari o'rtasidagi aloqani qo'llab-quvvatlash va
    xostlar

Mahsulotdan foydalanish bo'yicha ko'rsatmalar

USB qurilma konfiguratsiyasi

Loyihangizga muvofiq USB qurilmasi sozlamalarini sozlang
USB qurilma konfiguratsiyasi bo'limiga murojaat qilish orqali talablar
hujjatlarda.

USB qurilmani dasturlash bo'yicha qo'llanma

Qanday qilishni tushunish uchun USB qurilmasini dasturlash qo'llanmasiga rioya qiling
dastur va USB qurilma bilan turli xil uchun o'zaro
ilovalar.

USB qurilmalari sinflari

USB Device Classes bo'limida to'liq ma'lumot mavjudview har xil
CDC ACM, HID, MSC SCSI va Vendor Class kabi sinflar. ni tanlang
qurilmangiz funksiyasiga asoslangan tegishli sinf.

USB qurilmasidagi nosozliklarni bartaraf etish

Agar USB qurilmasi bilan bog'liq muammolarga duch kelsangiz, bo'limga qarang
Yechimlar va disk raskadrovka uchun USB qurilmasi nosozliklarini bartaraf etish bo‘limi
maslahatlar.

Microsoft Windows OS USB xost

Agar siz USB qurilmasidan Microsoft Windows OS USB bilan foydalanayotgan bo'lsangiz
Xost, bo'limda keltirilgan ko'rsatmalarga amal qiling
uzluksiz integratsiya uchun hujjatlar.

TSS

Savol: Ba'zi umumiy sobiq nimaampfoydalanishim mumkin bo'lgan qurilmalar
bu USB to'plami?

Javob: USB stack kabi qurilmalarni yaratishga imkon beradi
USB-seriyali adapterlar, sichqonchalar yoki klaviaturalar, olinadigan xotira
qurilmalar va moslashtirilgan qurilmalar.

Savol: Buni ishlatish uchun maxsus dasturiy ta'minot talablari bormi?
USB qurilma to'plami?

Javob: Mos keladigan dastur Simplicity SDK, Simplicity-ni o'z ichiga oladi
Studio, Simplicity Commander, GCC (The GNU Compiler Collection),
ARM va IAR EWARM uchun IAR Embedded Workbench.

Universal seriyali avtobus USB

Universal seriyali avtobus USB

USB orqaliview tugadiview
Release Notes USB
Xususiyatlar va xususiyatlar tugadiview
USB qurilma konfiguratsiyasi tugadiview
USB qurilmasini dasturlash bo'yicha qo'llanma tugadiview
USB qurilmalari sinflari tugadiview CDC ACM klassi tugadiview HID sinfi tugadiview MSC SCSI klassi tugadiview Sotuvchi klassi tugadiview
USB API API Hujjatlari USB Device API USB Device ACM API va sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB Device CDC API va sl_usbd_cdc_subcl ss_driver_t USB Device Core API
sl_usbd_device_config_t sl_usbd_setup_req_t
sl_usbd_cl ss_driver_t USB Device HID API
sl_usbd_hid_callbacks_t USB Device MSC API
sl_usbd_msc_subcl ss_driver_t USB qurilmasi MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

1/174

Universal seriyali avtobus USB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB Device Vendor API sl_usbd_vendor_callbacks_t
API Hujjatlari USB qurilmasi nosozliklarini bartaraf etish
tugadiview Microsoft Windows OS USB xost
tugadiview

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

2/174

tugadiview
tugadiview
USB qurilmasi
USB kompyuter tizimlari tarixidagi eng muvaffaqiyatli aloqa interfeyslaridan biri bo'lib, kompyuterning tashqi qurilmalarini ulash uchun de-fakto standart hisoblanadi. Silicon Labs USB Device stack - bu o'rnatilgan tizimlar uchun maxsus mo'ljallangan USB qurilma moduli. Silicon Labs sifati, miqyosi va ishonchliligi bilan boshidan qurilgan, u USB 2.0 spetsifikatsiyasiga mos kelish uchun qattiq tekshirish jarayonidan o‘tgan. Ushbu hujjat Silicon Labs USB Device stekini ishga tushirish, ishga tushirish va ishlatishni tavsiflaydi. U turli xil konfiguratsiya qiymatlari va ulardan foydalanishni tushuntiradi. Bundan tashqari, u o'z ichiga oladiview texnologiya, konfiguratsiya imkoniyatlari turlari, amalga oshirish tartib-qoidalari va examphar bir mavjud sinf uchun odatiy foydalanish.
USB tushunchalarini tezda tushunishingizga yordam berish uchun hujjatlarda ko'plab misollar mavjudampasosiy vazifalari bilan USB les. Bular sobiqamples sizga qurilmalarni tezda qurish imkonini beruvchi ramka bilan ta'minlaydi. Bular sobiqamples o'z ichiga oladi:
USB-seriyali adapter (aloqa qurilmasi klassi) Sichqoncha yoki klaviatura (inson interfeysi qurilmasi klassi) olinadigan xotira qurilmasi (Mass Storage klassi) Maxsus qurilma (Vendor klassi)
Quyida hammasi tugadiview Hujjatlar bo'limlari:
Xususiyatlari va xususiyatlari USB qurilmasi konfiguratsiyasi USB qurilmasini dasturlash bo‘yicha qo‘llanma USB qurilmalari sinflari
CDC ACM klassi HID klassi MSC SCSI klassi sotuvchisi klassi USB qurilmasi Microsoft Windows OS USB xostidagi nosozliklarni bartaraf etish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

3/174

USB
USB

USB versiyasi 1.5.1, 2025 yil 21-iyul – Relizlar haqida eslatmalar
Simplicity SDK Version 2025.6.1
Silicon Labs’ning samarali USB qurilmalar to‘plami IoT loyihalari, jumladan, tarmoq protsessorlari va xostlar o‘rtasidagi aloqa uchun ideal ko‘p qirrali, foydalanish uchun qulay USB ulanishini taklif etadi. Oldingi nashrlar uchun bu yerni bosing.
Xulosa haqida ma'lumot
Asosiy xususiyatlar | API o'zgarishlari | Xatolarni tuzatish | Chipni yoqish
Asosiy xususiyatlar
Faqat asosiy platforma o'zgaradi.
API o'zgarishlari
Yo'q.
Xatolarni tuzatish
Yo'q.
Chipni yoqish
Yo'q.
Asosiy xususiyatlar
Yangi xususiyatlar | Yaxshilashlar | O'chirilgan xususiyatlar | Eskirgan xususiyatlar
Yangi xususiyatlar
Yo'q.
Yaxshilashlar
Faqat asosiy platforma o'zgaradi.
O'chirilgan xususiyatlar
Yo'q.
Eskirgan xususiyatlar
Yo'q.
API o'zgarishlari
Yangi API | O'zgartirilgan API | O'chirilgan API | Eskirgan API
Yangi API'lar

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

4/174

USB
Yo'q.
O'zgartirilgan API
Yo'q.
O'chirilgan API
Yo'q.
Eskirgan API
Yo'q.
Xatolarni tuzatish
Yo'q.
Chipni yoqish
Yo'q.
Ilova Example O'zgarishlar
Yangi Examples | O'zgartirilgan Examples | O'chirildi Examples | Eskirgan Examples
Yangi Examples
Yo'q.
O'zgartirilgan Examples
Yo'q.
O'chirildi Examples
Yo'q.
Eskirgan Examples
Yo'q.
Chiqarish o'zgarishlarining ta'siri
Ta'sir bayonotlari | Migratsiya bo'yicha qo'llanma
Ta'sir bayonotlari
Yo'q.
Migratsiya bo'yicha qo'llanma
Yo'q.
Ma'lum muammolar va cheklovlar
Yo'q.
Ushbu nashrdan foydalanish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

5/174

USB

Relizda nima bor? | Mos dasturiy ta'minot | O'rnatish va foydalanish | Yordam va fikr-mulohaza

Relizda nima bor?

USB Device Stack Application Examples
Mos dasturiy ta'minot

Dasturiy ta'minot
Simplicity SDK Simplicity Studio Simplicity Commander GCC The GNU Compiler Collection) ARM IAR EWARM uchun IAR o‘rnatilgan ish stoli

Mos keluvchi versiya yoki variant
2025.6.0 5.11.0 1.18.2 (Simplicity Studio bilan taʼminlangan) 12.2.1 (Simplicity Studio bilan taʼminlangan) 9.40.1 (Simplicity Studio bilan taʼminlangan)

O'rnatish va foydalanish

Rivojlanishni boshlash uchun bizni ko'ring:
USB qurilmani dasturlash bo'yicha qo'llanma. API hujjatlari.
Secure Vault integratsiyasi haqida ma'lumot olish uchun Secure Vault-ga qarang.
Qaytaview Xavfsizlik va dasturiy ta'minot bo'yicha maslahat bildirishnomalari va bildirishnoma sozlamalaringizni boshqaring:
ò https://community.silabs.com/ saytiga o'ting. ó Hisob qaydnomangiz bilan tizimga kiring. ô Professoringizni bosingfile sahifaning yuqori o'ng burchagidagi belgi.
õ Ochiladigan menyudan Bildirishnomalar ni tanlang. ö Bildirishnomalar boʻlimida qaytadan “Mening mahsulotim bildirishnomalari” yorligʻiga oʻtingview tarixiy xavfsizlik va dasturiy ta'minot bo'yicha maslahat
bildirishnomalar
÷ Oʻz afzalliklaringizni boshqarish uchun “Bildirishnomalarni boshqarish” yorligʻidan foydalanib, qaysi mahsulot yangilanishlari va maslahatlarini oʻzingizga moslashtirishingiz mumkin.
qabul qilish.
Tavsiya etilgan konfiguratsiya sozlamalari uchun bu yerga qarang.
Ushbu nashrdagi dasturiy ta'minot haqida ko'proq ma'lumot olish uchun onlayn hujjatlarimizga sho'ng'ing.
Yordam va fikr-mulohaza

Silicon Labs Support bilan bog'laning. Javoblarni olish uchun so‘roq AI vositasidan foydalanish uchun ushbu sahifaning yuqori qismidagi qidiruv maydoniga qarang.

Eslatma: So'roq AI eksperimentaldir.

Dasturchilar hamjamiyatimizdan yordam oling.
SDK chiqarish va texnik xizmat ko'rsatish siyosati
SDK chiqarish va texnik xizmat koʻrsatish siyosatimizga qarang.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

6/174

tugadiview
tugadiview
Texnik xususiyatlari
“Universal Serial Bus spetsifikatsiyasi reviziyasi 2.0” ga mos keladi “Interfeys assotsiatsiyasi deskriptorining muhandislik o‘zgarishi haqida bildirishnoma (ECN)” uzatish turlarini amalga oshiradi
Boshqarish ommaviy uzilish USB sinflari Aloqa qurilmasi klassi (CDC) Abstrakt boshqaruv modeli (ACM) Inson interfeysi qurilmasi (HID) Mass Storage klassi (MSC) Sotuvchiga xos sinf tizimi
Xususiyatlari
Xotira maydonini minimallashtirish uchun faqat talab qilinadigan xususiyatlarni o‘z ichiga olishi mumkin. To‘liq tezlikda (12 Mbit/s) qo‘llab-quvvatlaydi Kompozit (ko‘p funksiyali) qurilmalarni qo‘llab-quvvatlaydi Ko‘p konfiguratsiyali qurilmalarni qo‘llab-quvvatlaydi USB quvvatni tejash funksiyalarini qo‘llab-quvvatlaydi (qurilmani to‘xtatib turish va davom ettirish) Mass xotira sinfini Micrium OS bilan to‘liq integratsiya File Tizim moduli CMSIS-RTOS2 abstraktsiya qatlami bilan ishlab chiqilgan bo'lib, u turli operatsion tizimlar bilan ishlashi mumkin. Silicon Labs GSDK FreeRTOS va Micrium OS portlari bilan birga keladi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

7/174

tugadiview
tugadiview

USB qurilma konfiguratsiyasi

Ushbu bo'lim Silicon Labs USB qurilmasini qanday sozlashni muhokama qiladi. Quyidagi kabi konfiguratsiya parametrlarining uchta guruhi mavjud:
USB Device Core Configuration USB Device Information Configuration USB Device Hardware Configuration
USB qurilma yadro konfiguratsiyasi
Silicon Labs USB qurilmasi kompilyatsiya vaqtida sl_usbd_core_config.h da joylashgan #defines to‘plami orqali sozlanishi mumkin. file. USB qurilmasi iloji bo'lsa #defines dan foydalanadi, chunki ular kod va ma'lumotlar hajmini kompilyatsiya vaqtida qaysi funksiyalar yoqilganligiga qarab o'lchash imkonini beradi. Bu Silicon Labs USB Devicening faqat o'qish uchun mo'ljallangan xotirasi (ROM) va tasodifiy kirish xotirasi (RAM) izlarini ilovangiz talablari asosida sozlash imkonini beradi.
Tavsiya etiladi: Konfiguratsiya jarayonini standart qiymatlar bilan boshlang (qalin bilan ta'kidlangan).
Quyidagi bo'limlar shablon konfiguratsiyasidagi tartib asosida tuzilgan file, sl_usbd_core_config.h.
Asosiy konfiguratsiya sinflari konfiguratsiyasi
Asosiy konfiguratsiya
Jadval - USB qurilma yadro konfiguratsiyasi doimiylari

Doimiy tavsif

Standart qiymat

SL_USBD_TA SK_STACK_ SIZE

USBD asosiy vazifasi baytlarida stek hajmini sozlaydi

4096

SL_USBD_TA SK_PRIORIT Y

USBD asosiy vazifasining ustuvorligini sozlaydi. Bu CMSIS-RTOS2 ustuvorligi.

osPriorityHigh

SL_USBD_A UTO_START _USB_DEVIC E

Agar yoqilgan bo'lsa, yadro ishga tushirilgandan so'ng USB qurilmasi avtomatik ravishda ishga tushadi va 1 USBD asosiy vazifasi birinchi marta rejalashtirilgan. Agar o'chirilgan bo'lsa, ilovangiz USB xosti tomonidan aniqlanishi uchun sl_usbd_core_start_device() ga qo'ng'iroq qilishi kerak bo'ladi.

SL_USBD_C sl_usbd_add_configuration() orqali qo'shiladigan konfiguratsiyalarning umumiy soni

1

ONFIGURATI funktsiyasi.

ON_QUANTI

TY

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

8/174

tugadiview

Doimiy
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITY
SL_USBD _DESCRI
PTOR_Q
UANTITY
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY

Tavsif Barcha konfiguratsiyalaringiz uchun qo'shiladigan USB interfeyslarining umumiy soni. Bu ko'p jihatdan ishlatiladigan sinf(lar) ga bog'liq. Sinf namunasi qancha interfeyslarni talab qilishi haqida ko'proq ma'lumot olish uchun sinf(lar)ingizning "Asosiy manbalardan manbalarga ehtiyoj" bo'limiga qarang.
Barcha konfiguratsiyalaringiz uchun qo'shiladigan USB muqobil interfeyslarining umumiy soni. Bu ko'p jihatdan ishlatiladigan sinf(lar) ga bog'liq. Bu qiymat har doim SL_USBD_INTERFACE_QUANTITY ga teng yoki kattaroq bo'lishi kerak. Sinf namunasi uchun qancha muqobil interfeyslar talab qilinishi haqida ko'proq ma'lumot olish uchun sinf(lar)ingizning "Asosiy manbalardan resurslarga ehtiyoj" bo'limiga qarang.
Barcha konfiguratsiyalaringiz uchun qo'shiladigan USB interfeys guruhlarining umumiy soni. Bu ko'p jihatdan ishlatiladigan sinf(lar) ga bog'liq. Qancha interfeys guruhlari sinf namunasini talab qilishi haqida qo'shimcha ma'lumot olish uchun sinf(lar)ingizning "Asosiy manbalardan foydalanish ehtiyojlari" bo'limiga qarang.
Barcha konfiguratsiyalaringiz uchun qo'shiladigan so'nggi nuqta deskriptorlarining umumiy soni. Bu ko'p jihatdan ishlatiladigan sinf(lar) ga bog'liq. Sinf namunasi uchun qancha so'nggi nuqta deskriptorlari talab qilinishi haqida qo'shimcha ma'lumot olish uchun sinf(lar)ingizning "Asosiy manbalardan manba ehtiyojlari" bo'limidagi "Yakuniy nuqtalar soni"ga qarang. E'tibor bering, bu erda nazoratning so'nggi nuqtalarini ko'rib chiqish shart emas. USB simlarining umumiy soni. Miqdorni nolga o'rnatish funksiyani o'chiradi. Buni o‘chirib qo‘ysangiz, qurilma ilovadan uzatilgan USB tavsif satrlarini saqlamasligiga olib keladi. Bu shuni anglatadiki, xost tavsif satrlarini (masalan, ishlab chiqaruvchi va mahsulot nomi) ololmaydi. Konfiguratsiya uchun ochilgan oxirgi nuqtalarning umumiy soni. Nazorat uzatish uchun qurilma kamida ikkita ochilgan so'nggi nuqtani talab qiladi, lekin siz foydalanilgan sinf(lar)ning so'nggi nuqtalarini ham qo'shishingiz kerak. Sinf namunasi qancha ochilgan so'nggi nuqtalarni talab qilishi haqida qo'shimcha ma'lumot olish uchun sinf(lar)ingizning "Asosiy manbalardan manba ehtiyojlari" bo'limidagi "Yakuniy nuqtalar soni"ga qarang.

Standart qiymat
10 10
2
20 30 20

Sinflar konfiguratsiyasi
Sinflar maxsus kompilyatsiya vaqti konfiguratsiyasiga ega. Qo'shimcha ma'lumot olish uchun USB qurilmalari sinflariga qarang.
USB qurilmasi haqida ma'lumot konfiguratsiyasi

sl_usbd_device_config.h konfiguratsiyasi file kompilyatsiya vaqti #define-s ni qurilmangizga tegishli sotuvchi/mahsulot identifikatori, qurilma qatorlari va boshqalar kabi asosiy maʼlumotlarni oʻrnatish uchun qayta guruhlaydi. Quyidagi jadvalda ushbu konfiguratsiyada mavjud boʻlgan har bir maʼlumot konfiguratsiyasi tasvirlangan. file.

Jadval - USB qurilmasi ma'lumotlari konfiguratsiyasini belgilaydi

Doimiy
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID

Tavsif USB Implementers Forum tomonidan berilgan sotuvchi identifikatsiya raqamingiz. Sotuvchi identifikatorini qanday olishingiz mumkinligi haqida ko'proq ma'lumot olish uchun http://www.usb.org/developers/vendor/ ga qarang. Mahsulot identifikatsiya raqamingiz.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

9/174

tugadiview

Doimiy

Tavsif

SL_USBD_DEVICE_RELEASE Qurilmangizning chiqarish raqami. _NUMBER

SL_USBD_DEVICE_MANUFA Qurilmangiz ishlab chiqaruvchisini tavsiflovchi qator. Bu konfiguratsiyaga e'tibor berilmaydi

CTURER_STRING

SL_USBD_STRING_QUANTITY konfiguratsiyasi 0 ga o‘rnatildi.

SL_USBD_DEVICE_PRODUC Mahsulotingizni tavsiflovchi qator. Konfiguratsiya paytida ushbu konfiguratsiya e'tiborga olinmaydi

T_STRING

SL_USBD_STRING_QUANTITY 0 ga o‘rnatildi.

SL_USBD_DEVICE_SERIAL_N Qurilmangizning seriya raqamini o'z ichiga olgan qator. Bu konfiguratsiyaga e'tibor berilmaydi

UMBER_STRING

SL_USBD_STRING_QUANTITY konfiguratsiyasi 0 ga o‘rnatildi.

SL_USBD_DEVICE_LANGUA Qurilmangiz satrlari tilining identifikatsiya raqami. Mumkin qiymatlar:
GE_ID

– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA

– SL_USBD_LANG_ID_CHINESE_TAIWAN

– SL_USBD_LANG_ID_ENGLISH_US

– SL_USBD_LANG_ID_ENGLISH_UK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_GERMAN

– SL_USBD_LANG_ID_GREEK

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGUESE

– SL_USBD_LANG_ID_SANSKRIT

SL_USBD_STRING_QUANTITY konfiguratsiyasi 0 ga o'rnatilganda, bu konfiguratsiya e'tiborga olinmaydi.

USB qurilmasi apparat konfiguratsiyasi

Siz foydalanayotgan Silicon Labs qurilmasiga qarab, USB VBUS Sense signalini sozlash uchun GPIO pin va portiga ega bo'lishingiz mumkin. Konfiguratsiyani aniqlash sl_usbd_hardware_config.h sarlavhasida joylashgan. file.

Doimiy
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Tavsif
Bortingizdagi USB VBUS Sense signali uchun GPIO porti. Bortingizdagi USB VBUS Sense signali uchun GPIO Pin.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

10/174

tugadiview
tugadiview
USB qurilmani dasturlash bo'yicha qo'llanma
Ushbu bo'lim USB Device modulidan qanday foydalanishni tushuntiradi.
USB qurilma modulini dastlabki sozlash
Ushbu bo'lim USB Device modulini ishga tushirish va qurilmani qo'shish, tayyorlash va ishga tushirish uchun zarur bo'lgan asosiy qadamlarni tavsiflaydi. USB qurilma modulini ishga tushirish USB qurilma yadrosini ishga tushirish aCl ss(lar) ni ishga tushirish USB qurilmangizni qo‘shish USB qurilmangizni qurish Konfiguratsiya(lar)ni qo‘shish USB funksiya(lar)ni qo‘shish USB qurilmangizni ishga tushirish
Hodisa hook funksiyalari
USB qurilma modulini ishga tushirish
USB qurilma yadrosini ishga tushirish
a AQSH a B qurilma moduli yadrosini sl_usbd_core_init() funksiyasini ishga tushirish orqali boshlang. T aa u ex mple quyida c lling sl_usbd_core_init() ni ko'rsatadi.
Example - sl_usbd_core_init() ga qo'ng'iroq qilish
sl_status_t holati; status = sl_usbd_core_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
Sinf(lar)ni ishga tushirish
USB qurilma moduli yadrosi ishga tushirilgandan so'ng, siz foydalanmoqchi bo'lgan har bir sinfni ishga tushirishingiz kerak. Qo'shimcha ma'lumot olish uchun acl ss(lar)ingizning "Dasturlash qo'llanmasi" bo'limiga qarang.
USB qurilmangizni yaratish
Konfiguratsiya(lar)ni qo'shish
Qurilmangizni muvaffaqiyatli ishga tushirganingizdan so'ng, yangi konfiguratsiyadan boshlab unga USB funksiyalarini qo'shishni boshlashingiz mumkin. Qurilma kamida bitta konfiguratsiyaga ega bo'lishi kerak. Konfiguratsiya(lar)ni qo'shish uchun aa sl_usbd_core_ dd_configuration() funksiyasini chaqiring. Ushbu funktsiya siz qo'shmoqchi bo'lgan har bir konfiguratsiya uchun chaqirilishi kerak. sobiqampQuyida to'liq tezlikni qanday qo'shish kerakligi ko'rsatilgan.
Example - Qurilmangizga konfiguratsiya(lar)ni qo'shish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

11/174

tugadiview

sl_status_t holati; uint8_t config_nbr_fs;

/* Qurilmaga to'liq tezlikda konfiguratsiya qo'shish. */

status = sl_usbd_core_add_configuration(0,

/* Konfiguratsiya uchun maxsus atributlar yo'q. */

100u,

/* Maksimal quvvat sarfi: 100mA.

*/

SL_USBD_DEVICE_SPEED_FULL,

/* To'liq tezlikda konfiguratsiya.

*/

“Config Add Exampto'liq tezlikda konfiguratsiya”,

&config_nbr_fs);

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

USB funksiya(lar)ni qo‘shish
Qurilmangizga kamida bitta konfiguratsiyani muvaffaqiyatli qo'shganingizdan so'ng, qurilmangizga interfeyslar va so'nggi nuqtalarni qo'shishingiz mumkin. Har bir USB sinfi interfeys va so'nggi nuqtalar turi, miqdori va boshqa parametrlari bo'yicha o'z ehtiyojlariga ega. Silicon Labs USB qurilmasi o'zi taklif qilayotgan sinflarda interfeys va so'nggi nuqtalarni qo'shadi.
Ilovangizdan USB sinfini yaratishingiz va uni konfiguratsiyaga qo'shishingiz mumkin. USB qurilmalar sinfi misollari tushunchasi haqida qo'shimcha ma'lumot olish uchun USB qurilmalar sinflari bo'limiga qarang. Ko'p funktsiyali (kompozit) qurilmani yaratish uchun konfiguratsiyaga ko'plab turli sinf misollarini yaratishingiz va qo'shishingiz mumkinligini unutmang.
sobiqampQuyida qanday qilib sinf misolini yaratish va uni konfiguratsiyaga qo'shish ko'rsatilgan.
Example - Qurilmangizga sinf namunasini qo'shish

sl_status_t holati; uint8_t class_nbr;
/* Siz foydalanmoqchi bo'lgan sinfning namunasini yarating.*/ /* E'tibor bering, sinfga qarab bu funksiya ko'proq argumentlarga ega bo'lishi mumkin. */ status = sl_usbd_ _instance_create (&class_nbr); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }
/* To'liq tezlik konfiguratsiyasiga sinf misolini qo'shing. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* sl_usbd_ tomonidan qaytarilgan sinf raqami _instance yaratish. */
config_nbr_fs); /* sl_usbd_core_add_configuration() tomonidan qaytarilgan konfiguratsiya raqami. */ agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }
USB qurilmangizni ishga tushirish
Odatiy bo'lib, qurilma ishga tushirilishi tugallangandan va yadro ishga tushirilgandan so'ng, qurilma USB qurilmasining asosiy vazifasi tomonidan avtomatik ravishda ishga tushadi. Qurilma ishga tushirilganda va USB xost tomonidan ko‘rinadigan bo‘lishini nazorat qilish uchun avtomatik ishga tushirish funksiyasini o‘chirish uchun SL_USBD_AUTO_START_USB_DEVICE konfiguratsiyasidan foydalaning. O'chirib qo'yilganda, qurilmangizni qurib/tayyorlaganingizdan so'ng, sl_usbd_core_start_device() funksiyasiga qo'ng'iroq qilib, uni ishga tushirishingiz va USB xostiga ko'rinadigan qilishingiz mumkin.
sobiqampQuyida sl_usbd_core_start_device() funksiyasidan foydalanib qurilmangizni qanday ishga tushirishingiz ko‘rsatilgan.
Example - Qurilmangizni ishga tushirish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

12/174

tugadiview

sl_status_t holati;
status = sl_usbd_core_start_device(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }

Hodisa hook funksiyalari
USB Device yadro moduli ilovangizda qayta belgilashingiz mumkin bo'lgan ikkita zaif ilgak funksiyasini taklif etadi. Ularning maqsadi avtobus va konfiguratsiya hodisalari sodir bo'lganda xabardor qilishdir.
Jadval – USB hodisa kancasi funksiyalari

Tadbir

Tavsif

Avtobus

USB Bus hodisasi sodir bo'lganda chaqiriladi

Konfiguratsiya USB konfiguratsiyasi hodisasi sodir bo'lganda chaqiriladi

Funktsiya imzosi
void sl_usbd_on_bus_event(sl_usbd_bus_event_t hodisasi); void sl_usbd_on_config_event(sl_usbd_config_event_t hodisasi, uint8_t config_nbr);

Example - Voqealar Hook funktsiyalari

void sl_usbd_on_bus_event(sl_usbd_bus_event_t hodisasi) { switch (voqea) {holati SL_USBD_EVENT_BUS_CONNECT:
// USB kabeli xost boshqaruvchisi uzilishiga kiritilganda chaqiriladi;
case SL_USBD_EVENT_BUS_DISCONNECT: // USB kabeli xost boshqaruvchisi uzilishidan chiqarilganda chaqiriladi;
case SL_USBD_EVENT_BUS_RESET: // xost reset buyrug'ining uzilishini yuborganda chaqiriladi;
case SL_USBD_EVENT_BUS_SUSPEND: // xost to'xtatib turish buyrug'ining uzilishini yuborganda chaqiriladi;
case SL_USBD_EVENT_BUS_RESUME: // xost uyg'otish buyrug'ining uzilishini yuborganda chaqiriladi;
standart: tanaffus; } }
bekor sl_usbd_on_config_event(sl_usbd_config_event_t voqea, uint8_t config_nbr) { switch (voqea) { case SL_USBD_EVENT_CONFIG_SET:
// xost konfiguratsiya uzilishini o'rnatganda chaqiriladi;
case SL_USBD_EVENT_CONFIG_UNSET: // konfiguratsiya o'rnatilmagan tanaffusda chaqiriladi;
standart: tanaffus; } }

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

13/174

tugadiview

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

14/174

tugadiview
tugadiview

USB qurilmalari sinflari

Silicon Labs USB Device-da mavjud bo'lgan USB sinflari ba'zi umumiy xususiyatlarga ega. Ushbu bo'limda ushbu xususiyatlar va ularning yadro qatlami bilan o'zaro ta'siri tushuntiriladi.
Muayyan sinf haqida qo'shimcha ma'lumot olish uchun quyidagilarni ko'ring:
CDC ACM klassi HID klassi MSC SCSI sinf sotuvchisi klassi
Sinf misollari haqida
USB qurilmasida mavjud bo'lgan USB sinflari sinf misollari kontseptsiyasini amalga oshiradi. Sinf namunasi qurilma ichidagi bitta funktsiyani ifodalaydi. Funktsiya bitta interfeys yoki interfeyslar guruhi bilan tavsiflanishi mumkin va ma'lum bir sinfga tegishli.
Har bir USB klass ilovasi sinf namunasi kontseptsiyasiga asoslangan umumiy konfiguratsiya va funktsiyalarga ega. Umumiy konfiguratsiyalar va funktsiyalar quyidagi jadvalda keltirilgan. “Doimiylar yoki funksiya” ustun sarlavhasida XXXX toʻldiruvchisi sinf nomi bilan almashtirilishi mumkin: CDC, HID, MSC, CDC_ACM yoki VENDOR (funksiya nomlari uchun sotuvchi).
Jadval - Ko'p sinf misollari tushunchasi bilan bog'liq doimiylar va funktsiyalar

Doimiy yoki funktsiya
SL_USBD_XXXXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre _insta nce ()
sl_usbd_XXXXXX_add_to_conf iguratsiyasi()

Tavsif
Sinf misollarining maksimal sonini sozlaydi.
Konfiguratsiyalarning maksimal sonini sozlaydi. Sinfni ishga tushirish vaqtida yaratilgan sinf namunasi bir yoki bir nechta konfiguratsiyaga qo'shiladi. Yangi sinf misolini yaratadi.
Belgilangan qurilma konfiguratsiyasiga mavjud sinf namunasini qo'shadi.

Kodni amalga oshirish nuqtai nazaridan, sinf sinfni boshqarish tuzilmasini o'z ichiga olgan mahalliy global o'zgaruvchini e'lon qiladi. Ushbu sinf boshqaruv tuzilmasi bitta sinf namunasi bilan bog'langan va sinf misolini boshqarish uchun maxsus ma'lumotlarni o'z ichiga oladi.
Quyidagi raqamlar bir nechta vaziyat stsenariylarini ko'rsatadi. Har bir raqam oldingi kodni o'z ichiga oladiample bu holat stsenariysiga mos keladi.
Rasm – Bir nechta sinf namunalari – FS qurilmasi (1 ta interfeysli 1 konfiguratsiya) odatiy USB qurilmasini ifodalaydi. Qurilma Full-Speed ​​(FS) va bitta konfiguratsiyani o'z ichiga oladi. Qurilmaning vazifasi ma'lumotlar uzatish uchun bir juft so'nggi nuqtadan tashkil topgan bitta interfeys bilan tavsiflanadi. Bitta sinf namunasi yaratiladi va u sizga bog'langan so'nggi nuqta bilan butun interfeysni boshqarishga imkon beradi.
Rasm – Bir nechta sinf namunalari – 1 interfeysli FS qurilmasi 1 konfiguratsiyasi)

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

15/174

tugadiview

Rasmga mos keladigan kod - Ko'p sinf namunalari - FS qurilmasi (1 interfeysli 1 konfiguratsiya) oldingi rasmda ko'rsatilgan.amppastda.
Example - Bir nechta sinf namunalari - 1 interfeysli FS qurilmasi 1 konfiguratsiyasi)

sl_status_t holati; uint8_t class_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Handle Class yoqish hodisasi. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Handle Class o‘chirish hodisasi. */ }

sl_usbd_XXXXX_callbacks_t class_callbacks = {

(1)

.enable = app_usbd_XXXXXX_enable,

.disable = app_usbd_XXXX_disable

};

status = sl_usbd_XXXXXX_init();

(2)

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

status = sl_usbd_XXXX_create_instance(&class_callbacks,

(3)

&sinf_0);

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

status = sl_usbd_XXXX_add_to_configuration(sinf_0, konfiguratsiya_0);

(4)

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

(1) Har bir sinf qurilmani ulash/ajratish hodisalari va sinfga xos hodisalar uchun qayta qo'ng'iroq qilish funksiyalari to'plamini taklif qiladi. Qayta qo'ng'iroq qilish strukturasi ob'ekti sl_usbd_XXXX_create_instance() bilan sinf misolini yaratishda argument sifatida uzatiladi.
funktsiyasi.
(1) Sinfni boshlang. Barcha ichki o'zgaruvchilar, tuzilmalar va sinf portlari ishga tushiriladi. E'tibor bering, ba'zi sinflarda Init() funktsiyasi boshqa argumentlarni olishi mumkin.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

16/174

tugadiview
(2) class_0 bo'lgan sinf misolini yarating. sl_usbd_XXXX_create_instance() funksiyasi class_0 bilan bog‘langan sinf boshqaruv strukturasini ajratadi. Sinfga qarab, sl_usbd_XXXX_create_instance() sinf raqamidan tashqari, sinfni boshqarish tuzilmasida saqlanadigan sinfga xos ma'lumotlarni ifodalovchi qo'shimcha parametrlarga ega bo'lishi mumkin. aaa (3) cl ss instansiyasini, class_0 ni belgilangan konfiguratsiya raqamiga, config_0 qo'shing. sl_usbd_XXXX_add_to_configuration() 0 interfeysini va u bilan bog'liq IN va OUT so'nggi nuqtalarini yaratadi. Natijada, sinf misoli 0 interfeysini va uning so'nggi nuqtalarini qamrab oladi. 0 interfeysida amalga oshirilgan har qanday aloqa sinf misol raqamidan foydalanadi, class_0 . Shakl – Bir nechta sinf namunalari – FS qurilmasi (2 ta konfiguratsiya va bir nechta interfeyslar) murakkabroq eskisini ifodalaydi.ample. To'liq tezlikda ishlaydigan qurilma ikkita konfiguratsiyadan iborat. Qurilma bir xil sinfga tegishli ikkita funktsiyaga ega, ammo har bir funktsiya ikkita interfeys bilan tavsiflanadi va bir juft ikki tomonlama so'nggi nuqtalarga ega. Bu sobiqample, ikkita sinf misoli yaratiladi. Har bir sinf misoli interfeyslar guruhi bilan bog'langan bo'lib, unda sinf namunasi bitta interfeys bilan bog'langan shakl - Bir nechta sinf namunalari - FS qurilmasi (1 ta interfeys bilan 1 ta konfiguratsiya) va rasm - bir nechta sinf namunalari - FS qurilmasi (2 ta konfiguratsiya va bir nechta interfeys).
Rasm – Bir nechta sinf namunalari – FS Device 2 konfiguratsiyasi va bir nechta interfeyslar)

Rasmga mos keladigan kod - Bir nechta sinf namunalari - FS qurilmasi (2 ta konfiguratsiya va bir nechta interfeyslar) oldingi rasmda ko'rsatilgan.amppastda. Aniqlik uchun xatolarni qayta ishlash o'tkazib yuborilgan.
Example – Bir nechta sinf namunalari – FS Device 2 konfiguratsiyasi va bir nechta interfeyslar)

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

17/174

tugadiview

sl_status_t holati; uint8_t class_0; uint8_t class_1;
status = sl_usbd_XXXXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
status = sl_usbd_XXXX_add_to_configuration(sinf_0, cfg_0); status = sl_usbd_XXXX_add_to_configuration(sinf_1, cfg_0);
status = sl_usbd_XXXX_add_to_configuration(sinf_0, cfg_1); status = sl_usbd_XXXX_add_to_configuration(sinf_1, cfg_1);

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

(1) Sinfni boshlang. Har qanday ichki o'zgaruvchilar, tuzilmalar va sinf portlari ishga tushiriladi.
(2) class_0 sinf misolini yarating. sl_usbd_XXXX_create_instance() funksiyasi class_0 bilan bog‘langan sinf boshqaruv strukturasini ajratadi.
(3) Class_1 sinf misolini yarating. sl_usbd_XXXX_create_instance() funksiyasi class_1 bilan bog‘langan boshqa sinf boshqaruv strukturasini ajratadi.
(4) cfg_0 konfiguratsiyasiga class_0 sinf misolini qo'shing. sl_usbd_XXXX_add_to_configuration() interfeysi 0, interfeys 1, muqobil interfeyslar va tegishli IN va OUT so‘nggi nuqtalarini yaratadi. Sinf namunasi raqami, class_0 , 0 interfeysi yoki 1 interfeysidagi har qanday ma'lumot almashish uchun ishlatiladi.
(5) cfg_0 konfiguratsiyasiga class_1 sinf misolini qo'shing. sl_usbd_XXXX_add_to_configuration() interfeysi 2, interfeys 3 va ular bilan bog'liq IN va OUT so'nggi nuqtalarini yaratadi. Sinf namunasi raqami, class_1 , 2-interfeys yoki 3-interfeysdagi har qanday ma'lumot almashish uchun ishlatiladi.
(6) Boshqa cfg_1 konfiguratsiyasiga bir xil sinf misollarini qo'shing, class_0 va class_1 .
Har bir sinf sl_usbd_XXXX_callbacks_t tipidagi tuzilmani belgilaydi. Uning maqsadi har bir sinfga voqea sodir bo'lganda chaqiriladigan qayta qo'ng'iroq qilish funktsiyalari to'plamini berishdir. Har bir sinfda ikkita qayta qo'ng'iroq funktsiyasi mavjud. Ular quyidagi jadvalda keltirilgan.
Jadval - Umumiy sinfni qayta qo'ng'iroq qilish funktsiyalari

Maydonlar tavsifi .enable USB sinf namunasi muvaffaqiyatli yoqilganda chaqiriladi. .disable USB sinf namunasi o'chirilganda chaqiriladi.

Function Signature void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXXX_disable(uint8_t class_nbr);

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

18/174

tugadiview
tugadiview
USB qurilma CDC ACM klassi
USB qurilma CDC asosiy klassi tugadiview USB Device CDC ACM Class Resurs asosiy USB Device CDC ACM Subclass Over kerakview USB qurilmasi CDC ACM klassi konfiguratsiyasi USB qurilmasi CDC ACM sinfini dasturlash bo'yicha qo'llanma
Ushbu bo'limda Silicon Labs USB Device stack tomonidan qo'llab-quvvatlanadigan Communications Device Class (CDC) sinfi va tegishli CDC subklassi tasvirlangan. Silicon Labs USB-qurilmasi hozirda odatda ketma-ket emulyatsiya uchun ishlatiladigan Abstract Control Model (ACM) kichik sinfini qo'llab-quvvatlaydi.
CDC turli telekommunikatsiya va tarmoq qurilmalarini o'z ichiga oladi. Telekommunikatsiya qurilmalariga analog modemlar, analog va raqamli telefonlar, ISDN terminal adapterlari va boshqalar kiradi. Masalan.ample, tarmoq qurilmalarida ADSL va kabel modemlari, Ethernet adapterlari va hublar mavjud. CDC USB havolasidan foydalangan holda V.250 (telefon tarmog'i orqali modemlar uchun) va Ethernet (mahalliy tarmoq qurilmalari uchun) kabi mavjud aloqa xizmatlari standartlarini qamrab olish uchun asosni belgilaydi. Aloqa qurilmasi qurilmalarni boshqarish, kerak bo'lganda qo'ng'iroqlarni boshqarish va ma'lumotlarni uzatish uchun javobgardir.
CDC qurilmalarning ettita asosiy guruhini belgilaydi. Har bir guruh bir nechta kichik sinflarni o'z ichiga olishi mumkin bo'lgan aloqa modeliga tegishli. Har bir qurilmalar guruhi CDC tayanch sinfidan tashqari o'z spetsifikatsiya hujjatiga ega. Etti guruh quyidagilar:
Umumiy kommutatsiyalangan telefon tarmogʻi (PSTN), qurilmalar, jumladan, ovozli tarmoqli modemlar, telefonlar va ketma-ket emulyatsiya qurilmalari. Integrated Services Digital Network (ISDN) qurilmalari, shu jumladan terminal adapterlari va telefonlar. Ethernet Control Model (ECM) qurilmalari, shu jumladan IEEE 802 oilasini qo'llab-quvvatlaydigan qurilmalar (masalan: kabel va ADSL modemlari, WiFi adapterlari). Asinxron uzatish rejimi (ATM) qurilmalari, shu jumladan ADSL modemlari va ATM tarmoqlariga ulangan boshqa qurilmalar (ish stantsiyalari, marshrutizatorlar, LAN kalitlari). Simsiz mobil aloqa (WMC) qurilmalari, shu jumladan ovozli va ma'lumotlar aloqalarini boshqarish uchun ishlatiladigan ko'p funksiyali aloqa telefonlari. Ethernet-ramkali ma'lumotlarni almashinadigan Ethernet Emulation Model (EEM) qurilmalari. Tarmoqni boshqarish modeli (NCM) qurilmalari, shu jumladan yuqori tezlikdagi tarmoq qurilmalari (Yuqori tezlikda paketli kirish modemlari, Line Terminal Equipment)
CDC va tegishli subklassni amalga oshirish quyidagi spetsifikatsiyalarga mos keladi:
Universal Serial Bus, Aloqa qurilmalari uchun klass ta'riflari, 1.2 versiyasi, 2010 yil 3-noyabr.
USB qurilma CDC asosiy klassi tugadiview
CDC qurilmasi aloqa qobiliyatini amalga oshirish uchun quyidagi interfeyslardan iborat:
Communications Class Interface (CCI) qurilma boshqaruvi va ixtiyoriy ravishda qo'ng'iroqlarni boshqarish uchun javobgardir. The
qurilma boshqaruvi qurilmaning umumiy konfiguratsiyasi va boshqaruvini hamda xostga hodisalar haqida xabar berish imkonini beradi. Qo'ng'iroqlarni boshqarish qo'ng'iroqlarni o'rnatish va tugatish imkonini beradi. Qo'ng'iroqlarni boshqarish DCI orqali ko'paytirilishi mumkin. CCI barcha CDC qurilmalari uchun majburiydir. CDC qurilmasi tomonidan qo'llab-quvvatlanadigan aloqa modelini ko'rsatish orqali CDC funktsiyasini aniqlaydi. CCIdan keyingi interfeys(lar) har qanday belgilangan USB sinf interfeysi bo'lishi mumkin, masalan, Audio yoki sotuvchiga xos interfeys. Sotuvchiga xos interfeys maxsus DCI bilan ifodalanadi.
Ma'lumotlar klassi interfeysi (DCI) ma'lumotlarni uzatish uchun javobgardir. O'tkazilgan va/yoki qabul qilingan ma'lumotlar ma'lum bir shartga amal qilmaydi
format. Ma'lumotlar aloqa liniyasidan olingan xom ma'lumotlar, xususiy formatdagi ma'lumotlar va boshqalar bo'lishi mumkin. SSPdan keyingi barcha DCIlar subordinatsion interfeyslar sifatida ko'rish mumkin.
CDC qurilmasida kamida bitta CCI va nol yoki undan ortiq DCI bo'lishi kerak. Bitta CCI va har qanday bo'ysunuvchi DCI birgalikda xostga xususiyat beradi. Bu qobiliyat funksiya deb ham ataladi. CDC kompozit qurilmasida sizda bir nechta bo'lishi mumkin

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

19/174

tugadiview
funktsiyalari. Shunday qilib, qurilma CDC kompozit qurilmasi - rasmda ko'rsatilganidek, bir nechta CCI va DCI(lar) to'plamidan iborat bo'ladi.
Rasm - CDC kompozit qurilmasi

CDC qurilmasi quyidagi so'nggi nuqtalar kombinatsiyasidan foydalanishi mumkin:
Bir juft nazorat IN va OUT oxirgi nuqtalari standart oxirgi nuqta deb ataladi. Ixtiyoriy ommaviy yoki uzilish IN oxirgi nuqtasi. Bir juft ommaviy yoki izoxron IN va OUT oxirgi nuqtalari. Silicon Labs USB qurilmalar to‘plami hozirda izoxron so‘nggi nuqtalarni qo‘llab-quvvatlamasligini unutmang.
Quyidagi jadvalda turli xil so'nggi nuqtalardan foydalanish va CDC ning qaysi interfeysi tomonidan foydalanilganligi ko'rsatilgan.
Jadval – CDC Endpoint Usage

Yakuniy nuqta
Boshqarish IN
Boshqarish OUT
Interrupt yoki ommaviy IN Ommaviy yoki izoxron IN Ommaviy yoki izoxron
OUT

Yo'nalish
Device-host
Xost-qurilma
Device-host
Device-host
Xost-qurilma

Interfeysdan foydalanish

SSP

Ro'yxatga olish uchun standart so'rovlar, sinfga xos so'rovlar, qurilma

boshqaruv va ixtiyoriy ravishda boshqaruvni chaqirish.

SSP

Ro'yxatga olish uchun standart so'rovlar, sinfga xos so'rovlar, qurilma

boshqaruv va ixtiyoriy ravishda boshqaruvni chaqirish.

SSP

Qo'ng'iroqni aniqlash, ketma-ket chiziq holati, tarmoq holati kabi hodisalar haqida xabar berish.

DCI

Xom yoki formatlangan ma'lumotlar almashinuvi.

DCI

Xom yoki formatlangan ma'lumotlar almashinuvi.

Aksariyat aloqa qurilmalari voqealar mezbonini xabardor qilish uchun uzilish so'nggi nuqtasidan foydalanadi. Agar xususiy protokol USB protokoli xatosi bo'lsa, ma'lumotlarni qayta uzatishga tayansa, ma'lumotlarni uzatish uchun izoxron so'nggi nuqtalardan foydalanmaslik kerak. Izoxron aloqa o'z-o'zidan ma'lumotlarni yo'qotishi mumkin, chunki u qayta urinish mexanizmlariga ega emas.
Muloqotning ettita asosiy modeli bir nechta kichik sinflarni o'z ichiga oladi. Kichik sinf qurilma boshqaruvi va qo'ng'iroqlarni boshqarish uchun CCI dan qanday foydalanishi kerakligini tavsiflaydi. Quyidagi jadvalda barcha mumkin bo'lgan kichik sinflar va ular tegishli aloqa modeli ko'rsatilgan.
Jadval - CDC pastki sinflari

Subsinf
To'g'ridan-to'g'ri chiziqli boshqaruv modeli mavhum boshqaruv modeli

Aloqa modeli
PSTN
PSTN

ExampUshbu kichik sinfdan foydalanadigan qurilmalar
USB xost tomonidan bevosita boshqariladigan modem qurilmalari
Seriyali emulyatsiya qurilmalari, ketma-ket buyruqlar to'plami orqali boshqariladigan modem qurilmalari

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

20/174

tugadiview

Subsinf

Aloqa modeli

ExampUshbu kichik sinfdan foydalanadigan qurilmalar

Telefonni boshqarish modeli

PSTN

Ko'p kanalli boshqaruv ISDN modeli

CAPI boshqaruv modeli ISDN

Ethernet tarmog'i ECM boshqaruv modeli

ATM tarmog'i

ATM

Boshqarish modeli

Simsiz telefonni boshqarish modeli

WMC

Qurilmani boshqarish WMC

Mobil to'g'ridan-to'g'ri liniya modeli

WMC

OBEX

WMC

Ethernet emulyatsiyasi EEM modeli

Tarmoqni boshqarish modeli

NCM

Ovozli telefoniya qurilmalari
Asosiy tarif terminali adapterlari, asosiy tarif terminallari adapterlari, telefonlar
Asosiy tarif terminali adapterlari, asosiy tarif terminali adapterlari, telefonlar DOC-SIS kabel modemlari, PPPoE emulyatsiyasini qo'llab-quvvatlaydigan ADSL modemlari, Wi-Fi adapterlari (IEEE 802.11-oilaviy), IEEE 802.3 adapterlari ADSL modemlari
Simsiz qurilmalarga ulanadigan mobil terminal uskunasi
Simsiz qurilmalarga ulanadigan mobil terminal uskunasi Simsiz qurilmalarga ulanadigan mobil terminal uskunasi
Simsiz qurilmalarga ulanadigan mobil terminal uskunasi Ethernet freymlaridan keyingi transport qatlami sifatida foydalanadigan qurilmalar. Marshrutlash va Internetga ulanish qurilmalari uchun mo'ljallanmagan IEEE 802.3 adapterlari tarmoqda yuqori tezlikdagi ma'lumotlar o'tkazuvchanligini tashiydi.

USB Device CDC ACM Class Resurs yadrosidan kerak

Har safar sl_usbd_cdc_acm_add_to_configuration() funksiyasiga qo‘ng‘iroq orqali USB konfiguratsiyasiga CDC ACM klassi namunasini qo‘shsangiz, yadrodan quyidagi resurslar ajratiladi.

Resurs
Interfeyslar Muqobil interfeyslar Endpoints Interfeys guruhlari

Miqdori
2 2 3 1

E'tibor bering, bu raqamlar har bir konfiguratsiya uchun. SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY va SL_USBD_DESCRIPTOR_QUANTITY konfiguratsiya qiymatlarini o‘rnatishda sinf qancha konfiguratsiya qo‘shilishini hisobga olishni unutmang. SL_USBD_OPEN_ENDPOINTS_QUANTITY konfiguratsiya qiymati uchun so'nggi nuqtalar faqat konfiguratsiya xost tomonidan o'rnatilganda ochilganligi sababli, sinf misoli uchun kerakli so'nggi nuqtalar sonini hisobga olishingiz kerak.
USB Device CDC ACM subclass Overview

CDC tayanch klassi Aloqa sinfi interfeysi (CCI) va ma'lumotlar klassi interfeysi (DCI) dan iborat bo'lib, ular USB qurilma CDC asosiy klassi Overda batafsil muhokama qilinadi.view . Ushbu bo'limda ACM tipidagi CCI muhokama qilinadi. U boshqaruv elementi uchun standart yakuniy nuqtadan va bildirishnoma elementi uchun uzilish so‘nggi nuqtasidan iborat. DCI orqali aniqlanmagan ma'lumotlarni tashish uchun bir juft ommaviy so'nggi nuqtalardan foydalaniladi.
ACM kichik klassi ikki turdagi aloqa qurilmalari tomonidan qo'llaniladi:
AT buyruqlarini qo'llab-quvvatlaydigan qurilmalar (masalan, ovozli tarmoqli modemlar). Virtual COM port qurilmalari deb ham ataladigan ketma-ket emulyatsiya qurilmalari.
ACM kichik sinfi uchun bir nechta kichik sinfga xos so'rovlar mavjud. Ular qurilmani boshqarish va sozlash imkonini beradi. Barcha ACM so'rovlarining to'liq ro'yxati va tavsifini spetsifikatsiyada topish mumkin

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

21/174

tugadiview PSTN qurilmalari uchun kichik sinf, 1.2-versiya, 2007 yil 9 fevral=, 6.2.2-bo'lim.
Ushbu ro'yxatdan Silicon Labs9 ACM kichik klassi quyidagilarni qo'llab-quvvatlaydi:
Jadval - Silicon Labs tomonidan qo'llab-quvvatlanadigan ACM so'rovlari

Subklass so'rovining tavsifi

SetCommFeature GetCommFeature ClearCommFeature

Xost ushbu so'rovni ma'lum bir aloqa funksiyasi sozlamalarini boshqarish uchun yuboradi. Seriyali emulyatsiya uchun ishlatilmaydi.
Xost ushbu so'rovni ma'lum bir aloqa funksiyasi uchun joriy sozlamalarni olish uchun yuboradi. Seriyali emulyatsiya uchun ishlatilmaydi.
Xost ushbu so'rovni ma'lum bir aloqa funksiyasi sozlamalarini tozalash uchun yuboradi. Seriyali emulyatsiya uchun ishlatilmaydi.

SetLineCoding

Xost ushbu so'rovni ACM qurilmasi sozlamalarini sozlash uchun yuboradi: uzatish tezligi, to'xtash bitlari soni, paritet turi va ma'lumotlar bitlari soni. Seriyali emulyatsiya uchun bu so'rov har safar ochiq virtual COM porti uchun ketma-ket sozlamalarni sozlaganingizda ketma-ket terminal tomonidan avtomatik ravishda yuboriladi.

GetLineCoding

Xost ushbu so'rovni joriy ACM sozlamalarini (bod tezligi, to'xtash bitlari, paritet, ma'lumotlar bitlari) olish uchun yuboradi. Seriyali emulyatsiya uchun ketma-ket terminallar ushbu so'rovni virtual MAQOMOTI portini ochish vaqtida avtomatik ravishda yuboradi.

SetControlLineState Xost ushbu so'rovni yarim dupleks modemlar uchun tashuvchini boshqarish va Data Terminal Equipment (DTE) tayyor yoki tayyor emasligini ko'rsatish uchun yuboradi. Seriyali emulyatsiya holatida DTE ketma-ket terminal hisoblanadi. Ketma-ket emulyatsiya uchun ma'lum ketma-ket terminallar ushbu so'rovni boshqaruv elementlari bilan yuborish imkonini beradi.

SetBreak

Xost ushbu so'rovni RS-232 uslubidagi tanaffusni yaratish uchun yuboradi. Seriyali emulyatsiya uchun ma'lum ketma-ket terminallar ushbu so'rovni yuborishga imkon beradi.

Silicon Labs9 ACM kichik klassi joriy seriyali liniya holati haqida xostni xabardor qilish uchun uzilish IN oxirgi nuqtasidan foydalanadi. Serial
satr holati - bu xostga quyidagilar haqida ma'lumot beruvchi bitmap:

Haddan tashqari yuklanish tufayli ma'lumotlar o'chirildi Parite xatosi Framing xatosi Qo'ng'iroq signalini aniqlash holati uzilishni aniqlash mexanizmi holati uzatish tashuvchisi holati Qabul qiluvchi tashuvchining holati

Silicon Labs9 ACM quyi sinfini amalga oshirish quyidagi spetsifikatsiyalarga mos keladi:
Universal Serial Bus, Communications, PSTN Devices uchun pastki sinf, 1.2-versiyasi, 2007 yil 9 fevral.
USB qurilmasi CDC ACM klassi konfiguratsiyasi

Ushbu bo'limda CDC ACM sinfini (aloqa qurilmasi sinfi, mavhum boshqaruv modeli) qanday sozlash kerakligi muhokama qilinadi. Konfiguratsiya parametrlarining ikkita guruhi mavjud:
USB qurilmasi CDC ACM klassi Ilovaga xos konfiguratsiyalar USB qurilmasi CDC ACM sinf namunasi konfiguratsiyasi
USB Device CDC ACM Class Ilovaga xos konfiguratsiyalar

CDC asosiy klassi ACM kichik sinfi
CDC asosiy klassi

Birinchidan, Silicon Labs USB qurilmasi CDC sinf modulidan foydalanish uchun CDC kompilyatsiya vaqti konfiguratsiyasi #define-s ni ilova ehtiyojlaringizga mos ravishda sozlashingiz kerak bo'ladi. Ular sl_usbd_core_config.h sarlavhasi ichida qayta guruhlangan file CDC bo'limi ostida. Ularning maqsadi USB qurilma moduliga qancha USB CDC ob'ektlarini ajratish kerakligi haqida xabar berishdir.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

22/174

tugadiview

Quyidagi jadval ushbu konfiguratsiya strukturasida mavjud bo'lgan har bir konfiguratsiya maydonini tavsiflaydi.
Jadval – USB qurilmasi CDC konfiguratsiyasini belgilaydi

Konfiguratsiya nomi
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

Tavsif
Funktsiyaga qo'ng'iroq qilish orqali siz ajratadigan sinf misollari soni
sl_usbd_cdc_acm_create_instance() .
Konfiguratsiyalar soni. ACM klassi namunalari sl_usbd_cdc_acm_add_to_configuration() ga bir yoki bir nechta aaaa konfiguratsiyalariga qo'shilishi mumkin.
Barcha CDC funktsiyalari uchun ma'lumotlar interfeyslarining umumiy soni (DCI). Har bir CDC ACM funktsiyasi sl_usbd_cdc_acm_create_instance() funksiyasiga qo'shilgan aaaaaaaaa dd dt interfeysi bo'ladi.

Standart qiymat
2
1
2

ACM kichik sinfi
ACM kichik klassi quyidagi jadvalda ko'rsatilgan bitta kompilyatsiya vaqti konfiguratsiyasiga ega.
Jadval – USB qurilmasi CDC ACM konfiguratsiyasini aniqlang

Konfiguratsiya nomi
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY

Tavsif
Qo'ng'iroq orqali siz ajratadigan kichik sinf misollari sonini sozlaydi
sl_usbd_cdc_acm_create_instance() funktsiyasi.

Standart qiymat
2

USB qurilmasi CDC ACM sinf namunasi konfiguratsiyalari

Ushbu bo'lim CDC ACM seriyali sinf namunalari bilan bog'liq konfiguratsiyalarni belgilaydi. Sinf namunasini yaratish qator holati intervalli chaqiruv mgmt imkoniyatlari p_acm_callbacks
Sinf namunasini yaratish

CDC ACM seriyali klassi namunasini yaratish uchun T a sl_usbd_cdc_acm_create_instance() funksiyasini chaqiring. uning funksiyasi bu yerda tasvirlanganidek uchta konfiguratsiya argumentini kesadi.

chiziq_holati_interval
Bu sizning CDC ACM seriya klassi namunangiz T aa xostiga chiziq holati bildirishnomalarini bildiradigan interval (millisekundlarda). uning v lyusi ikkita (1, 2, 4, 8, 16, va hokazo) kuchi bo'lishi kerak.

call_mgmt_capabilities
Qo'ng'iroqlarni boshqarish imkoniyatlari bitmap. Bitmapning mumkin bo'lgan qiymatlari quyidagicha:

Qiymat (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI

Tavsif
Qurilma qo'ng'iroqlarni boshqarishni o'zi boshqaradi. Qurilma qo'ng'iroqlarni boshqarish ma'lumotlarini Data Class interfeysi orqali yuborishi/qabul qilishi mumkin.

p_acm_callbacks

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

23/174

tugadiview

aa M aa p_acm_callbacks sl_usbd_cdc_acm_callbacks_t tipidagi strukturaga ko'rsatgichdir. Uning maqsadi CDC AC Cl ss ga CDC ACM hodisasi sodir bo'lganda chaqiriladigan qayta qo'ng'iroq qilish funktsiyalari to'plamini berishdir. Barcha qayta qo'ng'iroqlar majburiy emas va qayta qo'ng'iroq qilish kerak bo'lmaganda, qayta qo'ng'iroqlar strukturasi o'zgaruvchisida null ko'rsatkich (NULL) o'tkazilishi mumkin. Quyidagi jadval ushbu konfiguratsiya strukturasida mavjud bo'lgan har bir konfiguratsiya maydonini tavsiflaydi.
Jadval – sl_usbd_cdc_acm _callbacks_t Konfiguratsiya tuzilishi

Maydonlar

Tavsif

.enable

USB sinf namunasi yoqilganda chaqiriladi

muvaffaqiyatli.

.o'chirish

USB sinf namunasi o'chirilganda chaqiriladi.

.line_control_changed Chiziq nazorati o'zgarishi qabul qilinganda chaqiriladi.

line_coding_changed Satr kodlash o'zgarishi qabul qilinganda chaqiriladi.

Funktsiya imzosi
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 voqea, 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_kodlash

Qayta qo'ng'iroq qilish funksiyalari uchun Voqea haqida bildirishnomalarni qayta qo'ng'iroqlarni ro'yxatdan o'tkazish bo'limiga qarang, masalanample.
USB qurilmasi CDC ACM sinfini dasturlash bo'yicha qo'llanma

Ushbu bo'lim CDC Abstract Control Model sinfidan qanday foydalanishni tushuntiradi. USB qurilmasini ishga tushirish CDC ACM sinfini USB qurilmangizga qo'shish CDC ACM sinfini qurilmangizga qo'shish CDC ACM sinfidan foydalanib muloqot qilish
USB qurilmasi CDC ACM sinfini ishga tushirish

Qurilmangizga CDC ACM klassi funksiyasini qo‘shish uchun avval CDC tayanch sinfini va ACM quyi sinfini sl_usbd_cdc_init() va sl_usbd_cdc_acm_init() funksiyalarini o‘rnatish orqali ishga tushirishingiz kerak. Quyida u sl_usbd_cdc_init() va sl_usbd_cdc_acm_init() ni standart argumentlar yordamida qanday qilish kerakligini ko'rsatadi.

Example - CDC ACM sinfini ishga tushirish

sl_status_t holati;
status = sl_usbd_cdc_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
holat = sl_usbd_cdc_acm_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
USB qurilmasi CDC ACM sinf namunasini qurilmangizga qo'shish
Qurilmangizga CDC ACM klassi funksiyasini qo‘shish uchun siz namuna yaratishingiz, so‘ng uni qurilmangiz konfiguratsiya(lar)iga qo‘shishingiz kerak.
CDC ACM sinf namunasini yaratish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

24/174

tugadiview
Qurilmangiz konfiguratsiyasi(lar)iga CDC ACM klassi namunasini qo‘shish Hodisa bildirishnomasini qayta qo‘ng‘iroqlarni ro‘yxatdan o‘tkazish
CDC ACM sinf namunasini yaratish
aa M aaa Cre te CDC AC cl ss instance sl_usbd_cdc_acm_create_instance() funksiyasini ishga tushirish orqali. T aaa M aaa u ex mple quyida CDC AC cl ss instance vi sl_usbd_cdc_acm_create_instance() ni qanday yaratishni ko'rsatadi.
Example - sl_usbd_cdc_acm_create_instance() orqali CDC ACM funksiyasini yaratish

uint8_t subclass_nbr; sl_status_t holati;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
CDC ACM klassi namunasini qurilmangiz konfiguratsiyasi(lar)iga qo‘shish
CDC ACM klassi namunasini yaratganingizdan so'ng, funksiyani chaqirish orqali uni konfiguratsiyaga qo'shishingiz mumkin
sl_usbd_cdc_acm_add_to_configuration() .
Quyida sl_usbd_cdc_acm_add_to_configuration() ni qanday qilish kerakligi ko'rsatilgan.
Example - USBD ACM ga qo'ng'iroq qilish sl_usbd_cdc_acm_add_to_configuration()

sl_status_t holati;

status = sl_usbd_cdc_acm_add_to_configuration (kichik sinf_nbr,

(1)

config_nbr_fs);

(2)

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

aaa (1) sl_usbd_cdc_acm_create_instance() tomonidan qaytarilgan konfiguratsiyaga Cl ss raqami dd. (2) Konfiguratsiya raqami (bu yerda uni Full-Speed ​​konfiguratsiyasiga qo'shiladi).
Voqea haqida bildirishnomalarni qayta qo'ng'iroqlarni ro'yxatdan o'tkazish
CDC ACM Serial klassi bildirishnomalarni qayta qo'ng'iroq qilish funksiyalari orqali chiziqni boshqarish yoki kodlashdagi har qanday o'zgarishlar haqida arizangizni xabardor qilishi mumkin. Qayta qo'ng'iroq qilish funktsiyalari tuzilishi ACM misolini yaratishda argument sifatida uzatilishi mumkin. E'tibor bering, bu qayta qo'ng'iroqlar ixtiyoriy. Masalanample – CDC ACM qayta qo‘ng‘iroqlarni ro‘yxatga olish qayta qo‘ng‘iroqlarni ro‘yxatga olish funksiyalaridan foydalanishni ko‘rsatadi. Masalanample - CDC ACM qayta qo'ng'iroqlarni amalga oshirish sobiqni ko'rsatadiampqayta qo'ng'iroq qilish funktsiyalarini amalga oshirish.
Example - CDC ACM qayta qo'ng'iroqlarni ro'yxatdan o'tkazish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

25/174

tugadiview

uint8_t subclass_nbr; sl_status_t holati;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_calls_call);
agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }
Example - CDC ACM qayta qo'ng'iroqlarni amalga oshirish

bool app_usbd_cdc_acm_line_coding_changed (uint8_t)

subklass_nbr,

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t baudrate_new;

uint8_t parity_new;

uint8_t stop_bits_new;

uint8_t data_bits_new;

/* TODO Yangi qator kodlashni qo'llash.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding-> Parite; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;

qaytish (to'g'ri);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t voqea, 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 Yangi qator boshqaruvini qo'llang. */ rts_state = ((voqea va SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? rost: noto'g'ri; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? rost: noto'g'ri; dtr_state = ((voqea va SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? rost: noto'g'ri; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? rost: noto'g'ri; brk_state = ((voqea va SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? rost: noto'g'ri; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? rost: noto'g'ri;
}

(1) Agar chiziq kodini qo'llash muvaffaqiyatsiz bo'lsa, ushbu funktsiyaga false qiymatini qaytarish muhimdir. Aks holda, true ni qaytaring.
CDC ACM sinfidan foydalanib muloqot qilish
Seriya holati
Chiziqni kodlash Chiziqni boshqarish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

26/174

tugadiview

Chiziq holati pastki sinf namunasi aloqa
Seriya holati
Chiziq kodlash
USB xost CDC ACM qurilmasining chiziq kodlanishini (bod tezligi, paritet va boshqalar) boshqaradi. Zarur bo'lganda, dastur chiziq kodlashni o'rnatish uchun javobgardir. Quyidagi jadvalda ta'riflanganidek, joriy chiziq kodini olish va o'rnatish uchun ikkita funksiya taqdim etilgan.
Jadval - CDC ACM Line kodlash funktsiyalari

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

Tavsif
Ilovangiz joriy qator kodlash sozlamalarini SetLineCoding so‘rovlari yoki sl_usbd_cdc_acm_set_line_coding() funksiyasi bilan xostdan olishi mumkin.
Ilovangiz chiziq kodlashni o'rnatishi mumkin. Xost sozlamalarni GetLineCoding so'rovi bilan olishi mumkin.

Chiziq nazorati
USB xost CDC ACM qurilmasining chiziqli boshqaruvini (RTS va DTR pinlari, uzilish signali va boshqalar) boshqaradi. Zarur bo'lganda, sizning arizangiz chiziqli boshqaruv elementlarini qo'llash uchun javobgardir. Quyidagi jadvalda tasvirlanganidek, joriy chiziq boshqaruv elementlarini olish va o'rnatish funksiyasi taqdim etilgan.
Jadval - CDC ACM liniyasini boshqarish funktsiyalari

Funktsiya
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()

Sizning ilovangiz SetControlLineState so'rovi bilan xost tomonidan o'rnatilgan joriy nazorat chizig'i holatini olishi mumkin.

Chiziq holati
USB xost muntazam oraliqda chiziq holatini oladi. Ilovangiz har safar oʻzgarganda satr holatini yangilashi kerak. Zarur bo'lganda, ilovangiz chiziq holatini o'rnatish uchun javobgardir. Quyidagi jadvalda ta'riflanganidek, joriy chiziq boshqaruv elementlarini olish va o'rnatish uchun ikkita funksiya taqdim etiladi.
Jadval – CDC ACM Line S tate funktsiyalari

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

Ilovangiz istalgan satr holati hodisalarini oʻrnatishi mumkin. Chiziq holatini o'rnatayotganda, ketma-ket liniya holatining o'zgarishi haqida xabar berish uchun hostga uzilish IN uzatish yuboriladi.
Ilova chiziq holatining ikkita hodisasini tozalashi mumkin: uzatish tashuvchisi va qabul qiluvchi tashuvchini aniqlash. Boshqa barcha hodisalar ACM seriyali emulyatsiya kichik klassi tomonidan o'z-o'zidan tozalanadi.

Subklass namunasi bilan aloqa

Silicon Labs’ning ACM kichik klassi xost bilan bog‘lanish uchun quyidagi funksiyalarni taklif etadi. Funktsiyalar9 parametrlari haqida qo'shimcha ma'lumot olish uchun CDC ACM Subklass Functions ma'lumotnomasiga qarang.

Funktsiya nomi
sl_usb d _cd c_acm_ re ad () sl_usb d _cd c_acm_write ()

Operatsiya
OUT yakuniy nuqta orqali xostdan ma'lumotlarni oladi. Bu funksiya bloklanadi. Ommaviy IN so‘nggi nuqtasi orqali xostga ma’lumotlarni yuboradi. Bu funksiya bloklanadi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

27/174

tugadiview

Jadval – CDC ACM Communication API Xulosa aaaaa sl_usbd_cdc_acm_read() va sl_usbd_cdc_acm_write() tr nsfer bloklayotgan paytda sinxron aloqani ta'minlaydi. Boshqacha qilib aytadigan bo'lsak, funktsiyani chaqirgandan so'ng, dastur xato bilan yoki xatosiz uzatish tugaguncha bloklanadi. Abadiy kutishning oldini olish uchun kutish vaqti belgilanishi mumkin. sobiqample quyida o'qish va yozishni ko'rsatadiample, u ommaviy OUT so'nggi nuqtasi yordamida xostdan ma'lumotlarni oladi va ommaviy IN so'nggi nuqtasi yordamida xostga ma'lumotlarni yuboradi.
Listing - Seriyali o'qish va yozish Example

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

holat;

status = sl_usbd_cdc_acm_read (kichik sinf_nbr,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

status = sl_usbd_cdc_acm_write (kichik sinf_nbr,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

T aaaaa M (1) u sl_usbd_cdc_acm_create_instance() bilan yaratilgan cl ss instantsiya raqami uzatishni tegishli ommaviy OUT yoki IN so'nggi nuqtaga yo'naltirish uchun AC quyi sinfiga n ta intern havolasini beradi. (2) Sizning ilovangiz funktsiyaga taqdim etilgan bufer barcha ma'lumotlarni joylashtirish uchun etarlicha katta bo'lishini ta'minlashi kerak. Aks holda, sinxronizatsiya bilan bog'liq muammolar paydo bo'lishi mumkin. (3) Cheksiz blokirovka holatiga yo'l qo'ymaslik uchun millisekundlarda ko'rsatilgan vaqt tugashini belgilang. 809 qiymati ilova vazifasini abadiy kutishga majbur qiladi. (4) Ilova ishga tushirilgan uzatish buferini taqdim etadi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

28/174

tugadiview
tugadiview

USB qurilmasi HID klassi

USB qurilmasi HID klassi tugadiview USB qurilmasi HID sinfidagi resursning asosiy USB qurilmasidan talablari HID klassi konfiguratsiyasi USB qurilmasi HID klassi dasturlash qo‘llanmasi HID davriy kiritish hisobotlari vazifasi
Ushbu bo'lim Silicon Labs USB Device tomonidan qo'llab-quvvatlanadigan Inson interfeysi qurilmasi (HID) sinfini tavsiflaydi.
HID klassi klaviaturalar, sichqonchalar, ko'rsatuvchi qurilmalar va o'yin qurilmalari kabi kompyuter operatsiyalarini boshqarish uchun odamlar tomonidan ishlatiladigan qurilmalarni o'z ichiga oladi.
HID klassi tugmalar, kalitlar, tugmalar va slayderlar kabi boshqaruv elementlarini o'z ichiga olgan kompozit qurilmada ham ishlatilishi mumkin. Misol uchunampOvozli eshitish vositasidagi le, ovozni o'chirish va ovoz balandligini boshqarish naushnikning HID funksiyasi tomonidan boshqariladi. HID klassi faqat boshqaruv va uzilish uzatishlardan foydalangan holda har qanday maqsadda ma'lumotlarni almashishi mumkin.
HID klassi eng qadimgi va eng ko'p ishlatiladigan USB sinflaridan biridir. Barcha asosiy xost operatsion tizimlari HID qurilmalarini boshqarish uchun mahalliy drayverni taqdim etadi, shuning uchun turli sotuvchiga xos qurilmalar HID klassi bilan ishlaydi. Ushbu sinf shuningdek, LEDlar, audio, sensorli aloqa va boshqalar kabi turli xil chiqish elementlarini o'z ichiga oladi.
HID ilovasi quyidagi spetsifikatsiyalarga mos keladi:
Inson interfeysi qurilmalari uchun qurilma sinfi ta'rifi (HID), 6/27/01, 1.11-versiya. Universal Serial Bus HID foydalanish jadvallari, 28/10/2004, Versiya 1.12.
USB qurilmasi HID klassi tugadiview
tugadiview
HID qurilmasi quyidagi so'nggi nuqtalardan iborat:
Bir juft nazorat IN va OUT so‘nggi nuqtalari standart yakuniy nuqta deb ataladi. Interrupt IN so‘nggi nuqtasi Ixtiyoriy uzilish OUT so‘nggi nuqtasi
Quyidagi jadval turli xil so'nggi nuqtalardan foydalanishni tavsiflaydi:
Jadval - HID sinfining so'nggi nuqtalaridan foydalanish

Oxirgi nuqta yo‘nalishidan foydalanish

Boshqarish IN
Nazorat
OUT
Interrupt IN
Interrupt
OUT

Device-host
Xost-qurilma
Device-host
Xost-qurilma

Ro'yxatga olish, sinfga xos so'rovlar va ma'lumotlar aloqasi uchun standart so'rovlar (Kirish, GET_REPORT so'rovi bilan xostga yuborilgan xususiyat hisobotlari). Ro'yxatga olish, sinfga xos so'rovlar va ma'lumotlar aloqasi uchun standart so'rovlar (SET_REPORT so'rovi bilan xostdan olingan chiqish, xususiyat hisobotlari). Ma'lumotlar almashinuvi (Kirish va Xususiyatlar hisobotlari).
Ma'lumotlar almashinuvi (chiqish va xususiyat hisobotlari).

Hisobot

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

29/174

tugadiview

Xost va HID qurilmasi hisobotlar yordamida ma'lumot almashadi. Hisobot HID qurilmasining boshqaruv elementlari va boshqa jismoniy ob'ektlari haqida ma'lumot beruvchi formatlangan ma'lumotlarni o'z ichiga oladi. Boshqaruv foydalanuvchi tomonidan boshqariladi va qurilmaning bir tomonini boshqaradi. Misol uchunample, boshqaruv sichqoncha yoki klaviaturadagi tugma, kalit va boshqalar bo'lishi mumkin. Boshqa ob'ektlar foydalanuvchini qurilma9ning ayrim funksiyalarining holati haqida xabardor qiladi. Misol uchunample, klaviaturadagi LEDlar foydalanuvchiga bosh harflar yoqilganligi, raqamli klaviatura faolligi va boshqalar haqida xabar beradi.
Hisobot ma'lumotlarining formati va ulardan foydalanish xost tomonidan Hisobot deskriptorining mazmunini tahlil qilish orqali tushuniladi. Tarkibni tahlil qilish tahlilchi tomonidan amalga oshiriladi. Hisobot deskriptori qurilmadagi har bir boshqaruv tomonidan taqdim etilgan ma'lumotlarni tavsiflaydi. U qurilma haqida ma'lumot bo'lgan elementlardan iborat bo'lib, 1 baytlik prefiks va o'zgaruvchan uzunlikdan iborat.
ma'lumotlar. Element formati haqida batafsil ma'lumot olish uchun qarang
1.11=, 5.6 va 6.2.2 bo'limlari.
Elementlarning uchta asosiy turi mavjud:
Asosiy element ma'lum turdagi ma'lumotlar maydonlarini belgilaydi yoki guruhlaydi.
Global element boshqaruvning ma'lumotlar xususiyatlarini tavsiflaydi.
Mahalliy element boshqaruvning ma'lumotlar xususiyatlarini tavsiflaydi.
Har bir element turi turli funktsiyalar bilan belgilanadi. Element funksiyasini a deb ham atash mumkin tag. Element funktsiyasini uchta asosiy element turlaridan biriga tegishli bo'lgan kichik element sifatida ko'rish mumkin. Quyidagi jadval qisqacha ma'lumot beradiview har bir element turidagi item9s funktsiyalari. Har bir toifadagi elementlarning to'liq tavsifi uchun qarang
Jadval – Har bir element turi uchun element funksiyasining tavsifi

Element turi funksiyasi

Tavsif

Asosiy kirish

Bir yoki bir nechta jismoniy boshqaruv tomonidan taqdim etilgan ma'lumotlar haqidagi ma'lumotlarni tavsiflaydi.

Asosiy chiqish Qurilmaga yuborilgan ma'lumotlarni tavsiflaydi.

Asosiy xususiyat

Qurilmaning yoki uning komponentlaridan birining umumiy ishlashiga ta'sir qiluvchi qurilmaga yuborilgan yoki undan qabul qilingan qurilma konfiguratsiyasi ma'lumotlarini tavsiflaydi.

Asosiy to'plam guruhi bilan bog'liq elementlar (Kirish, chiqish yoki xususiyat).

To‘plamni yopadi. To'plam

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

30/174

tugadiview

Element turi funksiyasi

Tavsif

Global foydalanish sahifasi

Qurilmada mavjud funksiyani aniqlaydi.

Global Logical Mantiqiy birliklarda hisobot qiymatlarining pastki chegarasini belgilaydi. Minimal

Global Logical Mantiqiy birliklarda hisobot qiymatlarining yuqori chegarasini belgilaydi. Maksimal

Global jismoniy hisobot berilgan qiymatlarning pastki chegarasini jismoniy birliklarda, ya'ni jismoniy birliklarda ifodalangan Mantiqiy Minimal Minimalni belgilaydi.

Global jismoniy hisobot berilgan qiymatlarning yuqori chegarasini fizik birliklarda belgilaydi, ya'ni jismoniy birliklarda ifodalangan Mantiqiy maksimal maksimal.

Global birlik

10-asosdagi birlik ko'rsatkichini ko'rsatadi. Ko'rsatkich -8 dan +7 gacha.

Ko'rsatkich

Global birlik

Hisobot qilingan qiymatlar birligini bildiradi. Masalan, uzunlik, massa, harorat birliklari va boshqalar.

Global hisobot hajmi

Hisobot maydonlarining o'lchamini bitlarda ko'rsatadi.

Global hisobot identifikatori ma'lum bir hisobotga qo'shilgan prefiksni bildiradi.

Global hisobotlar soni

Element uchun ma'lumotlar maydonlari sonini ko'rsatadi.

Global Push

Global element holati jadvalining nusxasini CPU stekiga joylashtiradi.

Global Pop

Element holati jadvalini stekdagi oxirgi tuzilma bilan almashtiradi.

Mahalliy foydalanish

Foydalanish sahifasida muayyan Foydalanishni belgilash uchun indeksni ifodalaydi. Bu sotuvchi9 tomonidan ma'lum bir boshqaruv yoki boshqaruv guruhlari uchun foydalanishni tavsiya qiladi. Foydalanish dastur ishlab chiqaruvchisiga boshqaruv aslida nimani o'lchashi haqida ma'lumot beradi.

Mahalliy foydalanish

Massiv yoki bitmap bilan bog'liq boshlang'ich foydalanishni belgilaydi.

Minimal

Mahalliy foydalanish

Massiv yoki bitmap bilan bog'liq yakuniy foydalanishni belgilaydi.

Maksimal

Mahalliy belgilovchi nazorat qilish uchun ishlatiladigan tana qismini aniqlaydi. Indeks Fizikadagi belgilovchiga ishora qiladi

indeks

tavsiflovchi.

Mahalliy belgilovchi massiv yoki bitmap bilan bog'langan boshlang'ich belgi indeksini belgilaydi. Minimal

Mahalliy belgilovchi massiv yoki bitmap bilan bog'langan yakunlovchi belgining indeksini belgilaydi. Maksimal

Mahalliy string indeksi

String deskriptori uchun string indeksi. U satrni ma'lum bir element yoki boshqaruv bilan bog'lash imkonini beradi.

Mahalliy string

Massivdagi boshqaruv elementlariga ketma-ket qatorlar guruhini tayinlashda birinchi qator indeksini belgilaydi

Minimal yoki bitmap.

Mahalliy Mahalliy

String maksimal
Ajratuvchi

Massiv yoki bitmapdagi boshqaruv elementlariga ketma-ket qatorlar guruhini tayinlashda oxirgi satr indeksini belgilaydi.
Mahalliy elementlar to'plamining boshini yoki oxirini belgilaydi.

Control9s ma'lumotlari kamida quyidagi elementlarni belgilashi kerak:
Kirish, chiqish yoki xususiyat Asosiy elementlar Foydalanish Mahalliy element Foydalanish sahifasi Global element Mantiqiy minimal global element Mantiqiy maksimal global element Hisobot hajmi Global element

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

31/174

tugadiview
Hisobot soni Global elementi Quyidagi jadvalda host HID tahlil qilish nuqtai nazaridan Sichqoncha hisoboti deskriptori mazmuni ko‘rsatilgan. Sichqonchada uchta tugma (chap, o'ng va g'ildirak) mavjud. Sobiq taqdim etilgan kodample quyida ushbu sichqoncha Hisobot deskriptor ko'rinishiga mos keladigan kodni amalga oshirish.
Shakl – Xost HID tahlilchisidan hisobot deskriptori mazmuni View

(1) Foydalanish sahifasi elementi funksiyasi qurilmaning umumiy funksiyasini belgilaydi. Bu sobiqample, HID qurilmasi a ga tegishli
umumiy ish stoli boshqaruvi.
(2) To'plam ilovalari guruhlari Umumiy maqsadga ega bo'lgan va ilovalarga tanish bo'lishi mumkin bo'lgan asosiy elementlar. Diagrammada guruh uchta asosiy kirish elementidan iborat. Ushbu to'plam uchun boshqaruv elementlari uchun tavsiya etilgan foydalanish "Usage" bandida ko'rsatilgan sichqonchadir. (3) Ilovalarga bitta boshqaruv yoki boshqaruv elementlari guruhidan foydalanish haqida batafsil ma'lumot berish uchun ichki o'rnatilgan to'plamlardan foydalanish mumkin. Bu sobiqample, Toʻplam ilovasiga oʻrnatilgan Collection Physical, Toʻplam ilovasini tashkil etuvchi bir xil uchta Kirish elementidan iborat. Collection Physical bir geometrik nuqtada to'plangan ma'lumotlar nuqtalarini ifodalovchi ma'lumotlar to'plami uchun ishlatiladi. Sobiqample, tavsiya etilgan foydalanish "Usage" bandida ko'rsatilgan ko'rsatgichdir. Bu erda ko'rsatgichdan foydalanish sichqonchaning joylashuvi koordinatalariga ishora qiladi va tizim dasturi sichqoncha koordinatalarini ekran kursori harakatida tarjima qiladi. (4) Ichki foydalanish sahifalari ham mumkin va qurilmaning umumiy funksiyasi doirasida ma'lum bir jihat haqida batafsil ma'lumot beradi. Bunda ikkita Inputs elementi guruhlanadi va sichqoncha tugmalariga mos keladi. Bitta Kirish elementi sichqonchaning uchta tugmachasini (o‘ng, chap va g‘ildirak) element uchun ma’lumotlar maydonlari soni (Hisobot soni elementi), ma’lumotlar maydonining o‘lchami (Hisobot hajmi elementi) va har bir ma’lumot maydoni uchun mumkin bo‘lgan qiymatlar (foydalanish minimal va maksimal, mantiqiy minimal va maksimal elementlar) bo‘yicha belgilaydi. Boshqa Kirish elementi 13 bitli konstanta bo'lib, Kirish hisoboti ma'lumotlarini bayt chegarasida tekislash imkonini beradi. Ushbu Kirish elementi faqat to'ldirish uchun ishlatiladi. (5) Sichqoncha joylashuvi koordinatalari uchun umumiy ish stoli boshqaruviga ishora qiluvchi boshqa ichki foydalanish sahifasi belgilangan. Ushbu foydalanish sahifasi uchun Kirish elementi ikkita Foydalanish bilan belgilangan x va y o'qlariga mos keladigan ma'lumotlar maydonlarini tavsiflaydi.
buyumlar.
Oldingi sichqoncha hisoboti deskriptori tarkibini tahlil qilgandan so'ng, host9s HID tahlilchisi qurilma tomonidan uzilish IN uzatish yoki GET_REPORT so'roviga javoban yuborilgan Kirish hisoboti ma'lumotlarini sharhlay oladi. Sichqoncha hisobot deskriptoriga mos keladigan kirish hisoboti ma'lumotlari shaklda ko'rsatilgan - Host HID tahlilchisidan olingan hisobot deskriptori tarkibi View is

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

32/174

tugadiview

quyidagi jadvalda ko'rsatilgan. Hisobot ma'lumotlarining umumiy hajmi 4 baytni tashkil qiladi. Bitta so'nggi nuqta orqali har xil turdagi hisobotlar yuborilishi mumkin. Hisobotlarning har xil turlarini farqlash uchun ma'lumotlar hisobotiga 1 baytli hisobot ID prefiksi qo'shiladi. Agar hisobot identifikatori sobiqda ishlatilgan bo'lsaampsichqoncha hisobotida, hisobot ma'lumotlarining umumiy hajmi 5 bayt bo'ladi.
Jadval - Xostga yuborilgan va 3 tugmali sichqoncha holatiga mos keladigan kirish hisoboti

Bit ofset
0 1 2 3 16 24

Bitlar soni 1 1 1 13 8 8

Tavsif 1 tugmasi (chap tugma). 2-tugma (o'ng tugma). 3-tugma (g'ildirak tugmasi). Ishlatilmagan. X o'qidagi joylashuv. Y o'qidagi pozitsiyasi.

Jismoniy deskriptor tananing boshqaruv yoki boshqaruv elementlarini faollashtirish uchun mo'ljallangan qismini yoki qismlarini bildiradi. Ilova ushbu ma'lumotdan qurilmani boshqarish funksiyasini belgilash uchun foydalanishi mumkin. Jismoniy deskriptor ixtiyoriy sinfga xos deskriptor bo'lib, ko'pchilik qurilmalar undan foydalanishda unchalik katta foyda keltirmaydi. ga murojaat qiling
Yadrodan USB qurilmasi HID sinfidagi resursga ehtiyoj

Har safar sl_usbd_hid_add_to_configuration() funksiyasiga qo'ng'iroq qilish orqali USB konfiguratsiyasiga HID sinf namunasini qo'shsangiz, yadrodan quyidagi resurslar ajratiladi.

Resurs
Interfeyslar Muqobil interfeyslar Endpoints Interfeys guruhlari

Miqdori
1 1 1 (agar uzilish OUT so'nggi nuqtasi yoqilgan bo'lsa 2) 0

E'tibor bering, bu raqamlar har bir konfiguratsiya uchun. SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY va SL_USBD_DESCRIPTOR_QUANTITY konfiguratsiya qiymatlarini o‘rnatishda sinf qancha konfiguratsiya qo‘shilishini hisobga olishni unutmang. SL_USBD_OPEN_ENDPOINTS_QUANTITY konfiguratsiya qiymati uchun so'nggi nuqtalar faqat konfiguratsiya xost tomonidan o'rnatilganda ochilganligi sababli, sinf misoli uchun kerakli so'nggi nuqtalar sonini hisobga olishingiz kerak.
USB qurilmasi HID klassi konfiguratsiyasi

HID sinfini sozlash uchun ikkita konfiguratsiya parametrlari guruhi qo'llaniladi:
USB qurilmasi HID klassi ilovaga xos konfiguratsiyalar USB qurilmasi HID klassi namunasi konfiguratsiyalari
USB qurilmasi HID klassi ilovasiga xos konfiguratsiyalar

Birinchidan, Silicon Labs USB qurilmasi HID sinf modulidan foydalanish uchun HID kompilyatsiya vaqti konfiguratsiyasini ilova ehtiyojlaringizga qarab sozlang. Ular sl_usbd_core_config.h sarlavhasi ichida qayta guruhlangan file HID bo'limi ostida. Ularni ikki qismga bo'lish mumkin: miqdor konfiguratsiyasi va HID topshiriq konfiguratsiyasi. Miqdor konfiguratsiyasining maqsadi USB qurilma moduliga qancha USB HID ob'ektini ajratish kerakligi haqida xabar berishdir.
Quyidagi jadvalda har bir konfiguratsiya tavsifi tavsiflanadi.
Jadval – USB qurilmasi HID konfiguratsiyasini belgilaydi

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

33/174

tugadiview

Konfiguratsiya nomi
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

Tavsif
Funktsiyaga qo'ng'iroq qilish orqali siz ajratadigan sinf misollari soni
sl_usbd_hid_create_instance() .
Konfiguratsiyalar soni. HID klassi namunalari sl_usbd_hid_add_to_configuration() funksiyasiga bir yoki bir nechta aaaa konfiguratsiyalariga qo'shilishi mumkin. Ajratish uchun hisobot identifikatorlarining umumiy sonini sozlaydi.
Ajratish uchun Push/Pop elementlarining umumiy sonini sozlaydi.
Taymer vazifasi taymerga asoslangan barcha HID operatsiyalarini bajaradi. Ushbu konfiguratsiya stek hajmini (baytlar sonida) o'rnatish imkonini beradi. HID vazifasining ustuvorligi. uning CMSIS-RTOS2 ustuvorligi.

Standart qiymat
2 1 2 0 2048
osPriorityHigh

USB Device HID Class Instance Configurations Class Instance Creation subclass
mamlakat_kodi protokoli
interval_in va interval_out p_hid_callback HID Class Report Deskriptor Example Ushbu bo'lim HID klassi namunalari bilan bog'liq konfiguratsiyalarni belgilaydi.
Sinf namunasini yaratish
HID klassi namunasini yaratish aaa sl_usbd_hid_create_instance() funksiyasini chaqirish orqali amalga oshiriladi, bu esa quyida tavsiflangan konfiguratsiya argumentlarini kesadi.
kichik sinf
HID kichik sinfining kodi. Mumkin qiymatlar:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Yuklash quyi sinfidan foydalanadigan HID qurilmasi standart hisobot formatlaridan foydalanishi kerak. Pastki sinf kodlari haqida qo'shimcha ma'lumot olish uchun HID spetsifikatsiyasining 1.11-versiyasining 4.2-bo'limiga qarang.
protokol
HID qurilmasi tomonidan ishlatiladigan protokol. Mumkin qiymatlar:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Agar HID funksiyangiz sichqoncha bo'lsa, protokol aa SL_USBD_HID_PROTOCOL_MOUSE ga o'rnatilishi kerak. Agar u klaviatura bo'lsa, u SL_USBD_HID_PROTOCOL_KBD ga o'rnatilishi kerak. aks holda, protokol SL_USBD_HID_PROTOCOL_NONE ga o'rnatilishi kerak. Pastki sinf kodlari haqida qo'shimcha ma'lumot olish uchun HID spetsifikatsiyasining 1.11-versiyasining 4.3-bo'limiga qarang.
mamlakat_kodi
mamlakat kodining identifikatori. Mumkin qiymatlar:
SL_USBD_HID_COUNTRY_CODE_Qo'llab-quvvatlanmaydi

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

34/174

tugadiview
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_CHCODE_PUBLCRYE SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GERMAN SL_USBD_HID_COUNTRY_CODE_GREEKHID_SL_HERYCOUNTRY SL_USBD_HID_COUNTRY_CODE_VENGARYA SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_COUNTRY_CODE_COUNTRY_COUNTRY_COUNTRY_CODE_CODE_USBD ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL_HID_COUNTRY_CODE_POL_HID_HAYT_USG_HAYIR_HAYIRLIGI SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SVEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL VA SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_COUNTRY_COUNTRYCODE_USBD_HID_COUNTRY_COUNTRYCODE SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Mamlakat kodi apparat qaysi mamlakat uchun mahalliylashtirilganligini aniqlaydi. Aksariyat qurilmalar mahalliylashtirilmagan va shuning uchun bu aaaav lue SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0) bo'ladi. Biroq, klavishlar katta bosh harflar tilini ko'rsatish uchun maydondan foydalanadi.
Mamlakat kodlari haqida qo'shimcha ma'lumot olish uchun HID spetsifikatsiyasining 1.11-versiyasining 6.2.1 bo'limiga qarang.
interval_in va interval_out
interval_in va interval_out IN uzilishning so'nggi nuqtasi va OUT uzilishning so'nggi nuqtasining so'rov oralig'ini ifodalaydi.
Bu oxirgi nuqtaning so'rov oralig'ini millisekundlarda ifodalaydi. Ushbu qiymatni sozlash qurilmangiz xost uchun qanchalik tez-tez yangi hisobot yaratishga moyilligiga bog'liq. Misol uchun, agar hisobot har 16 millisekundda yaratilsa, interval 16 yoki undan kam bo'lishi kerak.
Qiymat 2 ning kuchi bo'lishi kerak (1, 2, 4, 8, 16 va boshqalar).
ctrl_rd_en rost ga o'rnatilgan bo'lsa interval_out v lue e'tiborga olinmaydi.
p_hid_callback
aaaa p_hid_callback sl_usbd_hid_callbacks_t tipidagi strukturaga ko'rsatgichdir. Uning maqsadi HID Cl ss ga HID hodisasi sodir bo'lganda chaqiriladigan qayta qo'ng'iroq qilish funktsiyalari to'plamini berishdir.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

35/174

tugadiview

Barcha qayta qo'ng'iroqlar majburiy emas va qayta qo'ng'iroq qilish kerak bo'lmaganda, qayta qo'ng'iroqlar strukturasi o'zgaruvchisida null ko'rsatkich (NULL) o'tkazilishi mumkin. Quyidagi jadval ushbu konfiguratsiya strukturasida mavjud bo'lgan har bir konfiguratsiya maydonini tavsiflaydi.
Jadval – sl_usbd_hid_callbacks_t Konfiguratsiya tuzilishi

Maydonlar

Tavsif

Funktsiya imzosi

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

USB sinf namunasi muvaffaqiyatli yoqilganda chaqiriladi. USB sinf namunasi o'chirilganda chaqiriladi.
Hisobot identifikatorini o'tkazish uchun HID Instance yaratish paytida chaqirildi. Har bir HID funksiyasi uchun hisobot deskriptorini taqdim etishingiz kerak. Hisobot deskriptori uy egasiga qurilma tomonidan yuboriladigan davriy hisobot qanday tahlil qilinishi kerakligini ko'rsatadi. O'zingizning hisobot deskriptoringizni yozish qiyin bo'lishi mumkin va shuning uchun yordam beradigan ba'zi manbalar mavjud. Bu yagona majburiy qayta qo'ng'iroq funktsiyasi. Jismoniy identifikatorni o'tkazish uchun HID Instance yaratish paytida chaqirildi. Jismoniy tavsiflovchi - bu boshqaruv yoki boshqaruv elementlarini faollashtiradigan inson tanasining o'ziga xos qismi yoki qismlari haqida ma'lumot beruvchi deskriptor. Jismoniy deskriptorlar haqida qo'shimcha ma'lumot olish uchun HID spetsifikatsiyasining 1.11-versiyasining 6.2.3 bo'limiga qarang. Jismoniy tavsiflovchi ixtiyoriy va ko'pincha e'tiborga olinmaydi. Bu erda o'tkazilgan bufer NULL ga, uzunlik esa 0 ga o'rnatilishi mumkin. Xost hisobot deskriptorida tasvirlanganidek hisobotni o'rnatganda chaqiriladi (u hisobot yuborganda).
Xost hisobot tavsiflovchisida tavsiflanganidek xususiyat hisobotini so‘raganda chaqiriladi.
Xost hisobot deskriptorida tavsiflanganidek xususiyat hisobotini o'rnatganda chaqiriladi.

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

Joriy faol protokolni oladi.

void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);

.set_protocol

Joriy faol protokolni o'rnatadi.

void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protokoli);

HID sinf hisoboti deskriptori Example

Silicon Labs'ning HID klassiample ilovasi ex beradiampoddiy sichqoncha uchun hisobot deskriptorining le. sobiqample quyida sichqoncha hisoboti deskriptorini ko'rsatadi.
Example - Sichqoncha hisoboti deskriptori

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)

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

36/174

tugadiview

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)

SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,

SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_ABSOLUTE,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_RELATIVE,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Sichqoncha hisoboti deskriptorini ifodalovchi jadval har bir satr qisqa elementga mos keladigan tarzda ishga tushiriladi. Ikkinchisi 1 baytlik prefiks va 1 baytlik ma'lumotlardan hosil bo'ladi. ga murojaat qiling viewRasmda xost HID tahlilchisi tomonidan ed. – Xost HID parseridan olingan identifikator mazmuni haqida hisobot View.
(2) Umumiy ish stolidan foydalanish sahifasi ishlatiladi.
(3) Umumiy ish stolidan foydalanish sahifasida foydalanish tag boshqaruv elementlari guruhi sichqonchani boshqarish uchun ekanligini ko'rsatadi. Sichqoncha to'plami odatda ikkita eksa (X va Y) va bitta, ikkita yoki uchta tugmachadan iborat.
(4) Sichqoncha to'plami ishga tushirildi.
(5) Sichqoncha to'plamida foydalanish tag sichqonchani boshqarish elementlari ko'rsatkichlar to'plamiga tegishli ekanligini aniqroq taklif qiladi. Ko'rsatkichlar to'plami - bu foydalanuvchi niyatlarini dasturga yo'naltirish, ko'rsatish yoki ko'rsatish uchun qiymat yaratadigan o'qlar to'plami.
(6) Ko'rsatkichlar to'plami ishga tushirildi.
(7) Tugmalardan foydalanish sahifasi uchta 1 bitli maydonlardan tashkil topgan Kirish elementini belgilaydi. Har bir 1-bitli maydon mos ravishda sichqonchaning 1, 2 va 3 tugmalarini ifodalaydi va 0 yoki 1 qiymatini qaytarishi mumkin.
(8) Tugmalardan foydalanish sahifasi uchun kirish elementi boshqa 13 bit bilan to'ldirilgan.
(9) X va Y o'qlari bilan sichqoncha o'rnini tavsiflash uchun boshqa umumiy ish stolidan foydalanish sahifasi ko'rsatilgan. Kirish elementi qiymati -127 va 127 orasida bo'lishi mumkin bo'lgan ikkita 8 bitli maydonlardan iborat.
(10) Ko'rsatkichlar to'plami yopiq.
(11) Sichqoncha to'plami yopiq.
USB.org HID sahifasi

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

37/174

tugadiview
USB Implementers Forum (USB-IF) hisobot deskriptor formatidagi boshqa ma'lumotlar bilan birga "HID Deskriptor Tool" deb nomlangan vositani taqdim etadi. Qo'shimcha ma'lumot uchun http://www.usb.org/developers/hidpage/ ga qarang.
USB qurilmasi HID sinfini dasturlash bo'yicha qo'llanma
Ushbu bo'lim HID sinfidan qanday foydalanishni tushuntiradi. USB qurilmasi HID sinfini ishga tushirish Qurilmangizga USB qurilmasi HID klassi namunasini qo‘shish USB qurilmasi HID klassi yordamida muloqot qilish
USB qurilmasi HID sinfini ishga tushirish
Qurilmangizga HID Class funksiyasini qo‘shish uchun avval sl_usbd_hid_init() funksiyasini chaqirish orqali sinfni ishga tushirishingiz kerak. sobiqample quyida standart argumentlar yordamida sl_usbd_hid_init() ga qanday qo'ng'iroq qilish kerakligini ko'rsatadi. sl_usbd_hid_init() ga o'tish uchun konfiguratsiya argumentlari haqida ko'proq ma'lumot olish uchun USB qurilmasi HID klassi ilovasiga xos konfiguratsiyalarga qarang.
Example - sl_usbd_hid_init() ga qo'ng'iroq qilish
sl_status_t holati;
status = sl_usbd_hid_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
Qurilmangizga USB qurilmasi HID sinf namunasini qo'shish
Qurilmangizga HID klassi funksiyasini qo‘shish uchun siz namuna yaratishingiz, so‘ng uni qurilmangiz konfiguratsiya(lar)iga qo‘shishingiz kerak.
HID sinf namunasini yaratish
sl_usbd_hid_create_instance() funksiyasini chaqirish orqali HID sinf namunasini yarating. sobiqample quyida standart argumentlar yordamida sl_usbd_hid_create_instance() orqali oddiy sichqoncha funktsiyasini qanday yaratishni ko'rsatadi. sl_usbd_hid_create_instance() ga o'tish uchun konfiguratsiya argumentlari haqida qo'shimcha ma'lumot olish uchun USB Device HID Class Instance Configurations-ga qarang.
Example - sl_usbd_hid_create_instance() orqali sichqoncha funktsiyasini qo'shish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

38/174

tugadiview
/* Global konstantalar. */ 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_HIDCOLLECTION1, + 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_PHYSICALH_AGE_USAGE, +SL_USGB, +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 + 0, 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_PUT_MA1, + 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_INPUT + 1, SL_HID_MA, 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_DVALID_1, +BD_USBD_HID_LOCALID_1, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HIDRE1G0, + 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 };
/* Mahalliy o'zgaruvchilar.*/ uint8_t class_nbr; sl_status_t holati;
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); }
status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(ID_UScBD_Hibot), 2u, true, &app_usbd_hid_callbacks, &class_nbr);
Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

39/174

tugadiview
/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */}
HID klassi namunasini qurilmangiz konfiguratsiyasi(lar)iga qo‘shish HID klassi namunasini yaratganingizdan so‘ng, funksiyani chaqirish orqali uni konfiguratsiyaga qo‘shishingiz mumkin.
sl_usbd_hid_add_to_configuration() .
sobiqampQuyida sl_usbd_hid_add_to_configuration() ga qanday qo'ng'iroq qilish kerakligi ko'rsatilgan.
Example - sl_usbd_hid_add_to_configuration() ga qo'ng'iroq qilish

sl_status_t holati;

sl_usbd_hid_add_to_configuration(class_nbr,

(1)

config_nbr_fs); (2)

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

(1) sl_usbd_hid_create_instance() tomonidan qaytarilgan konfiguratsiyaga qo'shiladigan sinf raqami. (2) Konfiguratsiya raqami (bu yerda uni Full-Speed ​​konfiguratsiyasiga qo'shiladi).
USB qurilmasi HID klassi yordamida muloqot qilish
Sinf namunasi aloqasi Sinxron aloqa Sinf namunasi aloqasi HID klassi xost bilan bog'lanish uchun quyidagi funktsiyalarni taklif qiladi.
Jadval – HID Communication API xulosasi

Funktsiya nomi
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()

Operatsiya uzilish OUT so'nggi nuqtasi orqali xostdan ma'lumotlarni oladi. Bu funksiya bloklanadi. Interrupt IN so'nggi nuqtasi orqali xostga ma'lumotlarni yuboradi. Bu funksiya bloklanadi.

Sinxron aloqa Sinxron aloqa uzatish bloklanishini bildiradi. Funktsiya chaqiruvida ilovalar xatolik yoki xatoliksiz uzatish tugallanmaguncha bloklanadi. Abadiy kutishning oldini olish uchun kutish vaqti belgilanishi mumkin. sobiqample quyida interrupt OUT so'nggi nuqtasi yordamida xostdan ma'lumotlarni qabul qiluvchi va interrupt IN so'nggi nuqtasi yordamida xostga ma'lumotlarni yuboradigan o'qish va yozishni ko'rsatadi.
Example - Sinxron HID o'qish va yozish

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

holat;

status = sl_usbd_hid_read_sync (sinf_nbr,

(1)

(void *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

40/174

tugadiview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */}
(1) sl_usbd_hid_create_instance() dan yaratilgan sinf namunasi raqami uzatishni tegishli uzilish OUT yoki IN oxirgi nuqtasiga yo'naltirish uchun HID klassi uchun ichki ma'lumotnomani taqdim etadi.
(2) Ilova funktsiyaga taqdim etilgan bufer barcha ma'lumotlarni joylashtirish uchun etarlicha katta bo'lishini ta'minlashi kerak. Aks holda, sinxronizatsiya bilan bog'liq muammolar paydo bo'lishi mumkin. Ichkarida, o'qish operatsiyasi sl_usbd_hid_create_instance() ga qo'ng'iroq qilishda o'rnatilgan boshqaruv o'qish bayrog'iga qarab, boshqaruvning so'nggi nuqtasi yoki uzilishning so'nggi nuqtasi bilan amalga oshiriladi.
(3) Cheksiz blokirovka holatiga yo'l qo'ymaslik uchun millisekundlarda ifodalangan vaqt tugashini belgilash mumkin. 809 qiymati ilova vazifasini abadiy kutishga majbur qiladi.
(4) Ilova ishga tushirilgan uzatish buferini taqdim etadi.
HID davriy kiritish hisobotlari vazifasi
O'tkazish qobiliyatini tejash uchun xost hisobot chastotasini cheklash orqali uzilish IN so'nggi nuqtasidan hisobotlarni o'chirish imkoniyatiga ega. Buning uchun xost SET_IDLE so‘rovini yuborishi kerak. Silicon Labs tomonidan amalga oshirilgan HID klassi bir yoki bir nechta kirish hisobotlariga qo'llashingiz mumkin bo'lgan hisobot chastotasi cheklovini hurmat qiladigan ichki vazifani o'z ichiga oladi. Rasm davriy kirish hisobotlari topshirig'i davriy kirish hisobotlari vazifalarining ishlashini ko'rsatadi.
Rasm - Davriy kiritish hisobotlari vazifasi

(1) Qurilma SET_IDLE so'rovini oladi. Bu soʻrov berilgan hisobot identifikatori uchun boʻsh turish muddatini belgilaydi. SET_IDLE soʻrovi haqida batafsil maʼlumot olish uchun qarang
(2) Hisobot identifikatori tuzilmasi (HID sinfini ishga tushirish bosqichida ajratilgan) bo'sh turish muddati bilan yangilanadi. Boʻsh turish muddati hisoblagichi boʻsh turish davomiyligi qiymati bilan ishga tushiriladi. Hisobot identifikatori strukturasi kirish hisobotlarining ID tuzilmalarini o'z ichiga olgan bog'langan ro'yxatning oxiriga kiritiladi. Ishlamaslik davomiyligi qiymati 4 ms birligida ifodalanadi, bu 4 dan 1020 ms gacha bo'lgan diapazonni beradi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

41/174

tugadiview
Agar bo'sh turish muddati uzilish IN so'nggi nuqtasining so'rov oralig'idan kamroq bo'lsa, hisobotlar so'rov oralig'ida yaratiladi.
(3) Har 4 ms, davriy kirish hisoboti topshirig'i kirish hisobotlarining ID ro'yxatini ko'rib chiqadi. Har bir kirish hisoboti identifikatori uchun vazifa ikkita mumkin bo'lgan amallardan birini bajaradi. Vazifa davrining davomiyligi bo'sh vaqt uchun ishlatiladigan 4 ms birlikka mos keladi. Agar xost tomonidan hech qanday SET_IDLE so'rovi yuborilmagan bo'lsa, kirish hisobotlari identifikatorlari ro'yxati bo'sh va vazifani qayta ishlash uchun hech narsa yo'q. Vazifa faqat 0 dan farq qiladigan va ishlamaslik muddati 0 dan ortiq bo'lgan hisobot identifikatorlarini qayta ishlaydi.
(4) Berilgan kirish hisoboti identifikatori uchun vazifa bo'sh turish muddati o'tganligini tekshiradi. Agar bo'sh turish muddati tugamagan bo'lsa, hisoblagich kamayadi va xostga kirish hisoboti yuborilmaydi.
(5) Agar bo'sh turish muddati o'tgan bo'lsa (ya'ni, bo'sh turish muddati hisoblagichi nolga yetgan bo'lsa), kirish hisoboti sl_usbd_hid_write_sync() funksiyasini IN so'nggi nuqtasi orqali chaqirish orqali xostga yuboriladi.
(6) Vazifa tomonidan yuborilgan kirish hisoboti ma'lumotlari Hisobot deskriptorida tasvirlangan har bir kirish hisoboti uchun ajratilgan ichki ma'lumotlar buferidan keladi. Ilova vazifasi kirish hisobotini yuborish uchun sl_usbd_hid_write_sync() funksiyasini chaqirishi mumkin. Kirish hisoboti ma'lumotlarini yuborgandan so'ng, sl_usbd_hid_write_sync() hozirgina yuborilgan ma'lumotlar bilan kirish hisoboti identifikatoriga bog'langan ichki buferni yangilaydi. Keyin, davriy kiritish hisobotlari vazifasi har bir boʻsh turish muddati oʻtgandan keyin va ilova vazifasi ichki buferdagi maʼlumotlarni yangilamaguncha har doim bir xil kirish hisoboti maʼlumotlarini yuboradi. Vaqti-vaqti bilan kirish hisoboti topshirig'i tomonidan amalga oshirilgan uzatishning aniq vaqtida sodir bo'lgan o'zgartirishlar bo'lsa, kirish hisobotining identifikatori ma'lumotlarining buzilishiga yo'l qo'ymaslik uchun ba'zi qulflash mexanizmi mavjud.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

42/174

tugadiview
tugadiview
USB qurilmasi MSC sinfi
USB qurilmasi MSC klassi tugadiview USB qurilmasi MSC toifasidagi manbalar asosiy USB qurilmasi MSC klassi konfiguratsiyasi USB qurilmasi MSC klassi dasturlash qo‘llanmasi USB qurilmasi MSC klassi xotira drayverlari
Ushbu bo'lim Silicon Labs USB Device tomonidan qo'llab-quvvatlanadigan ommaviy xotira qurilmasi sinfini (MSC) tavsiflaydi. MSC - bu USB qurilmasi va xost o'rtasida ma'lumot uzatish imkonini beruvchi protokol. O'tkazilayotgan ma'lumotlar elektron shaklda saqlanishi mumkin bo'lgan har qanday narsa, masalan, bajariladigan dasturlar, manba kodi, hujjatlar, tasvirlar, konfiguratsiya ma'lumotlari yoki boshqa matn yoki raqamli ma'lumotlar. USB qurilmasi xostga tashqi xotira vositasi sifatida paydo bo'lib, uni uzatish imkonini beradi filesudrab olib tashlash orqali.
A file tizimi qandayligini belgilaydi filelar saqlash muhitida tashkil etilgan. USB ommaviy xotira klassi spetsifikatsiyasi hech qanday maxsus talab qilmaydi file mos keladigan qurilmalarda qo'llaniladigan tizim. Buning o'rniga, u Kichik kompyuter tizimi interfeysi (SCSI) shaffof buyruqlar to'plamidan foydalangan holda ma'lumotlar sektorlarini o'qish va yozish uchun oddiy interfeysni taqdim etadi. Shunday qilib, operatsion tizimlar USB drayverini qattiq disk sifatida ko'rishi va uni istalgan formatda formatlashi mumkin file ularga yoqadigan tizim.
USB ommaviy xotira qurilmasi sinfi quyidagi kabi ikkita transport protokolini qo'llab-quvvatlaydi:
Faqat ommaviy transport (BOT) nazorati/Yopma/uzilish (CBI) transporti (faqat floppi disklar uchun ishlatiladi)
Ommaviy saqlash moslamalari sinfi faqat BOT protokoli yordamida SCSI shaffof buyruqlar to'plamini amalga oshiradi, bu ma'lumotlar va holat ma'lumotlarini uzatish uchun faqat ommaviy so'nggi nuqtalardan foydalanishni bildiradi. MSC ilovasi bir nechta mantiqiy birliklarni qo'llab-quvvatlaydi.
MSCni amalga oshirish quyidagi spetsifikatsiyalarga mos keladi:
Universal seriyali avtobusning ommaviy saqlash sinfi spetsifikatsiyasi tugadiview, Revision 1.3, 2008 yil 5 sentyabr. Universal Serial Bus Mass Storage Class Faqat ommaviy transport, Revision 1.0, 31 sentyabr, 1999 yil.
USB qurilmasi MSC aCl ss Overview
Protokol so'nggi nuqtalari sinfi kichik kompyuter tizimi interfeysi (SCSI) so'rovlari
Protokol
Ushbu bo'limda biz Ommaviy saqlash sinfining faqat ommaviy transport (BOT) protokolini muhokama qilamiz. Faqat ommaviy tashish protokoli uchta s ga egatages:
Buyruqning transporti Ma'lumotni tashish holatini tashish
Ommaviy saqlash buyruqlari xost tomonidan Buyruqlar blokini o'rash (CBW) deb nomlangan tuzilma orqali yuboriladi. Ma'lumot uzatishni talab qiluvchi buyruqlar uchun stage, xost CBW ning uzunlik va bayroq maydonlarida ko'rsatilganidek, qurilmadan baytlarning aniq sonini yuborishga yoki olishga harakat qiladi. Ma'lumotlarni uzatishdan keyin stage, xost qurilmadan buyruq holati va har qanday maʼlumotlar qoldigʻi haqida batafsil maʼlumot beruvchi buyruq holatini oʻrash dasturini (CSW) olishga harakat qiladi (agar

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

43/174

tugadiview
har qanday). Ma'lumotlarni tashish s o'z ichiga olmaydi buyruqlar uchuntage, xost CBW yuborilgandan so'ng to'g'ridan-to'g'ri CSWni olishga harakat qiladi. Protokol rasmda batafsil ko'rsatilgan - MSC Protocol.
Rasm - MSC protokoli

Yakuniy nuqtalar
Qurilma tomonida, BOT spetsifikatsiyasiga muvofiq, MSC quyidagi so'nggi nuqtalardan iborat: Bir juft boshqaruv IN va OUT so'nggi nuqtalari standart so'nggi nuqta deb ataladi. Bir juft ommaviy IN va OUT oxirgi nuqtalari.
Quyidagi jadval so'nggi nuqtalardan turli xil foydalanishni ko'rsatadi.
Jadval – MSC Endpoint Usage

Yakuniy nuqta
Control IN Control OUT Bulk IN Bulk OUT

Yo'nalish
Xost uchun qurilma qurilmadan qurilmaga xost uchun qurilma

Foydalanish
Ro'yxatga olish va MSC sinfiga xos so'rovlar Sanoq va MSC sinfiga xos so'rovlar CSW va ma'lumotlarni yuborish CBW va ma'lumotlarni qabul qilish

Sinf so'rovlari
MSC BOT protokoli uchun ikkita aniqlangan nazorat so'rovlari mavjud. Ushbu so'rovlar va ularning tavsiflari quyidagi jadvalda batafsil tavsiflangan.

Jadval - Ommaviy saqlash sinfi so'rovlari

Sinf so'rovlari
Faqat ommaviy xotirani tiklash

Tavsif
Ushbu so'rov ommaviy xotira qurilmasi va unga aloqador interfeysni tiklash uchun ishlatiladi. Ushbu so'rov qurilmani keyingi buyruq blokini olishga tayyorlaydi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

44/174

tugadiview

Sinf so'rovlari

Tavsif

Maksimal olish Ushbu so'rov qurilma tomonidan qo'llab-quvvatlanadigan eng yuqori mantiqiy birlik raqamini (LUN) qaytarish uchun ishlatiladi. Misol uchunample, a

LUN

LUN 0 va LUN 1 bo'lgan qurilma 1 qiymatini qaytaradi. Bitta mantiqiy birlikka ega qurilma 0 ni qaytaradi yoki

iltimos. Qaytarilishi mumkin bo'lgan maksimal qiymat - 15.

Kichik kompyuter tizimi interfeysi SCSI

Dasturlash interfeysi darajasida MSC qurilmasi SCSI va SFF-8020i (ATAPI) kabi standart xotira-media aloqa protokollaridan birini amalga oshiradi. “Dasturlash interfeysi” qaysi protokol amalga oshirilishini belgilaydi va xost operatsion tizimiga USB xotira qurilmasi bilan aloqa qilish uchun mos qurilma drayverini yuklashga yordam beradi. SCSI - USB MSC saqlash qurilmalarida ishlatiladigan eng keng tarqalgan protokol. Biz MSC SCSI quyi klassi uchun dasturni taqdim etamiz, undan bizning GSDK foydalanuvchilarimiz qutidan tashqarida foydalanishi mumkin.
SCSI - bu kompyuterlar va periferik qurilmalar o'rtasidagi aloqani boshqarish uchun standartlar to'plami. Bu standartlarga buyruqlar, protokollar, elektr interfeyslari va optik interfeyslar kiradi. USB kabi boshqa apparat interfeyslaridan foydalanadigan saqlash qurilmalari qurilma/xost ma'lumotlarini olish va qurilmaning ishlashini nazorat qilish va saqlash muhitida ma'lumotlar bloklarini uzatish uchun SCSI buyruqlaridan foydalanadi.
SCSI buyruqlari qurilma turlari va funktsiyalarining keng doirasini qamrab oladi va shuning uchun qurilmalar ushbu buyruqlarning kichik to'plamiga muhtoj. Umuman olganda, asosiy aloqa uchun quyidagi buyruqlar kerak:
SO‘ROVNI O‘QISH IMKONIYATI(10) O‘QISH (10) SO‘ROV SEZISHI SINOV BIRLIGI TAYYOR YOZISHI(10)
USB Device MSC Class Resurs yadrosidan kerak

Har safar sl_usbd_msc_add_to_configuration() funksiyasi orqali USB konfiguratsiyasiga MSC klassi namunasini qo'shsangiz, yadrodan quyidagi resurslar ajratiladi.

Resurs
Interfeyslar Muqobil interfeyslar Endpoints Interfeys guruhlari

Miqdori
1 1 2 0

E'tibor bering, bu raqamlar har bir konfiguratsiya uchun. SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY va SL_USBD_DESCRIPTOR_QUANTITY konfiguratsiya qiymatlarini o‘rnatishda sinf qancha konfiguratsiya qo‘shilishini hisobga olishni unutmang. SL_USBD_OPEN_ENDPOINTS_QUANTITY konfiguratsiya qiymati uchun so'nggi nuqtalar faqat konfiguratsiya xost tomonidan o'rnatilganda ochilganligi sababli, sinf misoli uchun kerakli so'nggi nuqtalar sonini hisobga olishingiz kerak.
USB qurilmasi MSC klassi konfiguratsiyasi

MSC sinfini sozlash uchun ikkita konfiguratsiya parametrlari guruhi qo'llaniladi:
USB qurilmasi MSC klassi ilovaga xos konfiguratsiyalar USB qurilmasi MSC klassi mantiqiy birlik konfiguratsiyasi
USB qurilmasi MSC klassi ilovaga xos konfiguratsiyalar

Sinfni kompilyatsiya qilish vaqti konfiguratsiyasi Sinf namunasini yaratish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

45/174

tugadiview

Sinfni kompilyatsiya qilish vaqti konfiguratsiyasi
Silicon Labs USB Device MSC klassi va SCSI kichik klassi kompilyatsiya vaqtida sl_usbd_core_config.h da joylashgan #defines orqali sozlanishi mumkin. file.
Jadval - Umumiy konfiguratsiya konstantalari

Konfiguratsiya nomi

Tavsif

SL_USBD_MSC_CLASS_INST Funktsiyaga qo'ng'iroq qilish orqali ajratadigan sinf misollari soni

ANCE_QUANTITY

sl_usbd_msc_scsi_create_instance() .

SL_USBD_MSC_CONFIGURA Sinf namunasini qo'ng'iroq orqali qo'shish mumkin bo'lgan konfiguratsiya soni

TION_QUANTITY

funktsiya sl_usbd_msc_scsi_add_to_configuration() .

SL_USBD_MSC_LUN_QUANT Har bir sinf misoliga qo'ng'iroq orqali qo'shadigan mantiqiy birliklar soni

ITY

sl_usbd_msc_scsi_lun_add() funktsiyasi.

SL_USBD_MSC_SCSI_64_BIT 64 bitli mantiqiy blok manzilini (LBA) qo'llab-quvvatlashni yoqadi yoki o'chiradi.
_LBA_EN

SL_USBD_MSC_DATA_BUFF ER_SIZE baytdagi sinf namunasi uchun ma'lumotlar buferining hajmi

Standart qiymat
2
1
2
0
512

Sinf namunasini yaratish
USB Device MSC SCSI sinf namunasini yaratish sl_usbd_msc_scsi_create_instance() funksiyasini chaqirish orqali amalga oshiriladi. Bu funksiya quyida tavsiflangan bitta konfiguratsiya argumentini oladi.
p_scsi_callbacks
p_scsi_callbacks sl_usbd_msc_scsi_callbacks_t tipidagi konfiguratsiya strukturasiga ko'rsatgichdir. Umumiy usb qurilmasi sinfidagi qayta qo'ng'iroqlarga qo'shimcha ravishda ulanish/ajratish, u MSC sinfini mantiqiy blokda voqea sodir bo'lganda chaqiriladigan ixtiyoriy qayta qo'ng'iroq qilish funktsiyalari to'plami bilan ta'minlaydi. Agar qayta qo'ng'iroq qilish kerak bo'lmasa, bu argumentga null ko'rsatgich (NULL) o'tkazilishi mumkin.
Quyidagi jadval ushbu konfiguratsiya strukturasida mavjud bo'lgan har bir konfiguratsiya maydonini tavsiflaydi.
Jadval – sl_usbd_msc_scsi_callbacks_t Konfiguratsiya tuzilishi

Maydonlar

Tavsif

.enable

USB sinf namunasi muvaffaqiyatli yoqilganda chaqiriladi.

.disable USB sinf namunasi o'chirilganda chaqiriladi.

.host_eject Funktsiya mantiqiy birlik xostdan chiqarilganda chaqiriladi.

Funktsiya imzosi
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);

USB qurilmasi MSC klassi mantiqiy birlik konfiguratsiyasi

MSC klassi namunasiga mantiqiy birlikni qo'shish sl_usbd_msc_lun_add() funksiyasini chaqirish orqali amalga oshiriladi. Bu funksiya quyida tavsiflangan bitta konfiguratsiya argumentini oladi.

p_lu_info

p_lu_info sl_usbd_msc_scsi_lun_info_t tipidagi strukturaga ko'rsatgichdir. Uning maqsadi MSC sinfiga mantiqiy birlik haqida ma'lumot berishdir.
Quyidagi jadval ushbu konfiguratsiya strukturasida mavjud bo'lgan har bir konfiguratsiya maydonini tavsiflaydi.

Jadval – sl_usbd_msc_scsi_lun_info_t Konfiguratsiya tuzilishi

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

46/174

tugadiview

Maydon

Tavsif

Maydon
.scsi_lun_api_p tr

Tavsif
Ushbu mantiqiy blokni boshqaradigan media drayveri API ko'rsatkichi. Saqlash drayverlari haqida qo'shimcha ma'lumot olish uchun USB Device MSC Class Storage Drivers-ga qarang.

.ve nd o r_id _ p tr
.product_id_ptr
.p ro d uct_ re v isi on_level .is_ re ad _o nly

Mantiqiy birlikning sotuvchisi identifikatorini o'z ichiga olgan qatorga ko'rsatgich. Satrning maksimal uzunligi 8 ta belgidan iborat. Mantiqiy birlikning mahsulot identifikatorini o'z ichiga olgan qatorga ko'rsatgich. Satrning maksimal uzunligi 16 belgidan iborat. Mahsulotni qayta ko'rib chiqish darajasi.
Mantiqiy birlikni faqat nuqtadan boshlab o'qiladigan deb ko'rish kerakligini ko'rsatadigan bayroq view xostning (to'g'ri) yoki yo'q (noto'g'ri).

USB Device MSC Class Dasturlash Qo'llanma

Ushbu bo'lim MSC sinfidan qanday foydalanishni tushuntiradi.
USB qurilmasini ishga tushirish MSC klassi USB qurilmasiga MSC SCSI klass namunasini qo'shish USB qurilmasi MSC klassi mantiqiy birlik bilan ishlash
USB qurilmasi MSC sinfini ishga tushirish

Qurilmangizga MSC SCSI klassi funksiyasini qo‘shish uchun avval sl_usbd_msc_init() va sl_usbd_msc_scsi_init() funksiyalarini chaqirish orqali MSC asosiy sinfini va SCSI quyi sinfini ishga tushiring.
sobiqampQuyida sl_usbd_msc_init() va sl_usbd_msc_scsi_init() ga qanday qo‘ng‘iroq qilish kerakligi ko‘rsatilgan.

Example – sl_usbd_msc_init() va sl_usbd_msc_scsi_init() ga qo‘ng‘iroq qilish

sl_status_t holati;
status = sl_usbd_msc_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
status = sl_usbd_msc_scsi_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}
Qurilmangizga USB qurilmasi MSC SCSI sinf namunasini qo'shish
Qurilmangizga MSC SCSI klassi funksiyasini qo‘shish uchun avval namuna yarating, so‘ng uni qurilmangiz konfiguratsiya(lar)iga qo‘shing. Namunangizga kamida bitta mantiqiy birlik qo'shishingiz kerak.
MSC SCSI sinf namunasini yaratish
sl_usbd_msc_scsi_create_instance() funksiyasini chaqirish orqali MSC SCSI sinf namunasini yarating.
sobiqample quyida standart argumentlar yordamida sl_usbd_msc_scsi_create_instance() ga qanday qo'ng'iroq qilish kerakligini ko'rsatadi. sl_usbd_msc_scsi_create_instance() ga o'tish uchun konfiguratsiya argumentlari haqida qo'shimcha ma'lumot olish uchun USB qurilmasi MSC klassi ilovasiga xos konfiguratsiyalarga qarang.
Example – sl_usbd_ msc_scsi_create_instance() ga qo‘ng‘iroq qilish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

47/174

tugadiview

uint8_t class_nbr; sl_status_t holati;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL};
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }
MSC klassi namunasini qurilmangiz konfiguratsiyasi(lar)iga qo'shish
MSC klassi namunasini yaratganingizdan so'ng, funktsiyani chaqirish orqali uni konfiguratsiyaga qo'shishingiz mumkin
sl_usbd_msc_add_to_configuration() .
sobiqampQuyida standart argumentlar yordamida sl_usbd_msc_scsi_add_to_configuration() ga qanday qo‘ng‘iroq qilish mumkinligi ko‘rsatilgan.
Example – sl_usbd_ msc_scsi_add_to_configuration() ga qo‘ng‘iroq qilish

sl_status_t holati;

status = sl_usbd_msc_scsi_add_to_configuration(class_nbr,

(1)

config_nbr_fs);

(2)

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

(1) sl_usbd_msc_scsi_create_instance() tomonidan qaytarilgan konfiguratsiyaga qo'shiladigan sinf raqami. (32) Konfiguratsiya raqami (bu yerda uni Full-Speed ​​konfiguratsiyasiga qo'shiladi).
USB qurilmasi MSC klassi mantiqiy birlik bilan ishlash
Mantiqiy birlikni qo'shish Saqlash vositasini ulash/ajratish
Mantiqiy birlikni qo'shish
MSC SCSI sinf namunangizga mantiqiy birlik qo'shganda, u xotira muhitiga (RAMDisk, SD karta, flesh-xotira va boshqalar) ulangan bo'lishi kerak. MSC klassi saqlash vositalari bilan aloqa qilish uchun saqlash drayveridan foydalanadi. Mantiqiy birlikni qo'shganda ushbu drayverni ta'minlash kerak bo'ladi.
sobiqampQuyida sl_usbd_msc_scsi_lun_add() orqali mantiqiy birlikni qanday qo'shish mumkinligi ko'rsatilgan.
Example - sl_usbd_msc_scsi_lun_add() orqali mantiqiy birlikni qo'shish

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

48/174

tugadiview

sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_status_t

holat;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.vendor_id_ptr

= "Kremniy laboratoriyalari";

lu_info.product_id_ptr

= "qurilmani bloklash, masalanample”;

lu_info.product_revision_level = 0x1000u;

lu_info.faqat o'qish uchun

= noto'g'ri;

status = sl_usbd_msc_scsi_lun_add (class_nbr, &lu_info, &lu_object_ptr);
agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }

Saqlash vositasini ulash/ajratish
Mantiqiy birlik qo'shilgandan so'ng, xost tomonidan mavjud bo'lishi uchun saqlash vositasi biriktirilishi kerak. MSC klassi mantiqiy blokga saqlash muhiti assotsiatsiyasini boshqarish uchun ikkita funktsiyani taklif qiladi: sl_usbd_msc_scsi_lun_attach() va sl_usbd_msc_scsi_lun_detach() . Bu funksiyalar, agar kerak bo'lsa, o'rnatilgan ilovadan qayta kirish huquqiga ega bo'lish uchun saqlash qurilmasini olib tashlashga taqlid qilish imkonini beradi.
sobiqampQuyida sl_usbd_msc_scsi_lun_attach() va sl_usbd_msc_scsi_lun_detach() funksiyalaridan qanday foydalanish ko‘rsatilgan.
Example - Media biriktirish/ajratish

sl_status_t holati;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}

(1)

status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); agar (holat ! SL_STATUS_OK) {
/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}

(2)

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) agar (status ! SL_STATUS_OK) {
/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */
}

(3)

(1) Shu paytdan boshlab, MSC qurilmasi xostga ulangan bo'lsa, saqlash muhitiga kirish mumkin bo'ladi.
(2) Agar MSC qurilmasi xostga ulangan bo'lsa, media endi mavjud emasdek ko'rinadi. Ayni paytda o'rnatilgan dasturdan ommaviy axborot vositalarida operatsiyalarni bajarish mumkin.
(3) Yana MSC qurilmasi xostga ulangan bo'lsa, saqlash muhiti ulangandek ko'rinadi.
USB Device MSC Class saqlash drayverlari
USB Device MSC Class xotira tashuvchisi bilan aloqa qilish uchun xotira drayveriga muhtoj. Hozircha Silicon Labs haydovchilarni taklif qilmaydi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

49/174

tugadiview
TPY aa u haydovchi AI typedef sl_usbd_msc_scsi_lun_api_t tomonidan aniqlanadi. bizning sl_usbd_msc_scsi_lun_api_t v ri ble aaaaaaaa sizning sl_usbd_msc_scsi_lun_info_t v ri ble, p ssed s rgumentiga kiritilgan bo'lishi kerak, qachon siz dd mantiq l birligi sl_usbd_msc (_sbd_msc) bilan. Tuzilmalar haqida batafsil ma'lumot uchun USB Device MSC SCSI API bo'limiga qarang. Saqlash drayverini amalga oshirish RAMdagi sektorlar qatori kabi oddiy bo'lishi mumkin. Oddiy sektor o'lchami (ya'ni, blok hajmi) ommaviy saqlash qurilmalari uchun 512, CD-ROMlar uchun 2048.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

50/174

tugadiview
tugadiview
USB qurilmalari sotuvchisi klassi
USB qurilma sotuvchisi klassi tugadiview USB qurilmasi sotuvchisi sinfining asosiy USB qurilmasi sotuvchisi klassi konfiguratsiyasi USB qurilma sotuvchisi klassi dasturlash qoʻllanmasi Sotuvchi klassi sizga xususiy protokolni amalga oshirishi mumkin boʻlgan sotuvchiga xos qurilmalar yaratish imkonini beradi. U xost va qurilma o'rtasida ma'lumotlarni uzatish uchun bir nechta ommaviy so'nggi nuqtalarga tayanadi. Ommaviy o'tkazmalar katta hajmdagi tuzilmagan ma'lumotlarni uzatish uchun qulaydir va xatolarni aniqlash va qayta urinish mexanizmidan foydalangan holda ishonchli ma'lumotlar almashinuvini ta'minlaydi. Ommaviy so'nggi nuqtalarga qo'shimcha ravishda, Vendor klassi ixtiyoriy juftlik uzilish so'nggi nuqtalaridan ham foydalanishi mumkin. Har qanday operatsion tizim (OS) Vendor sinfi bilan ishlashi mumkin, agar OSda Vendor sinfini boshqarish uchun drayver mavjud bo'lsa. Operatsion tizimga qarab, drayver mahalliy yoki sotuvchiga xos bo'lishi mumkin. Misol uchun, Microsoft Windows® ostida ilovangiz sotuvchi qurilmasi bilan bog'lanish uchun Microsoft tomonidan taqdim etilgan WinUSB drayveri bilan o'zaro ishlaydi.
USB qurilma sotuvchisi klassi tugadiview
Rasm – Windows xost va sotuvchi sinf o'rtasidagi umumiy arxitektura Vendor sinfidan foydalangan holda xost va qurilma o'rtasidagi umumiy arxitekturani ko'rsatadi. Bu sobiqample, xost operatsion tizimi MS Windows hisoblanadi.
Rasm - MS Windows xost va sotuvchi sinf o'rtasidagi umumiy arxitektura

MS Windows tomonida dastur sotuvchi qurilma bilan USB kutubxonasi bilan o'zaro aloqada bo'ladi. Libusb kabi kutubxonalar qurilmani va unga bog‘liq quvurlarni boshqarish hamda boshqaruv, ommaviy va uzilish nuqtalari orqali qurilma bilan bog‘lanish uchun API taklif qiladi.
Qurilma tomonida Vendor klassi quyidagi so'nggi nuqtalardan iborat:
Bir juft nazorat IN va OUT oxirgi nuqtalari standart oxirgi nuqta deb ataladi. Bir juft ommaviy IN va OUT oxirgi nuqtalari.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

51/174

tugadiview

Bir juft uzilishning IN va OUT so'nggi nuqtalari. Bu juftlik ixtiyoriy. Quyidagi jadval turli xil so'nggi nuqtalardan foydalanishni ko'rsatadi:
Jadval - sotuvchi sinfining so'nggi nuqtalaridan foydalanish

Yakuniy nuqta yo'nalishi

Boshqarish IN
Nazorat
OUT
Ommaviy IN

Device-tohost
>Host-todevice
Device-tohost

OUT
Interrupt IN
Interrupt
OUT

Xost-qurilma
Device-tohost
Xost-qurilma

Foydalanish
Ro'yxatga olish uchun standart so'rovlar va sotuvchiga xos so'rovlar.
Ro'yxatga olish uchun standart so'rovlar va sotuvchiga xos so'rovlar.
Xom ma'lumotlarni uzatish. Ma'lumotlar xususiy protokolga muvofiq tuzilishi mumkin.
Xom ma'lumotlarni uzatish. Ma'lumotlar xususiy protokolga muvofiq tuzilishi mumkin.
Xom ma'lumot uzatish yoki bildirishnoma. Ma'lumotlar xususiy protokolga muvofiq tuzilishi mumkin. Xom ma'lumot uzatish yoki bildirishnoma. Ma'lumotlar xususiy protokolga muvofiq tuzilishi mumkin.

Qurilma ilovasi xostga yoki undan maʼlumotlarni joʻnatish yoki qabul qilish uchun ommaviy va uzilish nuqtalaridan foydalanishi mumkin. U xost tomonidan yuborilgan sotuvchiga xos so'rovlarni dekodlash uchun faqat standart so'nggi nuqtadan foydalanishi mumkin. Standart so'rovlar Silicon Labs USB qurilmasining asosiy qatlami tomonidan ichki boshqariladi.
Yadrodan USB qurilmasi sotuvchisi sinfi resurs ehtiyojlari

Har safar sl_usbd_vendor_add_to_configuration() funksiyasi orqali konfiguratsiyaga sotuvchi sinfi namunasini qo'shsangiz, quyidagi resurslar yadrodan ajratiladi.

Resurs
Interfeyslar Muqobil interfeyslar Endpoints Interfeys guruhlari

Miqdori
1 1 2 (agar siz uzilishning oxirgi nuqtalarini yoqsangiz 4) 0

E'tibor bering, bu raqamlar har bir konfiguratsiya uchun. SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY va SL_USBD_DESCRIPTOR_QUANTITY konfiguratsiya qiymatlarini o‘rnatishda sinf qancha konfiguratsiya qo‘shilishini hisobga olishni unutmang. SL_USBD_OPEN_ENDPOINTS_QUANTITY konfiguratsiya qiymati uchun so'nggi nuqtalar faqat konfiguratsiya xost tomonidan o'rnatilganda ochilganligi sababli, sinf misoli uchun kerakli so'nggi nuqtalar sonini hisobga olishingiz kerak.
USB qurilma sotuvchisi sinfi konfiguratsiyasi

Vendor sinfini sozlash uchun ikkita konfiguratsiya parametrlari guruhi qo'llaniladi:
USB qurilma sotuvchisi klassi Ilovaga xos konfiguratsiyalar USB qurilma sotuvchisi klassi namunasi konfiguratsiyalari
USB qurilma sotuvchisi klassi Ilovaga xos konfiguratsiyalar
Birinchidan, Silicon Labs USB qurilmasi sotuvchisi sinf modulidan foydalanish uchun dastur ehtiyojlaringizga qarab Vendor kompilyatsiya vaqti konfiguratsiyasini sozlang. Ular sl_usbd_core_config.h sarlavhasi ichida qayta guruhlangan file Sotuvchi bo'limi ostida. Miqdor konfiguratsiyasining maqsadi USB qurilma moduliga qancha USB Vendor ob'ektlarini ajratish kerakligi haqida xabar berishdir.
Quyidagi jadvalda har bir konfiguratsiya tavsifi tavsiflanadi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

52/174

tugadiview

Jadval – USB qurilma sotuvchisi konfiguratsiyasini belgilaydi

Konfiguratsiya nomi

Tavsif

Standart qiymat

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY sl_usbd_vendor_create_instance() funksiyasiga qo‘ng‘iroq qilish orqali siz ajratadigan sinf namunalari soni.

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Konfiguratsiyalar soni. Sotuvchi sinfi misollari sl_usbd_vendor_add_to_configuration() funksiyasiga qo'ng'iroq qilish orqali bir yoki bir nechta konfiguratsiyaga 1 qo'shilishi mumkin.

USB qurilmasi sotuvchisi klassi namunasi konfiguratsiyasi

Ushbu bo'lim Vendor sinfi misollari bilan bog'liq konfiguratsiyalarni belgilaydi.
Sinf namunasini yaratish intr_en interval p_vendor_callbacks
Sinf namunasini yaratish

Vendor sinfi namunasini yaratish sl_usbd_vendor_create_instance() funksiyasini chaqirish orqali amalga oshiriladi, bu quyida tavsiflangan uchta konfiguratsiya argumentini oladi.

intr_en
Bir juft uzilishning so'nggi nuqtalarini qo'shish yoki qo'shmaslik kerakligini ko'rsatadigan mantiqiy.

Qiymat
haqiqiy yolg'on

Tavsif
Bir juft IN/OUT so'nggi nuqtalari qo'shiladi va o'rnatilgan ilovaga taqdim etiladi. Hech qanday uzilishning oxirgi nuqtasi qo'shilmaydi. Faqat bir juft Ommaviy IN/OUT so‘nggi nuqtasi mavjud bo‘ladi.

interval
Agar siz intr_en qiymatini true ga o'rnatsangiz, uzilishning so'nggi nuqtalari so'rovi oralig'ini (millisekundlarda) belgilashingiz mumkin. Agar siz intr_en ni false ga o'rnatsangiz, intervalni 0 ga o'rnatishingiz mumkin, chunki u sinf tomonidan e'tiborga olinmaydi.
p_vendor_callbacks
p_vendor_callbacks - bu qayta qo'ng'iroq qilish funktsiyalari tuzilishi o'zgaruvchisiga ko'rsatgich. sinfga xos nazorat so'rovlarini bajarish uchun belgilashingiz mumkin. Agar siz biron bir sinfga xos so'rovlardan foydalanmasangiz yoki bildirishnomani yoqish/o'chirishga muhtoj bo'lsangiz, buni NULL ga o'rnatishingiz mumkin.
sobiqample quyida sizning sinfingizning maxsus so'rovlarini qayta ishlovchining kutilgan imzosini taqdim etadi.
Example - Sinfga xos so'rov funktsiyasining imzosi

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) Sotuvchi sinfining namuna raqami.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

53/174

tugadiview

(2) Xostdan qabul qilingan sozlash so'roviga ko'rsatgich.
USB qurilmalari sotuvchisi sinfi dasturlash bo'yicha qo'llanma
Ushbu bo'lim Vendor sinfidan qanday foydalanishni tushuntiradi. USB qurilma sotuvchisi sinfini ishga tushirish Qurilmangizga USB qurilma sotuvchisi klassi namunasini qo‘shish USB qurilma sotuvchisi klassi yordamida muloqot qilish
USB qurilma sotuvchisi sinfini ishga tushirish
Qurilmangizga Vendor Class funksiyasini qo'shish uchun avval USBD_Vendor_Init() funksiyasini chaqirish orqali sinfni ishga tushiring. sobiqampQuyida sl_usbd_vendor_init() ga qanday qo'ng'iroq qilish kerakligi ko'rsatilgan.
Example - sl_usbd_vendor_init() ga qo'ng'iroq qilish

sl_status_t holati;
status = sl_usbd_vendor_init(); agar (holat ! SL_STATUS_OK) { /* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */ }
Qurilmangizga USB Device Vendor Class Instance qo'shilmoqda
Qurilmangizga sotuvchi klassi funksiyasini qo‘shish uchun avval namuna yaratishingiz, so‘ng uni qurilmangiz konfiguratsiya(lar)iga qo‘shishingiz kerak.
Sotuvchi klassi namunasini yaratish Qurilmangiz konfiguratsiyasi(lar)iga Vendor klassi namunasini qo‘shish
Sotuvchi klassi namunasini yaratish
sl_usbd_vendor_create_instance() funksiyasini chaqirish orqali Vendor sinf namunasini yarating. sobiqample quyida standart argumentlar yordamida sl_usbd_vendor_create_instance() ga qanday qo'ng'iroq qilish kerakligini ko'rsatadi. sl_usbd_vendor_create_instance() ga o'tish uchun konfiguratsiya argumentlari haqida ko'proq ma'lumot olish uchun USB qurilmasi sotuvchisi sinf namunasi konfiguratsiyasiga qarang.
Example - sl_usbd_vendor_create_instance() ga qo'ng'iroq qilish

uint8_t class_nbr; sl_status_t holati;

status = sl_usbd_vendor_create_instance (noto'g'ri,

(1)

0u,

(2)

app_usbd_vendor_callback_functions, (3)

&class_nbr);

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

(1) Ushbu sinf misolida uzilishning so'nggi nuqtalari yo'q. (2) Interrupt so'nggi nuqtalari o'chirilganligi sababli interval e'tiborga olinmaydi.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

54/174

tugadiview

(3) Sotuvchiga xos sinf so'rovlarini bajaradigan ilovangizning bir qismi bo'lgan qayta qo'ng'iroq qilish funksiyasi. Qo'shimcha ma'lumot olish uchun USB qurilma sotuvchisi klassi yordamida muloqot qilish bo'limiga qarang. Sotuvchi klassi namunasini qurilmangiz konfiguratsiyasi(lar)iga qo‘shish Sotuvchi klassi namunasini yaratganingizdan so‘ng, USBD_Vendor_ConfigAdd() funksiyasini chaqirish orqali uni konfiguratsiyaga qo‘shishingiz mumkin. sobiqample quyida standart argumentlar yordamida sl_usbd_vendor_add_to_configuration() ga qanday qo'ng'iroq qilish kerakligini ko'rsatadi.
Example - sl_usbd_vendor_add_to_configuration() ga qo'ng'iroq qilish

sl_status_t holati;

status = sl_usbd_vendor_add_to_configuration(class_nbr,

(1)

config_nbr_fs);

(2)

agar (holat ! SL_STATUS_OK) {

/* Xatolik yuz berdi. Xatolarni hal qilish bu erda qo'shilishi kerak. */

}

(1) sl_usbd_vendor_create_instance() tomonidan qaytarilgan konfiguratsiyaga qo'shiladigan sinf raqami. (2) Konfiguratsiya raqami (bu yerda uni Full-Speed ​​konfiguratsiyasiga qo'shiladi).
USB qurilmasi sotuvchisi sinfidan foydalanib muloqot qilish
Umumiy sinxron aloqa Asinxron aloqa sotuvchisi so'rovi Umumiy Vendor klassi xost bilan bog'lanish uchun quyidagi funktsiyalarni taklif qiladi. Funktsiya parametrlari haqida batafsil ma'lumot olish uchun USB Device Vendor API-ga qarang.
Table – Vendor Communication API Summary

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

Operation Receives data from host through bulk OUT endpoint. This function is blocking. Sends data to host through bulk IN endpoint. This function is blocking. Receives data from host through bulk OUT endpoint. This function is non-blocking. Sends data to host through bulk IN endpoint. This function is non-blocking. Receives data from host through interrupt OUT endpoint. This function is blocking. Sends data to host through interrupt IN endpoint. This function is blocking. Receives data from host through interrupt OUT endpoint. This function is non-
blokirovka qilish.
Sends data to host through interrupt IN endpoint. This function is non-blocking.

The vendor requests are also another way to communicate with the host. When managing vendor requests sent by the host, the application can receive or send data from or to the host using the control endpoint; you will need to provide an application callback passed as a parameter of sl_usbd_vendor_create_instance() . Synchronous Communication

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

55/174

tugadiview

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

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

holat;

status = sl_usbd_vendor_read_bulk_sync(class_nbr,

(1)

(void *)&rx_buf[0],

(2)

2u,

0u,

(3)

&xfer_len);

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(4)

2u,

0u,

(3)

false,

(5)

&xfer_len);

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

(1) The class instance number created with sl_usbd_vendor_create_instance() provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint.
(2) The application must ensure that the buffer provided to the function is large enough to accommodate all the data. Otherwise, synchronization issues might happen.
(3) In order to avoid an infinite blocking situation, a timeout expressed in milliseconds can be specified. A value of 809 makes the application task wait forever.
(4) Ilova ishga tushirilgan uzatish buferini taqdim etadi.
(5) If this flag is set to true , and the transfer length is multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of the transfer.
The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_sync() and sl_usbd_vendor_write_interrupt_sync() , is similar to bulk endpoint communication functions presented in Example – Synchronous Bulk Read and Write.
Asinxron aloqa
Asynchronous communication means that the transfer is non-blocking. When a function is called, the application passes the transfer information to the device stack and does not block. Other application processing can be done while the transfer is in progress over the USB bus. Once the transfer has completed, a callback function is called by the device stack to inform the application about the transfer completion. The example below shows asynchronous read and write.
Example – Asynchronous Bulk Read and Write

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

56/174

tugadiview

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

holat;

status = sl_usbd_vendor_read_bulk_async(class_nbr,

(void *)&rx_buf[0],

(2)

2u,

app_usbd_vendor_rx_completed,

NULL);

(4)

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2u,

app_usbd_vendor_tx_completed,

NULL,

(4)

false);

(6)

agar (holat ! SL_STATUS_OK) {

/* $$$$ Xatoni hal qilish. */

}

}

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

static void app_usbd_vendor_rx_completed(uint8_t class_nbr,

(3)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

agar (holat ! SL_STATUS_OK) {

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

} boshqa {

/* $$$$ Xatoni hal qilish. */

}

}

static void app_usbd_vendor_tx_completed(uint8_t class_nbr,

(3)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

agar (holat ! SL_STATUS_OK) {

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

} boshqa {

/* $$$$ Xatoni hal qilish. */

}

}

(1) The class instance number provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint. (2) The application must ensure that the buffer provided is large enough to accommodate all the data. Otherwise, there may be synchronization issues. (3) The application provides a callback function pointer passed as a parameter. Upon completion of the transfer, the device stack calls this callback function so that the application can finalize the transfer by analyzing the transfer result. For instance, on completion of a read operation, the application might perform processing on the received data. Upon write completion, the application can indicate if the write was successful and how many bytes were sent.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

57/174

tugadiview
(4) An argument associated with the callback can be also passed. Then in the callback context, some private information can be retrieved. (5) The application provides the initialized transmit buffer. (6) If this flag is set to true , and the transfer length is a multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of transfer. The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_async() and sl_usbd_vendor_write_interrupt_async() , is similar to the bulk endpoint communication functions presented in Example Asynchronous Bulk Read and Write.
Vendor Request
The USB 2.0 specification defines three types of requests: standard, class, and vendor. All standard requests are handled directly by the core layer, while class requests are managed by the proper associated class. Vendor requests can be processed by the vendor class. To process vendor requests, you must provide an application callback as a parameter of sl_usbd_vendor_create_instance() . After a vendor request is received by the USB device, it must be decoded properly. The example below shows vendor request decoding. Certain requests may be required to receive from or send to the host during the data stage of a control transfer. If no data stage is present, you only have to decode the Setup packet. This example shows the three types of data stage management: no data, data OUT and data IN.
Example – Vendor Request Decoding

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

58/174

tugadiview

#define APP_VENDOR_REQ_NO_DATA

0x01u

#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u

#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u

#define APP_VENDOR_REQ_DATA_BUF_SIZE

50u

static uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];

static bool app_usbd_vendor_req (uint8_t

class_nbr,

const sl_usbd_setup_req_t *p_setup_req)

(1)

{

bool valid;

sl_status_t holati;

uint16_t req_len;

uint32_t xfer_len;

(void)class_nbr;

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

(2) (3)

case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:

(4)

req_len = p_setup_req->wLength;

if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {

// Not enough room to receive data.

return (false);

}

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

case APP_VENDOR_REQ_SEND_DATA_TO_HOST:

(5)

req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;

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

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

standart:

(6)

// Request is not supported.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

59/174

tugadiview

valid =true;break;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Not enough room to receive data.return(false);}// Receive data via Control OUT EP.// Wait transfer completion forever. status =sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(status ! SL_STATUS_OK){ valid =false;}else{ valid =true;}break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Fill buf with a pattern.Mem_Set((void *)&AppVendorReqBuf[0u],’A’,
req_len);// Send data via Control IN EP.// Wait transfer completion forever. status =sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,false,&xfer_len);if(status ! SL_STATUS_OK){ valid = DEF_FAIL;}else{ valid = DEF_OK;}break;
default:(6)// Request is not supported. valid = DEF_FAIL;break;}return(valid);}

(1) The core will pass the Setup packet content to your application. The structure sl_usbd_setup_req_t contains the same fields as defined by the USB 2.0 specification (refer to section “9.3 USB Device Requests” of the specification for more details):

typedef tuzilishi {

uint8_t bmRequestType; /* Characteristics of request.

*/

uint8_t bRequest; /* Specific request.

*/

uint16_t wValue; /* Varies according to request.

*/

uint16_t wIndex; /* Varies according to request; typically used as index.*/

uint16_t wLength; /* Transfer length if data stage mavjud.

*/

} sl_usbd_setup_req_t;

(2) Determine the request. You may use a switch statement if you are using different requests. In this example, there are three different requests corresponding to the three types of the data stage: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST, and APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) If no data stage is present, you only need to decode the other fields. The presence of a data stage or not is indicated by the field wLength being non-null or null.
(4) If the host sends data to the device, you must call the function sl_usbd_core_read_control_sync() . The buffer provided should be able to contain up to wLength bytes. If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(5) If the host receives data from the device, you must call the function sl_usbd_core_write_control_sync() . If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(6) In this example, all requests not recognized are marked by returning false to the core. This one will stall the data or status stage of the control transfer indicating to the host that the request is not supported.
The host sends vendor requests through a host vendor application. USb libraries, such as libusb, can be used to help you develop your custom host vendor application.

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

60/174

API hujjatlari
API hujjatlari
API hujjatlari
Modullar ro'yxati
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API

Tavsif
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

61/174

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

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
Modullar
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funksiyalar

sl_status_t sl_status_t
sl_status_t sl_status_t sl_status_t
sl_status_t
sl_status_t
sl_status_t
sl_status_t sl_status_t sl_status_t sl_status_t sl_status_t

a sl_usbd_cdc_ cm_init(void)
GLOBAL VARIABLES.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Add a new instance of the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_ dd_to_configur tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
Add a CDC ACM subclass class instance into USB device configuration.
a a sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Get the CDC ACM serial emulation subclass enable state.
a a a sl_usbd_cdc_ cm_re d(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Receive data on the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_re d_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Receive data on the CDC ACM serial emulation subclass asynchronously.
a a sl_usbd_cdc_ cm_write(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Send data on the CDC ACM serial emulation subclass.
a a a sl_usbd_cdc_ cm_write_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Send data on the CDC ACM serial emulation subclass asynchronously.
a a a sl_usbd_cdc_ cm_get_line_control_st te(uint8_t subcl ss_nbr, uint8_t *p_line_ctrl)
Return the state of control lines.
a a a sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Get the current state of the line coding.
a a a sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Set a new line coding.
a a a sl_usbd_cdc_ cm_set_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Set a line state event(s).
a a a a sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Clear a line state event(s).

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

63/174

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

64/174

USB Device ACM API

Turi
bekor

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
Qaytadi

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Tavsif

sl_usbd_cdc_acm_create_instance

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

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

Turi
uint16_t
uint16_t

Direction Argument Name

Tavsif

Yoʻq

line_state_interval Line state notification interval in milliseconds (value must

be a power of 2).

Yoʻq

call_mgmt_capabilities Call Management Capabilities bitmap. OR’ed of the

following flags:

SL_USBD_CDC_ACM_CALL_MGMT_DEV Device handles call management itself. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Device can send/receive call management information over a Data Class interface.

sl_usbd_cdc_acm_callbacks_t N/A
*

uint8_t *

Yoʻq

p_acm_callbacks p_subclass_nbr

Optional pointers to callback functions to be called on various events.
Param to variable that will receive CDC ACM serial emulation subclass instance number.

Qaytadi

Return SL_STATUS_OK on success or another SL_STATUS code on failure.

sl_usbd_cdc_acm_add_to_configuration

sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t subclass_nbr, uint8_t config_nbr)

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

Turi
uint8_t uint8_t

Direction N/A N/A

Argument Name
subclass_nbr config_nbr

Description CDC ACM serial emulation subclass instance number. Configuration index to add new test class interface to.

Qaytadi

Mualliflik huquqi © 2025 Silicon Laboratories. Barcha huquqlar himoyalangan.

65/174

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

sl_usbd_cdc_acm_is_enabled

sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)

Get the CDC ACM serial emulation subclass enable state.
Parametrlar

Turi

Yo'nalish

Argument Name

Tavsif

uint8_t N/A

subclass_nbr CDC ACM serial emulation subclass instance number.

bool * N/A

p_enabled

Boolean to a variable that will receive enable status. The variable is set to true, CDC ACM serial emulation is enabled. The va

Hujjatlar / manbalar

SILICON LABS USB Device Stack [pdf] Qo'llanma
USB Device Stack, Device Stack, Stack

Ma'lumotnomalar

Fikr qoldiring

Sizning elektron pochta manzilingiz nashr etilmaydi. Majburiy maydonlar belgilangan *