
Стэк USB-прылад SILICON LABS
![]()
Тэхнічныя характарыстыкі
- Версія USB: 1.5.1
- Дата выхаду: 21 ліпеня 2025 г
- Версія пакета SDK Simplicity: 2025.6.1
Прадукт скончаныview
Стэк USB-прылад ад Silicon Labs забяспечвае універсальнае і простае ў выкарыстанні падключэнне USB для праектаў Інтэрнэту рэчаў, спрашчаючы сувязь паміж сеткавымі супрацэсарамі і хостамі.
Асаблівасці
- Эфектыўны стэк USB-прылад
- Ідэальна падыходзіць для праектаў Інтэрнэту рэчаў
- Падтрымка сувязі паміж сеткавымі супрацэсарамі і хастамі
Канфігурацыя прылады USB
Наладзьце параметры прылады USB у адпаведнасці з патрабаваннямі вашага праекта, звярнуўшыся да раздзела "Канфігурацыя прылады USB" у дакументацыі.
Кіраўніцтва па праграмаванні USB-прылад
Выконвайце інструкцыі па праграмаванні USB-прылад, каб зразумець, як праграмаваць USB-прыладу і ўзаемадзейнічаць з ёй для розных задач.
Класы прылад USB
У раздзеле "Класы прылад USB" прадстаўлены большview розных класаў, такіх як CDC ACM, HID, MSC SCSI і клас пастаўшчыка. Выберыце адпаведны клас у залежнасці ад функцыянальнасці вашай прылады.
Непаладак USB-прылад
Калі ў вас узнікнуць праблемы з прыладай USB, звярніцеся да раздзела «Ліквідацыя непаладак прылад USB», каб знайсці рашэнні і парады па адладцы.
Заўвагі да выпуску USB
Тэхнічныя характарыстыкі і асаблівасціview
Канфігурацыя прылады USB скончанаview
Кіраўніцтва па праграмаванні USB-прыладview
Класы прылад USB больш заview Клас CDC ACM скончыўсяview Клас HID большыview Клас MSC SCSI скончаныview Клас пастаўшчыка большы заview
![]()
API USB Дакументацыя па API API прылад USB API ACM прылад USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t API CDC прылад USB a sl_usbd_cdc_subcl ss_driver_t API ядра прылад USB
sl_usbd_device_config_t sl_usbd_setup_req_t
API HID USB-прылад sl_usbd_cl ss_driver_t
API MSC для USB-прылад sl_usbd_hid_callbacks_t
API sl_usbd_msc_subcl ss_driver_t USB-прылады MSC SCSI
sl_usbd_msc_scsi_callbacks_t
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
![]()
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 Silicon Laboratories. Усе правы ахоўваюцца.
2/174
Скончанаview
Скончанаview
USB прылада![]()
USB — адзін з самых паспяховых камунікацыйных інтэрфейсаў у гісторыі камп'ютэрных сістэм і фактычны стандарт для падключэння камп'ютэрнай перыферыі. Стэк USB-прылад Silicon Labs — гэта модуль USB-прылад, распрацаваны спецыяльна для ўбудаваных сістэм. Створаны з нуля з улікам якасці, маштабаванасці і надзейнасці Silicon Labs, ён прайшоў строгі працэс праверкі на адпаведнасць спецыфікацыі USB 2.0. У гэтай дакументацыі апісваецца, як ініцыялізаваць, запускаць і выкарыстоўваць стэк USB-прылад Silicon Labs. У ёй тлумачацца розныя значэнні канфігурацыі і іх выкарыстанне. Яна таксама ўключае больш падрабязнае апісанне...view тэхналогіі, тыпы магчымасцей канфігурацыі, працэдуры рэалізацыі і эксampменш тыповага выкарыстання для кожнага даступнага класа.
![]()
Каб дапамагчы вам хутка зразумець канцэпцыі USB, у дакументацыі прыведзена мноства прыкладаўampдыскі USB з асноўнымі функцыямі. Гэтыя былыяamples дасць вам фрэймворк, які дазволіць вам хутка ствараць прылады. Гэтыя былыяampўключаюць у сябе:
Адаптар USB-паслядоўны порт (клас прылад сувязі) Мыш або клавіятура (клас прылад інтэрфейсу чалавека) Здымная прылада захоўвання дадзеных (клас масавых назапашвальнікаў) Карыстальніцкая прылада (клас пастаўшчыка)
Наступнае - канецview раздзелаў дакументацыі:
Тэхнічныя характарыстыкі і функцыі Канфігурацыя прылады USB Кіраўніцтва па праграмаванні прылады USB Класы прылад USB
Клас CDC ACM Клас HID Клас MSC Клас SCSI Клас пастаўшчыка Пошук і ліквідацыя непаладак USB-прылад Аперацыйная сістэма Microsoft Windows USB-хост
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
3/174
USB
USB![]()
USB-версія 1.5.1, 21 ліпеня 2025 г. – Заўвагі да выпуску
Версія пакета SDK Simplicity 2025.6.1
Эфектыўны стэк USB-прылад ад Silicon Labs прапануе універсальнае і простае ў выкарыстанні падключэнне USB, ідэальнае для праектаў Інтэрнэту рэчаў, у тым ліку для сувязі паміж сеткавымі супрацэсарамі і хостамі. Націсніце тут, каб азнаёміцца з папярэднімі рэлізамі.
Рэзюмэ выпуску
Асноўныя характарыстыкі | Змены API | Выпраўленні памылак | Уключэнне чыпа
Асноўныя характарыстыкі
Толькі змены базавай платформы.
Змены API
Няма.
Выпраўленні памылак
Няма.
Уключэнне чыпа
Няма.
Асноўныя характарыстыкі
Новыя функцыі | Паляпшэнні | Выдаленыя функцыі | Састарэлыя функцыі
Новыя функцыі
Няма.
Паляпшэнні
Толькі змены базавай платформы.
Выдаленыя функцыі
Няма.
Састарэлыя функцыі
Няма.![]()
Змены API
Новыя API | Змененыя API | Выдаленыя API | Састарэлыя API
Новыя API
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
4/174
USB
Няма.
Змененыя API
Няма.
Выдаленыя API
Няма.
Састарэлыя API
Няма.
Выпраўленні памылак
Няма.
Уключэнне чыпа
Няма.
Ужыванне Exampзмены
Новы эксampле | Мадыфікаваны Exampлес | Выдалены былыampлес | Састарэлы Exampлес
Новы эксampлес
Няма.
Зменены Exampлес
Няма.
Выдалены Exampлес
Няма.
Састарэлы Exampлес
Няма.
Уплыў змяненняў у рэлізе
Заявы аб уплыве | Кіраўніцтва па міграцыі
Заявы аб уздзеянні
Няма.
Кіраўніцтва па міграцыі
Няма.
Вядомыя праблемы і абмежаванні
Няма.
Выкарыстанне гэтага выпуску
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
5/174
USB
Што ўваходзіць у рэліз? | Сумяшчальнае праграмнае забеспячэнне | Усталёўка і выкарыстанне | Даведка і водгукі
Што ўваходзіць у рэліз?
Прыкладанне стэка USB-прыладampлес
Сумяшчальнае праграмнае забеспячэнне
праграмнае забеспячэнне
Simplicity SDK, Simplicity Studio, Simplicity Commander GCC (калекцыя кампілятараў GNU), 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. Каб атрымаць адказы з дапамогай нашага інструмента «Спытайце ў штучнага інтэлекту», скарыстайцеся полем пошуку ўверсе гэтай старонкі.
Заўвага: функцыя «Спытай у штучным інтэлекце» з'яўляецца эксперыментальнай.
Атрымайце дапамогу ад нашай супольнасці распрацоўшчыкаў.
Палітыка выпуску і абслугоўвання SDK
Глядзіце нашу Палітыку выпуску і падтрымкі SDK.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
6/174
Скончанаview
Скончанаview
Тэхнічныя характарыстыкі
Адпавядае «Спецыфікацыі універсальнай паслядоўнай шыны, версія 2.0». Рэалізуе «Паведамленне аб інжынерных зменах у дэскрыптары асацыяцыі інтэрфейсаў (ECN)». Тыпы перадачы
Класы USB для кіравання масавымі перапыненнямі Клас камунікацыйных прылад (CDC) Абстрактная мадэль кіравання (ACM) Прылада інтэрфейсу чалавека (HID) Клас масавай памяці (MSC) Спецыяльная структура класаў пастаўшчыка
Асаблівасці
Маштабуецца для ўключэння толькі неабходных функцый, каб мінімізаваць выкарыстанне памяці. Падтрымка поўнай хуткасці (12 Мбіт/с). Падтрымка кампазітных (шматфункцыянальных) прылад. Падтрымка прылад з некалькімі канфігурацыямі. Падтрымка функцый энергазберажэння USB (прыпыненне і аднаўленне працы прылады). Поўная інтэграцыя класа Mass Storage у аперацыйную сістэму Micrium. File Сістэмны модуль распрацаваны з выкарыстаннем узроўню абстракцыі CMSIS-RTOS2 для працы з рознымі аперацыйнымі сістэмамі. Silicon Labs GSDK пастаўляецца з портамі FreeRTOS і Micrium OS.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
7/174
Скончанаview
Скончанаview
Канфігурацыя прылады USB
У гэтым раздзеле апісваецца, як наладзіць USB-прыладу Silicon Labs. Існуюць тры групы параметраў канфігурацыі:
Канфігурацыя ядра прылады USB Канфігурацыя інфармацыі пра прыладу USB Канфігурацыя абсталявання прылады USB
Канфігурацыя ядра прылады USB
USB-прыладу Silicon Labs можна наладзіць падчас кампіляцыі з дапамогай набору #defines, размешчаных у sl_usbd_core_config.h. fileUSB-прылада выкарыстоўвае #defines, калі гэта магчыма, таму што яны дазваляюць маштабаваць памеры кода і дадзеных падчас кампіляцыі ў залежнасці ад уключаных функцый. Гэта дазваляе карэктаваць памеры памяці толькі для чытання (ROM) і памяці з выпадковым доступам (RAM) USB-прылады Silicon Labs у залежнасці ад патрабаванняў вашага прыкладання.
Рэкамендуецца: пачніце працэс канфігурацыі са значэннямі па змаўчанні (выдзелены тлустым шрыфтам).
Раздзелы ніжэй арганізаваны ў адпаведнасці з парадкам у канфігурацыі шаблону fileФайл sl_usbd_core_config.h.
Канфігурацыя асноўных класаў канфігурацыі
Канфігурацыя ядра
Табліца – Канстанты канфігурацыі ядра прылады USB
Апісанне канстанты
Значэнне па змаўчанні
Памер стэка SL_USBD_TA SK_STACK_
Наладжвае памер стэка ў байтах асноўнай задачы USBD
4096
SL_USBD_TA SK_PRIORIT Y
Наладжвае прыярытэт асноўнай задачы USBD. Гэта прыярытэт CMSIS-RTOS2.
Высокі прыярытэт аперацыйнай сістэмы
SL_USBD_A АЎТАМАТЫЧНЫ_ПУСК _USB_ПРЫЛАДЫ E
Калі ўключана, USB-прылада будзе аўтаматычна запушчана пасля запуску ядра, і гэтая асноўная задача USBD будзе запланавана на першы раз. Калі выключана, вашаму прыкладанню трэба будзе выклікаць sl_usbd_core_start_device(), калі яно будзе гатова да выяўлення USB-хостам.
SL_USBD_C Агульная колькасць канфігурацый, якія будуць дададзеныя праз sl_usbd_add_configuration()
1
Функцыя ОНФІГУРАЦЫ.
КОЛЬКАСЦЬ
TY
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
8/174
Скончанаview
Пастаянная
SL_USBD _INTERFACE_QU ANTITY
SL_USBD _ALT_INT ПЕРАХОДНАЯ КОЛЬКАСЦЬ
TY
SL_USBD _INTERF ACE_GR
OUP_QU
АНТЫЦЫЯ
SL_USBD _DESCRI
PTOR_Q
УАНТЫТЫ
SL_USBD _STRUG _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. Больш падрабязную інфармацыю пра тое, як атрымаць ідэнтыфікатар пастаўшчыка, глядзіце на сайце http://www.usb.org/developers/vendor/. Ідэнтыфікацыйны нумар вашага прадукту.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
9/174
Скончанаview
Пастаянная
Апісанне
SL_USBD_DEVICE_RELEASE Нумар выпуску вашай прылады. _NUMBER
SL_USBD_DEVICE_MANUFA Радок, які апісвае вытворцу вашай прылады. Гэтая канфігурацыя ігнаруецца, калі
CTURER_STRING
канфігурацыя SL_USBD_STRING_QUANTITY мае значэнне 0.
SL_USBD_DEVICE_PRODUC Радок, які апісвае ваш прадукт. Гэтая канфігурацыя ігнаруецца, калі канфігурацыя
T_STRING
SL_USBD_STRING_QUANTITY мае значэнне 0.
SL_USBD_DEVICE_SERIAL_N Радок, які змяшчае серыйны нумар вашай прылады. Гэтая канфігурацыя ігнаруецца, калі
NUMBER_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.
Пастаянная
ПОРТ_ДРАЙВЕРА_ВЫБУСА_СЭНС_SL_USBD ПІН-КОД_ДРАЙВЕРА_ВЫБУСА_СЭНС
Апісанне
Порт GPIO для сігналу USB VBUS Sense на вашай плаце. Вывад GPIO для сігналу USB VBUS Sense на вашай плаце.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
10/174
Скончанаview
Скончанаview
Кіраўніцтва па праграмаванні USB-прылад
У гэтым раздзеле тлумачыцца, як карыстацца модулем USB-прылады.
Пачатковая налада модуля USB-прылады
У гэтым раздзеле апісаны асноўныя крокі, неабходныя для ініцыялізацыі модуля USB-прылады, а таксама для дадання, падрыхтоўкі і запуску прылады. Ініцыялізацыя модуля USB-прылады Ініцыялізацыя ядра USB-прылады Ініцыялізацыя aCl ss Даданне USB-прылады Стварэнне USB-прылады Даданне канфігурацыі Даданне функцый USB Запуск USB-прылады
Функцыі перахопніка падзей
Ініцыялізацыя модуля прылады USB
Ініцыялізацыя ядра прылады USB
Пачніце з ініцыялізацыі ядра модуля прылады B, выклікаўшы функцыю sl_usbd_core_init(). Прыклад ніжэй паказвае выклік sl_usbd_core_init().
Example – Выклік sl_usbd_core_init()
status sl_status_t; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
Ініцыялізацыя класа(аў)
Пасля ініцыялізацыі ядра модуля USB-прылады неабходна ініцыялізаваць кожны клас, які вы збіраецеся выкарыстоўваць. Больш падрабязную інфармацыю глядзіце ў раздзеле «Кіраўніцтва па праграмаванні» вашага(-іх) спісу(-аў) доступу (ACL).
Зборка USB-прылады
Дадаванне канфігурацыі(й)
Пасля паспяховай ініцыялізацыі прылады вы можаце пачаць дадаваць да яе функцыі USB, пачынаючы з новай канфігурацыі. Прылада павінна мець хаця б адну канфігурацыю. Каб дадаць канфігурацыю(і), выклічце функцыю sl_usbd_core_dd_configuration(). Гэтую функцыю неабходна выклікаць для кожнай канфігурацыі, якую вы хочаце дадаць. НапрыкладampНіжэй паказана, як дадаць поўную хуткасць.
Example – Даданне канфігурацыі(й) на вашу прыладу
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
11/174
Скончанаview
статус sl_status_t; uint8_t config_nbr_fs;
/* Даданне поўнахуткаснай канфігурацыі да прылады. */
статус = sl_usbd_core_add_configuration(0,
/* Няма спецыяльных атрыбутаў для канфігурацыі. */
100u,
/* Максімальная спажываная магутнасць: 100 мА.
*/
Хуткасць_прылады_SL_USBD_поўная,
/* Канфігурацыя поўнай хуткасці.
*/
«Наладзіць даданне Ex»ampканфігурацыя "Поўная хуткасць"
&канфігурацыйны_нбр_фс);
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
Даданне функцыі(й) USB
Пасля таго, як вы паспяхова дадалі хаця б адну канфігурацыю да сваёй прылады, вы можаце дадаць інтэрфейсы і канчатковыя кропкі. Кожны клас USB мае свае ўласныя патрэбы адносна тыпу інтэрфейсаў і канчатковых кропак, колькасці і іншых параметраў. Silicon Labs USB Device дадае інтэрфейсы і канчатковыя кропкі ў прапанаваныя класы.
З вашага прыкладання вы можаце стварыць экземпляр класа USB і дадаць яго ў канфігурацыю. Для атрымання дадатковай інфармацыі аб канцэпцыі экземпляраў класаў прылад USB глядзіце Класы прылад USB. Звярніце ўвагу, што вы можаце стварыць экземпляры і дадаць шмат розных экземпляраў класаў у канфігурацыю, каб стварыць шматфункцыянальную (кампазітную) прыладу.
БылыampНіжэй паказана, як стварыць экзэмпляр класа і дадаць яго ў канфігурацыю.
Example – Даданне экземпляра класа на вашу прыладу
статус sl_status_t; uint8_t class_nbr;
/* Стварыце экзэмпляр класа, які вы хочаце выкарыстоўваць.*/ /* Звярніце ўвагу, што ў залежнасці ад класа гэтая функцыя можа мець больш аргументаў. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
/* Дадаем экзэмпляр класа ў канфігурацыю Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Нумар класа, які вяртаецца функцыяй sl_usbd_ _create_instance. */
config_nbr_fs); /* Нумар канфігурацыі, вернуты функцыяй sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
Запуск USB-прылады
Па змаўчанні прылада будзе запускацца аўтаматычна задачай ядра USB-прылады пасля завяршэння ініцыялізацыі прылады і запуску ядра. Каб кантраляваць, калі прылада запускаецца і становіцца бачнай для USB-хоста, выкарыстоўвайце канфігурацыю define SL_USBD_AUTO_START_USB_DEVICE, каб адключыць функцыю аўтаматычнага запуску. Калі яна адключана, пасля зборкі/падрыхтоўкі прылады вы можаце запусціць яе і зрабіць бачнай для USB-хоста, выклікаўшы функцыю sl_usbd_core_start_device().
БылыampНіжэй паказана, як запусціць прыладу з дапамогай функцыі sl_usbd_core_start_device().
Exampле – Запуск прылады
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
12/174
Скончанаview
статус sl_status_t;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
Функцыі перахопніка падзей
Асноўны модуль USB Device прапануе дзве слабыя функцыі пераключэння, якія можна перавызначыць у вашым дадатку. Іх мэта — паведамляць аб падзеях шыны і канфігурацыі.
Табліца – Функцыі перахопніка падзей USB
Падзея
Апісанне
Аўтобус
Выклікаецца, калі ўзнікае падзея шыны USB
Канфігурацыя выклікаецца пры ўзнікненні падзеі канфігурацыі USB
Подпіс функцыі
несапраўдны sl_usbd_on_bus_event(падзея sl_usbd_bus_event_t); несапраўдны 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) {перамыкач (падзея) { выпадак SL_USBD_EVENT_BUS_CONNECT:
// выклікаецца, калі USB-кабель падключаецца ў break хост-кантролера;
case SL_USBD_EVENT_BUS_DISCONNECT: // выклікаецца, калі кабель USB адключаны ад хост-кантролера break;
case SL_USBD_EVENT_BUS_RESET: // выклікаецца, калі хост пасылае каманду скіду break;
case SL_USBD_EVENT_BUS_SUSPEND: // выклікаецца, калі хост пасылае каманду прыпынення break;
case SL_USBD_EVENT_BUS_RESUME: // выклікаецца, калі хост пасылае каманду абуджэння break;
па змаўчанні: перапынак; } }
void sl_usbd_on_config_event(падзея sl_usbd_config_event_t, uint8_t config_nbr) {перамыкач (падзея) { выпадак SL_USBD_EVENT_CONFIG_SET:
// выклікаецца, калі хост усталёўвае перапынак канфігурацыі;
case SL_USBD_EVENT_CONFIG_UNSET: // выклікаецца, калі канфігурацыя не ўстаноўлена break;
па змаўчанні: перапынак; } }
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
13/174
Скончанаview
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
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 Silicon Laboratories. Усе правы ахоўваюцца.
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)
&клас_0);
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
статус = sl_usbd_XXXX_add_to_configuration(клас_0, канфігурацыя_0);
(4)
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
(1) Кожны клас прапануе набор функцый зваротнага выкліку для падзей падключэння/адключэння прылады і для падзей, спецыфічных для класа. Аб'ект структуры зваротнага выкліку перадаецца ў якасці аргумента пры стварэнні экзэмпляра класа з дапамогай sl_usbd_XXXX_create_instance().
функцыя.
(1) Ініцыялізуйце клас. Усе ўнутраныя зменныя, структуры і парты класа будуць ініцыялізаваны. Звярніце ўвагу, што функцыя Init() у некаторых класах можа прымаць іншыя аргументы.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
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 Silicon Laboratories. Усе правы ахоўваюцца.
17/174
Скончанаview
статус sl_status_t; uint8_t клас_0; uint8_t клас_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(клас_0, cfg_0); статус = sl_usbd_XXXX_add_to_configuration(клас_1, cfg_0);
статус = sl_usbd_XXXX_add_to_configuration(клас_0, cfg_1); статус = sl_usbd_XXXX_add_to_configuration(клас_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 Silicon Laboratories. Усе правы ахоўваюцца.
18/174
Скончанаview
Скончанаview
USB-прылада CDC ACM класа
Базавы клас CDC USB-прылады вышэй заview Патрэбы ў рэсурсах класа USB-прылады CDC ACM з асноўнага падкласа USB-прылады CDC ACM звышview Канфігурацыя класа ACM для USB-прылад CDC Кіраўніцтва па праграмаванні класа ACM для USB-прылад CDC
У гэтым раздзеле апісваецца клас камунікацыйных прылад (CDC) і звязаны з ім падклас CDC, які падтрымліваецца стэкам USB-прылад Silicon Labs. USB-прылады Silicon Labs у цяперашні час падтрымліваюць падклас 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 (рабочыя станцыі, маршрутызатары, камутатары лакальнай сеткі). Прылады бесправадной мабільнай сувязі (WMC), у тым ліку шматфункцыянальныя тэлефонныя апараты сувязі, якія выкарыстоўваюцца для кіравання галасавой сувяззю і перадачай дадзеных. Прылады мадэлі эмуляцыі Ethernet (EEM), якія абменьваюцца дадзенымі ў фармаце Ethernet. Прылады мадэлі кіравання сеткай (NCM), у тым ліку высакахуткасныя сеткавыя прылады (высакахуткасныя мадэмы пакетнага доступу, тэрмінальнае абсталяванне ліній).
CDC і звязаная з ім рэалізацыя падкласа адпавядаюць наступным спецыфікацыям:
Універсальная паслядоўная шына, вызначэнні класаў для прылад сувязі, версія 1.2, 3 лістапада 2010 г. Універсальная паслядоўная шына, сувязь, падклас для прылад PSTN, версія 1.2, 9 лютага 2007 г.
Базавы клас CDC USB-прылады вышэй заview
Прылада CDC складаецца з наступных інтэрфейсаў для рэалізацыі камунікацыйных магчымасцей:
Інтэрфейс класа сувязі (CCI) адказвае за кіраванне прыладамі і, па жаданні, за кіраванне выклікамі.
Кіраванне прыладамі дазваляе ажыццяўляць агульную канфігурацыю і кантроль прылады, а таксама апавяшчэнне хаста аб падзеях. Кіраванне выклікамі дазваляе ўстанаўліваць і завяршаць выклікі. Кіраванне выклікамі можа быць мультыплексавана праз DCI. CCI абавязковы для ўсіх прылад CDC. Ён ідэнтыфікуе функцыю CDC, паказваючы мадэль сувязі, якая падтрымліваецца прыладай CDC. Інтэрфейс(ы) пасля CCI можа быць любым вызначаным інтэрфейсам класа USB, такім як аўдыё або інтэрфейс пэўнага пастаўшчыка. Інтэрфейс пэўнага пастаўшчыка прадстаўлены канкрэтна DCI.
Інтэрфейс класа дадзеных (DCI) адказвае за перадачу дадзеных. Перададзеныя і/або атрыманыя дадзеныя не адпавядаюць пэўнаму
фармат. Дадзеныя могуць быць неапрацаванымі дадзенымі з лініі сувязі, дадзенымі, якія адпавядаюць запатэнтаванаму фармату і г.д. Усе DCI, якія ідуць пасля CCI, можна разглядаць як падпарадкаваныя інтэрфейсы.
Прылада CDC павінна мець як мінімум адзін CCI і нуль або больш DCI. Адзін CCI і любы падпарадкаваны DCI разам забяспечваюць функцыю для хоста. Гэтая магчымасць таксама называецца функцыяй. У кампазітнай прыладзе CDC у вас можа быць некалькі
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
19/174
Скончанаview
функцыі. Такім чынам, прылада будзе складацца з некалькіх набораў CCI і DCI, як паказана на малюнку - Кампазітная прылада CDC.
Малюнак – кампазітная прылада CDC
Прылада CDC, хутчэй за ўсё, будзе выкарыстоўваць наступную камбінацыю канчатковых кропак:
Пара кіруючых канчатковых кропак IN і OUT, якія называюцца канчатковай кропкай па змаўчанні. Дадатковая канчатковая кропка IN для масавага або перапынення. Пара канчатковай кропкі IN і OUT для масавага або ізахранальнага абмену. Звярніце ўвагу, што стэк прылад USB Silicon Labs у цяперашні час не падтрымлівае ізахранальнае абмен.
У табліцы ніжэй паказана выкарыстанне розных канчатковых кропак і тое, якім інтэрфейсам CDC яны выкарыстоўваюцца.
Табліца – Выкарыстанне канчатковых кропак CDC
Канчатковая кропка
Кантроль IN
Кантроль OUT
Перапыненне або масавы ўваход Масавы або ізахранавы ўваход Масавы або ізахранавы ўваход
ВЫХОД
Напрамак
Прылада-хост
Ад хоста да прылады
Прылада-хост
Прылада-хост
Ад хоста да прылады
Выкарыстанне інтэрфейсу
ІПП
Стандартныя запыты на пералік, запыты, спецыфічныя для класа, прылады
кіраванне і, па жаданні, кіраванне выклікамі.
ІПП
Стандартныя запыты на пералік, запыты, спецыфічныя для класа, прылады
кіраванне і, па жаданні, кіраванне выклікамі.
ІПП
Апавяшчэнне аб падзеях, такіх як выяўленне званка, стан паслядоўнай лініі, стан сеткі.
DCI
Перадача неапрацаваных або адфарматаваных дадзеных.
DCI
Перадача неапрацаваных або адфарматаваных дадзеных.
Большасць прылад сувязі выкарыстоўваюць канцавую кропку перапынення для апавяшчэння хаста аб падзеях. Ізахронныя канцавыя кропкі не павінны выкарыстоўвацца для перадачы дадзеных, калі ўласны пратакол абапіраецца на паўторную перадачу дадзеных у выпадку памылак пратакола USB. Ізахронная сувязь можа па сваёй сутнасці прывесці да страты дадзеных, паколькі яна не мае механізмаў паўторнай спробы.
Сем асноўных мадэляў сувязі ахопліваюць некалькі падкласаў. Падклас апісвае, як прылада павінна выкарыстоўваць CCI для кіравання прыладай і выклікамі. У табліцы ніжэй паказаны ўсе магчымыя падкласы і мадэль сувязі, да якой яны належаць.
Табліца – падкласы CDC
Падклас
Мадэль прамога лінейнага кіравання Анатацыйная мадэль кіравання
Мадэль камунікацыі
PSTN
PSTN
Exampспіс прылад, якія выкарыстоўваюць гэты падклас
Мадэмныя прылады, якія кіруюцца непасрэдна USB-хостам
Прылады эмуляцыі паслядоўнага порта, мадэмныя прылады, якія кіруюцца праз набор каманд паслядоўнага порта
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
20/174
Скончанаview
Падклас
Мадэль камунікацыі
Exampспіс прылад, якія выкарыстоўваюць гэты падклас
Мадэль кіравання тэлефонам
PSTN
Мадэль шматканальнай кіравання ISDN
Мадэль кіравання CAPI ISDN
Мадэль кіравання ECM у сетцы Ethernet
Сетка банкаматаў
Банкамат
Мадэль кіравання
Мадэль бесправаднога кіравання з дапамогай тэлефона
WMC
Кіраванне прыладамі WMC
Мадэль мабільнай прамой лініі
WMC
OBEX
WMC
Мадэль EEM эмуляцыі Ethernet
Мадэль кіравання сеткай
NCM
Прылады галасавой тэлефаніі
Тэрмінальныя адаптары базавага тарыфу, тэрмінальныя адаптары першаснага тарыфу, тэлефоны
Тэрмінальныя адаптары базавага тарыфу, тэрмінальныя адаптары асноўнага тарыфу, тэлефоны, кабельныя мадэмы 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 Silicon Laboratories. Усе правы ахоўваюцца.
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. Для эмуляцыі паслядоўнага порта некаторыя паслядоўныя тэрміналы дазваляюць адпраўляць гэты запыт.
Падклас ACM Silicon Labs9 выкарыстоўвае канчатковую кропку перапынення IN для апавяшчэння хаста аб бягучым стане паслядоўнай лініі.
Стан лініі — гэта растравае малюнак, які інфармуе хост пра:
Дадзеныя адхілены з-за перапаўнення Памылка цотнасці Памылка кадравання Стан выяўлення сігналу кальца Стан механізму выяўлення разрыву Стан носьбіта перадачы Стан выяўлення носьбіта прымача
Рэалізацыя падкласа ACM Silicon Labs9 адпавядае наступнай спецыфікацыі:
Універсальная паслядоўная шына, сувязь, падклас для прылад PSTN, версія 1.2, 9 лютага 2007 г.
Канфігурацыя класа ACM CDC USB-прылады
У гэтым раздзеле апісваецца, як наладзіць клас CDC ACM (клас камунікацыйных прылад, абстрактная мадэль кіравання). Ёсць дзве групы параметраў канфігурацыі:
Канфігурацыі для канкрэтнага прыкладання класа CDC ACM прылады USB Канфігурацыі экзэмпляраў класа CDC ACM прылады USB
Канфігурацыі для канкрэтных прыкладанняў класа CDC ACM USB-прылады
Базавы клас CDC Падклас ACM
Базавы клас CDC
Па-першае, каб выкарыстоўваць модуль класа CDC USB-прылады Silicon Labs, вам трэба будзе змяніць канфігурацыю CDC падчас кампіляцыі #define-s у адпаведнасці з патрэбамі вашага прыкладання. Яны перагрупаваны ўнутры загалоўка sl_usbd_core_config.h. file у раздзеле CDC. Іх мэта — паведаміць модулю прылады USB пра тое, колькі аб'ектаў USB CDC трэба вылучыць.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
22/174
Скончанаview
У табліцы ніжэй апісана кожнае поле канфігурацыі, даступнае ў гэтай структуры канфігурацыі.
Табліца – Вызначэнні канфігурацыі CDC USB-прылады
Назва канфігурацыі
SL_USBD_CDC_CL ЯК S_INSTANCE_QUANT ITY
КОЛЬКАСЦЬ_КАНФІГУРАЦЫІ_SL_USBD_CDC
TY
КОЛЬКАСЦЬ_ІНТЭРФЭЙСА_SL_USBD_CDC_DATA
TY
Апісанне
Колькасць экзэмпляраў класа, якія будуць выдзелены праз выклік функцыі
sl_usbd_cdc_acm_create_instance() .
Колькасць канфігурацый. Экземпляры класа 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 мае адну канфігурацыю часу кампіляцыі, паказаную ў табліцы ніжэй.
Табліца – Вызначэнне канфігурацыі ACM CDC USB-прылады
Назва канфігурацыі
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 a sl_usbd_cdc_acm_create_instance(). Гэтая функцыя мае тры аргументы канфігурацыі, як апісана тут.
інтэрвал_стану_лініі
Гэта інтэрвал (у мілісекундах), праз які ваш экзэмпляр паслядоўнага класа CDC ACM будзе паведамляць аб стане лініі хосту T aa. Гэта значэнне павінна быць ступенню двойкі (1, 2, 4, 8, 16 і г.д.).
магчымасці кіравання_званкамі
Растравая карта магчымасцей кіравання выклікамі. Магчымыя значэнні растравай карты наступныя:
Значэнне (біт)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Апісанне
Прылада самастойна кіруе выклікамі. Прылада можа адпраўляць/атрымліваць інфармацыю аб кіраванні выклікамі праз інтэрфейс класа дадзеных.
p_acm_зваротныя выклікі
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
23/174
Скончанаview
aa M aa p_acm_callbacks — гэта ўказальнік на структуру тыпу sl_usbd_cdc_acm_callbacks_t. Яго мэта — даць класу CDC AC набор функцый зваротнага выкліку, якія будуць выклікацца пры ўзнікненні падзеі CDC ACM. Не ўсе зваротныя выклікі абавязковыя, і ў зменную структуры callbacks можна перадаць нулявы ўказальнік (NULL), калі зваротны выклік не патрэбны. У табліцы ніжэй апісана кожнае поле канфігурацыі, даступнае ў гэтай структуры канфігурацыі.
Табліца – Структура канфігурацыі sl_usbd_cdc_acm _callbacks_t
Палі
Апісанне
.enable
Выклікаецца, калі экзэмпляр класа USB уключаны
паспяхова.
.адключыць
Выклікаецца, калі экзэмпляр класа USB адключаны.
.line_control_changed Выклікаецца пры атрыманні змены кіравання лініяй.
line_coding_changed Выклікаецца пры атрыманні змены лінейнага кадавання.
Подпіс функцыі
несапраўдны app_usbd_cdc_acm_enable(uint8_t падклас_nbr);
несапраўдны app_usbd_cdc_acm_disable(uint8_t падклас_nbr);
несапраўдны app_usbd_cdc_acm_line_control_changed(uint8_t падклас_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t падклас_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Глядзіце раздзел Рэгістрацыя зваротных выклікаў апавяшчэнняў аб падзеях для функцый зваротных выклікаў, напрыкладampле.
Кіраўніцтва па праграмаванні класа ACM CDC USB-прылады
У гэтым раздзеле тлумачыцца, як выкарыстоўваць клас мадэлі абстрактнага кіравання CDC. Ініцыялізацыя класа CDC ACM прылады USB Даданне экзэмпляра класа CDC ACM прылады USB Сувязь з выкарыстаннем класа CDC ACM
Ініцыялізацыя класа ACM CDC прылады USB
Каб дадаць функцыянальнасць класа 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;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
Даданне экзэмпляра класа CDC ACM USB-прылады на вашу прыладу
Каб дадаць функцыянальнасць класа CDC ACM на вашу прыладу, вам трэба стварыць экзэмпляр, а затым дадаць яго ў канфігурацыю(і) вашай прылады.
Стварэнне экзэмпляра класа CDC ACM
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
24/174
Скончанаview
Даданне экзэмпляра класа CDC ACM да канфігурацыі(й) вашай прылады. Рэгістрацыя зваротных выклікаў апавяшчэнняў аб падзеях.
Стварэнне экзэмпляра класа CDC ACM
Стварыце інстанцыю класа пераменнага току CDC, выклікаўшы функцыю sl_usbd_cdc_acm_create_instance(). Прыклад ніжэй паказвае, як стварыць інстанцыю класа пераменнага току CDC з дапамогай sl_usbd_cdc_acm_create_instance().
Example – Стварэнне функцыі CDC ACM з дапамогай sl_usbd_cdc_acm_create_instance()
uint8_t падклас_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);
калі (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
Даданне экземпляра класа CDC ACM да канфігурацыі(й) вашай прылады
Пасля стварэння экзэмпляра класа CDC ACM яго можна дадаць у канфігурацыю, выклікаўшы функцыю
sl_usbd_cdc_acm_add_to_configuration() .
У прыкладзе ніжэй паказана, як выклікаць 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(падклас_nbr,
(1)
config_nbr_fs);
(2)
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
aaa (1) Нумар класа ss для дадання ў канфігурацыю, вернутую функцыяй sl_usbd_cdc_acm_create_instance(). (2) Нумар канфігурацыі (тут дадаецца да поўнахуткаснай канфігурацыі).
Рэгістрацыя зваротных выклікаў апавяшчэнняў аб падзеях
Клас CDC ACM Serial можа паведамляць вашаму прыкладанню аб любых зменах у кіраванні лініяй або кадаванні праз функцыі зваротнага выкліку апавяшчэнняў. Структура функцый зваротнага выкліку можа быць перададзена ў якасці аргумента падчас стварэння экзэмпляра ACM. Звярніце ўвагу, што гэтыя зваротныя выклікі неабавязковыя. Напрыкладample – Рэгістрацыя зваротных выклікаў CDC ACM ілюструе выкарыстанне функцый рэгістрацыі зваротных выклікаў. Прыклад.ample – Рэалізацыя зваротных выклікаў CDC ACM паказвае эксampрэалізацыя функцый зваротнага выкліку.
Example – Рэгістрацыя зваротных званкоў CDC ACM
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
25/174
Скончанаview
uint8_t падклас_nbr; статус sl_status_t;
Спіс зменных у app_usbd_cdc_acm_callbacks_t змяшчае звесткі пра тое, як атрымаць доступ да app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed.}
статус = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, і sli_usbd_cdc_acm_callbacks, і падклас_nbr);
калі (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
Example – Рэалізацыя зваротных выклікаў CDC ACM
лагічнае значэнне app_usbd_cdc_acm_line_coding_changed (uint8_t
падклас_number,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t новая хуткасць_бады;
uint8_t новы_параметр_парнасці;
uint8_t стоп-біты_новыя;
uint8_t новыя_біты_дадзеных;
/* TODO Ужыць новае кадаванне радка.*/ 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)
}
несапраўдны app_usbd_cdc_acm_line_control_changed (uint8_t падклас_nbr, uint8_t падзея, uint8_t event_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO Ужыць кіраванне новай лініяй. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}
(1) Важна вярнуць гэтай функцыі значэнне false, калі прымяненне радковага кадавання не атрымалася. У адваротным выпадку вярнуць true.
Зносіны з выкарыстаннем класа CDC ACM
Серыйны статус
Лінейнае кадаванне, кіраванне лініяй
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
26/174
Скончанаview
Сувязь з экзэмплярам падкласа стану лініі
Серыйны статус
Лінейнае кадаванне
USB-хост кіруе кадаваннем лініі (хуткасць перадачы дадзеных, кантроль цотнасці і г.д.) прылады CDC ACM. Пры неабходнасці праграма адказвае за ўстаноўку кадавання лініі. Прадугледжаны дзве функцыі для атрымання і ўсталёўкі бягучага кадавання лініі, як апісана ў табліцы ніжэй.
Табліца – Функцыі лінейнага кадавання CDC ACM
Функцыя
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_se t_line _co d ing ()
Апісанне
Ваша праграма можа атрымаць бягучыя налады кадавання радкоў альбо ад хаста з дапамогай запытаў SetLineCoding, альбо з дапамогай функцыі sl_usbd_cdc_acm_set_line_coding().
Ваша праграма можа ўсталяваць кадаванне радкоў. Хост можа атрымаць налады з дапамогай запыту GetLineCoding.
Кантроль лініі
USB-хост кіруе кіраваннем лініяй (вывады RTS і DTR, сігнал разрыву і г.д.) прылады CDC ACM. Пры неабходнасці ваша праграма адказвае за прымяненне кіравання лініяй. Прадугледжана функцыя для атрымання і ўсталёўкі бягучых кіравання лініяй, як апісана ў табліцы ніжэй.
Табліца – Функцыі кіравання лініяй CDC ACM
Функцыя
стан_правільнага_перахаду_правільнага_перахаду ()
Ваша праграма можа атрымаць бягучы стан радка кіравання, усталяваны хастом, з дапамогай запыту SetControlLineState.
Дзяржава лініі
USB-хост рэгулярна атрымлівае стан лініі. Ваша праграма павінна абнаўляць стан лініі кожны раз, калі ён змяняецца. Пры неабходнасці ваша праграма адказвае за ўстаноўку стану лініі. Прадугледжаны дзве функцыі для атрымання і ўсталёўкі бягучых элементаў кіравання лініяй, як апісана ў табліцы ніжэй.
Табліца – Функцыі стану лініі S CDC ACM
Функцыя
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Ваша праграма можа ўсталёўваць любыя падзеі стану лініі. Пры ўсталёўцы стану лініі на хост адпраўляецца сігнал перапынення IN, каб паведаміць пра змяненне стану паслядоўнай лініі.
Прыкладанне можа ачысціць дзве падзеі стану лініі: выяўленне носьбіта перадачы і выяўленне носьбіта прымача. Усе астатнія падзеі самаачышчаюцца падкласам эмуляцыі паслядоўнай сувязі ACM.
Сувязь з экзэмплярамі падкласа
Падклас ACM ад Silicon Labs прапануе наступныя функцыі для сувязі з хостам. Больш падрабязную інфармацыю пра параметры functions9 глядзіце ў даведніку па функцыях падкласа ACM CDC.
Назва функцыі
sl_usb d _cd c_acm_ read () sl_usb d _cd c_acm_write ()
Аперацыя
Атрымлівае дадзеныя ад хоста праз канчатковую кропку масавага выхаду. Гэта функцыя блакуе. Адпраўляе дадзеныя на хост праз канчатковую кропку масавага ўваходу. Гэта функцыя блакуе.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
27/174
Скончанаview
Табліца – Кароткі змест API сувязі CDC ACM 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];
uint32_t
xfer_len;
статус_sl
статус;
статус = sl_usbd_cdc_acm_read(падклас_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
статус = sl_usbd_cdc_acm_write(падклас_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
T aaaaa M (1) Нумар экзэмпляра класа ss, створаны з дапамогай sl_usbd_cdc_acm_create_instance(), забяспечвае ўнутраную спасылку на падклас AC для накіравання перадачы да адпаведнай канчатковай кропкі OUT або IN. (2) Ваша праграма павінна гарантаваць, што буфер, прадастаўлены функцыі, дастаткова вялікі, каб змясціць усе дадзеныя. У адваротным выпадку могуць узнікнуць праблемы з сінхранізацыяй. (3) Каб пазбегнуць бясконцай блакіроўкі, укажыце тайм-аўт, выражаны ў мілісекундах. Значэнне 809 прымушае задачу праграмы чакаць вечна. (4) Праграма забяспечвае ініцыялізаваны буфер перадачы.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
28/174
Скончанаview
Скончанаview
Клас прылады USB HID
Клас HID USB-прылады вышэйview Патрэбы ў рэсурсах класа HID USB-прылады з асноўнай канфігурацыі класа HID USB-прылады Кіраўніцтва па праграмаванні класа HID USB-прылады Задача перыядычных справаздач аб уваходных дадзеных HID
У гэтым раздзеле апісваецца клас прылад інтэрфейсу чалавека (HID), якія падтрымліваюцца прыладай USB ад Silicon Labs.
Клас HID ахоплівае прылады, якія выкарыстоўваюцца людзьмі для кіравання камп'ютарнымі аперацыямі, такія як клавіятуры, мышы, указальныя прылады і гульнявыя прыстаўкі.
Клас HID таксама можа выкарыстоўвацца ў кампазітнай прыладзе, якая змяшчае элементы кіравання, такія як ручкі, перамыкачы, кнопкі і паўзункі. НапрыкладampРэгулятары гучнасці, адключэння гуку і рэгулявання гучнасці ў аўдыёгарнітуры кіруюцца функцыяй HID гарнітуры. Клас HID можа абменьвацца дадзенымі для любых мэт, выкарыстоўваючы толькі перадачу кіравання і перапыненняў.
Клас HID — адзін з найстарэйшых і найбольш шырока выкарыстоўваных класаў USB. Усе асноўныя аперацыйныя сістэмы хостаў прадастаўляюць убудаваны драйвер для кіравання прыладамі HID, таму з класам HID працуе мноства прылад розных вытворцаў. Гэты клас таксама ўключае розныя тыпы выходных элементаў, такія як святлодыёды, аўдыё, тактыльная зваротная сувязь і г.д.
Рэалізацыя HID адпавядае наступным спецыфікацыям:
Вызначэнне класа прылад для прылад інтэрфейсу чалавека (HID), 27.06.01, версія 1.11. Табліцы выкарыстання універсальнай паслядоўнай шыны HID, 28.10.2004, версія 1.12.
Клас HID USB-прылады вышэйview
Скончанаview
Прылада HID складаецца з наступных канчатковых кропак:
Пара кіруючых канчатковых кропак IN і OUT, якія называюцца канчатковай кропкай па змаўчанні; канчатковая кропка interrupt IN; неабавязковая канчатковая кропка interrupt OUT.
У табліцы ніжэй апісана выкарыстанне розных канчатковых кропак:
Табліца – Выкарыстанне канцавых кропак класа HID
Выкарыстанне кірунку канчатковай кропкі
Кантроль IN
Кантроль
ВЫХОД
Перапыненне
Перапыніць
ВЫХОД
Прылада-хост
Ад хоста да прылады
Прылада-хост
Ад хоста да прылады
Стандартныя запыты на пералік, запыты, спецыфічныя для класа, і перадача дадзеных (уваходныя дадзеныя, справаздачы аб функцыях, якія адпраўляюцца на хост з запытам GET_REPORT). Стандартныя запыты на пералік, запыты, спецыфічныя для класа, і перадача дадзеных (выхадныя дадзеныя, справаздачы аб функцыях, атрыманыя ад хоста з запытам SET_REPORT). Перадача дадзеных (уваходныя дадзеныя і справаздачы аб функцыях).
Перадача дадзеных (справаздачы аб выніках і функцыях).
Справаздача
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
29/174
Скончанаview
Хост і прылада HID абменьваюцца дадзенымі з дапамогай справаздач. Справаздача змяшчае адфарматаваныя дадзеныя, якія змяшчаюць інфармацыю аб элементах кіравання і іншых фізічных аб'ектах прылады HID. Элемент кіравання можа быць зменены карыстальнікам і кіруе пэўным аспектам прылады. Напрыкладampнапрыклад, элементам кіравання можа быць кнопка мышы або клавіятуры, перамыкач і г.д. Іншыя аб'екты інфармуюць карыстальніка пра стан пэўных функцый прылады. Напрыкладampнапрыклад, святлодыёды на клавіятуры паведамляюць карыстальніку пра ўключаны рэжым Caps Lock, актыўную лічбавую клавіятуру і г.д.
Фармат і выкарыстанне дадзеных справаздачы разумеюцца хостам шляхам аналізу зместу дэскрыптара справаздачы. Аналіз зместу выконваецца парсерам. Дэскрыптар справаздачы апісвае дадзеныя, якія прадстаўляюцца кожным элементам кіравання ў прыладзе. Ён складаецца з элементаў, якія з'яўляюцца фрагментамі інфармацыі аб прыладзе і ўключаюць 1-байтавы прэфікс і зменную даўжыню.
дадзеныя. Больш падрабязную інфармацыю пра фармат элемента глядзіце ў
1.11=, раздзелы 5.6 і 6.2.2.
Існуе тры асноўныя тыпы прадметаў:
Асноўны элемент вызначае або групуе пэўныя тыпы палёў дадзеных.
Глабальны элемент апісвае характарыстыкі дадзеных элемента кіравання.
Лакальны элемент апісвае характарыстыкі дадзеных элемента кіравання.
Кожны тып элемента вызначаецца рознымі функцыямі. Функцыя элемента таксама можа называцца tagФункцыю элемента можна разглядаць як падэлемент, які належыць да аднаго з трох асноўных тыпаў элементаў. У табліцы ніжэй прыведзены кароткі аглядview функцый элемента ў кожным тыпе элемента. Поўнае апісанне элементаў у кожнай катэгорыі гл.
Табліца – Апісанне функцый элементаў для кожнага тыпу элементаў
Тып элемента Функцыя
Апісанне
Асноўны ўваход
Апісвае інфармацыю пра дадзеныя, якія прадстаўляюцца адным або некалькімі фізічнымі элементамі кіравання.
Асноўны вынік Апісвае дадзеныя, якія адпраўляюцца на прыладу.
Галоўная асаблівасць
Апісвае інфармацыю аб канфігурацыі прылады, якая адпраўляецца на прыладу або атрымліваецца ад яе, і якая ўплывае на агульную працу прылады або аднаго з яе кампанентаў.
Звязаныя элементы галоўнай групы калекцый (уваходныя, выходныя або функцыянальныя).
Галоўны канец закрывае калекцыю. Калекцыя
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
30/174
Скончанаview
Тып элемента Функцыя
Апісанне
Старонка глабальнага выкарыстання
Вызначае функцыю, даступную ў прыладзе.
Глабальнае лагічнае значэнне Вызначае ніжнюю мяжу паведамленых значэнняў у лагічных адзінках. Мінімум
Глабальнае лагічнае значэнне Вызначае верхнюю мяжу паведамленых значэнняў у лагічных адзінках. Максімум
Глабальны фізічны Вызначае ніжнюю мяжу паведамленых значэнняў у фізічных адзінках, гэта значыць лагічны мінімум, выражаны ў фізічных адзінках.
Глабальнае фізічнае значэнне Вызначае верхнюю мяжу паведамленых значэнняў у фізічных адзінках, гэта значыць лагічны максімум, выражаны ў фізічных адзінках.
Глабальнае падраздзяленне
Паказвае ступень ступені ў дзесятковай сістэме злічэння. Значэнне ступені вагаецца ад -8 да +7.
Выказнік
Глабальнае падраздзяленне
Паказвае адзінку вымярэння паведамленых значэнняў. Напрыклад, даўжыня, маса, адзінкі тэмпературы і г.д.
Памер глабальнай справаздачы
Паказвае памер палёў справаздачы ў бітах.
Глабальны ідэнтыфікатар справаздачы паказвае прэфікс, дададзены да пэўнай справаздачы.
Глабальная колькасць справаздач
Паказвае колькасць палёў дадзеных для элемента.
Глабальны штуршок
Размяшчае копію глабальнай табліцы станаў элементаў у стэку працэсара.
Сусветная поп-музыка
Замяняе табліцу станаў элементаў апошняй структурай са стэка.
Лакальнае выкарыстанне
Прадстаўляе індэкс для абазначэння канкрэтнага выкарыстання на старонцы выкарыстання. Ён паказвае прапанаванае пастаўшчыком выкарыстанне для канкрэтнага элемента кіравання або групы элементаў кіравання. Выкарыстанне дае распрацоўшчыку праграмы інфармацыю аб тым, што фактычна вымярае элемент кіравання.
Лакальнае выкарыстанне
Вызначае пачатковае выкарыстанне, звязанае з масівам або растравым малюнкам.
Мінімум
Лакальнае выкарыстанне
Вызначае канчатковае выкарыстанне, звязанае з масівам або растравым малюнкам.
Максімум
Лакальны абазначэнне Вызначае частку цела, якая выкарыстоўваецца для кіравання. Індэкс паказвае на абазначэнне ў фізічным
Паказальнік
дэскрыптар.
Лакальны абазначэнне Вызначае індэкс пачатковага абазначэння, звязанага з масівам або растравым малюнкам. Мінімум
Лакальны абазначэнне Вызначае індэкс канчатковага абазначэння, звязанага з масівам або растравым малюнкам. Максімум
Лакальны радковы індэкс
Радковы індэкс для радковага дэскрыптара. Ён дазваляе звязаць радок з пэўным элементам або элементам кіравання.
Лакальны радок
Вызначае першы індэкс радка пры прызначэнні групы паслядоўных радкоў элементам кіравання ў масіве
Мінімальны або растравы малюнак.
Лакальны Лакальны
Максімум радка
Раздзяляльнік
Вызначае апошні індэкс радка пры прызначэнні групы паслядоўных радкоў элементам кіравання ў масіве або растравай карце.
Вызначае пачатак або канец набору лакальных элементаў.
Дадзеныя элемента кіравання павінны вызначаць як мінімум наступныя элементы:
Уваходныя, выходныя або функцыянальныя элементы Асноўныя элементы Выкарыстанне Лакальны элемент Выкарыстанне Старонка Глабальны элемент Лагічны мінімум Глабальны элемент Лагічны максімум Глабальны элемент Памер справаздачы Глабальны элемент
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
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 Silicon Laboratories. Усе правы ахоўваюцца.
32/174
Скончанаview
паказана ў табліцы ніжэй. Агульны памер дадзеных справаздачы складае 4 байты. Розныя тыпы справаздач могуць адпраўляцца праз адну і тую ж канчатковую кропку. Каб адрозніць розныя тыпы справаздач, да справаздачы з дадзенымі дадаецца 1-байтавы прэфікс ідэнтыфікатара справаздачы. Калі ідэнтыфікатар справаздачы выкарыстоўваўся ў exampсправаздачы мышы агульны памер дадзеных справаздачы складзе 5 байтаў.
Табліца – справаздача аб уваходных дадзеных, адпраўленая на хост і якая адпавядае стану трохкнопачнай мышы
Зрушэнне біта
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-прылад, спецыфічныя для прыкладання
Па-першае, каб выкарыстоўваць модуль класа HID для USB-прылад Silicon Labs, адрэгулюйце канфігурацыю HID падчас кампіляцыі ў адпаведнасці з патрэбамі вашага прыкладання. Яны перагрупаваны ўнутры загалоўка sl_usbd_core_config.h. file у раздзеле HID. Іх можна падзяліць на два раздзелы: канфігурацыі колькасці і канфігурацыі задач HID. Мэта канфігурацый колькасці — паведаміць модулю прылады USB аб тым, колькі аб'ектаў USB HID трэба выдзеліць.
У табліцы ніжэй апісана кожнае вызначэнне канфігурацыі.
Табліца – Вызначэнні канфігурацыі HID USB-прылады
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
33/174
Скончанаview
Назва канфігурацыі
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
Колькасць_канфігурацыі_SL_USBD_HID
СПРАВАЗДАЧА_SL_USBD_HID_ID_QUANTITY
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Апісанне
Колькасць экзэмпляраў класа, якія будуць выдзелены праз выклік функцыі
sl_usbd_hid_create_instance() .
Колькасць канфігурацый. Экземпляры класа HID можна дадаць да адной або некалькіх канфігурацый aaaa з дапамогай функцыі sl_usbd_hid_add_to_configuration(). Наладжвае агульную колькасць ідэнтыфікатараў справаздач для размеркавання.
Наладжвае агульную колькасць элементаў Push/Pop для размеркавання.
Задача таймера апрацоўвае ўсе аперацыі HID на аснове таймера. Гэтая канфігурацыя дазваляе ўсталяваць памер стэка (у колькасці байтаў). Прыярытэт задачы HID. Гэта прыярытэт CMSIS-RTOS2.
Значэнне па змаўчанні
2 1 2 0 2048
Высокі прыярытэт аперацыйнай сістэмы
Канфігурацыі экзэмпляраў класа USB-прылады HID Падклас стварэння экзэмпляраў класа
пратакол код_краіны
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 Silicon Laboratories. Усе правы ахоўваюцца.
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_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L АМЕРЫКАНСКАЯ SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH 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_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL І SL_USBD_HID_COUNTRY_CODE_TIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Код краіны вызначае, для якой краіны лакалізавана абсталяванне. Большая частка абсталявання не лакалізавана, таму гэтае значэнне будзе мець выгляд SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Аднак клавіятуры могуць выкарыстоўваць гэтае поле для ўказання мовы напісання клавіш.
Больш падрабязную інфармацыю пра коды краін глядзіце ў раздзеле 6.2.1 спецыфікацыі HID версіі 1.11.
інтэрвал_уваходу і інтэрвал_выхаду
interval_in і interval_out прадстаўляюць інтэрвал апытання канцавой кропкі перапынення 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 набор функцый зваротнага выкліку, якія будуць выклікацца пры ўзнікненні падзеі HID.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
35/174
Скончанаview
Не ўсе зваротныя выклікі абавязковыя, і ў зменную структуры зваротных выклікаў можна перадаць нулявы ўказальнік (NULL), калі зваротны выклік не патрэбны. У табліцы ніжэй апісана кожнае поле канфігурацыі, даступнае ў гэтай структуры канфігурацыі.
Табліца – структура канфігурацыі sl_usbd_hid_callbacks_t
Палі
Апісанне
Подпіс функцыі
.enable .disable .get_report_desc
.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. Выклікаецца, калі хаст усталёўвае справаздачу, як апісана ў вашым дэскрыптары справаздачы (калі ён адпраўляе справаздачу).
Выклікаецца, калі хост запытвае справаздачу аб функцыях, як апісана ў вашым дэскрыптары справаздачы.
Выклікаецца, калі хост усталёўвае справаздачу аб функцыях, як апісана ў вашым дэскрыптары справаздачы.
несапраўдны app_usbd_hid_enable(uint8_t class_nbr); несапраўдны app_usbd_hid_disable(uint8_t class_nbr); несапраўдны app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
несапраўдны app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
несапраўдны app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); несапраўдны app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); несапраўдны app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Атрымлівае бягучы актыўны пратакол.
несапраўдны app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Усталёўвае бягучы актыўны пратакол.
несапраўдны app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Дэскрыптар справаздачы класа HID Example
Клас HID ад Silicon Labsampпрыкладанне забяспечвае былыampдэскрыптар справаздачы для простай мышы. БылыampНіжэй паказаны дэскрыптар справаздачы пра мыш.
Example – Дэскрыптар справаздачы пра мыш
статычны 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 Silicon Laboratories. Усе правы ахоўваюцца.
36/174
Скончанаview
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_ГАЛОЎНЫ_ЎВАХОД +1, SL_USBD_HID_ГАЛОЎНЫЯ_ДАНЫЯ |
SL_USBD_HID_ГАЛОЎНАЯ_ЗМЕННАЯ |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_ГАЛОЎНЫ_ЎВАХОД +1, SL_USBD_HID_ГАЛОЎНЫЯ_ДАНЫЯ |
SL_USBD_HID_ГАЛОЎНАЯ_ЗМЕННАЯ |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_END COLLECTION,(10)
SL_USBD_HID_MAIN_END COLLECTION
(11)};
(1) Табліца, якая прадстаўляе дэскрыптар справаздачы мышы, ініцыялізуецца такім чынам, што кожны радок адпавядае кароткаму элементу. Апошні фарміруецца з 1-байтавага прэфікса і 1-байтавых дадзеных. Глядзіце viewапрацоўваецца аналізатарам HID хоста на малюнку — Змест дэскрыптара справаздачы з аналізатара HID хоста View.
(2) Выкарыстоўваецца агульная старонка выкарыстання працоўнага стала.
(3) На старонцы выкарыстання агульнага працоўнага стала, выкарыстанне tag сведчыць аб тым, што група элементаў кіравання прызначана для кіравання мышшу. Набор мышэй звычайна складаецца з дзвюх восей (X і Y) і адной, дзвюх або трох кнопак.
(4) Пачаўся збор мышэй.
(5) Унутры калекцыі mouse, выкарыстанне tag больш канкрэтна сведчыць аб тым, што элементы кіравання мышшу належаць да калекцыі ўказальнікаў. Калекцыя ўказальнікаў — гэта набор восяў, які генеруе значэнне для накіравання, указання або ўказання намераў карыстальніка ў дадатку.
(6) Пачаўся збор паказальнікаў.
(7) Старонка выкарыстання кнопак вызначае ўваходны элемент, які складаецца з трох 1-бітных палёў. Кожнае 1-бітнае поле прадстаўляе кнопку мышы 1, 2 і 3 адпаведна і можа вяртаць значэнне 0 або 1.
(8) Уваходны элемент для старонкі выкарыстання кнопак дапаўняецца 13 іншымі бітамі.
(9) Для апісання пазіцыі мышы з дапамогай восяў X і Y пазначана яшчэ адна агульная старонка выкарыстання працоўнага стала. Элемент уводу складаецца з двух 8-бітных палёў, значэнне якіх можа знаходзіцца ў дыяпазоне ад -127 да 127.
(10) Калекцыя ўказальнікаў зачынена.
(11) Калекцыя мышэй зачынена.
Старонка USB.org HID
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
37/174
Скончанаview
Форум распрацоўшчыкаў USB (USB-IF) прапануе інструмент пад назвай «HID Descriptor Tool» разам з іншай інфармацыяй аб фармаце дэскрыптара справаздачы. Больш падрабязную інфармацыю глядзіце на старонцы http://www.usb.org/developers/hidpage/.
Кіраўніцтва па праграмаванні USB-прылад HID класа
У гэтым раздзеле тлумачыцца, як выкарыстоўваць клас HID. Ініцыялізацыя класа HID USB-прылады Даданне экземпляра класа HID USB-прылады да вашай прылады Сувязь з выкарыстаннем класа HID USB-прылады
Ініцыялізацыя класа HID прылады USB
Каб дадаць функцыянальнасць класа HID на прыладу, спачатку трэба ініцыялізаваць клас, выклікаўшы функцыю sl_usbd_hid_init(). НапрыкладampУ наступным малюнку паказана, як выклікаць sl_usbd_hid_init() з выкарыстаннем аргументаў па змаўчанні. Больш падрабязную інфармацыю аб аргументах канфігурацыі, якія перадаюцца ў sl_usbd_hid_init(), глядзіце ў раздзеле Канфігурацыі класа USB-прылад HID, спецыфічныя для прыкладанняў.
Example – Выклік sl_usbd_hid_init()
статус sl_status_t;
status = sl_usbd_hid_init(); if (status ! 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-прылады.
Example – Даданне функцыі мышы праз sl_usbd_hid_create_instance()
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
38/174
Скончанаview
/* Глабальныя канстанты. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_END COLLECTION, SL_USBD_HID_MAIN_END COLLECTION };
/* Лакальныя зменныя.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
несапраўдны app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (несапраўдны)нумар_класа;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = памер(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, памер(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, праўда, &app_usbd_hid_callbacks, &class_nbr);
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
39/174
Скончанаview
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. *
Даданне экзэмпляра класа HID да канфігурацыі(й) вашай прылады Пасля стварэння экзэмпляра класа HID вы можаце дадаць яго да канфігурацыі, выклікаўшы функцыю
sl_usbd_hid_add_to_configuration() .
БылыampНіжэй паказана, як выклікаць sl_usbd_hid_add_to_configuration().
Example – Выклік sl_usbd_hid_add_to_configuration()
статус sl_status_t;
sl_usbd_hid_add_to_configuration(номер_класа,
(1)
config_nbr_fs); (2)
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
(1) Нумар класа, які трэба дадаць да канфігурацыі, вернутай функцыяй sl_usbd_hid_create_instance(). (2) Нумар канфігурацыі (тут дадаецца да канфігурацыі Full-Speed).
Сувязь з выкарыстаннем USB-прылады класа HID
Сувязь паміж экземплярамі класа Сінхронная сувязь Сувязь паміж экземплярамі класа Клас HID прапануе наступныя функцыі для сувязі з хостам.
Табліца – Зводка па API сувязі HID
Назва функцыі
sl_usb d _hid _re ad _sy nc() sl_usb d _hid _write _sy nc()
Аперацыя Атрымлівае дадзеныя ад хоста праз канчатковую кропку перапынення OUT. Гэта функцыя блакуе. Адпраўляе дадзеныя на хост праз канчатковую кропку перапынення IN. Гэта функцыя блакуе.
Сінхронная сувязь Сінхронная сувязь азначае, што перадача блакуецца. Пасля выкліку функцыі праграма блакуецца, пакуль перадача не будзе завершана з памылкай або без яе. Каб пазбегнуць бясконцага чакання, можна задаць тайм-аўт.ampНіжэй паказаны аперацыя чытання і запісу, якая атрымлівае дадзеныя ад хоста, выкарыстоўваючы канчатковую кропку перапынення OUT, і адпраўляе дадзеныя на хост, выкарыстоўваючы канчатковую кропку перапынення IN.
Example – Сінхроннае чытанне і запіс HID
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
статус_sl
статус;
статус = sl_usbd_hid_read_sync(клас_нбр,
(1)
(несапраўдны *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
40/174
Скончанаview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. *
status =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 Silicon Laboratories. Усе правы ахоўваюцца.
41/174
Скончанаview
Калі працягласць бяздзейнасці меншая за інтэрвал апытання канцавой кропкі перапынення IN, справаздачы генеруюцца ў інтэрвал апытання.
(3) Кожныя 4 мс задача перыядычнай справаздачы праглядае спіс ідэнтыфікатараў справаздач. Для кожнага ідэнтыфікатара справаздачы задача выконвае адну з двух магчымых аперацый. Працягласць перыяду задачы адпавядае адзінцы вымярэння 4 мс, якая выкарыстоўваецца для працягласці бяздзейнасці. Калі хост не адправіў запыты SET_IDLE, спіс ідэнтыфікатараў справаздач пусты, і задачы няма чаго апрацоўваць. Задача апрацоўвае толькі ідэнтыфікатары справаздач, якія адрозніваюцца ад 0 і маюць працягласць бяздзейнасці большую за 0.
(4) Для зададзенага ідэнтыфікатара ўваходнай справаздачы задача правярае, ці скончыўся час бяздзейнасці. Калі час бяздзейнасці не скончыўся, лічыльнік памяншаецца, і ўваходная справаздача на хост не адпраўляецца.
(5) Калі час бяздзейнасці скончыўся (гэта значыць, лічыльнік працягласці бяздзейнасці дасягнуў нуля), уваходная справаздача адпраўляецца на хост шляхам выкліку функцыі sl_usbd_hid_write_sync() праз канчатковую кропку interrupt IN.
(6) Уваходныя дадзеныя справаздачы, якія адпраўляюцца задачай, паступаюць з унутранага буфера дадзеных, выдзеленага для кожнага ўваходнага справаздачы, апісанага ў дэскрыптары справаздачы. Прыкладная задача можа выклікаць функцыю sl_usbd_hid_write_sync() для адпраўкі ўваходнага справаздачы. Пасля адпраўкі ўваходных дадзеных справаздачы sl_usbd_hid_write_sync() абнаўляе ўнутраны буфер, звязаны з ідэнтыфікатарам уваходнага справаздачы, толькі што адпраўленымі дадзенымі. Затым задача перыядычных уваходных справаздач заўсёды адпраўляе тыя ж тыя ж ўваходныя дадзеныя справаздачы пасля кожнага прамежку часу бяздзейнасці і пакуль прыкладная задача не абновіць дадзеныя ва ўнутраным буферы. Існуе механізм блакіроўкі, каб пазбегнуць пашкоджання ўваходных дадзеных ідэнтыфікатара справаздачы ў выпадку мадыфікацыі, якая адбываецца ў той самы момант перадачы, які выконваецца задачай перыядычных уваходных справаздач.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
42/174
Скончанаview
Скончанаview
Клас MSC прылады USB
Прылада USB MSC класа вышэйview Патрэбы ў рэсурсах класа MSC USB-прылады з асноўнай канфігурацыі класа MSC USB-прылады Кіраўніцтва па праграмаванні класа MSC USB-прылады Драйверы назапашвальнікаў класа MSC USB-прылады
У гэтым раздзеле апісваецца клас прылад масавага захоўвання дадзеных (MSC), якія падтрымліваюцца прыладай Silicon Labs USB. MSC — гэта пратакол, які дазваляе перадаваць інфармацыю паміж прыладай USB і хостам. Перадаваемая інфармацыя — гэта ўсё, што можна захоўваць у электронным выглядзе, напрыклад, выканальныя праграмы, зыходны код, дакументы, выявы, дадзеныя канфігурацыі або іншыя тэкставыя або лічбавыя дадзеныя. Прылада USB з'яўляецца знешнім носьбітам інфармацыі для хоста, што дазваляе перадаваць fileз дапамогай перацягвання.
A file сістэма вызначае, як fileарганізаваны на носьбіце інфармацыі. Спецыфікацыя класа USB-назапашвальнікаў не патрабуе якіх-небудзь канкрэтных file сістэма, якая выкарыстоўваецца на сумяшчальных прыладах. Замест гэтага яна забяспечвае просты інтэрфейс для чытання і запісу сектараў дадзеных з выкарыстаннем празрыстага набору каманд інтэрфейсу малых камп'ютэрных сістэм (SCSI). Такім чынам, аперацыйныя сістэмы могуць апрацоўваць USB-назапашвальнік як жорсткі дыск і могуць фарматаваць яго з дапамогай любога file сістэма, якая ім падабаецца.
Клас прылад масавага захоўвання дадзеных USB падтрымлівае два транспартныя пратаколы, а менавіта:
Транспарт кіравання/маштабнай/перапыннай перадачы (CBI) (выкарыстоўваецца толькі для дыскаводаў для дыскет)
Клас прылад масавага захоўвання дадзеных рэалізуе празрысты набор каманд SCSI, выкарыстоўваючы толькі пратакол BOT, што азначае, што для перадачы дадзеных і інфармацыі аб стане будуць выкарыстоўвацца толькі канчатковыя кропкі масавага захоўвання. Рэалізацыя MSC падтрымлівае некалькі лагічных адзінак.
Рэалізацыя MSC адпавядае наступным спецыфікацыям:
Спецыфікацыя класа універсальнай паслядоўнай шыны масавага захоўвання дадзеных вышэйview, Версія 1.3 ад 5 верасня 2008 г. Універсальная паслядоўная шына для захоўвання дадзеных класа масавага захоўвання, версія 1.0 ад 31 верасня 1999 г.
Прылада USB MSC aCl ss Overview
Канцавыя кропкі пратакола Запыты класаў Інтэрфейс малых камп'ютэрных сістэм (SCSI)
Пратакол
У гэтым раздзеле мы абмяркуем пратакол Bulk-Only Transport (BOT) класа Mass Storage. Пратакол Bulk-Only Transport мае тры...tages:
Транспарт каманд Транспарт дадзеных Транспарт стану
Каманды для масавага захоўвання дадзеных адпраўляюцца хостам праз структуру пад назвай Command Block Wrapper (CBW). Для каманд, якія патрабуюць перадачы дадзеныхtagг.зн., хост паспрабуе адправіць або атрымаць ад прылады дакладную колькасць байтаў, указаную ў палях даўжыні і сцяга CBW. Пасля перадачы дадзеныхtagг.зн., хост спрабуе атрымаць ад прылады абгортку стану каманды (CSW), якая падрабязна апісвае стан каманды, а таксама любыя рэшткі дадзеных (калі
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
43/174
Скончанаview
любы). Для каманд, якія не ўключаюць перанос дадзеныхtagг.зн., хост спрабуе атрымаць CSW адразу пасля адпраўкі CBW. Пратакол падрабязна паказаны на малюнку — пратакол MSC.
Малюнак – Пратакол MSC
Канчатковыя кропкі
На баку прылады, у адпаведнасці са спецыфікацыяй BOT, MSC складаецца з наступных канчатковых кропак: пара кантрольных канчатковых кропак IN і OUT, якія называюцца канчатковымі кропкамі па змаўчанні. пара канчатковых кропак IN і OUT для масавага выкарыстання.
У табліцы ніжэй паказаны розныя спосабы выкарыстання канчатковых кропак.
Табліца – Выкарыстанне канчатковай кропкі MSC
Канчатковая кропка
Уваход кіравання Выхад кіравання Аб'ёмны ўваход Аб'ёмны выхад
Напрамак
Прылада-хост Ад хоста да прылады Ад хоста да прылады Ад хоста да прылады
Выкарыстанне
Пералік і запыты, спецыфічныя для класа MSC Пералік і запыты, спецыфічныя для класа MSC Адпраўка CSW і дадзеных Атрыманне CBW і дадзеных
Запыты на заняткі
Для пратакола MSC BOT вызначаны два запыты кіравання. Гэтыя запыты і іх апісанні падрабязна апісаны ў табліцы ніжэй.
Табліца – Запыты класа захоўвання дадзеных
Запыты на заняткі
Скід дадзеных толькі для буйных загрузак
Апісанне
Гэты запыт выкарыстоўваецца для скіду налад прылады масавага захоўвання дадзеных і звязанага з ёй інтэрфейса. Гэты запыт рыхтуе прыладу да атрымання наступнага блока каманд.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
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
Канфігурацыі класа USB-прылад MSC, спецыфічныя для прыкладання
Канфігурацыі часу кампіляцыі класа Стварэнне экземпляра класа
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
45/174
Скончанаview
Канфігурацыі часу кампіляцыі класа
Клас MSC і падклас SCSI ад Silicon Labs USB Device можна наладзіць падчас кампіляцыі з дапамогай #defines, размешчанага ў sl_usbd_core_config.h. file.
Табліца – агульныя канфігурацыйныя канстанты
Назва канфігурацыі
Апісанне
SL_USBD_MSC_CLASS_INST Колькасць экзэмпляраў класа, якія будуць выдзелены праз выклік функцыі
Колькасць_ANCE
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA Нумар канфігурацыі, да якой можна дадаць экзэмпляр класа праз выклік функцыі
TION_QUANTITY
функцыя sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Колькасць лагічных адзінак на экзэмпляр класа, якія вы будзеце дадаваць праз выклік функцыі
ITY
функцыя 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
Стварэнне экземпляра класа
Стварэнне экзэмпляра класа USB-прылады MSC SCSI выконваецца шляхам выкліку функцыі sl_usbd_msc_scsi_create_instance(). Гэтая функцыя прымае адзін аргумент канфігурацыі, які апісаны ніжэй.
p_scsi_зваротныя выклікі
p_scsi_callbacks — гэта ўказальнік на структуру канфігурацыі тыпу sl_usbd_msc_scsi_callbacks_t. Акрамя распаўсюджаных зваротных выклікаў класа прылад USB — connect/disconnect, ён забяспечвае клас MSC наборам дадатковых функцый зваротнага выкліку, якія выклікаюцца пры ўзнікненні падзеі на лагічным блоку. У гэты аргумент можна перадаць нулявы ўказальнік (NULL), калі зваротныя выклікі не патрэбныя.
У табліцы ніжэй апісана кожнае поле канфігурацыі, даступнае ў гэтай структуры канфігурацыі.
Табліца – Структура канфігурацыі sl_usbd_msc_scsi_callbacks_t
Палі
Апісанне
.enable
Выклікаецца, калі экзэмпляр класа USB паспяхова ўключаны.
.disable Выклікаецца, калі экзэмпляр класа USB адключаны.
.host_eject Функцыя выклікаецца пры выкідзе лагічнага блока з хаста.
Подпіс функцыі
несапраўдны app_usbd_msc_scsi_enable(uint8_t class_nbr);
несапраўдны app_usbd_msc_scsi_disable(uint8_t class_nbr); несапраўдны app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
Канфігурацыя лагічнага блока класа MSC прылады USB
Даданне лагічнага блока да экзэмпляра класа 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 Silicon Laboratories. Усе правы ахоўваюцца.
46/174
Скончанаview
Палявы
Апісанне
Палявы
.scsi_lun_api_p tr
Апісанне
Указальнік на API медыядрайвера, які будзе апрацоўваць гэтую лагічную адзінку. Глядзіце драйверы назапашвальнікаў класа USB-прылад MSC для атрымання дадатковай інфармацыі аб драйверах назапашвальнікаў.
.ve nd o r_id _ p tr
.product_id_ptr
.прадукт_перагляд_на_ўзроўні .толькі_чытанне
Указальнік на радок, які змяшчае ідэнтыфікатар пастаўшчыка лагічнай адзінкі. Максімальная даўжыня радка — 8 сімвалаў. Указальнік на радок, які змяшчае ідэнтыфікатар прадукту лагічнай адзінкі. Максімальная даўжыня радка — 16 сімвалаў. Узровень рэвізіі прадукту.
Сцяжок, які паказвае, ці варта разглядаць лагічную адзінку як толькі для чытання з пункту гледжання view гаспадара (праўда) ці не (хлусня).
Кіраўніцтва па праграмаванні класа MSC для USB-прылад
У гэтым раздзеле тлумачыцца, як выкарыстоўваць клас MSC.
Ініцыялізацыя класа MSC прылады USB Даданне экзэмпляра класа MSC прылады 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().
Example – Выклік sl_usbd_msc_init() і sl_usbd_msc_scsi_init()
статус sl_status_t;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
status = sl_usbd_msc_scsi_init(); if (status ! 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(), глядзіце ў раздзеле Канфігурацыі для канкрэтнага прыкладання класа MSC USB-прылады.
Example – Выклік sl_usbd_ msc_scsi_create_instance()
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
47/174
Скончанаview
uint8_t class_nbr; статус sl_status_t;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
статус = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
калі (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
Даданне экземпляра класа MSC да канфігурацыі(й) вашай прылады
Пасля стварэння экзэмпляра класа MSC яго можна дадаць у канфігурацыю, выклікаўшы функцыю
sl_usbd_msc_add_to_configuration() .
БылыampНіжэй паказана, як выклікаць sl_usbd_msc_scsi_add_to_configuration() з выкарыстаннем аргументаў па змаўчанні.
Example – Выклік sl_usbd_ msc_scsi_add_to_configuration()
статус sl_status_t;
статус = sl_usbd_msc_scsi_add_to_configuration(клас_нумар,
(1)
config_nbr_fs);
(2)
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
(1) Нумар класа, які трэба дадаць да канфігурацыі, вернутай функцыяй sl_usbd_msc_scsi_create_instance(). (32) Нумар канфігурацыі (тут дадаецца да канфігурацыі Full-Speed).
Апрацоўка лагічных адзінак класа MSC прылады USB
Даданне лагічнага блока Падключэнне/адключэнне носьбіта інфармацыі
Даданне лагічнага блока
Пры даданні лагічнага блока да экзэмпляра класа MSC SCSI ён павінен быць прывязаны да носьбіта інфармацыі (RAM-дыск, SD-карта, флэш-памяць і г.д.). Клас MSC выкарыстоўвае драйвер назапашвальніка для сувязі з носьбітамі інфармацыі. Гэты драйвер неабходна будзе ўсталяваць пры даданні лагічнага блока.
БылыampНіжэй паказана, як дадаць лагічны блок з дапамогай sl_usbd_msc_scsi_lun_add().
Example – Даданне лагічнага блока праз sl_usbd_msc_scsi_lun_add()
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
48/174
Скончанаview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
статус_sl
статус;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= «Крэмніевыя лабараторыі»;
lu_info.product_id_ptr
= «блокавая прылада exampле”;
lu_info.level_revision_product = 0x1000u;
lu_info.толькі_чытанне
= ілжыва;
статус = sl_usbd_msc_scsi_lun_add(клас_нбр, &lu_info, &lu_object_ptr);
калі (status ! 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().
Example – Далучэнне/адлучэнне медыяфайла
статус sl_status_t;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! 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 падключана да хаста, носьбіт інфармацыі будзе адлюстроўвацца як падлучаны.
Драйверы назапашвальнікаў класа USB MSC
Для сувязі з носьбітам інфармацыі прыладам USB класа MSC патрабуецца драйвер назапашвальніка. На дадзены момант Silicon Labs не прапануе драйвераў.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
49/174
Скончанаview
ШІ драйвера TPY вызначаецца тыповым значэннем sl_usbd_msc_scsi_lun_api_t. Наша версія sl_usbd_msc_scsi_lun_api_t павінна быць уключана ў ваш параметр sl_usbd_msc_scsi_lun_info_t, калі вы дадаяце лагічны блок з дапамогай sl_usbd_msc_scsi_lun_add(). Глядзіце раздзел API USB-прылад MSC SCSI для атрымання больш падрабязнай інфармацыі аб структурах. Рэалізацыя драйвера назапашвальніка можа быць гэтак жа простай, як масіў сектараў у аператыўнай памяці. Тыповы памер сектара (г.зн. памер блока) складае 512 для прылад масавага захоўвання дадзеных і 2048 для CD-ROM.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
50/174
Скончанаview
Скончанаview
Клас пастаўшчыка USB-прылады
Клас пастаўшчыка USB-прылады больш заview Патрэбы ў рэсурсах класа пастаўшчыка прылад USB з асноўнай канфігурацыі класа пастаўшчыка прылад USB Кіраўніцтва па праграмаванні класа пастаўшчыка прылад USB Клас пастаўшчык дазваляе ствараць прылады, спецыфічныя для пастаўшчыка, якія могуць рэалізоўваць уласны пратакол. Ён абапіраецца на пару масавых канчатковых кропак для перадачы дадзеных паміж хостам і прыладай. Масавыя перадачы зручныя для перадачы вялікіх аб'ёмаў неструктураваных дадзеных і забяспечваюць надзейны абмен дадзенымі з дапамогай механізму выяўлення памылак і паўторнай спробы. Акрамя масавых канчатковых кропак, клас пастаўшчык таксама можа выкарыстоўваць дадатковую пару канчатковых кропак перапынення. Любая аперацыйная сістэма (АС) можа працаваць з класам пастаўшчыка пры ўмове, што АС мае драйвер для апрацоўкі класа пастаўшчыка. У залежнасці ад АС, драйвер можа быць уласным або спецыфічным для пастаўшчыка. Напрыклад, у Microsoft Windows® ваша праграма ўзаемадзейнічае з драйверам WinUSB, прадастаўленым Microsoft, для сувязі з прыладай пастаўшчыка.
Клас пастаўшчыка USB-прылады больш заview
Малюнак — Агульная архітэктура паміж хостам Windows і класам Vendor паказана агульная архітэктура паміж хостам і прыладай з выкарыстаннем класа Vendor. У гэтым прыкладзеampт. е., аперацыйнай сістэмай хоста з'яўляецца MS Windows.
Малюнак – Агульная архітэктура паміж класам хоста MS Windows і класам пастаўшчыка
На баку MS Windows праграма ўзаемадзейнічае з прыладай пастаўшчыка праз узаемадзеянне з бібліятэкай USB. Бібліятэкі, такія як libusb, прапануюць API для кіравання прыладай і звязанымі з ёй каналамі, а таксама для сувязі з прыладай праз канчатковыя кропкі кіравання, масавага доступу і перапынення.
На баку прылады клас Vendor складаецца з наступных канчатковых кропак:
Пара кантрольных канчатковых кропак IN і OUT, якія называюцца канчатковымі кропкамі па змаўчанні. Пара масавых канчатковых кропак IN і OUT.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
51/174
Скончанаview
Пара канчатковых кропак перапынення IN і OUT. Гэтая пара неабавязковая. У табліцы ніжэй паказана выкарыстанне розных канчатковых кропак:
Табліца – Выкарыстанне канчатковых кропак класа пастаўшчыка
Кірунак канчатковай кропкі
Кантроль IN
Кантроль
ВЫХОД
Масавае ўвядзенне
Прылада-хост
>Хост-прылада
Прылада-хост
Масавы выхад
Перапыненне
Перапыніць
ВЫХОД
Ад хоста да прылады
Прылада-хост
Ад хоста да прылады
Выкарыстанне
Стандартныя запыты на пералік і запыты, спецыфічныя для пастаўшчыка.
Стандартныя запыты на пералік і запыты, спецыфічныя для пастаўшчыка.
Перадача неапрацаваных дадзеных. Дадзеныя могуць быць структураваны ў адпаведнасці з уласным пратаколам.
Перадача неапрацаваных дадзеных. Дадзеныя могуць быць структураваны ў адпаведнасці з уласным пратаколам.
Перадача неапрацаваных дадзеных або апавяшчэнне. Дадзеныя могуць быць структураваны ў адпаведнасці з запатэнтаваным пратаколам. Перадача неапрацаваных дадзеных або апавяшчэнне. Дадзеныя могуць быць структураваны ў адпаведнасці з запатэнтаваным пратаколам.
Прыкладанне прылады можа выкарыстоўваць канчатковыя кропкі масавага абмену і перапынення для адпраўкі або атрымання дадзеных на хост або з яго. Яно можа выкарыстоўваць толькі канцавую кропку па змаўчанні для дэкадавання запытаў, спецыфічных для пастаўшчыка, адпраўленых хостам. Стандартныя запыты кіруюцца ўнутрана асноўным узроўнем USB-прылады Silicon Labs.
Патрэбы ў рэсурсах класа пастаўшчыка 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-прылад
Па-першае, каб выкарыстоўваць модуль класа пастаўшчыка USB-прылад Silicon Labs, адрэгулюйце канфігурацыю часу кампіляцыі Vendor у адпаведнасці з патрэбамі вашага прыкладання. Яны перагрупаваны ўнутры загалоўка sl_usbd_core_config.h. file у раздзеле «Пастаўшчык». Мэта канфігурацыі колькасці — паведаміць модулю прылады USB пра тое, колькі аб'ектаў USB-пастаўшчыка трэба выдзеліць.
У табліцы ніжэй апісана кожнае вызначэнне канфігурацыі.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
52/174
Скончанаview
Табліца – Вызначэнні канфігурацыі пастаўшчыка USB-прылад
Назва канфігурацыі
Апісанне
Значэнне па змаўчанні
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Колькасць экземпляраў класа, якія будуць выдзелены праз выклік функцыі 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 – Подпіс функцыі запыту, спецыфічнай для класа
несапраўдны app_usbd_vendor_req_handle(uint8_t)
клас_нумар, (1)
const sl_usbd_setup_req_t *p_setup_req); (2)
sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};
(1) Нумар экзэмпляра класа пастаўшчыка.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
53/174
Скончанаview
(2) Указальнік на атрыманы запыт на ўстаноўку ад хаста.
Кіраўніцтва па праграмаванні класа пастаўшчыкоў USB-прылад
У гэтым раздзеле тлумачыцца, як выкарыстоўваць клас Vendor. Ініцыялізацыя класа USB Device Vendor Даданне экзэмпляра класа USB Device Vendor да вашай прылады Сувязь з выкарыстаннем класа USB Device Vendor
Ініцыялізацыя класа пастаўшчыка USB-прылады
Каб дадаць функцыянальнасць класа пастаўшчыка на прыладу, спачатку ініцыялізуйце клас, выклікаўшы функцыю USBD_Vendor_Init(). НапрыкладampНіжэй паказана, як выклікаць sl_usbd_vendor_init().
Example – Выклік sl_usbd_vendor_init()
статус sl_status_t;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */ }
Даданне экзэмпляра класа пастаўшчыка USB-прылад на вашу прыладу
Каб дадаць функцыянальнасць класа пастаўшчыка на прыладу, спачатку трэба стварыць экзэмпляр, а затым дадаць яго ў канфігурацыю(і) прылады.
Стварэнне экземпляра класа пастаўшчыка Даданне экземпляра класа пастаўшчыка ў канфігурацыю(і) вашай прылады
Стварэнне экзэмпляра класа пастаўшчыка
Стварыце экзэмпляр класа Vendor, выклікаўшы функцыю sl_usbd_vendor_create_instance(). НапрыкладampУ наступным малюнку паказана, як выклікаць sl_usbd_vendor_create_instance() з выкарыстаннем аргументаў па змаўчанні. Больш падрабязную інфармацыю пра аргументы канфігурацыі, якія трэба перадаць у sl_usbd_vendor_create_instance(), глядзіце ў раздзеле Канфігурацыі экземпляраў класа пастаўшчыка USB-прылад.
Example – Выклік sl_usbd_vendor_create_instance()
uint8_t class_nbr; статус sl_status_t;
статус = sl_usbd_vendor_create_instance(хлусня,
(1)
0u,
(2)
функцыі_app_usbd_vendor_callback, (3)
&клас_нумар);
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
(1) Няма канчатковых кропак перапынення з гэтым экзэмплярам класа. (2) Інтэрвал ігнаруецца, бо канчатковыя кропкі перапынення адключаныя.
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
54/174
Скончанаview
(3) Функцыя зваротнага выкліку, якая з'яўляецца часткай вашага прыкладання і апрацоўвае запыты класаў, спецыфічных для пастаўшчыка. Глядзіце раздзел "Сувязь з выкарыстаннем класа пастаўшчыка USB-прылады" для атрымання дадатковай інфармацыі. Даданне экземпляра класа пастаўшчыка да канфігурацыі(й) вашай прылады Пасля таго, як вы стварылі экземпляр класа пастаўшчыка, вы можаце дадаць яго да канфігурацыі, выклікаўшы функцыю USBD_Vendor_ConfigAdd(). БыўampНіжэй паказана, як выклікаць sl_usbd_vendor_add_to_configuration() з выкарыстаннем аргументаў па змаўчанні.
Example – Выклік sl_usbd_vendor_add_to_configuration()
статус sl_status_t;
статус = sl_usbd_vendor_add_to_configuration(клас_нумар,
(1)
config_nbr_fs);
(2)
калі (статус ! SL_STATUS_OK) {
/* Адбылася памылка. Тут трэба дадаць апрацоўку памылак. */
}
(1) Нумар класа, які трэба дадаць да канфігурацыі, вернутай функцыяй sl_usbd_vendor_create_instance(). (2) Нумар канфігурацыі (тут дадаецца да канфігурацыі Full-Speed).
Сувязь з выкарыстаннем класа пастаўшчыка USB-прылад
Агульная інфармацыя аб сінхроннай сувязі Асінхронная сувязь Запыт пастаўшчыка Агульныя палажэнні Клас пастаўшчык прапануе наступныя функцыі для сувязі з хостам. Больш падрабязную інфармацыю аб параметрах функцыі глядзіце ў API пастаўшчыка USB-прылад.
Табліца – Зводка API сувязі з пастаўшчыком
Назва функцыі
sl_usb d _v e nd o r_ read ad _bulk_sy nc() sl_usb d _v e nd o r_write _bulk_sy nc() sl_usb d _v e nd o r_ read ad _bulk_asy nc() sl_usb d _v e nd o r_ write _bulk_asy nc() sl_usb d _v e nd o r_ read ad _inte rrup t_sy nc() sl_usb d _v e nd o r_ write _inte rrup t_sy nc() sl_usb d _v e nd o r_ read ad _inte rrup t_sy nc() sl_usb d _v e nd o r_ read ad _inte rrup t_asy nc
()
sl_usb d _v e nd or r_write _inte rrup t_asy nc
()
Аперацыя Атрымлівае даныя ад хоста праз канчатковую кропку bulk OUT. Гэта функцыя блакуе. Адпраўляе даныя на хост праз канчатковую кропку bulk IN. Гэта функцыя блакуе. Атрымлівае даныя ад хоста праз канчатковую кропку bulk OUT. Гэта функцыя не блакуе. Адпраўляе даныя на хост праз канчатковую кропку bulk IN. Гэта функцыя не блакуе. Атрымлівае даныя ад хоста праз канчатковую кропку interrupt OUT. Гэта функцыя блакуе. Адпраўляе даныя на хост праз канчатковую кропку interrupt IN. Гэта функцыя блакуе. Атрымлівае даныя ад хоста праз канчатковую кропку interrupt OUT. Гэта функцыя не-
блакаванне.
Адпраўляе дадзеныя на хост праз канчатковую кропку перапынення IN. Гэтая функцыя не блакуе.
Запыты пастаўшчыка — гэта таксама яшчэ адзін спосаб сувязі з хостам. Пры кіраванні запытамі пастаўшчыка, адпраўленымі хостам, праграма можа атрымліваць або адпраўляць дадзеныя з хоста або на яго, выкарыстоўваючы кантрольную кропку; вам трэба будзе перадаць зваротны выклік праграмы ў якасці параметра sl_usbd_vendor_create_instance(). Сінхранная сувязь
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
55/174
Скончанаview
Сінхронная сувязь азначае, што перадача блакуецца. Калі выклікаецца функцыя, праграма блакуецца, пакуль перадача не завершыцца з памылкай або без яе. Каб пазбегнуць бясконцага чакання, можна задаць тайм-аўт.ampНа малюнку ніжэй паказаны працэс чытання і запісу, які атрымлівае дадзеныя ад хоста з дапамогай канцавой кропкі bulk OUT і адпраўляе дадзеныя на хост з дапамогай канцавой кропкі bulk IN.
Example – Сінхроннае масавае чытанне і запіс
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
статус_sl
статус;
статус = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(несапраўдны *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
статус = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(несапраўдны *)&tx_buf[0],
(4)
2u,
0u,
(3)
ілжывы,
(5)
&xfer_len);
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
(1) Нумар экзэмпляра класа, створаны з дапамогай sl_usbd_vendor_create_instance(), забяспечвае ўнутраную спасылку на клас Vendor для накіравання перадачы ў адпаведную канчатковую кропку OUT або IN.
(2) Праграма павінна гарантаваць, што буфер, які прадастаўляецца функцыі, дастаткова вялікі для змяшчэння ўсіх дадзеных. У адваротным выпадку могуць узнікнуць праблемы з сінхранізацыяй.
(3) Каб пазбегнуць бясконцай блакіроўкі, можна задаць тайм-аўт, выражаны ў мілісекундах. Значэнне 809 прымушае задачу прыкладання чакаць бясконца.
(4) Прыкладанне забяспечвае ініцыялізаваны буфер перадачы.
(5) Калі гэты сцяг усталяваны ў значэнне true, і даўжыня перадачы кратная максімальнаму памеру пакета канчатковай кропкі, стэк прылад адправіць хосту пакет нулявой даўжыні, каб сігналізаваць аб заканчэнні перадачы.
Выкарыстанне функцый сувязі канцавых кропак перапынення sl_usbd_vendor_read_interrupt_sync() і sl_usbd_vendor_write_interrupt_sync() падобна на функцыі масавай сувязі канцавых кропак, прадстаўленыя ў Ex.ample – Сінхроннае масавае чытанне і запіс.
Асінхронная сувязь
Асінхронная сувязь азначае, што перадача не блакуецца. Пры выкліку функцыі праграма перадае інфармацыю аб перадачы ў стэк прылад і не блакуецца. Іншыя апрацоўкі праграмы могуць выконвацца падчас перадачы праз шыну USB. Пасля завяршэння перадачы стэк прылад выклікае функцыю зваротнага выкліку, каб паведаміць праграме аб завяршэнні перадачы.ampНіжэй паказаны асінхронныя чытанні і запісы.
Example – Асінхроннае масавае чытанне і запіс
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
56/174
Скончанаview
несапраўдны app_usbd_vendor_comm (uint8_t class_nbr)
{
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
статус_sl
статус;
статус = sl_usbd_vendor_read_bulk_async(клас_nbr,
(несапраўдны *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
НУЛЬ);
(4)
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
статус = sl_usbd_vendor_write_bulk_async(клас_nbr,
(несапраўдны *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
НУЛЬ,
(4)
ілжывы);
(6)
калі (статус ! SL_STATUS_OK) {
/* $$$$ Апрацоўка памылкі. */
}
}
(1) (3)
(1) (3)
статычная несапраўднасць app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
несапраўдны *p_buf,
uint32_t даўжыня_буфера,
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)
несапраўдны *p_buf,
uint32_t даўжыня_буфера,
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 Silicon Laboratories. Усе правы ахоўваюцца.
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 Silicon Laboratories. Усе правы ахоўваюцца.
58/174
Скончанаview
#define APP_VENDOR_REQ_NO_DATA
0x01u
#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u
#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u
#define APP_VENDOR_REQ_DATA_BUF_SIZE
50u
static uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];
static bool app_usbd_vendor_req (uint8_t
class_nbr,
const sl_usbd_setup_req_t *p_setup_req)
(1)
{
bool valid;
статус sl_status_t;
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 Silicon Laboratories. Усе правы ахоўваюцца.
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):
typedef struct {
uint8_t bmRequestType; /* Characteristics of request.
*/
uint8_t bRequest; /* Specific request.
*/
uint16_t wValue; /* Varies according to request.
*/
uint16_t wIndex; /* Varies according to request; typically used as index.*/
uint16_t wLength; /* Transfer length if data 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 Silicon Laboratories. Усе правы ахоўваюцца.
60/174
Дакументацыя API
Дакументацыя API
Дакументацыя 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
Апісанне
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 Silicon Laboratories. Усе правы ахоўваюцца.
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 Silicon Laboratories. Усе правы ахоўваюцца.
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
статус_t статус_t статус_t статус_t
статус_sl
статус_sl
статус_sl
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 Silicon Laboratories. Усе правы ахоўваюцца.
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)
Дакументацыя па функцыях
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (void )
GLOBAL VARIABLES. Parameters
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
64/174
USB Device ACM API
Тып
пустата
Direction N/A
Назва аргумента
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.
Параметры
Тып
uint16_t
uint16_t
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
*
uint8_t *
Н/Д
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.
Параметры
Тып
uint8_t uint8_t
Direction N/A N/A
Назва аргумента
subclass_nbr config_nbr
Description CDC ACM serial emulation subclass instance number. Configuration index to add new test class interface to.
Вяртае
Аўтарскае права © 2025 Silicon Laboratories. Усе правы ахоўваюцца.
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.
Параметры
Тып
Напрамак
Назва аргумента
Апісанне
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
Дакументы / Рэсурсы
![]() | Стэк USB-прылад |
Спасылкі
- Супольнасць Silicon Labscommunity.silabs.com
- Супольнасць Silicon Labscommunity.silabs.com
- Супольнасць Silicon Labscommunity.silabs.com
- Сайт і будаўніцтваdata.re
- Скончанаview of INF Files - Windows drivers | Microsoft Learndocs.microsoft.com
- System-Defined Device Setup Classes Available to Vendors - Windows drivers | Microsoft Learndocs.microsoft.com
- USB Device Class Drivers Included in Windows - Windows drivers | Microsoft Learndocs.microsoft.com
- Дакументацыя распрацоўшчыка - Silicon Labsdocs.silabs.com
- U S B D | API Documentation | Universal Serial Bus (USB) | v1.5.1 | Silicon Labsdocs.silabs.com
- Usbd Cdc | API Documentation | Universal Serial Bus (USB) | v1.5.1 | Silicon Labsdocs.silabs.com
- Кіраўніцтва карыстальнікаmanual.tools