USB стек уређаја
Спецификације
- УСБ верзија: 1.5.1
- Датум објаве: 21. јул 2025
- Верзија пакета за развој софтвера Simplicity: 2025.6.1
Производ је завршенview
USB стек уређаја компаније Silicon Labs пружа свестране и
једноставна USB конекција за IoT пројекте, олакшавајући
комуникација између мрежних копроцесора и хостова.
Карактеристике
- Ефикасан стек USB уређаја
- Идеално за IoT пројекте
- Подршка за комуникацију између мрежних копроцесора и
домаћини
Упутства за употребу производа
Конфигурација USB уређаја
Конфигуришите подешавања УСБ уређаја према вашем пројекту
захтеве погледајте одељак Конфигурација USB уређаја
у документацији.
Водич за програмирање УСБ уређаја
Пратите Водич за програмирање УСБ уређаја да бисте разумели како да
програмирати и комуницирати са УСБ уређајем за разне
апликације.
Класе USB уређаја
Одељак Класе USB уређаја пружа прегледview различитих
класе као што су CDC ACM, HID, MSC SCSI и Vendor Class. Изаберите
одговарајућу класу на основу функционалности вашег уређаја.
Решавање проблема са USB уређајима
Ако наиђете на било какве проблеме са УСБ уређајем, погледајте
Одељак за решавање проблема са УСБ уређајима за решења и отклањање грешака
савети.
USB хост за Microsoft Windows оперативни систем
Ако користите USB уређај са Microsoft Windows оперативним системом
Домаћине, обавезно пратите смернице дате у
документација за беспрекорну интеграцију.
ФАК
П: Који су уобичајени бившиampмање уређаја које могу да направим користећи
овај УСБ стек?
A: USB стек вам омогућава да направите уређаје као што су
USB-серијски адаптери, мишеви или тастатуре, преносиви уређаји за складиштење
уређаји и прилагођени уређаји.
П: Да ли постоје неки посебни софтверски захтеви за коришћење овог
Скуп USB уређаја?
A: Компатибилни софтвер укључује Simplicity SDK, Simplicity
Студио, Симплити Командер, ГЦЦ (ГНУ колекција компајлера),
IAR уграђени радни простор за ARM и IAR EWARM.
Универзална серијска магистрала USB
Универзална серијска магистрала USB
USB прекоview Готовоview
Белешке о издању USB
Спецификације и карактеристикеview
Конфигурација USB уређаја је завршенаview
Водич за програмирање УСБ уређајаview
Класе USB уређаја прекоview CDC ACM класа завршенаview HID класа прекоview MSC SCSI класа прекоview Класа добављача прекоview
USB API Документација API-ја USB уређаја API USB уређаја ACM a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB уређај CDC API a sl_usbd_cdc_subcl ss_driver_t USB уређај Core API
sl_usbd_device_config_t sl_usbd_setup_req_t
API за HID уређаје за sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t УСБ уређај MSC API
a sl_usbd_msc_subcl ss_driver_t USB уређај MSC SCSI API
сл_усбд_мсц_сцси_цаллбацкс_т
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
1/174
Универзална серијска магистрала USB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API за добављаче USB уређаја sl_usbd_vendor_callbacks_t
Документација API-ја Решавање проблема са USB уређајем
Готовоview USB хост за Microsoft Windows оперативни систем
Готовоview
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
2/174
Готовоview
Готовоview
УСБ уређај
USB је један од најуспешнијих комуникационих интерфејса у историји рачунарских система и представља де факто стандард за повезивање рачунарских периферних уређаја. Silicon Labs USB Device stack је USB модул уређаја дизајниран посебно за уграђене системе. Направљен од темеља са квалитетом, скалабилношћу и поузданошћу Silicon Labs-а, прошао је кроз ригорозан процес валидације како би био у складу са USB 2.0 спецификацијом. Ова документација описује како иницијализовати, покренути и користити Silicon Labs USB Device stack. Објашњава различите вредности конфигурације и њихову употребу. Такође укључује и...view технологије, врсте могућности конфигурације, поступци имплементације и нпр.ampмање типичне употребе за сваку доступну класу.
Да бисте брзо разумели USB концепте, документација садржи многе примереampУСБ дискови са основним функцијама. Ови нпр.ampлес ће вам пружити оквир који вам омогућава да брзо направите уређаје. Ови нпр.ampлес укључује:
USB-серијски адаптер (класа комуникационих уређаја) Миш или тастатура (класа уређаја са људским интерфејсом) Преносни уређај за складиштење (класа масовног складиштења) Прилагођени уређај (класа произвођача)
Следеће је крајview одељка документације:
Спецификације и карактеристике Конфигурација USB уређаја Водич за програмирање USB уређаја Класе USB уређаја
CDC ACM класа HID класа MSC SCSI класа Вендор класа Решавање проблема са USB уређајем Microsoft Windows OS USB хост
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
3/174
УСБ
УСБ
USB верзија 1.5.1, 21. јул 2025. – Белешке о издању
Верзија 2025.6.1 пакета за развој софтвера Simplicity
Ефикасан USB стек уређаја компаније Silicon Labs нуди свестрану, једноставну USB конекцију идеалну за IoT пројекте, укључујући комуникацију између мрежних копроцесора и хостова. Кликните овде за ранија издања.
Релеасе Суммари
Кључне карактеристике | Промене API-ја | Исправке грешака | Омогућавање чипа
Кључне карактеристике
Само основне промене платформе.
АПИ промене
Ниједан.
Исправке грешака
Ниједан.
Омогућавање чипа
Ниједан.
Кључне карактеристике
Нове функције | Побољшања | Уклоњене функције | Застареле функције
Нове карактеристике
Ниједан.
Побољшања
Само основне промене платформе.
Уклоњене функције
Ниједан.
Застареле карактеристике
Ниједан.
АПИ промене
Нови API-ји | Измењени API-ји | Уклоњени API-ји | Застарели API-ји
Нови АПИ-ји
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
4/174
УСБ
Ниједан.
Измењени API-ји
Ниједан.
Уклоњени API-ји
Ниједан.
Застарели API-ји
Ниједан.
Исправке грешака
Ниједан.
Омогућавање чипа
Ниједан.
Апликација ЕкampПромене
Нев Екampлес | Измењени Ексampлес | Уклоњено бившеampлес | Застарело издањеampлес
Нев Екampлес
Ниједан.
Измењени Ексampлес
Ниједан.
Уклоњен прampлес
Ниједан.
Застарели бившиampлес
Ниједан.
Утицај промена издања
Изјаве о утицају | Водич за миграцију
Изјаве о утицају
Ниједан.
Водич за миграцију
Ниједан.
Познати проблеми и ограничења
Ниједан.
Коришћење овог издања
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
5/174
УСБ
Шта је у издању? | Компатибилан софтвер | Инсталација и коришћење | Помоћ и повратне информације
Шта се налази у издању?
Апликација USB Device Stack Exampлес
Компатибилни софтвер
софтвер
Simplicity SDK (Симплити Студио) Simplicity Commander GCC (ГНУ колекција компајлера) IAR уграђени радни простор за ARM IAR EWARM
Компатибилна верзија или варијанта
2025.6.0 5.11.0 1.18.2 (доступно уз Simplicity Studio) 12.2.1 (доступно уз Simplicity Studio) 9.40.1 (доступно уз Simplicity Studio)
Инсталација и употреба
Да бисте започели свој развој, погледајте наше:
Водич за програмирање USB уређаја. API документација.
За информације о интеграцији Secure Vault-а, погледајте Secure Vault.
То реview Обавештења о безбедности и софтверским саветима и управљање подешавањима обавештења:
ò Идите на https://community.silabs.com/. Ó Пријавите се са својим налогом. ò Кликните на свој професионалацfile икона у горњем десном углу странице.
Изаберите Обавештења из падајућег менија. ö У одељку Обавештења идите на картицу Обавештења о мојим производима да бисте поновоview историјско саветовање о безбедности и софтверу
обавештења
Да бисте управљали својим подешавањима, користите картицу Управљање обавештењима да бисте прилагодили која ажурирања производа и савете желите да примате
примити.
За препоручена подешавања конфигурације, погледајте овде.
Да бисте сазнали више о софтверу у овом издању, погледајте нашу онлајн документацију.
Помоћ и повратне информације
Контактирајте подршку Silicon Labs-а. Да бисте користили наш алат „Питај AI“ да бисте добили одговоре, погледајте поље за претрагу на врху ове странице.
Напомена: Ask AI је експериментална функција.
Потражите помоћ од наше заједнице програмера.
Политика издавања и одржавања СДК-а
Погледајте нашу Политику објављивања и одржавања SDK-а.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
6/174
Готовоview
Готовоview
Спецификације
У складу је са „Спецификацијом универзалне серијске магистрале, ревизија 2.0“. Имплементира „Обавештење о променама инжењеринга дескриптора удружења интерфејса (ECN)“. Типови преноса
Класе за контролу групних прекида (Control Bulk Interface) USB класе Класа комуникационих уређаја (CDC) Апстрактни модел управљања (ACM) Уређај са људским интерфејсом (HID) Класа масовног складиштења (MSC) Оквир класе специфичан за произвођача
Карактеристике
Скалабилно да укључује само потребне функције ради минимизирања заузетости меморије. Подржава пуну брзину (12 Mbit/s). Подржава композитне (вишефункционалне) уређаје. Подржава уређаје са више конфигурација. Подржава функционалности за уштеду енергије преко USB-а (суспендовање и настављање рада уређаја). Потпуна интеграција класе масовног складиштења у Micrium OS. File Системски модул развијен са CMSIS-RTOS2 слојем апстракције тако да може да ради са различитим оперативним системима. Silicon Labs GSDK долази са FreeRTOS и Micrium OS портовима.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
7/174
Готовоview
Готовоview
Конфигурација USB уређаја
Овај одељак говори о томе како конфигурисати Silicon Labs USB уређај. Постоје три групе конфигурационих параметара, као што следи:
Конфигурација језгра USB уређаја Конфигурација информација о USB уређају Конфигурација хардвера USB уређаја
Конфигурација језгра USB уређаја
Silicon Labs USB уређај може се конфигурисати током компајлирања путем скупа #defines који се налазе у sl_usbd_core_config.h датотеци. file. USB уређај користи #defines када је то могуће јер омогућавају скалирање величине кода и података током компајлирања на основу тога које су функције омогућене. Ово омогућава да се простор само за читање (ROM) и меморије са случајним приступом (RAM) Silicon Labs USB уређаја прилагоди захтевима ваше апликације.
Препоручено: Покрените процес конфигурације са подразумеваним вредностима (истакнутим подебљаним словима).
Одељци испод су организовани на основу редоследа у конфигурацији шаблона file, sl_usbd_core_config.h.
Конфигурација основних класа конфигурације
Основна конфигурација
Табела – Константе конфигурације језгра USB уређаја
Константа Опис
Подразумевана вредност
ВЕЛИЧИНА СЛ_УСБД_ТА СК_СТЕК_
Конфигурише величину стека у бајтовима основног задатка USBD
4096
SL_USBD_TA SK_PRIORIT Y
Конфигурише приоритет основног задатка USBD-а. Ово је приоритет CMSIS-RTOS2.
osPriorityHigh
SL_USBD_A АУТОМАТСКО_ПОКРЕТАЊЕ _USB_УРЕЂАЈА E
Ако је омогућено, USB уређај ће се аутоматски покренути када се покрене језгро и тај 1 USBD задатак је заказан за први пут. Ако је онемогућено, ваша апликација ће морати да позове sl_usbd_core_start_device() када је спремна да је USB хост детектује.
SL_USBD_C Укупан број конфигурација које ће бити додате путем sl_usbd_add_configuration()
1
Функција ОНФИГУРАТИ.
ON_QUANTI
TY
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
8/174
Готовоview
Константно
SL_USBD _ИНТЕРФ АЦЕ_КУ АНТИТИ
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
СЛ_УСБД _ИНТЕРФ АЦЕ_ГР
OUP_QU
АНТИТЕТ
SL_USBD _ОПИС
PTOR_Q
УАНТИТИ
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUANTITY
Опис Укупан број USB интерфејса који ће бити додат за све ваше конфигурације. Ово у великој мери зависи од коришћене(их) класе(а). За више информација о томе колико интерфејса је потребно инстанци класе, погледајте одељак „Потребе за ресурсима из језгра“ ваше(их) класе(а).
Укупан број алтернативних USB интерфејса који ће бити додат за све ваше конфигурације. Ово у великој мери зависи од коришћене(их) класе(а). Ова вредност мора увек бити једнака или већа од SL_USBD_INTERFACE_QUANTITY. За више информација о томе колико алтернативних интерфејса инстанца класе захтева, погледајте одељак „Потребе за ресурсима из језгра“ ваше(их) класе(а).
Укупан број USB интерфејс група које ће бити додате за све ваше конфигурације. Ово у великој мери зависи од коришћене(их) класе(а). За више информација о томе колико интерфејс група захтева инстанцу класе, погледајте одељак „Потребе за ресурсима из језгра“ ваше(их) класе(а).
Укупан број дескриптора крајњих тачака који ће бити додати за све ваше конфигурације. Ово у великој мери зависи од класе(а) које се користе. За више информација о томе колико дескриптора крајњих тачака је потребно инстанци класе, погледајте „Број крајњих тачака“ у одељку „Потребе за ресурсима из језгра“ ваше класе(а). Имајте на уму да се контролне крајње тачке овде не морају разматрати. Укупан број USB низова. Постављање количине на нулу ће онемогућити функцију. Онемогућавање овога ће довести до тога да уређај неће чувати никакве USB низове описа прослеђене из апликације. То значи да хост неће моћи да преузме низове описа (као што су произвођач и назив производа). Укупан број отворених крајњих тачака по конфигурацији. Уређају су потребне најмање две отворене крајње тачке за пренос контроле, али морате додати и крајње тачке коришћене класе(а). За више информација о томе колико отворених крајњих тачака је потребно инстанци класе, погледајте „Број крајњих тачака“ у одељку „Потребе за ресурсима из језгра“ ваше класе(а).
Подразумевана вредност
10 10
2
20 30 20
Конфигурација класа
Класе имају специфичне конфигурације током компајлирања. За више информација погледајте Класе USB уређаја.
Конфигурација информација о USB уређају
Конфигурација sl_usbd_device_config.h file прегрупише #define-s током компајлирања да би подесио основне информације о вашем уређају, као што су ИД произвођача/производа, стрингови уређаја итд. Табела испод описује сваку дефиницију конфигурације информација доступну у овој конфигурацији. file.
Табела – Дефиниције конфигурације информација о USB уређају
Константно
SL_USBD_УРЕЂАЈ Е_ДОБАВЉАЧ_ИД
SL_USBD_УРЕЂАЈ Е_ПРОИЗВОД_ИД
Опис Ваш идентификациони број добављача, како вам је доделио USB Implementers Forum. За више информација о томе како можете добити ИД добављача, погледајте http://www.usb.org/developers/vendor/. Ваш идентификациони број производа.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
9/174
Готовоview
Константно
Опис
SL_USBD_DEVICE_RELEASE Број издања вашег уређаја. _NUMBER
SL_USBD_DEVICE_MANUFA Низ који описује произвођача вашег уређаја. Ова конфигурација се игнорише када је
CTURER_STRING
конфигурација SL_USBD_STRING_QUANTITY је подешена на 0.
SL_USBD_DEVICE_PRODUC Низ који описује ваш производ. Ова конфигурација се игнорише када је конфигурација
Т_STRING
SL_USBD_STRING_QUANTITY је подешено на 0.
SL_USBD_DEVICE_SERIAL_N Низ који садржи серијски број вашег уређаја. Ова конфигурација се игнорише када је
UBMER_STRING
конфигурација SL_USBD_STRING_QUANTITY је подешена на 0.
SL_USBD_DEVICE_LANGUA Идентификациони број језика стрингова вашег уређаја. Могуће вредности су:
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 подешена на 0.
Конфигурација хардвера USB уређаја
У зависности од Silicon Labs уређаја који користите, вероватно ћете имати GPIO пин и порт за конфигурисање USB VBUS Sense сигнала. Дефиниције конфигурације се налазе у заглављу sl_usbd_hardware_config.h. file.
Константно
СЛ_УСБД_ДРАЈВЕР_ВБУС_СЕНСЕ_ПОРТ СЛ_УСБД_ДРАЈВЕР_ВБУС_СЕНСЕ_ПИН
Опис
GPIO порт за USB VBUS Sense сигнал на вашој плочи. GPIO пин за USB VBUS Sense сигнал на вашој плочи.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
10/174
Готовоview
Готовоview
Водич за програмирање УСБ уређаја
Овај одељак објашњава како се користи УСБ модул уређаја.
Почетно подешавање УСБ модула уређаја
Овај одељак описује основне кораке потребне за иницијализацију модула USB уређаја и за додавање, припрему и покретање уређаја. Иницијализација модула USB уређаја Иницијализација језгра USB уређаја Иницијализација aCl ss-а Додавање вашег USB уређаја Креирање вашег USB уређаја Додавање конфигурације(а) Додавање USB функција Покретање вашег USB уређаја
Функције за закачивање догађаја
Иницијализација УСБ модула уређаја
Иницијализација језгра УСБ уређаја
Почните иницијализацијом језгра модула Б уређаја позивањем функције sl_usbd_core_init(). Пример испод приказује позивање функције sl_usbd_core_init().
Exampле – Позивање sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Иницијализација класе(а)
Након што је језгро USB модула уређаја иницијализовано, морате иницијализовати сваку класу коју намеравате да користите. Више информација потражите у одељку „Водич за програмирање“ ваших ACL листа.
Креирање вашег УСБ уређаја
Додавање конфигурације(а)
Након што успешно иницијализујете уређај, можете почети са додавањем USB функција, почевши од нове конфигурације. Уређај мора имати барем једну конфигурацију. Да бисте додали конфигурацију(е), позовите функцију sl_usbd_core_dd_configuration(). Ова функција мора бити позвана за сваку конфигурацију коју желите да додате. Пример...ampДоле је приказано како додати пуну брзину.
Exampле – Додавање конфигурације(а) вашем уређају
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
11/174
Готовоview
сл_статус_т статус; уинт8_т цонфиг_нбр_фс;
/* Додавање конфигурације пуне брзине уређају. */
статус = sl_usbd_core_add_configuration(0,
/* Нема посебних атрибута за конфигурацију. */
100у,
/* Максимална потрошња енергије: 100mA.
*/
БРЗИНА_USB_УРЕЂАЈА_ЈЕ_ПУНА,
/* Конфигурација пуне брзине.
*/
„Конфигурација додавања Екс“ampконфигурација пуне брзине”,
&config_nbr_fs);
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Додавање USB функција
Након што успешно додате барем једну конфигурацију на свој уређај, можете додати интерфејсе и крајње тачке на свој уређај. Свака USB класа има своје потребе у погледу типа, количине и других параметара интерфејса и крајњих тачака. Silicon Labs USB уређај додаје интерфејсе и крајње тачке у класе које нуди.
Из ваше апликације можете да направите инстанцу USB класе и додате је конфигурацији. За више информација о концепту инстанци класе USB уређаја, погледајте Класе USB уређаја. Имајте на уму да можете да направите инстанцу и додате много различитих инстанци класе конфигурацији да бисте креирали вишефункционални (композитни) уређај.
БившиampДоња слика приказује како креирати инстанцу класе и додати је у конфигурацију.
Example – Додавање инстанце класе на ваш уређај
sl_status_t status; uint8_t class_nbr;
/* Направите инстанцу класе коју желите да користите.*/ /* Имајте на уму да, у зависности од класе, ова функција може имати више аргумената. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
/* Додавање инстанце класе у конфигурацију пуне брзине. */ статус = sl_usbd_ _add_to_configuration(class_nbr, /* Број класе који враћа sl_usbd_ _креирај_инстанцу. */
config_nbr_fs); /* Број конфигурације враћен од стране sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Покретање вашег УСБ уређаја
Подразумевано, уређај ће се аутоматски покренути од стране основног задатка USB уређаја након што се иницијализација уређаја заврши и језгро се покрене. Да бисте контролисали када се уређај покреће и постаје видљив USB хосту, користите конфигурациону дефиницију SL_USBD_AUTO_START_USB_DEVICE да бисте онемогућили функцију аутоматског покретања. Када је онемогућена, након што сте саставили/припремили уређај, можете га покренути и учинити видљивим за USB хост позивањем функције sl_usbd_core_start_device().
БившиampДоња слика приказује како да покренете уређај помоћу функције sl_usbd_core_start_device().
Exampле – Покретање уређаја
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
12/174
Готовоview
статус sl_status_t;
статус = sl_usbd_core_start_device(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Функције за закачивање догађаја
Основни модул USB уређаја нуди две слабе функције закачивања које можете редефинисати у својој апликацији. Њихова сврха је да вас обавесте када се догоде догађаји на магистрали и конфигурацији.
Табела – Функције за качење USB догађаја
Догађај
Опис
Аутобус
Позива се када се деси догађај USB магистрале
Конфигурација се позива када се догоди догађај USB конфигурације
Потпис функције
воид sl_usbd_on_bus_event(догађај sl_usbd_bus_event_t); void sl_usbd_on_config_event(догађај sl_usbd_config_event_t, uint8_t config_nbr);
Example – Функције за куке догађаја
воид sl_usbd_on_bus_event(догађај sl_usbd_bus_event_t) { switch (догађај) { case SL_USBD_EVENT_BUS_CONNECT:
// позива се када се УСБ кабл убаци у прекид хост контролера;
случај SL_USBD_EVENT_BUS_DISCONNECT: // позива се када се USB кабл уклони из прекида хост контролера;
случај SL_USBD_EVENT_BUS_RESET: // позива се када хост пошаље команду за ресетовање break;
случај SL_USBD_EVENT_BUS_SUSPEND: // позива се када хост пошаље команду за суспендовање break;
случај SL_USBD_EVENT_BUS_RESUME: // позива се када хост пошаље команду за буђење break;
подразумевано: пауза; } }
воид sl_usbd_on_config_event(sl_usbd_config_event_t догађај, uint8_t config_nbr) { switch (догађај) { case SL_USBD_EVENT_CONFIG_SET:
// позива се када хост постави прекид конфигурације;
случај SL_USBD_EVENT_CONFIG_UNSET: // позива се када је конфигурација деактивирана break;
подразумевано: пауза; } }
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
13/174
Готовоview
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
14/174
Готовоview
Готовоview
Класе USB уређаја
USB класе доступне у Silicon Labs USB Device деле неке заједничке карактеристике. Овај одељак објашњава ове карактеристике и њихове интеракције са основним слојем.
За више информација о одређеној класи, погледајте следеће:
CDC ACM класа HID класа MSC SCSI класа класа произвођача
О инстанцама класе
USB класе доступне у USB Device имплементирају концепт инстанци класе. Инстанца класе представља једну функцију унутар уређаја. Функција може бити описана једним интерфејсом или групом интерфејса и припада одређеној класи.
Свака имплементација USB класе има неке заједничке конфигурације и функције, засноване на концепту инстанце класе. Уобичајене конфигурације и функције су приказане у табели испод. У наслову колоне „Константе или функција“, привремено резервисано место XXXX може се заменити именом класе: CDC, HID, MSC, CDC_ACM или VENDOR (Vendor за имена функција).
Табела – Константе и функције повезане са концептом вишеструких инстанци класе
Константа или функција
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGURATION_QUANTITY
sl_usb d _XXXX_cre ate _instance ()
sl_usbd_XXXX_add_to_conf игурација()
Опис
Конфигурише максималан број инстанци класе.
Конфигурише максималан број конфигурација. Током иницијализације класе, креирана инстанца класе биће додата једној или више конфигурација. Креира нову инстанцу класе.
Додаје постојећу инстанцу класе у наведену конфигурацију уређаја.
Што се тиче имплементације кода, класа ће декларисати локалну глобалну променљиву која садржи структуру контроле класе. Ова структура контроле класе је повезана са једном инстанцом класе и садржаће специфичне информације за управљање инстанцом класе.
Следеће слике приказују неколико сценарија случајева. Свака слика садржи пример кодаampле који одговара сценарију случаја.
Слика – Вишеструке инстанце класе – FS уређај (1 конфигурација са 1 интерфејсом) представља типичан USB уређај. Уређај је пуне брзине (FS) и садржи једну конфигурацију. Функција уређаја је описана једним интерфејсом састављеним од пара крајњих тачака за комуникацију података. Креирана је једна инстанца класе која ће вам омогућити да управљате целим интерфејсом са његовом придруженом крајњом тачком.
Слика – Више инстанци класе – Конфигурација FS уређаја 1 са 1 интерфејсом)
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
15/174
Готовоview
Код који одговара слици – Вишеструке инстанце класе – FS уређај (1 конфигурација са 1 интерфејсом) је приказан у примеруampле испод.
Example – Вишеструке инстанце класе – FS уређај 1 конфигурација са 1 интерфејсом)
sl_status_t статус; uint8_t класа_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Обрада догађаја омогућавања класе. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Обрада догађаја онемогућавања класе. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
статус = sl_usbd_XXXX_init();
(2)
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
статус = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&class_0);
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
статус = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
(1) Свака класа нуди скуп функција повратног позива за догађаје повезивања/искључивања уређаја и за догађаје специфичне за класу. Објекат структуре повратног позива се прослеђује као аргумент при креирању инстанце класе помоћу sl_usbd_XXXX_create_instance().
функција.
(1) Иницијализујте класу. Све интерне променљиве, структуре и портови класе биће иницијализовани. Имајте на уму да функција Init() у неким класама може прихватити друге аргументе.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
16/174
Готовоview
(2) Креирајте инстанцу класе, која је class_0. Функција sl_usbd_XXXX_create_instance() додељује структуру контроле класе повезану са class_0. У зависности од класе, sl_usbd_XXXX_create_instance() може имати додатне параметре поред броја класе који представљају информације специфичне за класу сачуване у структури контроле класе. aaa (3) Додајте инстанцу класе, class_0, наведеном броју конфигурације, config_0. sl_usbd_XXXX_add_to_configuration() ће креирати интерфејс 0 и његове придружене крајње тачке IN и OUT. Као резултат тога, инстанца класе обухвата интерфејс 0 и његове крајње тачке. Свака комуникација обављена на интерфејсу 0 користиће број инстанце класе, class_0. Слика – Више инстанци класе – FS уређај (2 конфигурације и вишеструки интерфејси) представља сложенији примерampтј. Уређај пуне брзине састоји се од две конфигурације. Уређај има две функције које припадају истој класи, али свака функција је описана са два интерфејса и има пар двосмерних крајњих тачака. У овом примеру...ampтј. креирају се две инстанце класе. Свака инстанца класе је повезана са групом интерфејса, за разлику од Слике – Више инстанци класе – FS уређај (1 конфигурација са 1 интерфејсом) и Слике – Више инстанци класе – FS уређај (2 конфигурације и вишеструки интерфејси) где је инстанца класе била повезана са једним интерфејсом.
Слика – Више инстанци класе – конфигурације FS уређаја 2 и вишеструки интерфејси)
Код који одговара слици – Вишеструке инстанце класе – FS уређај (2 конфигурације и вишеструки интерфејси) је приказан у примеруampиспод. Обрада грешака је изостављена ради јасноће.
Example – Вишеструке инстанце класе – FS уређаји 2 конфигурације и вишеструки интерфејси)
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
17/174
Готовоview
статус_сл_статус_т; uint8_т класа_0; uint8_т класа_1;
статус = sl_usbd_XXXX_init();
статус = sl_usbd_XXXX_create_instance(&class_0); статус = sl_usbd_XXXX_create_instance(&class_1);
статус = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); статус = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
статус = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); статус = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Иницијализујте класу. Све интерне променљиве, структуре и портови класе биће иницијализовани.
(2) Креирајте инстанцу класе, class_0. Функција sl_usbd_XXXX_create_instance() додељује структуру контроле класе повезану са class_0.
(3) Креирајте инстанцу класе, class_1. Функција sl_usbd_XXXX_create_instance() додељује другу структуру контроле класе повезану са class_1.
(4) Додајте инстанцу класе, class_0, у конфигурацију, cfg_0. sl_usbd_XXXX_add_to_configuration() ће креирати интерфејс 0, интерфејс 1, алтернативне интерфејсе и придружене крајње тачке IN и OUT. Број инстанце класе, class_0, ће се користити за било какву комуникацију података на интерфејсу 0 или интерфејсу 1.
(5) Додајте инстанцу класе, class_1, у конфигурацију, cfg_0. sl_usbd_XXXX_add_to_configuration() ће креирати интерфејс 2, интерфејс 3 и њихове повезане крајње тачке IN и OUT. Број инстанце класе, class_1, ће се користити за било какву комуникацију података на интерфејсу 2 или интерфејсу 3.
(6) Додајте исте инстанце класа, class_0 и class_1, другој конфигурацији, cfg_1.
Свака класа дефинише структуру типа sl_usbd_XXXX_callbacks_t. Њена сврха је да свакој класи да скуп функција повратног позива које се позивају када се догоди догађај. У свакој класи су присутне две функције повратног позива. Оне су приказане у табели испод.
Табела – Функције повратног позива уобичајене класе
Поља Опис .enable Позива се када је инстанца USB класе успешно омогућена. .disable Позива се када је инстанца USB класе онемогућена.
Потпис функције void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
18/174
Готовоview
Готовоview
USB уређај CDC ACM класа
USB уређај CDC основна класа прекоview Потребе за ресурсима класе CDC ACM за USB уређај од језгра подкласе CDC ACM за USB уређајview Конфигурација класе CDC ACM за USB уређаје Водич за програмирање класе CDC ACM за USB уређаје
Овај одељак описује класу Communications Device Class (CDC) и повезану CDC подкласу коју подржава USB Device стек компаније Silicon Labs. Silicon Labs USB-Device тренутно подржава подкласу Abstract Control Model (ACM), која се обично користи за серијску емулацију.
CDC обухвата разне телекомуникационе и мрежне уређаје. Телекомуникациони уређаји обухватају аналогне модеме, аналогне и дигиталне телефоне, ISDN терминалне адаптере итд. На примерampНа пример, мрежни уређаји садрже ADSL и кабловске модеме, Ethernet адаптере и чворишта. CDC дефинише оквир за обухватање постојећих стандарда комуникационих услуга, као што су V.250 (за модеме преко телефонске мреже) и Ethernet (за локалне мрежне уређаје), користећи USB везу. Комуникациони уређај је задужен за управљање уређајима, управљање позивима када је потребно и пренос података.
CDC дефинише седам главних група уређаја. Свака група припада моделу комуникације, који може да укључује неколико подкласа. Свака група уређаја има свој спецификациони документ поред основне класе CDC-а. Седам група су:
Јавна комутирана телефонска мрежа (PSTN), уређаји укључујући модеме са гласовним опсегом, телефоне и уређаје за серијско емулирање. Уређаји дигиталне мреже интегрисаних услуга (ISDN), укључујући терминалне адаптере и телефоне. Уређаји са моделом управљања Ethernet-ом (ECM), укључујући уређаје који подржавају породицу IEEE 802 (нпр. кабловски и ADSL модеми, WiFi адаптери). Уређаји са асинхроним режимом преноса (ATM), укључујући ADSL модеме и друге уређаје повезане на ATM мреже (радне станице, рутери, LAN прекидачи). Уређаји за бежичне мобилне комуникације (WMC), укључујући вишефункционалне комуникационе телефонске уређаје који се користе за управљање гласовном и преносом података. Уређаји са моделом емулације Ethernet-а (EEM) који размењују податке уоквирене Ethernet-ом. Уређаји са моделом управљања мрежом (NCM), укључујући мрежне уређаје велике брзине (модеми за приступ пакетима велике брзине, опрема за линијске терминале)
CDC и придружена имплементација подкласе су у складу са следећим спецификацијама:
Универзална серијска магистрала, Дефиниције класа за комуникационе уређаје, Ревизија 1.2, 3. новембар 2010. Универзална серијска магистрала, Комуникације, Подкласа за PSTN уређаје, Ревизија 1.2, 9. фебруар 2007.
USB уређај CDC основна класа прекоview
CDC уређај се састоји од следећих интерфејса за имплементацију комуникационих могућности:
Интерфејс комуникационе класе (CCI) је одговоран за управљање уређајима и опционо за управљање позивима.
Управљање уређајима омогућава општу конфигурацију и контролу уређаја и обавештавање хоста о догађајима. Управљање позивима омогућава успостављање и прекид позива. Управљање позивима може бити мултиплексирано путем DCI-ја. CCI је обавезан за све CDC уређаје. Он идентификује CDC функцију тако што наводи модел комуникације који CDC уређај подржава. Интерфејс(и) који следе CCI могу бити било који дефинисани USB интерфејс класе, као што је аудио или интерфејс специфичан за произвођача. Интерфејс специфичан за произвођача је представљен посебно помоћу DCI-ја.
Интерфејс класе података (DCI) је одговоран за пренос података. Подаци који се преносе и/или примају не прате одређени
формат. Подаци могу бити сирови подаци са комуникационе линије, подаци који прате власнички формат итд. Сви DCI који прате CCI могу се посматрати као подређени интерфејси.
CDC уређај мора имати најмање један CCI и нула или више DCI-ја. Један CCI и било који подређени DCI заједно пружају функцију хосту. Ова могућност се такође назива функција. У композитном CDC уређају можете имати неколико
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
19/174
Готовоview
функције. Стога би уређај био састављен од неколико скупова CCI и DCI као што је приказано на слици – CDC композитни уређај.
Слика – Композитни уређај CDC-а
CDC уређај ће вероватно користити следећу комбинацију крајњих тачака:
Пар контролних УЛАЗНИХ и ИЗЛАЗНИХ крајњих тачака које се називају подразумевана крајња тачка. Опционална УЛАЗНА крајња тачка за групне или прекидне податке. Пар УЛАЗНИХ и ИЗЛАЗНИХ крајњих тачака за групне или изохроне податке. Имајте на уму да стек USB уређаја компаније Silicon Labs тренутно не подржава изохроне крајње тачке.
Доња табела приказује употребу различитих крајњих тачака и који интерфејс CDC-а их користи.
Табела – Употреба крајње тачке CDC-а
Крајња тачка
Цонтрол ИН
Цонтрол ОУТ
Прекид или групно УЛАЗ Групно или изохроно УЛАЗ Групно или изохроно
ОУТ
Правац
Уређај-хост
Од хоста до уређаја
Уређај-хост
Уређај-хост
Од хоста до уређаја
Употреба интерфејса
ЦЦИ
Стандардни захтеви за набрајање, захтеви специфични за класу, уређај
управљање и опционо управљање позивима.
ЦЦИ
Стандардни захтеви за набрајање, захтеви специфични за класу, уређај
управљање и опционо управљање позивима.
ЦЦИ
Обавештење о догађајима, као што су детекција звоњења, статус серијске линије, статус мреже.
ДЦИ
Комуникација сирових или форматираних података.
ДЦИ
Комуникација сирових или форматираних података.
Већина комуникационих уређаја користи крајњу тачку прекида да би обавестила домаћина о догађајима. Изохроне крајње тачке не би требало користити за пренос података када се власнички протокол ослања на поновни пренос података у случају грешака USB протокола. Изохрона комуникација може сама по себи довести до губитка података јер нема механизме за поновни покушај.
Седам главних модела комуникације обухватају неколико подкласа. Подкласа описује начин на који уређај треба да користи CCI за управљање уређајем и позивима. Табела испод приказује све могуће подкласе и модел комуникације којем припадају.
Табела – CDC подкласе
Подкласа
Модел директног линијског управљања Апстрактни модел управљања
Комуникациони модел
ПСТН
ПСТН
Example уређаја који користе ову подкласу
Модем уређаји које директно контролише USB хост
Серијски емулаторски уређаји, модемски уређаји контролисани преко серијског скупа команди
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
20/174
Готовоview
Подкласа
Комуникациони модел
Example уређаја који користе ову подкласу
Модел телефонске контроле
ПСТН
Вишеканални контролни ISDN модел
CAPI контролни модел ISDN
Модел управљања ECM-ом Ethernet мреже
Умрежавање банкомата
банкомат
Контролни модел
Модел бежичног управљања телефоном
ВМЦ
Управљање уређајима WMC
Модел мобилне директне линије
ВМЦ
OBEX
ВМЦ
ЕЕМ модел емулације етернета
Модел контроле мреже
Горана
Уређаји за гласовну телефонију
Адаптери терминала за основну тарифу, адаптери терминала за примарну тарифу, телефони
Адаптери терминала основне тарифе, адаптери терминала примарне тарифе, телефони DOC-SIS кабловски модеми, ADSL модеми који подржавају PPPoE емулацију, Wi-Fi адаптери (IEEE 802.11 породица), IEEE 802.3 адаптери ADSL модеми
Мобилна терминална опрема која се повезује са бежичним уређајима
Мобилна терминална опрема која се повезује са бежичним уређајима Мобилна терминална опрема која се повезује са бежичним уређајима
Мобилна терминална опрема која се повезује са бежичним уређајима Уређаји који користе Ethernet оквире као следећи слој транспорта. Није намењено за рутирање и уређаје за интернет конекцију IEEE 802.3 адаптери који преносе брзи пропусни опсег података на мрежи
Потребе за ресурсима класе CDC ACM за USB уређај од стране Core-а
Сваки пут када додате инстанцу CDC ACM класе у USB конфигурацију путем позива функције sl_usbd_cdc_acm_add_to_configuration(), следећи ресурси ће бити додељени из језгра.
Ресурс
Интерфејси Алтернативни интерфејси Крајње тачке Групе интерфејса
Количина
2 2 3 1
Имајте на уму да су ови бројеви по конфигурацији. Приликом подешавања вредности конфигурације SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY и SL_USBD_DESCRIPTOR_QUANTITY, не заборавите да узмете у обзир колико конфигурација ће класа бити додато. За вредност конфигурације SL_USBD_OPEN_ENDPOINTS_QUANTITY, пошто се крајње тачке отварају само када хост подеси конфигурацију, потребно је само да узмете у обзир број потребних крајњих тачака за инстанцу класе.
USB уређај CDC ACM подкласа прекоview
Основна класа CDC-а се састоји од интерфејса комуникационе класе (CCI) и интерфејса класе података (DCI), што је детаљно објашњено у одељку Основна класа CDC-а за USB уређаје.view Овај одељак разматра CCI типа ACM. Састоји се од подразумеване крајње тачке за елемент управљања и крајње тачке прекида за елемент обавештавања. Пар групних крајњих тачака се користи за пренос неодређених података преко DCI.
Подкласу ACM користе две врсте комуникационих уређаја:
Уређаји који подржавају AT команде (на пример, модеми са гласовним опсегом). Уређаји за емулацију серијског порта који се називају и уређаји за виртуелни COM порт.
Постоји неколико захтева специфичних за подкласу ACM. Они вам омогућавају да контролишете и конфигуришете уређај. Комплетна листа и опис свих ACM захтева могу се наћи у спецификацији.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
21/174
Готовоview Подкласа за PSTN уређаје, ревизија 1.2, 9. фебруар 2007=, одељак 6.2.2.
Са ове листе, подкласа Silicon Labs9 ACM подржава следеће:
Табела – ACM захтеви које подржава Silicon Labs
Опис захтева за подкласу
SetCommFeature GetCommFeature ClearCommFeature
Хост шаље овај захтев да би контролисао подешавања за дату комуникациону функцију. Не користи се за серијску емулацију.
Хост шаље овај захтев да би добио тренутна подешавања за дату комуникациону функцију. Не користи се за емулацију серијског порта.
Хост шаље овај захтев да би обрисао подешавања за дату комуникациону функцију. Не користи се за серијску емулацију.
SetLineCoding
Хост шаље овај захтев за конфигурисање подешавања ACM уређаја: брзина преноса података, број стоп битова, тип парности и број битова података. За серијску емулацију, овај захтев се аутоматски шаље од стране серијског терминала сваки пут када конфигуришете серијска подешавања за отворени виртуелни COM порт.
GetLineCoding
Хост шаље овај захтев да би добио тренутна ACM подешавања (брзина преноса података, стоп битови, парност, битови података). За серијску емулацију, серијски терминали аутоматски шаљу овај захтев током отварања виртуелног COM порта.
SetControlLineState Хост шаље овај захтев да би контролисао носач за полудуплексне модеме и назначио да ли је опрема за терминал података (DTE) спремна или не. У случају серијске емулације, DTE је серијски терминал. За серијску емулацију, одређени серијски терминали вам омогућавају да пошаљете овај захтев са подешеним контролама.
SetBreak
Хост шаље овај захтев да би генерисао прекид у стилу RS-232. За серијску емулацију, одређени серијски терминали вам омогућавају слање овог захтева.
Подкласа Silicon Labs9 ACM користи крајњу тачку прекида IN да обавести хост о тренутном стању серијске линије. Серијска
Стање линије је битмапа која обавештава хост о:
Подаци одбачени због прекорачења Грешка парности Грешка у оквиру Стање детекције сигнала прстена Стање механизма за детекцију прекида Стање носача преноса Стање детекције носача пријемника
Имплементација подкласе Silicon Labs9 ACM је у складу са следећом спецификацијом:
Универзална серијска магистрала, Комуникације, Подкласа за PSTN уређаје, ревизија 1.2, 9. фебруар 2007.
Конфигурација класе CDC ACM за USB уређај
Овај одељак говори о томе како конфигурисати CDC ACM класу (класа комуникационог уређаја, апстрактни модел управљања). Постоје две групе конфигурационих параметара:
Конфигурације специфичне за апликацију класе CDC ACM за USB уређај Конфигурације инстанци класе CDC ACM за USB уређај
Конфигурације специфичне за апликацију класе CDC ACM USB уређаја
CDC основна класа ACM подкласа
Основна класа ЦДЦ-а
Прво, да бисте користили Silicon Labs USB уређај CDC класни модул, потребно је да подесите конфигурацију #define-s за време компајлирања CDC-а према потребама ваше апликације. Они су прегруписани унутар заглавља sl_usbd_core_config.h. file у одељку CDC. Њихова сврха је да обавесте модул USB уређаја о томе колико USB CDC објеката треба да додели.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
22/174
Готовоview
Доња табела описује свако поље конфигурације доступно у овој структури конфигурације.
Табела – Дефиниције конфигурације CDC-а за USB уређај
Назив конфигурације
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF_IGURATION_QUANTI
TY
SL_USBD_CDC_DATA_INTERFACE_QUANTI
TY
Опис
Број инстанци класе које ћете доделити позивом функције
сл_усбд_цдц_ацм_креирај_инстанцу() .
Број конфигурација. Инстанце ACM класе могу се додати једној или више aaaa конфигурација путем функције sl_usbd_cdc_acm_add_to_configuration().
Укупан број интерфејса за пренос података (DCI) за све CDC функције. Свака CDC ACM функција додата vi c ll функцији sl_usbd_cdc_acm_create_instance() ће додати dt интерфејс.
Подразумевана вредност
2
1
2
ACM подкласа
Подкласа ACM има једну конфигурацију током компајлирања приказану у табели испод.
Табела – Дефиниција конфигурације USB уређаја CDC ACM
Назив конфигурације
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Опис
Конфигурише број инстанци подкласе које ћете доделити путем позива функције
функција sl_usbd_cdc_acm_create_instance() .
Подразумевана вредност
2
Конфигурације инстанци класе CDC ACM за USB уређај
Овај одељак дефинише конфигурације везане за инстанце серијске класе CDC ACM. Креирање инстанце класе, стање линије, интервал, могућности управљања позивима, p_acm_callbacks
Креирање инстанце класе
Да бисте креирали инстанцу серијске класе CDC ACM, позовите функцију T `sl_usbd_cdc_acm_create_instance()`. Ова функција t има три конфигурациона аргумента, као што је овде описано.
интервал_стања_линије
Ово је интервал (у милисекундама) током којег ће ваша инстанца серијске класе CDC ACM пријављивати обавештења о стању линије хосту T aa. Ова вредност мора бити степен броја два (1, 2, 4, 8, 16, итд.).
могућности_управљања_позивима
Битмапа могућности управљања позивима. Могуће вредности битмапе су следеће:
Вредност (бит)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_PODATAK_CCI _DCI
Опис
Уређај сам управља позивима. Уређај може да шаље/прима информације о управљању позивима преко интерфејса класе података.
p_acm_callbacks
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
23/174
Готовоview
aa M aa p_acm_callbacks је показивач на структуру типа sl_usbd_cdc_acm_callbacks_t. Његова сврха је да CDC AC Class ss да скуп функција повратног позива које треба позвати када се догоди CDC ACM догађај. Нису сви повратни позиви обавезни и нулти показивач (NULL) може се проследити у променљивој структуре callbacks када повратни позив није потребан. Табела испод описује свако конфигурационо поље доступно у овој конфигурационој структури.
Табела – sl_usbd_cdc_acm _callbacks_t Структура конфигурације
Поља
Опис
.омогућити
Позива се када је инстанца USB класе омогућена
успешно.
.онемогући
Позива се када је инстанца USB класе онемогућена.
.line_control_changed Позива се када се прими промена контроле линије.
line_coding_changed Позива се када се прими промена линијског кодирања.
Потпис функције
воид апп_усбд_цдц_ацм_енабле(уинт8_т подкласа_нбр);
воид апп_усбд_цдц_ацм_дисабле(уинт8_т подкласа_нбр);
воид апп_усбд_цдц_ацм_лине_цонтрол_цхангед(уинт8_т подкласа_нбр, уинт8_т догађај, уинт8_т догађај_цхнгд); боол апп_усбд_цдц_ацм_лине_цодинг_цхангед(уинт8_т подкласа_нбр, подкласа_нбр, сл_усбд_цдц_ацм_лине_цодинг_т
*p_line_coding
Погледајте одељак Регистровање повратних позива за обавештења о догађајима за функције повратних позива, нпр.ampле.
Водич за програмирање класе CDC ACM за USB уређаје
Овај одељак објашњава како се користи класа CDC Abstract Control Model. Иницијализација USB уређаја CDC ACM класе Додавање инстанце USB уређаја CDC ACM класе вашем уређају Комуникација помоћу CDC ACM класе
Иницијализација USB уређаја CDC ACM класе
Да бисте додали функционалност CDC ACM класе свом уређају, прво морате иницијализовати основну CDC класу и ACM подкласу тако што ћете попунити функције sl_usbd_cdc_init() и sl_usbd_cdc_acm_init(). Пример испод показује како позвати sl_usbd_cdc_init() и sl_usbd_cdc_acm_init() користећи подразумеване аргументе.
Example – Иницијализација CDC ACM класе
статус sl_status_t;
статус = sl_usbd_cdc_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
статус = sl_usbd_cdc_acm_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Додавање инстанце класе CDC ACM USB уређаја на ваш уређај
Да бисте додали функционалност CDC ACM класе на свој уређај, морате креирати инстанцу, а затим је додати у конфигурацију(е) свог уређаја.
Креирање инстанце CDC ACM класе
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
24/174
Готовоview
Додавање инстанце класе CDC ACM у конфигурацију(е) вашег уређаја, регистровање повратних позива за обавештења о догађајима
Креирање инстанце CDC ACM класе
аа М ааа Креирајте инстанцу CDC AC класе позивањем функције sl_usbd_cdc_acm_create_instance(). Пример испод показује како да креирате инстанцу CDC AC класе помоћу sl_usbd_cdc_acm_create_instance().
Example – Креирање CDC ACM функције помоћу sl_usbd_cdc_acm_create_instance()
uint8_t subclass_nbr; sl_status_t статус;
статус = 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);
ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Додавање инстанце CDC ACM класе у конфигурацију(е) вашег уређаја
Након што сте креирали инстанцу CDC ACM класе, можете је додати конфигурацији позивањем функције
сл_усбд_цдц_ацм_адај_то_конфигурација() .
Пример испод показује како се позива sl_usbd_cdc_acm_add_to_configuration().
Example – Позив USBD ACM-у sl_usbd_cdc_acm_add_to_configuration()
статус sl_status_t;
статус = sl_usbd_cdc_acm_add_to_configuration(subclass_nbr,
(1)
config_nbr_fs);
(2)
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
aaa (1) Број класе ss за додавање конфигурацији коју враћа sl_usbd_cdc_acm_create_instance(). (2) Број конфигурације (овде се додаје конфигурацији пуне брзине).
Регистровање повратних позива за обавештења о догађајима
Класа CDC ACM Serial може обавестити вашу апликацију о било каквим променама у контроли линије или кодирању путем функција повратног позива за обавештења. Структура функција повратног позива може се проследити као аргумент током креирања ACM инстанце. Имајте на уму да су ти повратни позиви опциони. Примерampле – Регистрација повратних позива CDC ACM илуструје употребу функција регистрације повратних позива. Примерampле – Имплементација повратних позива CDC ACM показује егзистенцијуampниво имплементације функција повратног позива.
Exampле – Регистрација повратних позива CDC ACM-а
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
25/174
Готовоview
uint8_t subclass_nbr; sl_status_t статус;
сл_усбд_цдц_ацм_цаллбацкс_т сли_усбд_цдц_ацм_цаллбацкс = { апп_усбд_цдц_ацм_цоннецт, апп_усбд_цдц_ацм_дисцоннецт, апп_усбд_цдц_ацм_лине_цонтрол_цхангед, апп_усбд_цдц_ацм_лине_цодинг_цхангед, };
статус = сл_усбд_цдц_ацм_цреате_инстанце(64у, СЛ_УСБД_АЦМ_СЕРИАЛ_ЦАЛЛ_МГМТ_ДАТА_ЦЦИ_ДЦИ | СЛ_УСБД_АЦМ_СЕРИАЛ_ЦАЛЛ_МГМТ_ДЕВ, исли_усбд_цдц_ацм_цаллбацкс, иподкласа_нбр);
ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Exampле – Имплементација повратних позива CDC ACM-а
логичка вредност апликације app_usbd_cdc_acm_line_coding_changed (uint8_t
подкласа_број,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t брзина_бауда;
uint8_t parity_new;
uint8_t стоп_битови_нови;
uint8_t подаци_битови_нови;
/* ЗАДАЦИ Примени ново линијско кодирање.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Parity; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;
врати (тачно);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ боол ртс_стате; боол ртс_стате_цхангед; боол дтр_стате; боол дтр_стате_цхангед; боол брк_стате; боол брк_стате_цхангед;
/* TODO Примени нову контролу линије. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((догађај_промењен & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? тачно : нетачно;
}
(1) Важно је вратити вредност false овој функцији ако примена линијског кодирања није успела. У супротном, вратити вредност true.
Комуникација помоћу CDC ACM класе
Серијски статус
Кодирање линије, контрола линије
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
26/174
Готовоview
Комуникација инстанце подкласе стања линије
Серијски статус
Линијско кодирање
USB хост контролише линијско кодирање (брзина преноса података, паритет итд.) CDC ACM уређаја. Када је потребно, апликација је одговорна за подешавање линијског кодирања. Постоје две функције за преузимање и подешавање тренутног линијског кодирања, као што је описано у табели испод.
Табела – CDC ACM функције линијског кодирања
Функција
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_set_line _co d ing ()
Опис
Ваша апликација може добити тренутна подешавања линијског кодирања или од хоста помоћу захтева SetLineCoding или помоћу функције sl_usbd_cdc_acm_set_line_coding().
Ваша апликација може да подеси кодирање линија. Хост може да преузме подешавања помоћу захтева GetLineCoding.
Контрола линије
USB хост контролише контролу линије (RTS и DTR пинови, сигнал прекида итд.) CDC ACM уређаја. Када је потребно, ваша апликација је одговорна за примену контрола линије. Обезбеђена је функција за преузимање и подешавање тренутних контрола линије, као што је описано у табели испод.
Табела – Функције контроле линије CDC ACM
Функција
sl_usb d _cd c_acm_g e t_line _contr o l_state ()
Ваша апликација може да добије тренутно стање контролне линије које је подесио хост помоћу захтева SetControlLineState.
Стање линије
USB хост преузима стање линије у редовним интервалима. Ваша апликација мора да ажурира стање линије сваки пут када се оно промени. Када је потребно, ваша апликација је одговорна за подешавање стања линије. Обезбеђене су две функције за преузимање и подешавање тренутних контрола линије, као што је описано у табели испод.
Табела – Функције стања линије S CDC ACM
Функција
sl_usb d _cd c_acm_se t _line _state _e ve nt()
сл_усбд_цдц_ацм_цле ар_лине _стање _е ве нт()
Ваша апликација може да подеси било који догађај (или догађаје) стања линије. Приликом подешавања стања линије, шаље се прекид IN преноса хосту да би га обавестио о промени стања серијске линије.
Апликација може да обрише два догађаја стања линије: детекцију носача преноса и детекцију носача пријемника. Сви остали догађаји се сами бришу помоћу подкласе серијске емулације ACM.
Комуникација са инстанцама подкласе
Подкласа ACM компаније Silicon Labs нуди следеће функције за комуникацију са хостом. За више детаља о параметрима functions9, погледајте референцу за функције подкласе ACM компаније CDC.
Назив функције
sl_usb d _cd c_acm_ read ad () sl_usb d _cd c_acm_write ()
Операција
Прима податке од хоста преко крајње тачке за групни пријем (bulk OUT). Ова функција блокира. Шаље податке хосту преко крајње тачке за групни пријем (bulk IN). Ова функција блокира.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
27/174
Готовоview
Табела – Резиме CDC ACM комуникационог API-ја aaaaa sl_usbd_cdc_acm_read() и sl_usbd_cdc_acm_write() пружају синхрону комуникацију, што значи да је пренос блокиран. Другим речима, након позивања функције, апликација се блокира док се пренос не заврши са или без грешке. Може се одредити временско ограничење да би се избегло вечно чекање. Примерampдоле је приказан пример за читање и писањеampдатотека која прима податке од хоста користећи крајњу тачку за групни излаз (bulk OUT) и шаље податке хосту користећи крајњу тачку за групни улаз (bulk IN).
Листинг – Серијско читање и писање Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
уинт32_т
ксфер_лен;
статус_слатка_теста
статус;
статус = sl_usbd_cdc_acm_read(подкласа_број,
(1)
rx_buf,
(2)
2у,
0у,
(3)
&xfer_len);
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
статус = sl_usbd_cdc_acm_write(подкласа_нбр,
(1)
ткс_баф,
(4)
2у,
0у,
(3)
&xfer_len);
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Т ааааа М (1) Број инстанце класе креиран помоћу sl_usbd_cdc_acm_create_instance() пружа интерну референцу на AC подкласу за усмеравање преноса до одговарајуће крајње тачке OUT или IN. (2) Ваша апликација мора да осигура да је бафер који је достављен функцији довољно велик да прими све податке. У супротном, могу се десити проблеми са синхронизацијом. (3) Да бисте избегли ситуацију бесконачног блокирања, наведите време чекања изражено у милисекундама. Вредност 809 чини да задатак апликације чека заувек. (4) Апликација пружа иницијализовани бафер за пренос.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
28/174
Готовоview
Готовоview
USB уређај HID класа
USB уређај HID класе прекоview Потребе за ресурсима HID класе USB уређаја из језгра Конфигурација HID класе USB уређаја Водич за програмирање HID класе Задатак периодичних извештаја о улазу HID-а
Овај одељак описује класу уређаја за људски интерфејс (HID) коју подржава Silicon Labs USB уређај.
HID класа обухвата уређаје које људи користе за контролу рачунарских операција, као што су тастатуре, мишеви, показивачки уређаји и играчке конзоле.
Класа HID се такође може користити у композитном уређају који садржи контроле као што су дугмад, прекидачи, дугмад и клизачи. На примерampКонтроле за искључивање звука, искључивање звука и јачину звука у аудио слушалицама контролише HID функција слушалица. HID класа може размењивати податке у било коју сврху користећи само контролне и прекидне преносе.
HID класа је једна од најстаријих и најшире коришћених USB класа. Сви главни хост оперативни системи пружају изворни драјвер за управљање HID уређајима, због чега разни уређаји специфични за произвођаче раде са HID класом. Ова класа такође укључује различите врсте излазних елемената као што су ЛЕД диоде, аудио, тактилне повратне информације итд.
Имплементација HID-а је у складу са следећим спецификацијама:
Дефиниција класе уређаја за уређаје са људским интерфејсом (HID), 27.6.2001, верзија 1.11. Табеле употребе HID-а универзалне серијске магистрале, 28.10.2004, верзија 1.12.
USB уређај HID класе прекоview
Готовоview
HID уређај се састоји од следећих крајњих тачака:
Пар контролних крајњих тачака УЛАЗА и ОУТ-а који се називају подразумевана крајња тачка, Крајња тачка УЛАЗА прекида, Опционална крајња тачка ОУТ прекида.
Доња табела описује употребу различитих крајњих тачака:
Табела – Употреба крајњих тачака HID класе
Употреба правца крајње тачке
Цонтрол ИН
Контрола
ОУТ
Прекид улаз
Прекини
ОУТ
Уређај-хост
Од хоста до уређаја
Уређај-хост
Од хоста до уређаја
Стандардни захтеви за набрајање, захтеви специфични за класу и комуникација података (унос, извештаји о карактеристикама послати хосту са GET_REPORT захтевом). Стандардни захтеви за набрајање, захтеви специфични за класу и комуникација података (излаз, извештаји о карактеристикама примљени од хоста са SET_REPORT захтевом). Комуникација података (унос и извештаји о карактеристикама).
Комуникација података (изводи и извештаји о карактеристикама).
Извештај
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
29/174
Готовоview
Хост и HID уређај размењују податке помоћу извештаја. Извештај садржи форматиране податке који пружају информације о контролама и другим физичким ентитетима HID уређаја. Контрола је манипулативна од стране корисника и управља једним аспектом уређаја. На примерampНа пример, контрола може бити дугме на мишу или тастатури, прекидач итд. Други ентитети обавештавају корисника о стању одређених функција уређаја. На примерampнпр., ЛЕД диоде на тастатури обавештавају корисника о укљученом тастеру Caps Lock, активној нумеричкој тастатури итд.
Хост разуме формат и употребу података извештаја анализирајући садржај дескриптора извештаја. Анализу садржаја врши парсер. Дескриптор извештаја описује податке које пружа свака контрола у уређају. Састоји се од ставки које су делови информација о уређају и састоје се од префикса од 1 бајта и променљиве дужине.
подаци. За више детаља о формату ставке, погледајте
1.11=, одељци 5.6 и 6.2.2.
Постоје три главне врсте елемената:
Главна ставка дефинише или групише одређене типове поља података.
Глобална ставка описује карактеристике података контроле.
Локална ставка описује карактеристике података контроле.
Сваки тип ставке је дефинисан различитим функцијама. Функција ставке се такође може назвати tagФункција ставке може се посматрати као подставка која припада једном од три главна типа ставки. Табела испод даје кратак прегледview функција предмета у сваком типу предмета. За потпуни опис предмета у свакој категорији, погледајте
Табела – Опис функције ставке за сваку врсту ставке
Ставка Тип ставке Функција
Опис
Главни улаз
Описује информације о подацима које пружа једна или више физичких контрола.
Главни излаз Описује податке послате уређају.
Главна карактеристика
Описује информације о конфигурацији уређаја које се шаљу на уређај или примају са њега, а које утичу на целокупно понашање уређаја или једне од његових компоненти.
Главна група колекција повезаних елемената (улаз, излаз или функција).
Главни крај затвара колекцију. Колекција
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
30/174
Готовоview
Ставка Тип ставке Функција
Опис
Страница за глобалну употребу
Идентификује функцију доступну у оквиру уређаја.
Глобална логичка вредност Дефинише доњу границу пријављених вредности у логичким јединицама. Минимална
Глобална логичка вредност Дефинише горњу границу пријављених вредности у логичким јединицама. Максимална
Глобални физички Дефинише доњу границу пријављених вредности у физичким јединицама, односно логички минимум изражен у физичким јединицама.
Глобални физички Дефинише горњу границу пријављених вредности у физичким јединицама, односно логички максимум изражен у физичким јединицама.
Глобална јединица
Означава јединични експонент у бази 10. Експонент се креће од -8 до +7.
Експонент
Глобална јединица
Означава јединицу пријављених вредности. На пример, јединице за дужину, масу, температуру итд.
Величина глобалног извештаја
Означава величину поља извештаја у битовима.
Глобални ИД извештаја означава префикс додат одређеном извештају.
Глобални број извештаја
Означава број поља података за ставку.
Глобални гурање
Поставља копију глобалне табеле стања ставки на CPU стек.
Глобални поп
Замењује табелу стања ставке последњом структуром са стека.
Локална употреба
Представља индекс који означава одређену употребу унутар странице употребе. Означава предложену употребу произвођача за одређену контролу или групу контрола. Употреба пружа информације програмеру апликације о томе шта контрола заправо мери.
Локална употреба
Дефинише почетну употребу повезану са низом или битмапом.
Минимум
Локална употреба
Дефинише завршну употребу повезану са низом или битмапом.
Максимум
Локални означивач одређује део тела који се користи за контролу. Индекс показује на означивач у физичком
Индекс
дескриптор.
Локални означивач Дефинише индекс почетног означивача повезаног са низом или битмапом. Минимум
Локални означивач Дефинише индекс завршног означивача повезаног са низом или битмапом. Максимум
Локални индекс низова
Индекс стринга за дескриптор стринга. Омогућава повезивање стринга са одређеном ставком или контролом.
Локални стринг
Одређује први индекс стринга приликом додељивања групе узастопних стрингова контролама у низу
Минимална или битмапа.
Локално Локално
Максимум низа
Делимитер
Одређује последњи индекс стринга приликом додељивања групе узастопних стрингова контролама у низу или битмапи.
Дефинише почетак или крај скупа локалних ставки.
Подаци контроле морају дефинисати најмање следеће ставке:
Улаз, излаз или функција Главне ставке Употреба Локална ставка Употреба Страница Глобална ставка Логички минимум Глобална ставка Логички максимум Глобална ставка Величина извештаја Глобална ставка
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
31/174
Готовоview
Глобална ставка бројача извештаја Табела испод приказује садржај дескриптора извештаја миша из перспективе HID парсера хоста. Миш има три дугмета (лево, десно и точак). Код представљен у примеруampИспод је имплементација кода која одговара овој репрезентацији дескриптора извештаја миша.
Слика – Садржај дескриптора извештаја из парсера HID-а хоста View
(1) Функција ставке странице употребе одређује општу функцију уређаја. У овом примеруampтј., HID уређај припада
генеричка контрола радне површине.
(2) Колекција Апликација групише главне ставке које имају заједничку намену и могу бити познате апликацијама. На дијаграму, група се састоји од три главне ставке Уноса. За ову колекцију, предложена употреба контрола је миш, као што је назначено ставком Употреба. (3) Угнежђене колекције могу се користити да би се апликацијама пружило више детаља о употреби једне контроле или групе контрола. У овом примеруampтј. Физичка колекција, угнежђена у Апликацију за колекцију, састоји се од исте три улазне ставке које чине Апликацију за колекцију. Физичка колекција се користи за скуп ставки података које представљају тачке података прикупљене у једној геометријској тачки. У нпр.ampтј. предложена употреба је показивач, као што је назначено ставком Употреба. Овде се употреба показивача односи на координате положаја миша, а системски софтвер ће претворити координате миша у кретање курсора на екрану. (4) Угнежђене странице употребе су такође могуће и дају више детаља о одређеном аспекту унутар опште функције уређаја. У овом случају, две ставке Уноса су груписане и одговарају дугмадима миша. Једна ставка Уноса дефинише три дугмета миша (десно, лево и точкић) у смислу броја поља података за ставку (ставка Бројач извештаја), величине поља података (ставка Величина извештаја) и могућих вредности за свако поље података (ставке Минимум и максимум употребе, Логички минимум и максимум). Друга ставка Уноса је 13-битна константа која омогућава поравнавање података извештаја Уноса на граници бајта. Ова ставка Уноса се користи само за попуњавање. (5) Још једна угнежђена страница употребе која се односи на генеричку контролу радне површине дефинисана је за координате положаја миша. За ову страницу употребе, ставка Уноса описује поља података која одговарају x и y оси, као што је одређено са две ставке Употреба.
ставке.
Након анализе претходног садржаја дескриптора извештаја миша, HID парсер хоста је у стању да интерпретира податке улазног извештаја које је уређај послао прекидом IN преноса или као одговор на GET_REPORT захтев. Подаци улазног извештаја који одговарају дескриптору извештаја миша приказани су на слици – Садржај дескриптора извештаја из HID парсера хоста View is
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
32/174
Готовоview
приказано у табели испод. Укупна величина података извештаја је 4 бајта. Различите врсте извештаја могу се слати преко исте крајње тачке. Ради разликовања различитих врста извештаја, извештају са подацима се додаје префикс ИД-а извештаја од 1 бајта. Ако је ИД извештаја коришћен у нпр.ampизвештаја миша, укупна величина података извештаја би била 5 бајтова.
Табела – Улазни извештај послат хосту и одговара стању миша са 3 дугмета
Бит Оффсет
0 1 2 3 16 24
Број битова 1 1 1 13 8 8
Опис Дугме 1 (лево дугме). Дугме 2 (десно дугме). Дугме 3 (точкић). Не користи се. Позиција на оси X. Позиција на оси Y.
Физички дескриптор означава део или делове тела намењене за активирање једне или више контрола. Апликација може да користи ове информације да додели функционалност контроли уређаја. Физички дескриптор је опциони дескриптор специфичан за класу и већина уређаја има малу корист од његовог коришћења. Погледајте
Потребе за ресурсима HID класе USB уређаја од стране Core-а
Сваки пут када додате инстанцу HID класе у USB конфигурацију путем позива функције sl_usbd_hid_add_to_configuration(), следећи ресурси ће бити додељени из језгра.
Ресурс
Интерфејси Алтернативни интерфејси Крајње тачке Групе интерфејса
Количина
1 1 1 (2 ако је омогућена крајња тачка прекида OUT) 0
Имајте на уму да су ови бројеви по конфигурацији. Приликом подешавања вредности конфигурације SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY и SL_USBD_DESCRIPTOR_QUANTITY, не заборавите да узмете у обзир колико конфигурација ће класа бити додато. За вредност конфигурације SL_USBD_OPEN_ENDPOINTS_QUANTITY, пошто се крајње тачке отварају само када хост подеси конфигурацију, потребно је само да узмете у обзир број потребних крајњих тачака за инстанцу класе.
Конфигурација HID класе USB уређаја
Две групе конфигурационих параметара се користе за конфигурисање HID класе:
Конфигурације специфичне за апликацију класе HID за USB уређај Конфигурације инстанци класе HID за USB уређај
Конфигурације специфичне за апликацију класе HID USB уређаја
Прво, да бисте користили Silicon Labs USB уређај HID класни модул, прилагодите HID конфигурационе дефиниције током компајлирања према потребама ваше апликације. Оне су прегруписане унутар заглавља sl_usbd_core_config.h. file у одељку HID. Могу се поделити у два одељка, конфигурације количине и конфигурације HID задатака. Сврха конфигурација количине је да обавесте модул USB уређаја о томе колико USB HID објеката треба да додели.
Доња табела описује сваку дефиницију конфигурације.
Табела – Дефиниције конфигурације HID-а за USB уређај
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
33/174
Готовоview
Назив конфигурације
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG_URATION_QUANTITY
SL_USBD_HID_ИЗВЕШТАЈ_ ИД_КОЛИЧИНА
SL_USBD_HID_PUSH_P ОП_ИТЕМ_КОЛИЧИНА
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TAJMER_T ПРИОРИТЕТ_ПИТАЊА
Опис
Број инстанци класе које ћете доделити позивом функције
сл_усбд_хид_креирај_инстанцу() .
Број конфигурација. Инстанце HID класе могу се додати једној или више aaaa конфигурација путем функције sl_usbd_hid_add_to_configuration(). Конфигурише укупан број ID-ова извештаја који ће се доделити.
Конфигурише укупан број ставки за доделу помоћу функције „Push/Pop“.
Тајмерски задатак обрађује све HID операције засноване на тајмеру. Ова конфигурација вам омогућава да подесите величину стека (у броју бајтова). Приоритет HID задатка. Ово је приоритет CMSIS-RTOS2.
Подразумевана вредност
2 1 2 0 2048
osPriorityHigh
Конфигурације инстанци класе HID за USB уређаје, подкласа за креирање инстанце класе
протокол код_земље
interval_in и interval_out p_hid_callback HID класа извештаја Дескриптор ExampОвај одељак дефинише конфигурације везане за инстанце HID класе.
Креирање инстанце класе
Креирање инстанце HID класе се врши позивањем функције sl_usbd_hid_create_instance(), која захтева неколико конфигурационих аргумената који су описани у наставку.
подкласа
Код HID подкласе. Могуће вредности су:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
HID уређај који користи подкласу за покретање мора да користи стандардне формате извештаја. За више информација о кодовима подкласа, погледајте одељак 4.2 HID спецификације ревизије 1.11.
протокола
Протокол који користи HID уређај. Могуће вредности су:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Ако је ваша HID функција миш, протокол треба да буде подешен на SL_USBD_HID_PROTOCOL_MOUSE. Ако је у питању тастатура, треба да буде подешен на SL_USBD_HID_PROTOCOL_KBD. У супротном, протокол треба да буде подешен на SL_USBD_HID_PROTOCOL_NONE. За више информација о кодовима подкласа, погледајте одељак 4.3 HID спецификације, ревизија 1.11.
код_земље
ИД позивног броја земље. Могуће вредности су:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
34/174
Готовоview
SL_USBD_HID_КОД_ЗЕМЉЕ_АРАПСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_БЕЛГИЈСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_КАНАДСКИ_ДВОЈЕЗИЧНИ SL_USBD_HID_КОД_ЗЕМЉЕ_КАНАДСКИ_ФРАНЦУСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ЧЕШКА_РЕПУБЛИКА SL_USBD_HID_КОД_ЗЕМЉЕ_ДАНСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ФИНСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ФРАНЦУСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_НЕМАЧКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ГРЧКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ХЕБРЕЈСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_МАЂАРСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_МЕЂУНАРОДНИ SL_USBD_HID_КОД_ЗЕМЉЕ_ИТАЛИЈАНСКИ SL_USBD_HID_COUNTRY_CODE_ЈАПАН_КАТАКАНА SL_USBD_HID_COUNTRY_CODE_КОРЕЈСКИ SL_USBD_HID_COUNTRY_CODE_L АМЕРИЧКИ SL_USBD_HID_COUNTRY_CODE_ХОЛАНДСКИ И НДС_ХОЛАНДСКИ SL_USBD_HID_COUNTRY_CODE_НОРВЕШКИ SL_USBD_HID_COUNTRY_CODE_ПЕРСИЈСКИ_ФАРСИ SL_USBD_HID_COUNTRY_CODE_ПОЉСКИ И SL_USBD_HID_COUNTRY_CODE_ПОРТУГАЛСКИ SL_USBD_HID_COUNTRY_CODE_РУСИЈА SL_USBD_HID_COUNTRY_CODE_СЛОВАЧКА SL_USBD_HID_COUNTRY_CODE_ШПАНСКИ SL_USBD_HID_COUNTRY_CODE_ШВЕДСКИ SL_USBD_HID_COUNTRY_CODE_ШВАЈЦАРСКИ_ФРАНЦУСКИ SL_USBD_HID_КОД_ЗЕМЉЕ_ШВАЈЦАРСКА_НЕМАЧКА SL_USBD_HID_КОД_ЗЕМЉЕ_ШВАЈЦАРСКА И SL_USBD_HID_КОД_ЗЕМЉЕ_ТАЈВАН SL_USBD_HID_КОД_ЗЕМЉЕ_ТУРСКА_Q SL_USBD_HID_КОД_ЗЕМЉЕ_УК SL_USBD_HID_КОД_ЗЕМЉЕ_САД SL_USBD_HID_КОД_ЗЕМЉЕ_ЈУГ ОСЛ АВИЈА SL_USBD_HID_КОД_ЗЕМЉЕ_ТУРСКА_Ф
Шифра земље идентификује за коју земљу је хардвер локализован. Већина хардвера није локализована и стога би ова вредност била SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Међутим, тастатуре могу користити ово поље да назначе језик великих слова на тастатури.
За више информација о кодовима земаља, погледајте одељак 6.2.1 HID спецификације, ревизија 1.11.
интервал_улаз и интервал_излаз
интервал_улаз и интервал_излаз представљају интервал испитивања крајње тачке прекида улаз (IN) и крајње тачке прекида излаз (OUT).
Ово представља интервал анкетирања крајње тачке, у милисекундама. Подешавање ове вредности зависи од тога колико често је ваш уређај подложан генерисању новог извештаја за хост. На пример, ако се извештај генерише сваких 16 милисекунди, интервал треба да буде 16 или мање.
Вредност мора бити степен броја 2 (1, 2, 4, 8, 16, итд.).
Вредност interval_out v lue се игнорише ако је ctrl_rd_en подешена на вредност true.
p_hid_callback
p_hid_callback је показивач на структуру типа sl_usbd_hid_callbacks_t. Његова сврха је да HID класи ss пружи скуп функција повратног позива које се позивају када се догоди HID догађај.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
35/174
Готовоview
Нису сви повратни позиви обавезни и нулти показивач (NULL) може се проследити у променљивој структуре повратних позива када повратни позив није потребан. Табела испод описује свако конфигурационо поље доступно у овој конфигурационој структури.
Табела – структура конфигурације sl_usbd_hid_callbacks_t
Поља
Опис
Потпис функције
.омогући .онемогући .гет_репорт_десц
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Позива се када је инстанца USB класе успешно омогућена. Позива се када је инстанца USB класе онемогућена.
Позива се током креирања HID инстанце да би се проследио ваш дескриптор извештаја. За сваку од ваших HID функција, морате да обезбедите дескриптор извештаја. Дескриптор извештаја указује хосту како треба да се анализира периодични извештај који ће уређај слати. Писање сопственог дескриптора извештаја може бити изазовно и зато постоје неки ресурси који могу помоћи. Ово је једина обавезна функција повратног позива. Позива се током креирања HID инстанце да би се проследио ваш физички дескриптор. Физички дескриптор је дескриптор који пружа информације о одређеном делу или деловима људског тела који активирају контролу или контроле. За више информација о физичким дескрипторима, погледајте одељак 6.2.3 HID спецификације ревизије 1.11. Физички дескриптор је опционалан и већину времена се игнорише. Бафер који се овде прослеђује може се подесити на NULL, а дужина на 0. Позива се када хост подеси извештај као што је описано у вашем дескриптору извештаја (када шаље извештај).
Позива се када хост захтева извештај о функцијама као што је описано у вашем дескриптору извештаја.
Позива се када хост подеси извештај о функцијама као што је описано у вашем дескриптору извештаја.
воид апп_усбд_хид_енабле(уинт8_т клас_нбр); воид апп_усбд_хид_дисабле(уинт8_т клас_нбр); воид апп_усбд_хид_гет_репорт_десц(уинт8_т клас_нбр, цонст уинт8_т *п_репорт_птр, уинт16_тп_репорт_лен);
воид апп_усбд_хид_гет_пхи_десц(уинт8_т класа_нбр, цонст уинт8_т *п_репорт_птр, уинт16_тп_репорт_лен);
воид апп_усбд_хид_сет_аутпут_репорт(уинт8_т класа_нбр, уинт8_т репорт_ид, уинт8_т *п_репорт_буф, уинт16_т репорт_лен); воид апп_усбд_хид_гет_феатур_репорт(уинт8_т класа_нбр, уинт8_т репорт_ид, уинт8_т *п_репорт_буф, уинт16_т репорт_лен); воид апп_усбд_хид_сет_феатур_репорт(уинт8_т класа_нбр, уинт8_т репорт_ид, уинт8_т *п_репорт_буф, уинт16_т репорт_лен);
.get_protocol
Преузима тренутно активни протокол.
воид апп_усбд_хид_гет_протокол(уинт8_т класа_нбр, уинт8_т *п_протокол);
.set_protocol
Поставља тренутно активни протокол.
воид апп_усбд_хид_сет_протокол(уинт8_т класа_нбр, уинт8_т протокол);
Дескриптор извештаја HID класе Example
Силиконске лабораторије са HID класомampапликација пружа нпр.ampдескриптора извештаја за једноставног миша. БившиampДоња слика приказује дескриптор извештаја о мишу.
Exampле – Дескриптор извештаја о мишу
статички 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)
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
36/174
Готовоview
SL_USBD_HID_GLAVNA_KOLEKCIJA +1, SL_USBD_HID_KOLEKCIJA_APPLIKACIJA,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_GLAVNA_KOLEKCIJA +1, SL_USBD_HID_FIZIČKA_KOLEKCIJA,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
СЛ_УСБД_ХИД_ЛОКАЛНА_УПОТРЕБА_МАКС +1,0 03,
СЛ_УСБД_ХИД_ГЛОБАЛ_ЛОГ_МИН +1,0 00,
СЛ_УСБД_ХИД_ГЛОБАЛ_ЛОГ_МАКС +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_GLAVNI_ULAZ +1, SL_USBD_HID_GLAVNI_PODACI |
SL_USBD_HID_GLAVNA_VARIABLE |
СЛ_УСБД_ХИД_ГЛАВНИ_АПСОЛУТНИ,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_GLAVNI_ULAZ +1, SL_USBD_HID_GLAVNA_KONSTANTA,(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,
СЛ_УСБД_ХИД_ГЛОБАЛ_ЛОГ_МИН +1,0 81,
СЛ_УСБД_ХИД_ГЛОБАЛ_ЛОГ_МАКС +1,0 7Ф,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_GLAVNI_ULAZ +1, SL_USBD_HID_GLAVNI_PODACI |
SL_USBD_HID_GLAVNA_VARIABLE |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_GLAVNA_KRAJKOLEKCIJE,(10)
SL_USBD_HID_MAIN_ENDCOLLECTION
(11)};
(1) Табела која представља дескриптор извештаја о мишу је иницијализована на такав начин да сваки ред одговара краткој ставки. Потоња је формирана од префикса од 1 бајта и података од 1 бајта. Погледајте viewобрађено од стране HID парсера хоста на слици – Садржај дескриптора извештаја из HID парсера хоста View.
(2) Користи се генеричка страница за коришћење рачунара.
(3) У оквиру странице за генеричку употребу рачунара, коришћење tag сугерише да је група контрола намењена за контролу миша. Колекција миша се обично састоји од две осе (X и Y) и једног, два или три дугмета.
(4) Сакупљање мишева је започето.
(5) Унутар колекције миша, употреба tag прецизније сугерише да контроле миша припадају колекцији показивача. Колекција показивача је скуп оса који генерише вредност да би усмерио, назначио или показао корисничке намере ка апликацији.
(6) Колекција показивача је покренута.
(7) Страница за коришћење дугмади дефинише улазну ставку састављену од три поља од 1 бита. Свако поље од 1 бита представља дугме миша 1, 2 и 3 респективно и може вратити вредност 0 или 1.
(8) Улазна ставка за страницу за коришћење дугмади је допуњена са 13 других битова.
(9) Још једна генеричка страница за коришћење радне површине је назначена за описивање положаја миша помоћу оса X и Y. Ставка уноса се састоји од два 8-битна поља чија вредност може бити између -127 и 127.
(10) Колекција показивача је затворена.
(11) Збирка мишева је затворена.
USB.org HID страница
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
37/174
Готовоview
Форум за имплементацију USB-а (USB-IF) пружа алатку под називом „HID Descriptor Tool“ заједно са другим информацијама о формату дескриптора извештаја. Више информација потражите на http://www.usb.org/developers/hidpage/.
Водич за програмирање HID класе за USB уређаје
Овај одељак објашњава како се користи HID класа. Иницијализација HID класе USB уређаја Додавање инстанце HID класе USB уређаја вашем уређају Комуникација помоћу HID класе USB уређаја
Иницијализација HID класе USB уређаја
Да бисте додали функционалност HID класе свом уређају, прво морате иницијализовати класу позивањем функције sl_usbd_hid_init(). ПримерampДоњи пример приказује како позвати sl_usbd_hid_init() користећи подразумеване аргументе. За више информација о конфигурационим аргументима који се прослеђују функцији sl_usbd_hid_init(), погледајте Конфигурације специфичне за апликацију класе HID USB уређаја.
Exampле – Позивање sl_usbd_hid_init()
статус sl_status_t;
статус = sl_usbd_hid_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Додавање инстанце HID класе USB уређаја на ваш уређај
Да бисте додали функционалност HID класе свом уређају, морате креирати инстанцу, а затим је додати у конфигурацију(е) свог уређаја.
Креирање инстанце HID класе
Направите инстанцу HID класе позивањем функције sl_usbd_hid_create_instance(). ПримерampДоњи пример приказује како се креира једноставна функција миша помоћу функције sl_usbd_hid_create_instance() користећи подразумеване аргументе. За више информација о аргументима конфигурације који се прослеђују функцији sl_usbd_hid_create_instance(), погледајте Конфигурације инстанце класе HID за USB уређаје.
Exampле – Додавање функције миша путем sl_usbd_hid_create_instance()
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
38/174
Готовоview
/* Глобалне константе. */ статичка константа uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_GLAVNA_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7Ф, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Локалне променљиве.*/ uint8_t class_nbr; sl_status_t status;
сл_усбд_хид_цаллбацкс_т апп_усбд_хид_цаллбацкс = { НУЛЛ, НУЛЛ, апп_усбд_хид_гет_репорт_десц, НУЛЛ, НУЛЛ, НУЛЛ, НУЛЛ, НУЛЛ };
воид апп_усбд_хид_гет_репорт_десц(уинт8_т класа_нбр, цонст уинт8_т **п_репорт_птр, уинт16_т *п_репорт_лен)
{ (void)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
статус = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, true, &app_usbd_hid_callbacks, &class_nbr);
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
39/174
Готовоview
/* Дошло је до грешке. Овде треба додати обраду грешака. *
Додавање инстанце HID класе у конфигурацију(е) вашег уређаја Након што сте креирали инстанцу HID класе, можете је додати у конфигурацију позивањем функције
сл_усбд_хид_додај_у_конфигурацију() .
БившиampДоле је приказано како позвати sl_usbd_hid_add_to_configuration().
Exampле – Позивање sl_usbd_hid_add_to_configuration()
статус sl_status_t;
сл_усбд_хид_додај_у_конфигурацију(класа_број,
(1)
config_nbr_fs); (2)
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
(1) Број класе који треба додати конфигурацији коју враћа sl_usbd_hid_create_instance(). (2) Број конфигурације (овде се додаје конфигурацији пуне брзине).
Комуникација помоћу USB уређаја HID класе
Комуникација са инстанцама класе Синхрона комуникација Комуникација са инстанцама класе Класа HID нуди следеће функције за комуникацију са хостом.
Табела – Резиме HID комуникационог API-ја
Назив функције
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()
Операција Прима податке од хоста преко крајње тачке прекида OUT. Ова функција је блокирајућа. Шаље податке хосту преко крајње тачке прекида IN. Ова функција је блокирајућа.
Синхрона комуникација Синхрона комуникација значи да се пренос блокира. Након позива функције, апликација се блокира док се пренос не заврши са или без грешке. Може се одредити временско ограничење како би се избегло вечно чекање.ampДоња слика приказује читање и писање које прима податке од хоста користећи крајњу тачку прекида OUT и шаље податке хосту користећи крајњу тачку прекида IN.
Exampле – Синхроно ХИД читање и писање
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
уинт32_т
ксфер_лен;
статус_слатка_теста
статус;
статус = sl_usbd_hid_read_sync(class_nbr,
(1)
(void *)rx_buf,
(2)
2у,
0у,
(3)
&xfer_len);
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
40/174
Готовоview
статус =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Дошло је до грешке. Овде треба додати обраду грешака. *
статус =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Дошло је до грешке. Овде треба додати обраду грешака. *
(1) Број инстанце класе креиран помоћу функције sl_usbd_hid_create_instance() пружа интерну референцу за HID класу за усмеравање преноса до одговарајуће крајње тачке прекида OUT или IN.
(2) Апликација мора да осигура да је бафер који се додељује функцији довољно велик да смести све податке. У супротном, могу се јавити проблеми са синхронизацијом. Интерно, операција читања се врши или са контролном крајњом тачком или са крајњом тачком прекида, у зависности од заставице читања контроле постављене приликом позивања sl_usbd_hid_create_instance().
(3) Да би се избегла ситуација бесконачног блокирања, може се одредити време чекања изражено у милисекундама. Вредност 809 чини да задатак апликације чека заувек.
(4) Апликација обезбеђује иницијализовани бафер за пренос.
Задатак HID периодичних извештаја о улазу
Да би уштедео пропусни опсег, хост има могућност да утиша извештаје са крајње тачке прекида IN ограничавањем учесталости извештавања. Да би то урадио, хост мора да пошаље SET_IDLE захтев. HID класа коју имплементира Silicon Labs садржи интерни задатак који поштује ограничење учесталости извештавања које можете применити на један или више улазних извештаја. Слика „Периодични задатак улазних извештаја“ приказује функционисање задатака периодичних улазних извештаја.
Слика – Задатак периодичних извештаја о уносу
(1) Уређај прима SET_IDLE захтев. Овај захтев одређује трајање неактивности за дати ИД извештаја. За више детаља о SET_IDLE захтеву, погледајте
(2) Структура ИД-а извештаја (алоцирана током фазе иницијализације HID класе) ажурира се трајањем мировања. Бројач трајања мировања се иницијализује вредношћу трајања мировања. Структура ИД-а извештаја се убацује на крај повезане листе која садржи улазне структуре ИД-а извештаја. Вредност трајања мировања изражава се у јединици од 4 мс, што даје опсег од 4 до 1020 мс.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
41/174
Готовоview
Ако је трајање мировања мање од интервала испитивања крајње тачке прекида IN, извештаји се генеришу у интервалу испитивања.
(3) Сваких 4 мс, задатак периодичног улазног извештаја прегледа листу ИД-ова улазних извештаја. За сваки ИД улазног извештаја, задатак извршава једну од две могуће операције. Трајање периода задатка подудара се са јединицом од 4 мс која се користи за трајање мировања. Ако хост није послао SET_IDLE захтеве, листа ИД-ова улазних извештаја је празна и задатак нема шта да обради. Задатак обрађује само ИД-ове извештаја који су различити од 0 и чије је трајање мировања веће од 0.
(4) За дати ИД улазног извештаја, задатак проверава да ли је трајање мировања истекло. Ако трајање мировања није истекло, бројач се смањује и хосту се не шаље улазни извештај.
(5) Ако је трајање мировања истекло (то јест, бројач трајања мировања је достигао нулу), улазни извештај се шаље хосту позивањем функције sl_usbd_hid_write_sync() преко крајње тачке прекида IN.
(6) Подаци улазног извештаја које задатак шаље долазе из интерног бафера података додељеног за сваки улазни извештај описан у дескриптору извештаја. Апликациони задатак може позвати функцију sl_usbd_hid_write_sync() да би послао улазни извештај. Након слања података улазног извештаја, sl_usbd_hid_write_sync() ажурира интерни бафер повезан са ИД-ом улазног извештаја подацима који су управо послати. Затим, задатак периодичних улазних извештаја увек шаље исте податке улазног извештаја након сваког истека времена неактивности и док задатак апликације не ажурира податке у интерном баферу. Постоји механизам закључавања како би се избегло оштећење података ИД-а улазног извештаја у случају да се модификација догоди у тачном тренутку преноса који врши задатак периодичног улазног извештаја.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
42/174
Готовоview
Готовоview
USB уређај MSC класа
USB уређај MSC класа прекоview Потребе за ресурсима класе MSC за USB уређај из језгра Конфигурација класе MSC за USB уређај Водич за програмирање класе MSC за USB уређај Драјвери за складиштење података класе MSC за USB уређај
Овај одељак описује класу уређаја за масовно складиштење података (MSC) коју подржава Silicon Labs USB уређај. MSC је протокол који омогућава пренос информација између USB уређаја и хоста. Информације које се преносе су све што се може електронски чувати, као што су извршни програми, изворни код, документи, слике, подаци о конфигурацији или други текстуални или нумерички подаци. USB уређај се појављује као спољни медијум за складиштење података за хост, омогућавајући пренос... fileпутем превлачења и испуштања.
A file систем дефинише како fileсу организовани у медијуму за складиштење. Спецификација класе USB масовног складиштења не захтева никакве посебне file систем који се користи на усаглашеним уређајима. Уместо тога, пружа једноставан интерфејс за читање и писање сектора података користећи транспарентни скуп команди Small Computer System Interface (SCSI). Као такви, оперативни системи могу третирати USB диск као чврсти диск и могу га форматирати са било којим file систем који им се свиђа.
Класа USB уређаја за масовно складиштење података подржава два транспортна протокола, као што следи:
Контролни/групни/прекидни (CBI) транспорт само за групни транспорт (BOT) (користи се само за флопи диск јединице)
Класа уређаја за масовно складиштење података имплементира транспарентни скуп команди SCSI користећи само BOT протокол, што значи да ће се само групне крајње тачке користити за пренос података и информација о статусу. MSC имплементација подржава више логичких јединица.
Имплементација MSC-а је у складу са следећим спецификацијама:
Спецификација класе универзалне серијске магистрале за масовно складиштење података прекоview, Ревизија 1.3 5. септембар 2008. Универзална серijska magistrala, класа за складиштење података, само за групни транспорт, Ревизија 1.0 31. септембар 1999.
USB уређај MSC aCl ss Overview
Крајње тачке протокола Класа захтева Интерфејс малог рачунарског система (SCSI)
Протокол
У овом одељку ћемо размотрити протокол само за групни транспорт (BOT) класе за складиштење података. Протокол само за групни транспорт има три...tagес:
Транспорт команди Транспорт података Транспорт статуса
Команде за масовно складиштење шаље хост преко структуре која се зове Command Block Wrapper (CBW). За команде које захтевају пренос податакаtagе., хост ће покушати да пошаље или прими тачан број бајтова са уређаја како је наведено у пољима дужине и заставице CBW-а. Након што је пренос података завршенtagЕ, хост покушава да прими омотач статуса команде (CSW) са уређаја који детаљно описује статус команде, као и све остатке података (ако
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
43/174
Готовоview
било који). За команде које не укључују пренос податакаtagЕ, хост покушава да прими CSW одмах након што је послат CBW. Протокол је детаљно приказан на слици – MSC протокол.
Слика – MSC протокол
Крајње тачке
На страни уређаја, у складу са BOT спецификацијом, MSC се састоји од следећих крајњих тачака: Пара контролних IN и OUT крајњих тачака које се називају подразумевана крајња тачка. Пар групних IN и OUT крајњих тачака.
Доња табела приказује различите употребе крајњих тачака.
Табела – Употреба MSC крајње тачке
Крајња тачка
Контролни улаз Контролни излаз Буквални улаз Буквални излаз
Правац
Уређај до хоста Хост до уређаја Уређај до хоста Хост до уређаја
Употреба
Набрајање и захтеви специфични за MSC класу Набрајање и захтеви специфични за MSC класу Слање CSW-а и података Примање CBW-а и података
Захтеви за наставу
Постоје два дефинисана захтева за контролу за MSC BOT протокол. Ови захтеви и њихови описи су детаљно описани у табели испод.
Табела – Захтеви за класу масовног складиштења
Захтеви за наставу
Ресетовање масовног складиштења само за велике количине
Опис
Овај захтев се користи за ресетовање уређаја за масовно складиштење података и његовог придруженог интерфејса. Овај захтев припрема уређај за пријем следећег командног блока.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
44/174
Готовоview
Захтеви за наставу
Опис
Get Max Овај захтев се користи за враћање највећег логичког броја јединице (LUN) коју уређај подржава. На примерampле, а
ЛУН
Уређај са LUN 0 и LUN 1 вратиће вредност 1. Уређај са једном логичком јединицом вратиће 0 или ће зауставити
захтев. Максимална вредност која се може вратити је 15.
Интерфејс за мали рачунарски систем SCSI
На нивоу програмског интерфејса, MSC уређај имплементира један од стандардних протокола за комуникацију медија за складиштење података, као што су SCSI и SFF-8020i (ATAPI). „Програмски интерфејс“ одређује који је протокол имплементиран и помаже оперативном систему хоста да учита одговарајући драјвер уређаја за комуникацију са USB уређајем за складиштење података. SCSI је најчешћи протокол који се користи са USB MSC уређајима за складиштење података. Пружамо имплементацију за MSC SCSI подкласу коју наши GSDK корисници могу да користе одмах по инсталацији.
SCSI је скуп стандарда за руковање комуникацијом између рачунара и периферних уређаја. Ови стандарди укључују команде, протоколе, електричне интерфејсе и оптичке интерфејсе. Уређаји за складиштење који користе друге хардверске интерфејсе, као што је USB, користе SCSI команде за добијање информација о уређају/хосту и контролу рада уређаја и пренос блокова података у медијуму за складиштење.
SCSI команде покривају широк спектар типова и функција уређаја и као такве, уређајима је потребан подскуп ових команди. Генерално, следеће команде су неопходне за основну комуникацију:
УПИТ КАПАЦИТЕТ ЧИТАЊА(10) ЧИТАЊЕ(10) ЗАХТЕВ ТЕСТ СЕНЗА ЈЕДИНИЦА СПРЕМНА ЗА ПИСАЊЕ(10)
Потребе за ресурсима класе MSC за USB уређај од стране Core-а
Сваки пут када додате инстанцу MSC класе у USB конфигурацију путем функције sl_usbd_msc_add_to_configuration(), следећи ресурси ће бити додељени из језгра.
Ресурс
Интерфејси Алтернативни интерфејси Крајње тачке Групе интерфејса
Количина
1 1 2 0
Имајте на уму да су ови бројеви по конфигурацији. Приликом подешавања вредности конфигурације SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY и SL_USBD_DESCRIPTOR_QUANTITY, не заборавите да узмете у обзир колико конфигурација ће класа бити додато. За вредност конфигурације SL_USBD_OPEN_ENDPOINTS_QUANTITY, пошто се крајње тачке отварају само када хост подеси конфигурацију, потребно је само да узмете у обзир број потребних крајњих тачака за инстанцу класе.
Конфигурација MSC класе USB уређаја
Две групе конфигурационих параметара се користе за конфигурисање MSC класе:
Конфигурације специфичне за апликацију класе MSC USB уређаја Конфигурација логичке јединице класе MSC USB уређаја
Конфигурације специфичне за апликацију класе MSC USB уређаја
Конфигурације класе током компајлирања, креирање инстанце класе
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
45/174
Готовоview
Конфигурације класе током компајлирања
Класа MSC и подкласа USB уређаја Silicon Labs се могу конфигурисати током компајлирања путем #defines које се налазе у sl_usbd_core_config.h датотеци. file.
Табела – Генеричке конфигурационе константе
Назив конфигурације
Опис
SL_USBD_MSC_CLASS_INST Број инстанци класе које ћете доделити позивом функције
ANCE_QUANTITY
сл_усбд_мсц_сцси_креирај_инстанцу() .
SL_USBD_MSC_CONFIGURA Број конфигурације којој се инстанца класе може додати позивом функције
TION_QUANTITY
функција sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Број логичких јединица по инстанци класе које ћете додати путем позива функције
ГРАДСТВО
функција sl_usbd_msc_scsi_lun_add() .
SL_USBD_MSC_SCSI_64_BIT Омогућава или онемогућава подршку за логичку блок адресу (LBA) од 64 бита.
_LBA_EN
SL_USBD_MSC_DATA_BUFF Величина бафера података по инстанци класе у бајтовима ER_SIZE
Подразумевана вредност
2
1
2
0
512
Креирање инстанце класе
Креирање инстанце класе MSC SCSI за USB уређај се врши позивањем функције sl_usbd_msc_scsi_create_instance(). Ова функција прихвата један конфигурациони аргумент који је описан у наставку.
p_scsi_callbacks
p_scsi_callbacks је показивач на конфигурациону структуру типа sl_usbd_msc_scsi_callbacks_t. Поред уобичајених повратних функција класе USB уређаја connect/disconnect, пружа MSC класи скуп опционих функција повратних функција које се позивају када се догоди догађај на логичкој јединици. Нулти показивач (NULL) може се проследити овом аргументу ако нису потребне повратне функције.
Доња табела описује свако поље конфигурације доступно у овој структури конфигурације.
Табела – структура конфигурације sl_usbd_msc_scsi_callbacks_t
Поља
Опис
.омогућити
Позива се када је инстанца USB класе успешно омогућена.
.disable Позива се када је инстанца USB класе онемогућена.
.host_eject Функција се позива када се логичка јединица избаци са хоста.
Потпис функције
воид апп_усбд_мсц_сцси_енабле(уинт8_т класа_нбр);
воид апп_усбд_мсц_сцси_дисабле(уинт8_т класа_нбр); воид апп_усбд_мсц_сцси_хост_ејецт(уинт8_т класа_нбр, уинт8_т лу_нбр);
Конфигурација логичке јединице USB уређаја MSC класе
Додавање логичке јединице инстанци MSC класе врши се позивањем функције sl_usbd_msc_lun_add(). Ова функција прихвата један конфигурациони аргумент који је описан у наставку.
p_lu_info
p_lu_info је показивач на структуру типа sl_usbd_msc_scsi_lun_info_t. Његова сврха је да пружи информације о логичкој јединици MSC класи.
Доња табела описује свако поље конфигурације доступно у овој структури конфигурације.
Табела – sl_usbd_msc_scsi_lun_info_t Структура конфигурације
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
46/174
Готовоview
Поље
Опис
Поље
.scsi_lun_api_p tr
Опис
Показивач на API медијског драјвера који ће обрадити ову логичку јединицу. Погледајте USB уређај MSC класе драјвери за складиштење за више информација о драјверима за складиштење.
.ве нд о р_ид _ п тр
.product_id_ptr
.продукт_ревизија_на_нивоу .је_само_читање
Показивач на стринг који садржи идентификацију добављача логичке јединице. Максимална дужина стринга је 8 знакова. Показивач на стринг који садржи идентификацију производа логичке јединице. Максимална дужина стринга је 16 знакова. Ниво ревизије производа.
Заставица која показује да ли логичка јединица треба да се посматра као само за читање са тачке view домаћина (тачно) или не (нетачно).
Водич за програмирање MSC класе са USB уређајем
Овај одељак објашњава како се користи MSC класа.
Иницијализација MSC класе USB уређаја Додавање инстанце MSC SCSI класе USB уређаја вашем уређају Руковање логичким јединицама MSC класе USB уређаја
Иницијализација MSC класе USB уређаја
Да бисте додали функционалност MSC SCSI класе вашем уређају, прво иницијализујте основну MSC класу и SCSI подкласу позивањем функција sl_usbd_msc_init() и sl_usbd_msc_scsi_init().
БившиampДоле је приказано како позвати sl_usbd_msc_init() и sl_usbd_msc_scsi_init().
Exampле – Позивање sl_usbd_msc_init() и sl_usbd_msc_scsi_init()
статус sl_status_t;
статус = sl_usbd_msc_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
статус = sl_usbd_msc_scsi_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
Додавање инстанце класе MSC SCSI USB уређаја на ваш уређај
Да бисте додали функционалност MSC SCSI класе свом уређају, прво креирајте инстанцу, а затим је додајте у конфигурацију(е) свог уређаја. Морате додати барем једну логичку јединицу својој инстанци.
Креирање инстанце MSC SCSI класе
Направите инстанцу MSC SCSI класе позивањем функције sl_usbd_msc_scsi_create_instance().
БившиampДоњи пример приказује како позвати sl_usbd_msc_scsi_create_instance() користећи подразумеване аргументе. За више информација о аргументима конфигурације који се прослеђују функцији sl_usbd_msc_scsi_create_instance(), погледајте Конфигурације специфичне за апликацију класе USB Device MSC.
Exampле – Позивање sl_usbd_ msc_scsi_create_instance()
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
47/174
Готовоview
uint8_t class_nbr; sl_status_t статус;
сл_усбд_мсц_сцси_цаллбацкс_т апп_усбд_мсц_сцси_цаллбацкс = { .енабле = НУЛЛ, .дисабле = НУЛЛ, .хост_ејецт = НУЛЛ };
статус = сл_усбд_мсц_сцси_цреате_инстанце(&апп_усбд_мсц_сцси_цаллбацкс,0 &цлас_нбр);
ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Додавање инстанце MSC класе у конфигурацију(е) вашег уређаја
Након што сте креирали инстанцу MSC класе, можете је додати конфигурацији позивањем функције
сл_усбд_мсц_додај_у_конфигурацију() .
БившиampДоле је приказано како позвати sl_usbd_msc_scsi_add_to_configuration() користећи подразумеване аргументе.
Exampле – Позивање sl_usbd_ msc_scsi_add_to_configuration()
статус sl_status_t;
статус = sl_usbd_msc_scsi_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
(1) Број класе који треба додати конфигурацији коју враћа sl_usbd_msc_scsi_create_instance(). (32) Број конфигурације (овде се додаје конфигурацији пуне брзине).
Руковање логичким јединицама класе MSC USB уређаја
Додавање логичке јединице Прикључивање/одвајање медијума за складиштење
Додавање логичке јединице
Приликом додавања логичке јединице вашој инстанци MSC SCSI класе, она мора бити повезана са медијумом за складиштење (RAM диск, SD картица, флеш меморија итд.). MSC класа користи драјвер за складиштење да би комуницирала са медијумом за складиштење. Овај драјвер ће морати да се обезбеди приликом додавања логичке јединице.
БившиampДоња слика приказује како додати логичку јединицу путем функције sl_usbd_msc_scsi_lun_add().
Example – Додавање логичке јединице путем sl_usbd_msc_scsi_lun_add()
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
48/174
Готовоview
сл_усбд_мсц_сцси_лун_т *лу_објецт_птр = НУЛЛ;
сл_усбд_мсц_сцси_лун_инфо_т лу_инфо;
статус_слатка_теста
статус;
лу_инфо.сл_усбд_мсц_сцси_лун_апи_т = &апп_усбд_сцси_стораге_блок_девице_апи;
lu_info.vendor_id_ptr
= „Силицијумске лабораторије“;
lu_info.product_id_ptr
= „блок уређај нпр.ampле”;
лу_инфо.продукт_ревисион_левел = 0x1000у;
lu_info.is_read_only
= нетачно;
статус = сл_усбд_мсц_сцси_лун_адд(цласс_нбр, &лу_инфо, &лу_објецт_птр);
ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Прикључивање/одвајање медијума за складиштење
Након што је логичка јединица додата, медијум за складиштење података мора бити повезан да би био доступан са стране хоста. MSC класа нуди две функције за контролу повезивања медија за складиштење података са логичком јединицом: sl_usbd_msc_scsi_lun_attach() и sl_usbd_msc_scsi_lun_detach(). Ове функције вам омогућавају да емулирате уклањање уређаја за складиштење података како бисте поново добили приступ из уграђене апликације ако је потребно.
БившиampДоња слика приказује како се користе функције sl_usbd_msc_scsi_lun_attach() и sl_usbd_msc_scsi_lun_detach().
Exampле – Прикључивање/одвајање медија
статус sl_status_t;
статус = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */
}
…
(1)
статус = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
…
(2)
статус = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
…
(3)
(1) Од овог тренутка, ако је MSC уређај повезан са хостом, медијум за складиштење је доступан.
(2) Ако је MSC уређај повезан са хостом, медијум ће се сада приказивати као недоступан. У овом тренутку, операције на медијуму се могу обављати из уграђене апликације.
(3) Поново, ако је MSC уређај повезан са хостом, медијум за складиштење ће се појавити као повезан.
Драјвери за складиштење података класе MSC за USB уређаје
USB уређају MSC класе је потребан драјвер за складиштење података да би комуницирао са медијумом за складиштење података. Тренутно, Silicon Labs не нуди драјвере.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
49/174
Готовоview
TPY аа драјвер AI је дефинисан помоћу typedef sl_usbd_msc_scsi_lun_api_t. Наш sl_usbd_msc_scsi_lun_api_t v ri ble мора бити укључен у ваш sl_usbd_msc_scsi_lun_info_t v ri ble, psed s аргумент када додајете логичку јединицу са sl_usbd_msc_scsi_lun_add(). Погледајте одељак USB Device MSC SCSI API за више детаља о структурама. Имплементација драјвера за складиштење може бити једноставна као низ сектора у RAM меморији. Типична величина сектора (тј. величина блока) је 512 за уређаје за масовно складиштење и 2048 за CD-ROM-ове.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
50/174
Готовоview
Готовоview
Класа произвођача USB уређаја
Класа произвођача USB уређаја прекоview Потребе за ресурсима класе произвођача USB уређаја из језгра Конфигурација класе произвођача USB уређаја Водич за програмирање класе произвођача USB уређаја Класа произвођача вам омогућава да направите уређаје специфичне за произвођача који могу да имплементирају власнички протокол. Ослања се на пар групних крајњих тачака за пренос података између хоста и уређаја. Групни преноси су погодни за пренос великих количина неструктурираних података и обезбеђују поуздану размену података коришћењем механизма за откривање грешака и поновни покушај. Поред групних крајњих тачака, класа произвођача може користити и опциони пар крајњих тачака прекида. Било који оперативни систем (ОС) може да ради са класом произвођача под условом да ОС има драјвер за руковање класом произвођача. У зависности од ОС-а, драјвер може бити изворни или специфичан за произвођача. На пример, под оперативним системом Microsoft Windows®, ваша апликација комуницира са WinUSB драјвером који је обезбедио Microsoft да би комуницирала са уређајем произвођача.
Класа произвођача USB уређаја прекоview
Слика – Општа архитектура између Windows хоста и класе вендора приказује општу архитектуру између хоста и уређаја користећи класу вендор. У овом примеруampтј., главни оперативни систем је MS Windows.
Слика – Општа архитектура између MS Windows хоста и класе произвођача
На страни MS Windows-а, апликација комуницира са уређајем произвођача интеракцијом са USB библиотеком. Библиотеке, попут libusb, нуде API за управљање уређајем и његовим повезаним цевима, као и за комуникацију са уређајем путем контролних, групних и прекидних крајњих тачака.
На страни уређаја, класа Vendor се састоји од следећих крајњих тачака:
Пар контролних УЛАЗНИХ и ИЗЛАЗНИХ крајњих тачака названих подразумевана крајња тачка. Пар групних УЛАЗНИХ и ИЗЛАЗНИХ крајњих тачака.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
51/174
Готовоview
Пар крајњих тачака прекида УЛАЗА и ИЗЛАЗА. Овај пар је опционалан. Табела испод приказује употребу различитих крајњих тачака:
Табела – Употреба крајњих тачака класе добављача
Смер крајње тачке
Цонтрол ИН
Контрола
ОУТ
Масовно УНОШЕЊЕ
Уређај-ка-хост
>Од хоста до уређаја
Уређај-ка-хост
Масовно избацивање
Прекид улаз
Прекини
ОУТ
Од хоста до уређаја
Уређај-ка-хост
Од хоста до уређаја
Употреба
Стандардни захтеви за набрајање и захтеви специфични за добављача.
Стандардни захтеви за набрајање и захтеви специфични за добављача.
Комуникација сирових података. Подаци могу бити структурирани према власничком протоколу.
Комуникација сирових података. Подаци могу бити структурирани према власничком протоколу.
Комуникација или обавештавање сирових података. Подаци могу бити структурирани према власничком протоколу. Комуникација или обавештавање сирових података. Подаци могу бити структурирани према власничком протоколу.
Апликација уређаја може да користи крајње тачке за групно слање и прекидање података за слање или примање података ка или од хоста. Може да користи само подразумевану крајњу тачку за декодирање захтева специфичних за добављача које шаље хост. Стандардним захтевима интерно управља основни слој Silicon Labs USB уређаја.
Потребе за ресурсима класе добављача USB уређаја од стране Core-а
Сваки пут када додате инстанцу класе добављача у конфигурацију путем функције sl_usbd_vendor_add_to_configuration(), следећи ресурси ће бити додељени из језгра.
Ресурс
Интерфејси Алтернативни интерфејси Крајње тачке Групе интерфејса
Количина
1 1 2 (4 ако сте омогућили крајње тачке прекида) 0
Имајте на уму да су ови бројеви по конфигурацији. Приликом подешавања вредности конфигурације SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY и SL_USBD_DESCRIPTOR_QUANTITY, не заборавите да узмете у обзир колико конфигурација ће класа бити додато. За вредност конфигурације SL_USBD_OPEN_ENDPOINTS_QUANTITY, пошто се крајње тачке отварају само када хост подеси конфигурацију, потребно је само да узмете у обзир број потребних крајњих тачака за инстанцу класе.
Конфигурација класе произвођача USB уређаја
Две групе конфигурационих параметара се користе за конфигурисање класе Продавац:
Конфигурације специфичне за апликацију класе произвођача USB уређаја Конфигурације инстанци класе произвођача USB уређаја
Конфигурације специфичне за апликацију класе произвођача USB уређаја
Прво, да бисте користили модул класе „Vendor“ USB уређаја компаније Silicon Labs, подесите дефиниције конфигурације Vendor током компајлирања према потребама ваше апликације. Оне су прегруписане унутар заглавља sl_usbd_core_config.h. file у одељку Продавац. Сврха конфигурације количине је да обавести модул USB уређаја о томе колико USB објеката Продавац треба да додели.
Доња табела описује сваку дефиницију конфигурације.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
52/174
Готовоview
Табела – Дефиниције конфигурације произвођача USB уређаја
Назив конфигурације
Опис
Подразумевана вредност
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Број инстанци класе које ћете доделити позивом функције 2 sl_usbd_vendor_create_instance().
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Број конфигурација. Инстанце класе добављача могу се додати једној или више конфигурација позивом функције sl_usbd_vendor_add_to_configuration().
Конфигурације инстанци класе произвођача USB уређаја
Овај одељак дефинише конфигурације везане за инстанце класе Vendor.
Креирање инстанце класе intr_en интервал p_vendor_callbacks
Креирање инстанце класе
Креирање инстанце класе Vendor се врши позивањем функције sl_usbd_vendor_create_instance(), која узима три конфигурациона аргумента описана у наставку.
intr_en
Булова вредност која показује да ли треба додати пар крајњих тачака прекида или не.
Валуе
истина лажно
Опис
Пар IN/OUT крајњих тачака ће бити додат и доступан уграђеној апликацији. Неће бити додата ниједна крајња тачка за прекид. Биће доступан само пар Bulk IN/OUT крајњих тачака.
интервал
Ако поставите intr_en на true, можете одредити интервал испитивања крајњих тачака прекида (у милисекундама). Ако поставите intr_en на false, можете подесити interval на 0 јер ће га класа игнорисати.
p_vendor_callbacks
p_vendor_callbacks је показивач на структурну променљиву функције повратног позива коју можете навести за обраду захтева за контролу специфичних за класу. Ако не користите никакве захтеве специфичне за класу или вам је потребно омогућити/онемогућити обавештења, можете ово поставити на NULL.
БившиampДоња датотека пружа очекивани потпис вашег обрађивача захтева специфичних за класу.
Example – Потпис функције захтева специфичног за класу
воид апп_усбд_вендор_рек_хандел(уинт8_т
класа_број, (1)
конст 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) Број инстанце класе добављача.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
53/174
Готовоview
(2) Показивач на примљени захтев за подешавање од хоста.
Водич за програмирање класе произвођача USB уређаја
Овај одељак објашњава како се користи класа Vendor. Иницијализација класе Vendor USB уређаја Додавање инстанце класе Vendor USB уређаја вашем уређају Комуникација помоћу класе Vendor USB уређаја
Иницијализација класе произвођача USB уређаја
Да бисте додали функционалност класе произвођача свом уређају, прво иницијализујте класу позивањем функције USBD_Vendor_Init(). ПримерampДоле је приказано како позвати sl_usbd_vendor_init().
Exampле – Позивање sl_usbd_vendor_init()
статус sl_status_t;
статус = sl_usbd_vendor_init(); ако (статус ! SL_STATUS_OK) { /* Дошло је до грешке. Овде треба додати обраду грешака. */ }
Додавање инстанце класе произвођача USB уређаја на ваш уређај
Да бисте додали функционалност класе добављача на свој уређај, прво морате да креирате инстанцу, а затим је додате у конфигурацију(е) свог уређаја.
Креирање инстанце класе добављача Додавање инстанце класе добављача конфигурацији(ама) вашег уређаја
Креирање инстанце класе добављача
Направите инстанцу класе Vendor позивањем функције sl_usbd_vendor_create_instance(). ПримерampДоњи пример приказује како позвати sl_usbd_vendor_create_instance() користећи подразумеване аргументе. За више информација о аргументима конфигурације који се прослеђују функцији sl_usbd_vendor_create_instance(), погледајте Конфигурације инстанце класе произвођача USB уређаја.
Exampле – Позивање sl_usbd_vendor_create_instance()
uint8_t class_nbr; sl_status_t статус;
статус = sl_usbd_vendor_create_instance(false,
(1)
0у,
(2)
функција_повратног_повратног_позива_апликације_апликације_usbd_vendor, (3)
&класа_број);
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
(1) Нема крајњих тачака прекида са овом инстанцом класе. (2) Интервал се игнорише јер су крајње тачке прекида онемогућене.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
54/174
Готовоview
(3) Функција повратног позива која је део ваше апликације и која обрађује захтеве за класе специфичне за произвођача. Више информација потражите у одељку Комуникација помоћу класе произвођача USB уређаја. Додавање инстанце класе произвођача конфигурацији(ама) вашег уређаја Након што сте креирали инстанцу класе произвођача, можете је додати конфигурацији позивањем функције USBD_Vendor_ConfigAdd(). ЕксперименталниampДоле је приказано како позвати sl_usbd_vendor_add_to_configuration() користећи подразумеване аргументе.
Exampле – Позивање sl_usbd_vendor_add_to_configuration()
статус sl_status_t;
статус = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
ако (статус ! SL_STATUS_OK) {
/* Дошло је до грешке. Овде треба додати обраду грешака. */
}
(1) Број класе који треба додати конфигурацији коју враћа sl_usbd_vendor_create_instance(). (2) Број конфигурације (овде се додаје конфигурацији пуне брзине).
Комуникација помоћу класе произвођача USB уређаја
Општа синхрона комуникација Асинхрона комуникација Захтев добављача Опште Класа добављача нуди следеће функције за комуникацију са хостом. За више детаља о параметрима функције, погледајте USB Device Vendor API.
Table – Vendor Communication API Summary
Назив функције
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-
блокирање.
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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
55/174
Готовоview
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];
уинт32_т
ксфер_лен;
статус_слатка_теста
статус;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2у,
0у,
(3)
&xfer_len);
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2у,
0у,
(3)
false,
(5)
&xfer_len);
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
(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) Апликација обезбеђује иницијализовани бафер за пренос.
(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.
Асинхрона комуникација
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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
56/174
Готовоview
void app_usbd_vendor_comm (uint8_t class_nbr)
{
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
статус_слатка_теста
статус;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2у,
app_usbd_vendor_rx_completed,
NULL);
(4)
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2у,
app_usbd_vendor_tx_completed,
НУЛА,
(4)
false);
(6)
ако (статус ! SL_STATUS_OK) {
/* $$$$ Обради грешку. */
}
}
(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)
{
ако (статус ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} остало {
/* $$$$ Обради грешку. */
}
}
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)
{
ако (статус ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} остало {
/* $$$$ Обради грешку. */
}
}
(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.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
57/174
Готовоview
(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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
58/174
Готовоview
#define APP_VENDOR_REQ_NO_DATA
0к01у
#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
50у
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;
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],
'А',
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;
подразумевано:
(6)
// Request is not supported.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
59/174
Готовоview
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):
типедеф струцт {
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 stagе пресент.
*/
} 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.
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
60/174
АПИ документација
АПИ документација
АПИ документација
Списак модула
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
Опис
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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
61/174
USB Device API
USB Device API
USB Device API
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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
62/174
USB Device ACM API
USB Device ACM API
USB Device ACM API
USB Device CDC ACM API.
Модули
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_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).
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
63/174
USB Device ACM API
Макрои
#define SL_USBD_CDC_ACM_NBR_NONE 255u
МОДУЛ.
#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
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
64/174
USB Device ACM API
Тип
воид
Direction N/A
Argument Name
MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS
Initialize the CDC ACM serial emulation subclass.
Повратак
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
Опис
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.
Параметерс
Тип
уинт16_т
уинт16_т
Direction Argument Name
Опис
Н/А
line_state_interval Line state notification interval in milliseconds (value must
be a power of 2).
Н/А
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
*
уинт8_т *
Н/А
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.
Повратак
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.
Параметерс
Тип
уинт8_т уинт8_т
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.
Повратак
Ауторска права © 2025 Силицон Лабораториес. Сва права задржана.
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.
Параметерс
Тип
Правац
Argument Name
Опис
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
Документи / Ресурси
![]() |
SILICON LABS USB Device Stack [пдф] Упутство за употребу USB Device Stack, Device Stack, Stack |