Stos urządzeń USB
Specyfikacje
- Wersja USB: 1.5.1
- Data wydania: 21 lipca 2025 r.
- Wersja zestawu SDK Simplicity: 2025.6.1
Produkt ponadview
Stos urządzeń USB firmy Silicon Labs zapewnia wszechstronność i
łatwa w użyciu łączność USB dla projektów IoT, ułatwiająca
komunikacja między koprocesorami sieciowymi i hostami.
Cechy
- Wydajny stos urządzeń USB
- Idealny dla projektów IoT
- Wsparcie komunikacji między koprocesorami sieciowymi i
zastępy niebieskie
Instrukcje użytkowania produktu
Konfiguracja urządzenia USB
Skonfiguruj ustawienia urządzenia USB zgodnie ze swoim projektem
wymagania, odnosząc się do sekcji Konfiguracja urządzenia USB
w dokumentacji.
Przewodnik programowania urządzeń USB
Aby dowiedzieć się, jak to zrobić, postępuj zgodnie z Przewodnikiem programowania urządzeń USB
programować i wchodzić w interakcję z urządzeniem USB na różne sposoby
Aplikacje.
Klasy urządzeń USB
Sekcja Klasy urządzeń USB zapewnia ponadview różnego
klasy takie jak CDC ACM, HID, MSC SCSI i Vendor Class. Wybierz
odpowiednią klasę na podstawie funkcjonalności Twojego urządzenia.
Rozwiązywanie problemów z urządzeniem USB
W przypadku wystąpienia jakichkolwiek problemów z urządzeniem USB należy zapoznać się z
Sekcja rozwiązywania problemów z urządzeniem USB, w której znajdziesz rozwiązania i wskazówki dotyczące debugowania
porady.
Host USB systemu operacyjnego Microsoft Windows
Jeśli używasz urządzenia USB z systemem operacyjnym Microsoft Windows USB
Gospodarzu, pamiętaj o przestrzeganiu wytycznych podanych w
dokumentacja umożliwiająca bezproblemową integrację.
Często zadawane pytania
P: Jakie są popularne npampliczba urządzeń, które mogę zbudować, korzystając
ten stos USB?
A: Stos USB umożliwia budowę urządzeń takich jak
Przejściówki USB-szeregowe, myszy lub klawiatury, wymienne urządzenia pamięci masowej
urządzeń i urządzeń niestandardowych.
P: Czy istnieją jakieś szczególne wymagania programowe do korzystania z tego
Stos urządzeń USB?
A: Zgodne oprogramowanie obejmuje Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (kolekcja kompilatorów GNU),
IAR Embedded Workbench dla ARM i IAR EWARM.
Uniwersalna magistrala szeregowa USB
Uniwersalna magistrala szeregowa USB
USB przezview Nadview
Informacje o wydaniu USB
Specyfikacje i funkcjeview
Konfiguracja urządzenia USBview
Przewodnik programowania urządzeń USBview
Klasy urządzeń USBview CDC ACM Klasa Overview Klasa HID powyżejview Klasa MSC SCSIview Klasa dostawcy powyżejview
Dokumentacja API interfejsu API interfejsu API urządzeń USB Interfejs API urządzeń USB ACM a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t Interfejs API CDC urządzeń USB a sl_usbd_cdc_subcl ss_driver_t Interfejs API rdzenia urządzeń USB
sl_usbd_device_config_t sl_usbd_setup_req_t
interfejs API HID urządzenia USB sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t Interfejs API urządzenia USB MSC
a sl_usbd_msc_subcl ss_driver_t Urządzenie USB MSC SCSI API
sl_usbd_msc_scsi_callbacks_t
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
1/174
Uniwersalna magistrala szeregowa USB
a sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
Interfejs API dostawcy urządzeń USB sl_usbd_vendor_callbacks_t
Dokumentacja API Rozwiązywanie problemów z urządzeniem USB
Nadview Host USB systemu operacyjnego Microsoft Windows
Nadview
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
2/174
Nadview
Nadview
Urządzenie USB
USB to jeden z najpopularniejszych interfejsów komunikacyjnych w historii systemów komputerowych i de facto standard podłączania urządzeń peryferyjnych. Stos urządzeń USB Silicon Labs to moduł urządzeń USB zaprojektowany specjalnie dla systemów wbudowanych. Zbudowany od podstaw z uwzględnieniem jakości, skalowalności i niezawodności Silicon Labs, przeszedł rygorystyczny proces walidacji, aby spełnić specyfikację USB 2.0. Niniejsza dokumentacja opisuje sposób inicjalizacji, uruchamiania i użytkowania stosu urządzeń USB Silicon Labs. Wyjaśnia różne wartości konfiguracyjne i ich zastosowania. Zawiera również ponad 1000 pozycji.view technologii, rodzajów możliwości konfiguracji, procedur wdrożeniowych iamptypowe zastosowania dla każdej dostępnej klasy.
Aby pomóc Ci szybko zrozumieć koncepcje USB, w dokumentacji zamieszczono wiele przykładówampUSB z podstawowymi funkcjami. Te examples zapewni Ci framework, który pozwoli Ci szybko budować urządzenia. Te exampobejmują:
Adapter USB-szeregowy (klasa urządzeń komunikacyjnych) Mysz lub klawiatura (klasa urządzeń interfejsu HID) Wymienne urządzenie pamięci masowej (klasa pamięci masowej) Urządzenie niestandardowe (klasa dostawcy)
Oto koniecview z sekcji dokumentacji:
Specyfikacje i funkcje Konfiguracja urządzenia USB Przewodnik programowania urządzeń USB Klasy urządzeń USB
Rozwiązywanie problemów z urządzeniem USB w systemie operacyjnym Microsoft Windows Host USB
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
3/174
USB
USB
Wersja USB 1.5.1 z 21 lipca 2025 r. – Informacje o wydaniu
Wersja pakietu Simplicity SDK 2025.6.1
Wydajny stos urządzeń USB firmy Silicon Labs oferuje wszechstronną i łatwą w użyciu łączność USB, idealną dla projektów IoT, w tym komunikacji między koprocesorami sieciowymi a hostami. Kliknij tutaj, aby zobaczyć wcześniejsze wersje.
Podsumowanie wydania
Główne funkcje | Zmiany w API | Poprawki błędów | Włączanie układów scalonych
Główne cechy
Zmiany dotyczą wyłącznie platformy bazowej.
Zmiany w API
Nic.
Naprawiono błędy
Nic.
Włączanie układów scalonych
Nic.
Główne cechy
Nowe funkcje | Ulepszenia | Usunięte funkcje | Wycofane funkcje
Nowe funkcje
Nic.
Ulepszenia
Zmiany dotyczą wyłącznie platformy bazowej.
Usunięte funkcje
Nic.
Wycofane funkcje
Nic.
Zmiany w API
Nowe interfejsy API | Zmodyfikowane interfejsy API | Usunięte interfejsy API | Wycofane interfejsy API
Nowe interfejsy API
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
4/174
USB
Nic.
Zmodyfikowane interfejsy API
Nic.
Usunięto API
Nic.
Przestarzałe interfejsy API
Nic.
Naprawiono błędy
Nic.
Włączanie układów scalonych
Nic.
Aplikacja ExampZmiany
Nowy byłyamples | Modified Examples | Usunięto Examples | Przestarzałe Examples
Nowy byłyamples
Nic.
Zmodyfikowany Examples
Nic.
Usunięto npamples
Nic.
Przestarzałe Examples
Nic.
Wpływ zmian w wydaniu
Oświadczenia o wpływie | Przewodnik po migracji
Oświadczenia o wpływie
Nic.
przewodnik migracji
Nic.
Znane problemy i ograniczenia
Nic.
Korzystanie z tej wersji
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
5/174
USB
Co zawiera wydanie? | Kompatybilne oprogramowanie | Instalacja i użytkowanie | Pomoc i opinie
Co zawiera wydanie?
Aplikacja stosu urządzeń USB Examples
Zgodne oprogramowanie
Oprogramowanie
Simplicity SDK Simplicity Studio Simplicity Commander GCC Kolekcja kompilatorów GNU) IAR Embedded Workbench dla ARM IAR EWARM
Kompatybilna wersja lub wariant
2025.6.0 5.11.0 1.18.2 (dostarczane z Simplicity Studio) 12.2.1 (dostarczane z Simplicity Studio) 9.40.1 (dostarczane z Simplicity Studio)
Instalacja i użytkowanie
Aby rozpocząć swój rozwój zapoznaj się z naszą ofertą:
Przewodnik programowania urządzeń USB. Dokumentacja API.
Aby uzyskać więcej informacji na temat integracji Secure Vault, zobacz Secure Vault.
Aby ponownieview Powiadomienia dotyczące bezpieczeństwa i oprogramowania oraz zarządzanie preferencjami dotyczącymi powiadomień:
ò Przejdź do https://community.silabs.com/. ó Zaloguj się, używając danych logowania do swojego konta. ô Kliknij swój profilfile ikonę w prawym górnym rogu strony.
õ Z menu rozwijanego wybierz opcję Powiadomienia. ö W sekcji Powiadomienia przejdź do zakładki Moje powiadomienia o produktach, abyview historyczne doradztwo w zakresie bezpieczeństwa i oprogramowania
powiadomienia
÷ Aby zarządzać swoimi preferencjami, skorzystaj z karty Zarządzaj powiadomieniami, aby dostosować aktualizacje i ostrzeżenia dotyczące produktu.
odbierać.
Zalecane ustawienia konfiguracji znajdziesz tutaj.
Aby dowiedzieć się więcej o oprogramowaniu w tej wersji, zapoznaj się z naszą dokumentacją online.
Pomoc i opinie
Skontaktuj się z pomocą techniczną Silicon Labs. Aby uzyskać odpowiedzi za pomocą naszego narzędzia Ask AI, skorzystaj z pola wyszukiwania u góry tej strony.
Uwaga: Ask AI jest aplikacją eksperymentalną.
Uzyskaj pomoc od naszej społeczności programistów.
Zasady wydawania i konserwacji pakietu SDK
Zapoznaj się z naszą Polityką udostępniania i konserwacji zestawu SDK.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
6/174
Nadview
Nadview
Specyfikacje
Zgodny ze „specyfikacją uniwersalnej magistrali szeregowej w wersji 2.0” Implementuje typy transferu „Powiadomienie o zmianie technicznej deskryptora stowarzyszenia interfejsu (ECN)”
Klasy USB z przerwaniem zbiorczym Klasa urządzeń komunikacyjnych (CDC) Model sterowania abstrakcyjnego (ACM) Urządzenie interfejsu użytkownika (HID) Klasa pamięci masowej (MSC) Struktura klas specyficzna dla dostawcy
Cechy
Skalowalny, aby zawierać tylko wymagane funkcje i minimalizować wykorzystanie pamięci Obsługuje pełną prędkość (12 Mbit/s) Obsługuje urządzenia kompozytowe (wielofunkcyjne) Obsługuje urządzenia o wielu konfiguracjach Obsługuje funkcje oszczędzania energii USB (wstrzymywanie i wznawianie urządzenia) Pełna integracja klasy pamięci masowej z systemem operacyjnym Micrium File Moduł systemowy opracowany z wykorzystaniem warstwy abstrakcji CMSIS-RTOS2, dzięki czemu może współpracować z różnymi systemami operacyjnymi. Silicon Labs GSDK zawiera porty FreeRTOS i Micrium OS.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
7/174
Nadview
Nadview
Konfiguracja urządzenia USB
W tej sekcji opisano sposób konfiguracji urządzenia USB Silicon Labs. Istnieją trzy grupy parametrów konfiguracyjnych:
Konfiguracja rdzenia urządzenia USB Konfiguracja informacji o urządzeniu USB Konfiguracja sprzętowa urządzenia USB
Konfiguracja rdzenia urządzenia USB
Urządzenie USB firmy Silicon Labs można skonfigurować w czasie kompilacji za pomocą zestawu #defines znajdującego się w pliku sl_usbd_core_config.h fileUrządzenie USB używa #defines, gdy jest to możliwe, ponieważ umożliwiają one skalowanie rozmiaru kodu i danych w czasie kompilacji w zależności od włączonych funkcji. Pozwala to na dostosowanie rozmiaru pamięci tylko do odczytu (ROM) i pamięci o swobodnym dostępie (RAM) urządzenia USB Silicon Labs do wymagań aplikacji.
Zalecane: Rozpocznij proces konfiguracji od wartości domyślnych (zaznaczonych pogrubioną czcionką).
Poniższe sekcje są uporządkowane według kolejności w konfiguracji szablonu file, sl_usbd_core_config.h.
Konfiguracja klas konfiguracji rdzenia
Konfiguracja rdzenia
Tabela – stałe konfiguracji rdzenia urządzenia USB
Stały opis
Wartość domyślna
SL_USBD_TA SK_STACK_ SIZE
Konfiguruje rozmiar stosu w bajtach głównego zadania USBD
4096
SL_USBD_TA SK_PRIORIT Y
Konfiguruje priorytet głównego zadania USBD. Jest to priorytet CMSIS-RTOS2.
osPriorityHigh
SL_USBD_A UTO_START _USB_DEVIC E
Jeśli ta opcja jest włączona, urządzenie USB zostanie automatycznie uruchomione po uruchomieniu jądra i zaplanowaniu pierwszego zadania rdzenia USBD. Jeśli ta opcja jest wyłączona, aplikacja będzie musiała wywołać funkcję sl_usbd_core_start_device(), gdy będzie gotowa do wykrycia przez host USB.
SL_USBD_C Całkowita liczba konfiguracji, które zostaną dodane za pomocą funkcji sl_usbd_add_configuration()
1
Funkcja ONFIGURATI.
ON_QUANTI
TY
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
8/174
Nadview
Stały
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTY
SL_USBD _DESCRI
PTOR_Q
JEDNOSTKA
SL_USBD _STRING _ILOŚĆ
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY
Opis Całkowita liczba interfejsów USB, które należy dodać do wszystkich konfiguracji. Zależy to w dużej mierze od używanych klas. Aby uzyskać więcej informacji na temat liczby interfejsów wymaganych przez instancję klasy, zapoznaj się z sekcją „Zasoby potrzebne z rdzenia” danej klasy.
Łączna liczba alternatywnych interfejsów USB, które należy dodać do wszystkich konfiguracji. Zależy to w dużej mierze od użytych klas. Wartość ta musi być zawsze równa lub większa niż SL_USBD_INTERFACE_QUANTITY. Aby uzyskać więcej informacji na temat liczby alternatywnych interfejsów wymaganych przez instancję klasy, zapoznaj się z sekcją „Zapotrzebowanie na zasoby z rdzenia” dotyczącą danej klasy.
Łączna liczba grup interfejsów USB, które zostaną dodane do wszystkich konfiguracji. Zależy to w dużej mierze od użytych klas. Aby uzyskać więcej informacji na temat liczby grup interfejsów wymagających instancji klasy, zapoznaj się z sekcją „Zasoby wymagane z rdzenia” danej klasy.
Całkowita liczba deskryptorów punktów końcowych, które zostaną dodane dla wszystkich konfiguracji. Zależy to w dużej mierze od użytych klas. Aby uzyskać więcej informacji na temat liczby deskryptorów punktów końcowych wymaganych przez instancję klasy, zapoznaj się z sekcją „Liczba punktów końcowych” w sekcji „Potrzeby zasobów z rdzenia” danej klasy. Należy pamiętać, że punkty końcowe sterujące nie muszą być tutaj uwzględniane. Całkowita liczba ciągów USB. Ustawienie tej liczby na zero spowoduje wyłączenie tej funkcji. Wyłączenie tej opcji spowoduje, że urządzenie nie będzie przechowywać żadnych ciągów opisu USB przekazanych z aplikacji. Oznacza to, że host nie będzie mógł pobrać ciągów opisu (takich jak nazwa producenta i produktu). Całkowita liczba otwartych punktów końcowych na konfigurację. Urządzenie wymaga co najmniej dwóch otwartych punktów końcowych do transferów sterowania, ale należy również dodać punkty końcowe użytej klasy. Aby uzyskać więcej informacji na temat liczby otwartych punktów końcowych wymaganych przez instancję klasy, zapoznaj się z sekcją „Liczba punktów końcowych” w sekcji „Potrzeby zasobów z rdzenia” danej klasy.
Wartość domyślna
10 10
2
20 30 20
Konfiguracja klas
Klasy mają określone konfiguracje w czasie kompilacji. Więcej informacji można znaleźć w sekcji Klasy urządzeń USB.
Konfiguracja informacji o urządzeniu USB
Konfiguracja sl_usbd_device_config.h file Przegrupowuje polecenia #define w czasie kompilacji, aby ustawić podstawowe informacje dotyczące urządzenia, takie jak identyfikator dostawcy/produktu, ciągi znaków urządzenia itp. Poniższa tabela opisuje każdą konfigurację informacji zdefiniowaną w tej konfiguracji. file.
Tabela – Konfiguracja informacji o urządzeniu USB Definiuje
Stały
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID
Opis: Twój numer identyfikacyjny dostawcy, nadany przez USB Implementers Forum. Więcej informacji o tym, jak uzyskać identyfikator dostawcy, znajdziesz na stronie http://www.usb.org/developers/vendor/. Twój numer identyfikacyjny produktu.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
9/174
Nadview
Stały
Opis
SL_USBD_DEVICE_RELEASE Numer wydania Twojego urządzenia. _NUMBER
SL_USBD_DEVICE_MANUFA Ciąg opisujący producenta Twojego urządzenia. Ta konfiguracja jest ignorowana, gdy
CTURER_STRING
konfiguracja SL_USBD_STRING_QUANTITY jest ustawiona na 0.
SL_USBD_DEVICE_PRODUC Ciąg opisujący Twój produkt. Ta konfiguracja jest ignorowana, gdy
T_STRING
SL_USBD_STRING_QUANTITY jest ustawione na 0.
SL_USBD_DEVICE_SERIAL_N Ciąg zawierający numer seryjny Twojego urządzenia. Ta konfiguracja jest ignorowana, gdy
CIĄG_NUMEROWY
konfiguracja SL_USBD_STRING_QUANTITY jest ustawiona na 0.
SL_USBD_DEVICE_LANGUA Numer identyfikacyjny języka napisów na Twoim urządzeniu. Możliwe wartości to:
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
Ta konfiguracja jest ignorowana, gdy konfiguracja SL_USBD_STRING_QUANTITY jest ustawiona na 0.
Konfiguracja sprzętowa urządzenia USB
W zależności od używanego urządzenia Silicon Labs, możliwe, że pin i port GPIO będą potrzebne do skonfigurowania sygnału USB VBUS Sense. Definicje konfiguracji znajdują się w nagłówku sl_usbd_hardware_config.h. file.
Stały
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Opis
Port GPIO dla sygnału USB VBUS Sense na płytce. Pin GPIO dla sygnału USB VBUS Sense na płytce.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
10/174
Nadview
Nadview
Przewodnik programowania urządzeń USB
W tej sekcji wyjaśniono, jak używać modułu urządzenia USB.
Początkowa konfiguracja modułu urządzenia USB
W tej sekcji opisano podstawowe kroki wymagane do zainicjowania modułu urządzenia USB oraz dodania, przygotowania i uruchomienia urządzenia. Inicjalizacja modułu urządzenia USB Inicjalizacja rdzenia urządzenia USB Inicjalizacja aCl ss(es) Dodawanie urządzenia USB Budowanie urządzenia USB Dodawanie konfiguracji Dodawanie funkcji USB Uruchamianie urządzenia USB
Funkcje haka zdarzeń
Inicjalizacja modułu urządzenia USB
Inicjalizacja rdzenia urządzenia USB
a US a Zacznij od zainicjowania rdzenia modułu urządzenia B, wywołując funkcję sl_usbd_core_init(). Poniższy przykład pokazuje wywołanie funkcji sl_usbd_core_init().
Example – Wywołanie sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Inicjowanie klas
Po zainicjowaniu rdzenia modułu urządzenia USB należy zainicjować każdą klasę, której zamierzasz użyć. Więcej informacji można znaleźć w sekcji „Przewodnik programowania” w pliku ACL SS(ES).
Budowanie urządzenia USB
Dodawanie konfiguracji
Po pomyślnej inicjalizacji urządzenia możesz rozpocząć dodawanie do niego funkcji USB, zaczynając od nowej konfiguracji. Urządzenie musi mieć co najmniej jedną konfigurację. Aby dodać konfigurację (konfiguracje), wywołaj funkcję sl_usbd_core_dd_configuration(). Funkcja ta musi zostać wywołana dla każdej konfiguracji, którą chcesz dodać.ampPoniżej pokazano, jak dodać pełną prędkość.
Example – Dodawanie konfiguracji do urządzenia
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
11/174
Nadview
sl_status_t status; uint8_t config_nbr_fs;
/* Dodanie konfiguracji pełnej prędkości do urządzenia. */
status = sl_usbd_core_add_configuration(0,
/* Brak specjalnych atrybutów konfiguracji. */
100u,
/* Maksymalny pobór prądu: 100mA.
*/
SL_USBD_DEVICE_SPEED_FULL,
/* Konfiguracja pełnej prędkości.
*/
„Konfiguracja Dodaj Example Full-Speed config”,
&config_nbr_fs);
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Dodawanie funkcji USB
Po pomyślnym dodaniu co najmniej jednej konfiguracji do urządzenia, możesz dodać interfejsy i punkty końcowe. Każda klasa USB ma swoje własne wymagania dotyczące typu interfejsu i punktów końcowych, ich liczby oraz innych parametrów. Silicon Labs USB Device dodaje interfejsy i punkty końcowe do oferowanych klas.
Z poziomu aplikacji możesz utworzyć instancję klasy USB i dodać ją do konfiguracji. Więcej informacji na temat koncepcji instancji klasy urządzeń USB znajdziesz w artykule Klasy urządzeń USB. Pamiętaj, że możesz utworzyć instancję i dodać wiele różnych instancji klasy do konfiguracji, aby utworzyć urządzenie wielofunkcyjne (kompozytowe).
ByłyampPoniżej pokazano, jak utworzyć instancję klasy i dodać ją do konfiguracji.
Example – Dodawanie instancji klasy do urządzenia
sl_status_t status; uint8_t class_nbr;
/* Utwórz instancję klasy, której chcesz użyć.*/ /* Należy pamiętać, że w zależności od klasy ta funkcja może mieć więcej argumentów. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
/* Dodaj instancję klasy do konfiguracji Full-Speed. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Numer klasy zwrócony przez sl_usbd_ _create_instance. */
config_nbr_fs); /* Numer konfiguracji zwrócony przez sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Uruchamianie urządzenia USB
Domyślnie urządzenie zostanie uruchomione automatycznie przez zadanie rdzenia urządzenia USB po zakończeniu inicjalizacji urządzenia i uruchomieniu jądra. Aby kontrolować moment uruchomienia urządzenia i jego widoczność dla hosta USB, należy użyć parametru konfiguracyjnego SL_USBD_AUTO_START_USB_DEVICE, aby wyłączyć funkcję automatycznego uruchamiania. Po wyłączeniu tej opcji, po zbudowaniu/przygotowaniu urządzenia, można je uruchomić i uczynić widocznym dla hosta USB, wywołując funkcję sl_usbd_core_start_device().
ByłyampPoniżej znajduje się instrukcja uruchomienia urządzenia za pomocą funkcji sl_usbd_core_start_device().
Example – Uruchamianie urządzenia
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
12/174
Nadview
sl_status_t status;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Funkcje haka zdarzeń
Moduł rdzenia urządzenia USB oferuje dwie funkcje słabego haka, które można zdefiniować ponownie w aplikacji. Ich celem jest powiadamianie o wystąpieniu zdarzeń na magistrali i konfiguracji.
Tabela – Funkcje haka zdarzeń USB
Wydarzenie
Opis
Autobus
Wywoływane, gdy wystąpi zdarzenie magistrali USB
Konfiguracja Wywoływana, gdy wystąpi zdarzenie konfiguracji USB
Podpis funkcji
void sl_usbd_on_bus_event(sl_usbd_bus_event_t zdarzenie); void sl_usbd_on_config_event(sl_usbd_config_event_t zdarzenie, uint8_t config_nbr);
Example – Funkcje haka zdarzeń
void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { switch (event) { case SL_USBD_EVENT_BUS_CONNECT:
// wywoływane, gdy kabel USB zostanie podłączony do kontrolera hosta break;
case SL_USBD_EVENT_BUS_DISCONNECT: // wywoływane, gdy kabel USB zostanie odłączony od kontrolera hosta break;
case SL_USBD_EVENT_BUS_RESET: // wywoływane, gdy host wysyła polecenie resetowania break;
case SL_USBD_EVENT_BUS_SUSPEND: // wywoływane, gdy host wysyła polecenie zawieszenia break;
case SL_USBD_EVENT_BUS_RESUME: // wywoływane, gdy host wysyła polecenie wybudzenia break;
domyślne: break; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { switch (event) { case SL_USBD_EVENT_CONFIG_SET:
// wywoływane, gdy host ustawia przerwę w konfiguracji;
case SL_USBD_EVENT_CONFIG_UNSET: // wywoływane, gdy konfiguracja jest nieustawiona break;
domyślne: break; } }
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
13/174
Nadview
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
14/174
Nadview
Nadview
Klasy urządzeń USB
Klasy USB dostępne w urządzeniach USB Silicon Labs mają pewne wspólne cechy. W tej sekcji wyjaśniono te cechy i ich interakcje z warstwą rdzeniową.
Więcej informacji na temat konkretnej klasy znajdziesz w następujących materiałach:
Klasa CDC ACM Klasa HID Klasa MSC SCSI Klasa dostawcy
O instancjach klas
Klasy USB dostępne w urządzeniu USB implementują koncepcję instancji klasy. Instancja klasy reprezentuje jedną funkcję w urządzeniu. Funkcja może być opisana przez jeden interfejs lub grupę interfejsów i należy do określonej klasy.
Każda implementacja klasy USB ma pewne wspólne konfiguracje i funkcje, oparte na koncepcji instancji klasy. Wspólne konfiguracje i funkcje przedstawiono w poniższej tabeli. W tytule kolumny „Stałe lub funkcja” symbol zastępczy XXXX można zastąpić nazwą klasy: CDC, HID, MSC, CDC_ACM lub VENDOR (Vendor dla nazw funkcji).
Tabela – stałe i funkcje związane z koncepcją wielu instancji klas
Stała lub funkcja
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGURACJA_ILOŚĆ
sl_usb d _XXXX_cre ate _instancja ()
sl_usbd_XXXX_add_to_configration()
Opis
Konfiguruje maksymalną liczbę wystąpień klasy.
Konfiguruje maksymalną liczbę konfiguracji. Podczas inicjalizacji klasy utworzona instancja klasy zostanie dodana do jednej lub większej liczby konfiguracji. Tworzy nową instancję klasy.
Dodaje istniejącą instancję klasy do określonej konfiguracji urządzenia.
Z punktu widzenia implementacji kodu, klasa deklaruje lokalną zmienną globalną, która zawiera strukturę kontroli klasy. Ta struktura kontroli klasy jest powiązana z jedną instancją klasy i zawiera szczegółowe informacje umożliwiające zarządzanie tą instancją.
Poniższe rysunki przedstawiają kilka scenariuszy. Każdy rysunek zawiera kod, np.ample, który odpowiada scenariuszowi przypadku.
Rysunek – Wiele instancji klasy – Urządzenie FS (1 konfiguracja z 1 interfejsem) przedstawia typowe urządzenie USB. Urządzenie jest w trybie Full-Speed (FS) i zawiera jedną konfigurację. Funkcja urządzenia jest opisana przez jeden interfejs składający się z pary punktów końcowych do komunikacji danych. Tworzona jest jedna instancja klasy, która umożliwia zarządzanie całym interfejsem wraz z powiązanym punktem końcowym.
Rysunek – Wiele instancji klas – Konfiguracja urządzenia FS 1 z 1 interfejsem)
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
15/174
Nadview
Kod odpowiadający rysunkowi – Wiele wystąpień klasy – Urządzenie FS (1 konfiguracja z 1 interfejsem) jest pokazany na przykładzieampzobacz poniżej.
Example – Wiele instancji klas – Konfiguracja urządzenia FS 1 z 1 interfejsem)
sl_status_t status; uint8_t klasa_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Obsługa zdarzenia włączenia klasy. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Obsługa zdarzenia wyłączenia klasy. */ }
sl_usbd_XXXX_callbacks_t klasa_wywołań zwrotnych = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
status = sl_usbd_XXXX_init();
(2)
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
status = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&klasa_0);
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
status = sl_usbd_XXXX_add_to_configuration(klasa_0, konfiguracja_0);
(4)
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
(1) Każda klasa oferuje zestaw funkcji wywołania zwrotnego dla zdarzeń łączenia/rozłączania urządzeń oraz zdarzeń specyficznych dla danej klasy. Obiekt struktury wywołania zwrotnego jest przekazywany jako argument podczas tworzenia instancji klasy za pomocą sl_usbd_XXXX_create_instance().
funkcjonować.
(1) Zainicjuj klasę. Wszystkie zmienne wewnętrzne, struktury i porty klas zostaną zainicjowane. Należy pamiętać, że funkcja Init() w niektórych klasach może przyjmować inne argumenty.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
16/174
Nadview
(2) Utwórz instancję klasy, która jest class_0. Funkcja sl_usbd_XXXX_create_instance() przydziela strukturę kontroli klasy skojarzoną z class_0. W zależności od klasy, sl_usbd_XXXX_create_instance() może mieć dodatkowe parametry oprócz numeru klasy, które reprezentują informacje specyficzne dla klasy przechowywane w strukturze kontroli klasy. (3) Dodaj instancję klasy, class_0, do określonego numeru konfiguracji, config_0. sl_usbd_XXXX_add_to_configuration() utworzy interfejs 0 i powiązane z nim punkty końcowe IN i OUT. W rezultacie instancja klasy obejmuje interfejs 0 i jego punkty końcowe. Wszelka komunikacja wykonywana na interfejsie 0 będzie używać numeru instancji klasy, class_0. Rysunek – Wiele instancji klasy – Urządzenie FS (2 konfiguracje i wiele interfejsów) przedstawia bardziej złożony przykładample. Urządzenie o pełnej prędkości składa się z dwóch konfiguracji. Urządzenie ma dwie funkcje należące do tej samej klasy, ale każda funkcja jest opisana przez dwa interfejsy i ma parę dwukierunkowych punktów końcowych. W tym przykładzieampW tym przypadku tworzone są dwie instancje klasy. Każda instancja klasy jest powiązana z grupą interfejsów, w przeciwieństwie do rysunków „Rysunek – Wiele instancji klasy – Urządzenie FS (1 konfiguracja z 1 interfejsem)” i „Rysunek – Wiele instancji klasy – Urządzenie FS (2 konfiguracje i wiele interfejsów), gdzie instancja klasy była powiązana z jednym interfejsem.
Rysunek – Wiele instancji klas – Konfiguracje urządzenia FS 2 i wiele interfejsów
Kod odpowiadający rysunkowi – Wiele wystąpień klasy – Urządzenie FS (2 konfiguracje i wiele interfejsów) jest pokazany na przykładzieample poniżej. Obsługa błędów została pominięta dla przejrzystości.
Example – Wiele instancji klas – Konfiguracje urządzenia FS 2 i wiele interfejsów)
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
17/174
Nadview
sl_status_t status; uint8_t klasa_0; uint8_t klasa_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
status = sl_usbd_XXXX_dodaj_do_konfiguracji(klasa_0, cfg_0); status = sl_usbd_XXXX_dodaj_do_konfiguracji(klasa_1, cfg_0);
status = sl_usbd_XXXX_dodaj_do_konfiguracji(klasa_0, cfg_1); status = sl_usbd_XXXX_dodaj_do_konfiguracji(klasa_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Zainicjuj klasę. Wszystkie zmienne wewnętrzne, struktury i porty klasy zostaną zainicjowane.
(2) Utwórz instancję klasy class_0. Funkcja sl_usbd_XXXX_create_instance() przydziela strukturę kontroli klasy powiązaną z class_0.
(3) Utwórz instancję klasy class_1. Funkcja sl_usbd_XXXX_create_instance() przydziela inną strukturę kontroli klasy powiązaną z class_1.
(4) Dodaj instancję klasy, class_0, do konfiguracji, cfg_0. Funkcja sl_usbd_XXXX_add_to_configuration() utworzy interfejs 0, interfejs 1, alternatywne interfejsy oraz powiązane punkty końcowe IN i OUT. Numer instancji klasy, class_0, będzie używany do komunikacji danych na interfejsie 0 lub 1.
(5) Dodaj instancję klasy, class_1, do konfiguracji cfg_0. Funkcja sl_usbd_XXXX_add_to_configuration() utworzy interfejs 2, interfejs 3 oraz powiązane z nimi punkty końcowe IN i OUT. Numer instancji klasy, class_1, będzie używany do komunikacji danych na interfejsie 2 lub 3.
(6) Dodaj te same wystąpienia klasy, class_0 i class_1, do innej konfiguracji, cfg_1.
Każda klasa definiuje strukturę typu sl_usbd_XXXX_callbacks_t. Jej celem jest zapewnienie każdej klasie zestawu funkcji zwrotnych, które mają zostać wywołane w przypadku wystąpienia zdarzenia. W każdej klasie znajdują się dwie funkcje zwrotne. Są one przedstawione w poniższej tabeli.
Tabela – typowe funkcje wywołania zwrotnego klasy
Pola Opis .enable Wywoływane, gdy instancja klasy USB zostanie pomyślnie włączona. .disable Wywoływane, gdy instancja klasy USB zostanie wyłączona.
Sygnatura funkcji void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
18/174
Nadview
Nadview
Urządzenie USB CDC ACM Class
Urządzenie USB CDC klasa bazowa ponadview Potrzeby zasobów klasy CDC ACM urządzenia USB z podklasy CDC ACM urządzenia USBview Konfiguracja urządzenia USB CDC ACM Class Guide Programowanie urządzenia USB CDC ACM Class
W tej sekcji opisano klasę Communications Device Class (CDC) i powiązaną podklasę CDC obsługiwane przez stos USB Device firmy Silicon Labs. USB-Device firmy Silicon Labs obsługuje obecnie podklasę Abstract Control Model (ACM), która jest powszechnie używana do emulacji szeregowej.
CDC obejmuje różnorodne urządzenia telekomunikacyjne i sieciowe. Urządzenia telekomunikacyjne obejmują modemy analogowe, telefony analogowe i cyfrowe, adaptery terminali ISDN itp. Na przykładampUrządzenia sieciowe zawierają modemy ADSL i kablowe, adaptery Ethernet oraz koncentratory. CDC definiuje ramy, które obejmują istniejące standardy usług komunikacyjnych, takie jak V.250 (dla modemów w sieci telefonicznej) i Ethernet (dla urządzeń sieci lokalnej), wykorzystując łącze USB. Urządzenie komunikacyjne odpowiada za zarządzanie urządzeniami, zarządzanie połączeniami w razie potrzeby oraz transmisję danych.
CDC definiuje siedem głównych grup urządzeń. Każda grupa należy do modelu komunikacji, który może obejmować kilka podklas. Każda grupa urządzeń ma swój własny dokument specyfikacji, oprócz klasy bazowej CDC. Tych siedem grup to:
Publiczna komutowana sieć telefoniczna (PSTN), urządzenia obejmujące modemy pasma głosowego, telefony i urządzenia emulujące porty szeregowe. Urządzenia sieci ISDN (Integrated Services Digital Network), w tym adaptery terminalowe i telefony. Urządzenia Ethernet Control Model (ECM), w tym urządzenia obsługujące rodzinę IEEE 802 (np. modemy kablowe i ADSL, karty WiFi). Urządzenia Asynchronous Transfer Mode (ATM), w tym modemy ADSL i inne urządzenia podłączone do sieci ATM (stacje robocze, routery, przełączniki LAN). Urządzenia Wireless Mobile Communications (WMC), w tym wielofunkcyjne telefony komórkowe służące do zarządzania komunikacją głosową i transmisją danych. Urządzenia Ethernet Emulation Model (EEM), które wymieniają dane w ramkach Ethernet. Urządzenia Network Control Model (NCM), w tym szybkie urządzenia sieciowe (modemy High Speed Packet Access, urządzenia terminali liniowych).
CDC i powiązana implementacja podklasy są zgodne z następującymi specyfikacjami:
Uniwersalna magistrala szeregowa, definicje klas dla urządzeń komunikacyjnych, wersja 1.2, 3 listopada 2010 r. Uniwersalna magistrala szeregowa, komunikacja, podklasa dla urządzeń PSTN, wersja 1.2, 9 lutego 2007 r.
Urządzenie USB CDC klasa bazowa ponadview
Urządzenie CDC składa się z następujących interfejsów umożliwiających komunikację:
Interfejs klasy komunikacyjnej (CCI) odpowiada za zarządzanie urządzeniami i opcjonalnie za zarządzanie połączeniami.
Zarządzanie urządzeniami umożliwia ogólną konfigurację i sterowanie urządzeniem oraz powiadamianie hosta o zdarzeniach. Zarządzanie połączeniami umożliwia nawiązywanie i kończenie połączeń. Zarządzanie połączeniami może być multipleksowane przez DCI. CCI jest obowiązkowy dla wszystkich urządzeń CDC. Identyfikuje on funkcję CDC poprzez określenie modelu komunikacji obsługiwanego przez urządzenie CDC. Interfejs(y) następujące po CCI mogą być dowolnym zdefiniowanym interfejsem klasy USB, takim jak interfejs audio lub interfejs specyficzny dla dostawcy. Interfejs specyficzny dla dostawcy jest reprezentowany przez DCI.
Interfejs klasy danych (DCI) odpowiada za transmisję danych. Przesyłane i/lub odbierane dane nie podlegają określonym regułom.
Format. Dane mogą być surowymi danymi z linii komunikacyjnej, danymi w zastrzeżonym formacie itd. Wszystkie interfejsy DCI zgodne z CCI można traktować jako interfejsy podrzędne.
Urządzenie CDC musi mieć co najmniej jeden CCI i zero lub więcej DCI. Jeden CCI i każdy podrzędny DCI razem zapewniają hostowi funkcję. Ta możliwość jest również nazywana funkcją. W urządzeniu kompozytowym CDC można mieć kilka
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
19/174
Nadview
Funkcje. W związku z tym urządzenie składałoby się z kilku zestawów CCI i DCI, jak pokazano na rysunku – Urządzenie kompozytowe CDC.
Rysunek – Urządzenie kompozytowe CDC
Urządzenie CDC prawdopodobnie będzie wykorzystywać następującą kombinację punktów końcowych:
Para punktów końcowych sterujących IN i OUT, zwana domyślnym punktem końcowym. Opcjonalny punkt końcowy IN zbiorczy lub przerwania. Para punktów końcowych IN i OUT zbiorczych lub izochronicznych. Należy pamiętać, że stos urządzeń USB Silicon Labs obecnie nie obsługuje izochronicznych punktów końcowych.
Poniższa tabela przedstawia wykorzystanie różnych punktów końcowych i interfejs CDC, za pośrednictwem którego są one używane.
Tabela – Wykorzystanie punktów końcowych CDC
Punkt końcowy
Kontrola W
WYJŚCIE STERUJĄCE
Przerwanie lub zbiorcze IN Zbiorcze lub izochroniczne IN Zbiorcze lub izochroniczne
NA ZEWNĄTRZ
Kierunek
Urządzenie do hosta
Host-urządzenie
Urządzenie do hosta
Urządzenie do hosta
Host-urządzenie
Wykorzystanie interfejsu
CCI
Standardowe żądania dotyczące wyliczeń, żądania specyficzne dla klasy, urządzenia
zarządzanie i opcjonalnie zarządzanie połączeniami.
CCI
Standardowe żądania dotyczące wyliczeń, żądania specyficzne dla klasy, urządzenia
zarządzanie i opcjonalnie zarządzanie połączeniami.
CCI
Powiadomienie o zdarzeniach, takich jak wykrycie dzwonka, stan łącza szeregowego, stan sieci.
DCI
Surowe lub sformatowane dane komunikacyjne.
DCI
Surowe lub sformatowane dane komunikacyjne.
Większość urządzeń komunikacyjnych korzysta z punktu końcowego przerwania w celu powiadomienia hosta o zdarzeniach. Punkty końcowe izochroniczne nie powinny być używane do transmisji danych, gdy protokół zastrzeżony opiera się na retransmisji danych w przypadku błędów protokołu USB. Komunikacja izochroniczna z natury może prowadzić do utraty danych, ponieważ nie posiada mechanizmów ponawiania prób.
Siedem głównych modeli komunikacji obejmuje kilka podklas. Podklasa opisuje sposób, w jaki urządzenie powinno używać interfejsu CCI do zarządzania urządzeniem i połączeniami. Poniższa tabela przedstawia wszystkie możliwe podklasy i modele komunikacji, do których należą.
Tabela – Podklasy CDC
Podklasa
Model sterowania liniowego bezpośredniego Model sterowania abstrakcyjnego
Model komunikacji
PSTN
PSTN
Examplista urządzeń korzystających z tej podklasy
Urządzenia modemowe sterowane bezpośrednio przez hosta USB
Urządzenia emulujące port szeregowy, urządzenia modemowe sterowane za pomocą zestawu poleceń szeregowych
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
20/174
Nadview
Podklasa
Model komunikacji
Examplista urządzeń korzystających z tej podklasy
Model sterowania telefonem
PSTN
Model ISDN sterowania wielokanałowego
Model sterowania CAPI ISDN
Model sterowania ECM sieci Ethernet
Sieci ATM
bankomat
Model sterowania
Model sterowania słuchawką bezprzewodową
WMC
Zarządzanie urządzeniami WMC
Model mobilnej linii bezpośredniej
WMC
OBEX
WMC
Model EEM emulacji Ethernetu
Model kontroli sieci
NCM
Urządzenia telefonii głosowej
Adaptery końcowe o stawce podstawowej, adaptery końcowe o stawce podstawowej, telefony
Adaptery terminalowe o podstawowej stawce, adaptery terminalowe o głównej stawce, telefony, modemy kablowe DOC-SIS, modemy ADSL obsługujące emulację PPPoE, adaptery Wi-Fi (rodzina IEEE 802.11), adaptery IEEE 802.3, modemy ADSL
Mobilny sprzęt końcowy łączący się z urządzeniami bezprzewodowymi
Mobilny sprzęt końcowy łączący się z urządzeniami bezprzewodowymi Mobilny sprzęt końcowy łączący się z urządzeniami bezprzewodowymi
Mobilne urządzenia końcowe łączące się z urządzeniami bezprzewodowymi. Urządzenia wykorzystujące ramki Ethernet jako kolejną warstwę transportu. Nieprzeznaczone do urządzeń routujących i łączących się z internetem. Adaptery IEEE 802.3 przenoszące dużą przepustowość danych w sieci.
Potrzeby zasobów klasy CDC ACM dla urządzeń USB z Core
Za każdym razem, gdy dodasz instancję klasy CDC ACM do konfiguracji USB poprzez wywołanie funkcji sl_usbd_cdc_acm_add_to_configuration(), z rdzenia zostaną przydzielone następujące zasoby.
Ratunek
Interfejsy Interfejsy alternatywne Punkty końcowe Grupy interfejsów
Ilość
2 2 3 1
Należy pamiętać, że te liczby dotyczą każdej konfiguracji. Konfigurując wartości parametrów SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY i SL_USBD_DESCRIPTOR_QUANTITY, należy pamiętać o uwzględnieniu liczby konfiguracji, które zostaną dodane do klasy. W przypadku wartości parametrów SL_USBD_OPEN_ENDPOINTS_QUANTITY, ponieważ punkty końcowe są otwierane tylko wtedy, gdy konfiguracja jest ustawiana przez hosta, wystarczy uwzględnić liczbę punktów końcowych wymaganych dla danej instancji klasy.
Urządzenie USB CDC ACM Subclass Overview
Klasa bazowa CDC składa się z interfejsu klasy komunikacyjnej (CCI) i interfejsu klasy danych (DCI), które omówiono szczegółowo w sekcji Klasa bazowa CDC urządzenia USBview W tej sekcji omówiono interfejs CCI typu ACM. Składa się on z domyślnego punktu końcowego dla elementu zarządzania i punktu końcowego przerwania dla elementu powiadomień. Para punktów końcowych zbiorczych służy do przesyłania nieokreślonych danych przez interfejs DCI.
Podklasa ACM jest używana przez dwa typy urządzeń komunikacyjnych:
Urządzenia obsługujące polecenia AT (np. modemy głosowe). Urządzenia emulujące port szeregowy, nazywane również urządzeniami wirtualnego portu COM.
Istnieje kilka żądań specyficznych dla podklasy ACM. Umożliwiają one sterowanie i konfigurację urządzenia. Pełną listę i opis wszystkich żądań ACM można znaleźć w specyfikacji.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
21/174
Nadview Podklasa dla urządzeń PSTN, rewizja 1.2, 9 lutego 2007 r., sekcja 6.2.2.
Z tej listy podklasa Silicon Labs9 ACM obsługuje następujące elementy:
Tabela – żądania ACM obsługiwane przez Silicon Labs
Opis żądania podklasy
Ustaw funkcję komunikacji Pobierz funkcję komunikacji Wyczyść funkcję komunikacji
Host wysyła to żądanie, aby kontrolować ustawienia danej funkcji komunikacyjnej. Nie jest używane do emulacji szeregowej.
Host wysyła to żądanie, aby uzyskać aktualne ustawienia danej funkcji komunikacyjnej. Nie jest używane do emulacji szeregowej.
Host wysyła to żądanie w celu wyczyszczenia ustawień danej funkcji komunikacyjnej. Nie jest używane do emulacji szeregowej.
Ustaw kodowanie linii
Host wysyła to żądanie w celu skonfigurowania ustawień urządzenia ACM: szybkości transmisji, liczby bitów stopu, typu parzystości i liczby bitów danych. W przypadku emulacji portu szeregowego żądanie to jest wysyłane automatycznie przez terminal szeregowy za każdym razem, gdy konfigurowane są ustawienia portu szeregowego dla otwartego wirtualnego portu COM.
GetLineCoding
Host wysyła to żądanie, aby uzyskać aktualne ustawienia ACM (szybkość transmisji, bity stopu, parzystość, bity danych). W przypadku emulacji szeregowej, terminale szeregowe wysyłają to żądanie automatycznie podczas otwierania wirtualnego portu COM.
SetControlLineState. Host wysyła to żądanie, aby kontrolować nośną modemów półdupleksowych i wskazać, czy urządzenie terminala danych (DTE) jest gotowe, czy nie. W przypadku emulacji szeregowej, DTE jest terminalem szeregowym. W przypadku emulacji szeregowej, niektóre terminale szeregowe umożliwiają wysłanie tego żądania z ustawionymi elementami sterującymi.
Ustaw przerwę
Host wysyła to żądanie, aby wygenerować przerwę w stylu RS-232. W przypadku emulacji szeregowej niektóre terminale szeregowe umożliwiają wysłanie tego żądania.
Podklasa ACM Silicon Labs9 wykorzystuje punkt końcowy IN przerwania do powiadamiania hosta o aktualnym stanie łącza szeregowego.
stan linii to mapa bitowa informująca hosta o:
Dane odrzucone z powodu przepełnienia Błąd parzystości Błąd ramki Stan wykrywania sygnału pierścieniowego Stan mechanizmu wykrywania przerwy Stan nośnej transmisji Stan wykrywania nośnej odbiornika
Implementacja podklasy ACM Silicon Labs9 jest zgodna z następującą specyfikacją:
Uniwersalna magistrala szeregowa, komunikacja, podklasa dla urządzeń PSTN, rewizja 1.2, 9 lutego 2007 r.
Konfiguracja klasy CDC ACM urządzenia USB
W tej sekcji omówiono sposób konfiguracji klasy CDC ACM (Communication Device Class, Abstract Control Model). Istnieją dwie grupy parametrów konfiguracyjnych:
Konfiguracje specyficzne dla aplikacji urządzenia USB CDC ACM klasy Konfiguracje instancji urządzenia USB CDC ACM klasy
Konfiguracje specyficzne dla aplikacji urządzenia USB CDC ACM Class
Klasa bazowa CDC Podklasa ACM
Klasa bazowa CDC
Po pierwsze, aby skorzystać z modułu klasy CDC urządzenia USB Silicon Labs, należy dostosować konfigurację CDC w czasie kompilacji (#define-s) do potrzeb aplikacji. Są one zgrupowane w nagłówku sl_usbd_core_config.h. file w sekcji CDC. Ich celem jest poinformowanie modułu urządzenia USB o liczbie obiektów USB CDC, które mają zostać przydzielone.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
22/174
Nadview
Poniższa tabela opisuje każde pole konfiguracji dostępne w tej strukturze konfiguracji.
Tabela – Konfiguracja CDC urządzenia USB Definiuje
Nazwa konfiguracji
SL_USBD_CDC_CL JAKO S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY
Opis
Liczba instancji klasy, które zostaną przydzielone poprzez wywołanie funkcji
sl_usbd_cdc_acm_create_instance() .
Liczba konfiguracji. Instancje klasy ACM można dodać do jednej lub większej liczby konfiguracji aaaa za pomocą polecenia sl_usbd_cdc_acm_add_to_configuration().
Łączna liczba interfejsów danych (DCI) dla wszystkich funkcji CDC. Każda funkcja CDC ACM dodana do funkcji sl_usbd_cdc_acm_create_instance() spowoduje utworzenie interfejsu dd dt.
Wartość domyślna
2
1
2
Podklasa ACM
Podklasa ACM ma jedną konfigurację kompilacji, pokazaną w poniższej tabeli.
Tabela – Konfiguracja CDC ACM urządzenia USB Definiowanie
Nazwa konfiguracji
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Opis
Konfiguruje liczbę instancji podklas, które zostaną przydzielone za pomocą wywołania
funkcja sl_usbd_cdc_acm_create_instance() .
Wartość domyślna
2
Konfiguracje instancji klasy CDC ACM urządzenia USB
Ta sekcja definiuje konfiguracje związane z instancjami klasy szeregowej CDC ACM. Tworzenie instancji klasy, interwał stanu linii, możliwości zarządzania połączeniami, p_acm_callbacks
Tworzenie instancji klasy
Aby utworzyć instancję klasy szeregowej CDC ACM, wywołaj funkcję Ta sl_usbd_cdc_acm_create_instance(). Ta funkcja przyjmuje trzy argumenty konfiguracyjne, jak opisano tutaj.
interwał_stanu_linii
Jest to interwał (w milisekundach), w którym instancja klasy szeregowej CDC ACM będzie raportować powiadomienia o stanie linii do hosta T aa. Jego wartość musi być potęgą liczby dwa (1, 2, 4, 8, 16 itd.).
możliwości_zarządzania_połączeniami
Mapa bitowa możliwości zarządzania połączeniami. Możliwe wartości mapy bitowej to:
Wartość (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Opis
Urządzenie samo zarządza połączeniami. Urządzenie może wysyłać/odbierać informacje dotyczące zarządzania połączeniami przez interfejs klasy danych.
p_acm_callbacks
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
23/174
Nadview
aa M aa p_acm_callbacks to wskaźnik do struktury typu sl_usbd_cdc_acm_callbacks_t. Jego celem jest dostarczenie do CDC AC Cl ss zestawu funkcji wywołania zwrotnego, które mają zostać wywołane w przypadku wystąpienia zdarzenia CDC ACM. Nie wszystkie wywołania zwrotne są obowiązkowe, a wskaźnik null (NULL) może zostać przekazany do zmiennej struktury callbacks, gdy wywołanie zwrotne nie jest potrzebne. Poniższa tabela opisuje każde pole konfiguracyjne dostępne w tej strukturze konfiguracji.
Tabela – struktura konfiguracji sl_usbd_cdc_acm _callbacks_t
Pola
Opis
.włączać
Wywoływane, gdy instancja klasy USB jest włączona
skutecznie.
.wyłączyć
Wywoływane, gdy instancja klasy USB jest wyłączona.
.line_control_changed Wywoływane po otrzymaniu zmiany sterowania linią.
line_coding_changed Wywoływane, gdy zostanie odebrana zmiana kodowania linii.
Podpis funkcji
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t podklasa_nbr, uint8_t zdarzenie, uint8_t zdarzenie_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t podklasa_nbr, podklasa_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Zobacz sekcję Rejestrowanie wywołań zwrotnych powiadomień o zdarzeniach, aby zapoznać się z funkcjami wywołania zwrotnego, np.ample.
Przewodnik programowania urządzeń USB CDC ACM Class
W tej sekcji wyjaśniono, jak korzystać z klasy modelu sterowania abstrakcyjnego CDC. Inicjowanie urządzenia USB, klasa CDC ACM, dodawanie instancji klasy CDC ACM do urządzenia USB, komunikacja za pomocą klasy CDC ACM
Inicjalizacja urządzenia USB CDC ACM Class
Aby dodać funkcjonalność klasy CDC ACM do swojego urządzenia, musisz najpierw zainicjować klasę bazową CDC i podklasę ACM, wywołując funkcje sl_usbd_cdc_init() i sl_usbd_cdc_acm_init(). Poniższy przykład pokazuje, jak wywołać funkcje sl_usbd_cdc_init() i sl_usbd_cdc_acm_init() przy użyciu domyślnych argumentów.
Example – Inicjalizacja klasy CDC ACM
sl_status_t status;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Dodawanie instancji klasy CDC ACM urządzenia USB do urządzenia
Aby dodać funkcjonalność klasy CDC ACM do swojego urządzenia, musisz utworzyć instancję, a następnie dodać ją do konfiguracji swojego urządzenia.
Tworzenie instancji klasy CDC ACM
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
24/174
Nadview
Dodawanie instancji klasy CDC ACM do konfiguracji urządzenia Rejestrowanie wywołań zwrotnych powiadomień o zdarzeniach
Tworzenie instancji klasy CDC ACM
Utwórz instancję klasy CDC AC, wywołując funkcję sl_usbd_cdc_acm_create_instance(). Poniższy przykład pokazuje, jak utworzyć instancję klasy CDC AC za pomocą funkcji sl_usbd_cdc_acm_create_instance().
Example – Tworzenie funkcji CDC ACM za pomocą sl_usbd_cdc_acm_create_instance()
uint8_t numer_podklasy; sl_status_t status;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Dodawanie instancji klasy CDC ACM do konfiguracji urządzenia
Po utworzeniu instancji klasy CDC ACM można dodać ją do konfiguracji, wywołując funkcję
sl_usbd_cdc_acm_add_to_configuration() .
Poniższy przykład pokazuje, jak wywołać funkcję sl_usbd_cdc_acm_add_to_configuration().
Example – Wywołanie USBD ACM sl_usbd_cdc_acm_add_to_configuration()
sl_status_t status;
status = sl_usbd_cdc_acm_add_to_configuration(subclass_nbr,
(1)
config_nbr_fs);
(2)
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
aaa (1) Numer klasy, który należy dodać do konfiguracji zwróconej przez sl_usbd_cdc_acm_create_instance(). (2) Numer konfiguracji (tutaj dodawany do konfiguracji pełnej prędkości).
Rejestrowanie wywołań zwrotnych powiadomień o zdarzeniach
Klasa Serial CDC ACM może powiadamiać aplikację o wszelkich zmianach w sterowaniu linią lub kodzie za pomocą funkcji wywołania zwrotnego powiadomień. Strukturę funkcji wywołania zwrotnego można przekazać jako argument podczas tworzenia instancji ACM. Należy pamiętać, że te wywołania zwrotne są opcjonalne. Np.ample – Rejestracja wywołań zwrotnych CDC ACM ilustruje wykorzystanie funkcji rejestracji wywołań zwrotnych. Np.ample – Implementacja wywołań zwrotnych CDC ACM pokazuje byłegoampplik implementacji funkcji wywołania zwrotnego.
Example – Rejestracja zwrotna CDC ACM
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
25/174
Nadview
uint8_t numer_podklasy; sl_status_t status;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { aplikacja_usbd_cdc_acm_connect, aplikacja_usbd_cdc_acm_disconnect, aplikacja_usbd_cdc_acm_line_control_zmieniona, aplikacja_usbd_cdc_acm_line_coding_zmieniona, };
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Example – Implementacja wywołań zwrotnych CDC ACM
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
numer_podklasy,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t nowa_prędkość_transmisji;
uint8_t parzystość_nowa;
uint8_t bity_stopu_nowe;
uint8_t bity_danych_nowe;
/* TODO Zastosuj kodowanie nowej linii.*/ 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;
zwróć (prawda);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO Zastosuj nowe sterowanie wierszem. */ 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) ? prawda : fałsz;
}
(1) Ważne jest, aby ta funkcja zwróciła fałsz, jeśli kodowanie linii nie powiodło się. W przeciwnym razie zwróć prawdę.
Komunikacja za pomocą klasy CDC ACM
Status seryjny
Kodowanie linii Kontrola linii
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
26/174
Nadview
Komunikacja instancji podklasy stanu linii
Status seryjny
Kodowanie linii
Host USB steruje kodowaniem linii (szybkością transmisji, parzystością itp.) urządzenia CDC ACM. W razie potrzeby aplikacja odpowiada za ustawienie kodowania linii. Dostępne są dwie funkcje pobierania i ustawiania bieżącego kodowania linii, jak opisano w poniższej tabeli.
Tabela – Funkcje kodowania linii CDC ACM
Funkcjonować
sl_usbd_cdc_acm_g et_line _cod ing ()
sl_usbd_cdc_acm_set_line_cod ing ()
Opis
Twoja aplikacja może uzyskać bieżące ustawienia kodowania linii z hosta za pomocą żądań SetLineCoding lub za pomocą funkcji sl_usbd_cdc_acm_set_line_coding().
Twoja aplikacja może ustawić kodowanie linii. Host może pobrać ustawienia za pomocą żądania GetLineCoding.
Kontrola linii
Host USB steruje sterowaniem liniowym (piny RTS i DTR, sygnał przerwania itd.) urządzenia CDC ACM. W razie potrzeby za sterowanie linią odpowiada aplikacja. Dostępna jest funkcja pobierania i ustawiania bieżących parametrów linii, zgodnie z opisem w poniższej tabeli.
Tabela – Funkcje sterowania linią CDC ACM
Funkcjonować
sl_usb d _cd c_acm_g et_line _contr o l_state ()
Twoja aplikacja może uzyskać aktualny stan linii sterującej ustawiony przez hosta za pomocą żądania SetControlLineState.
Stan linii
Host USB pobiera stan linii w regularnych odstępach czasu. Twoja aplikacja musi aktualizować stan linii po każdej zmianie. W razie potrzeby Twoja aplikacja odpowiada za ustawienie stanu linii. Dostępne są dwie funkcje pobierania i ustawiania bieżących parametrów linii, jak opisano w poniższej tabeli.
Tabela – Funkcje stanu linii CDC ACM
Funkcjonować
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Twoja aplikacja może ustawić dowolne zdarzenie (zdarzenia) stanu linii. Podczas ustawiania stanu linii, do hosta wysyłany jest sygnał przerwania IN, informujący o zmianie stanu linii szeregowej.
Aplikacja może wyczyścić dwa zdarzenia stanu linii: nośną transmisji i wykrycie nośnej odbiornika. Wszystkie pozostałe zdarzenia są automatycznie czyszczone przez podklasę emulacji szeregowej ACM.
Komunikacja instancji podklasy
Podklasa ACM firmy Silicon Labs oferuje następujące funkcje do komunikacji z hostem. Więcej informacji na temat parametrów funkcji9 można znaleźć w dokumentacji CDC ACM Subclass Functions.
Nazwa funkcji
sl_usb d _cd c_acm_ read () sl_usb d _cd c_acm_write ()
Działanie
Odbiera dane z hosta przez punkt końcowy zbiorczego wyjścia (OUT). Ta funkcja jest blokująca. Wysyła dane do hosta przez punkt końcowy zbiorczego wejścia (IN). Ta funkcja jest blokująca.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
27/174
Nadview
Tabela – Podsumowanie interfejsu API komunikacji CDC ACM aaaaa sl_usbd_cdc_acm_read() i sl_usbd_cdc_acm_write() zapewniają komunikację synchroniczną, co oznacza, że transmisja jest blokowana. Innymi słowy, po wywołaniu funkcji aplikacja blokuje się do momentu zakończenia transmisji z błędem lub bez. Można określić limit czasu, aby uniknąć oczekiwania w nieskończoność.ampPoniżej pokazano przykład odczytu i zapisuampPlik, który odbiera dane z hosta za pomocą punktu końcowego zbiorczego OUT i wysyła dane do hosta za pomocą punktu końcowego zbiorczego IN.
Wykaz – Odczyt i zapis seryjny Example
__WYRÓWNANE(4) uint8_t rx_buf[2];
__WYRÓWNANE(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_cdc_acm_read(subclass_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
status = sl_usbd_cdc_acm_write(subclass_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
T aaaaa M (1) Numer instancji klasy ss utworzony za pomocą funkcji sl_usbd_cdc_acm_create_instance() zapewnia wewnętrzne odwołanie do podklasy AC w celu skierowania transferu do właściwego punktu końcowego zbiorczego OUT lub IN. (2) Twoja aplikacja musi zapewnić, że bufor przekazany do funkcji jest wystarczająco duży, aby pomieścić wszystkie dane. W przeciwnym razie mogą wystąpić problemy z synchronizacją. (3) Aby uniknąć sytuacji nieskończonego blokowania, określ limit czasu wyrażony w milisekundach. Wartość 809 powoduje, że zadanie aplikacji czeka w nieskończoność. (4) Aplikacja zapewnia zainicjowany bufor transmisji.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
28/174
Nadview
Nadview
Urządzenie USB klasy HID
Urządzenie USB HID klasy Overview Potrzeby zasobów klasy HID urządzenia USB z konfiguracji klasy HID urządzenia USB Podręcznik programowania klasy HID urządzenia USB Zadanie okresowych raportów wejściowych HID
W tej sekcji opisano klasę urządzeń interfejsu człowieka (HID) obsługiwaną przez urządzenie USB Silicon Labs.
Klasa HID obejmuje urządzenia wykorzystywane przez ludzi do sterowania operacjami komputerowymi, takie jak klawiatury, myszy, urządzenia wskazujące i urządzenia do gier.
Klasę HID można również stosować w urządzeniach kompozytowych zawierających elementy sterujące, takie jak pokrętła, przełączniki, przyciski i suwaki. Na przykładampSterowanie dźwiękiem, wyciszaniem i głośnością w zestawie słuchawkowym audio odbywa się za pomocą funkcji HID. Klasa HID może wymieniać dane w dowolnym celu, wykorzystując jedynie przesyłanie sygnałów sterujących i przerwań.
Klasa HID jest jedną z najstarszych i najpowszechniej używanych klas USB. Wszystkie główne systemy operacyjne hosta udostępniają natywny sterownik do zarządzania urządzeniami HID, dlatego wiele urządzeń różnych producentów współpracuje z klasą HID. Klasa ta obejmuje również różnego rodzaju urządzenia wyjściowe, takie jak diody LED, sygnały audio, dotykowe sprzężenie zwrotne itp.
Implementacja HID jest zgodna z następującymi specyfikacjami:
Definicja klasy urządzeń dla urządzeń interfejsu użytkownika (HID), 27.06.2001, wersja 1.11. Tabele wykorzystania uniwersalnej magistrali szeregowej HID, 28.10.2004, wersja 1.12.
Urządzenie USB HID klasy Overview
Nadview
Urządzenie HID składa się z następujących punktów końcowych:
Para punktów końcowych wejścia i wyjścia sterowania zwana domyślnym punktem końcowym Punkt końcowy wejścia przerwania Opcjonalny punkt końcowy wyjścia przerwania
Poniższa tabela opisuje wykorzystanie różnych punktów końcowych:
Tabela – Wykorzystanie punktów końcowych klasy HID
Użycie kierunku punktu końcowego
Kontrola W
Kontrola
NA ZEWNĄTRZ
Przerwanie IN
Przerywać
NA ZEWNĄTRZ
Urządzenie do hosta
Host-urządzenie
Urządzenie do hosta
Host-urządzenie
Standardowe żądania enumeracji, żądania specyficzne dla klas i komunikacja danych (dane wejściowe, raporty o funkcjach wysyłane do hosta za pomocą żądania GET_REPORT). Standardowe żądania enumeracji, żądania specyficzne dla klas i komunikacja danych (dane wyjściowe, raporty o funkcjach otrzymywane z hosta za pomocą żądania SET_REPORT). Komunikacja danych (dane wejściowe i raporty o funkcjach).
Komunikacja danych (raporty wyjściowe i dotyczące funkcji).
Raport
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
29/174
Nadview
Host i urządzenie HID wymieniają dane za pomocą raportów. Raport zawiera sformatowane dane, które dostarczają informacji o elementach sterujących i innych elementach fizycznych urządzenia HID. Element sterujący może być modyfikowany przez użytkownika i obsługuje pewien aspekt urządzenia. Na przykładampNp. kontrolką może być przycisk myszy lub klawiatury, przełącznik itp. Inne elementy informują użytkownika o stanie niektórych funkcji urządzenia. Na przykładampdiody LED na klawiaturze informują użytkownika o włączonym klawiszu Caps Lock, aktywnej klawiaturze numerycznej itp.
Format i sposób wykorzystania danych raportu są rozumiane przez hosta poprzez analizę zawartości deskryptora raportu. Analiza zawartości odbywa się za pomocą parsera. Deskryptor raportu opisuje dane dostarczane przez każdy element sterujący w urządzeniu. Składa się on z elementów, które są fragmentami informacji o urządzeniu i składają się z 1-bajtowego prefiksu oraz zmiennej długości.
dane. Aby uzyskać więcej szczegółów na temat formatu elementu, zapoznaj się z
1.11=, sekcja 5.6 i 6.2.2.
Istnieją trzy główne typy przedmiotów:
Element główny definiuje lub grupuje pewne typy pól danych.
Element globalny opisuje charakterystykę danych kontrolki.
Element lokalny opisuje charakterystykę danych kontrolki.
Każdy typ elementu jest definiowany przez różne funkcje. Funkcję elementu można również nazwać tagFunkcję elementu można postrzegać jako podelement należący do jednego z trzech głównych typów elementów. Poniższa tabela przedstawia krótki przeglądview funkcji elementu w każdym typie elementu. Pełny opis elementów w każdej kategorii znajdziesz w
Tabela – Opis funkcji elementu dla każdego typu elementu
Element Typ elementu Funkcja
Opis
Główne wejście
Opisuje informacje o danych dostarczonych przez jeden lub więcej elementów sterujących fizycznych.
Wyjście główne Opisuje dane wysłane do urządzenia.
Główna cecha
Opisuje informacje o konfiguracji urządzenia wysyłane do urządzenia lub odbierane z urządzenia, które wpływają na ogólne zachowanie urządzenia lub jednego z jego komponentów.
Główna kolekcja Grupuj powiązane elementy (wejście, wyjście lub funkcja).
Główny koniec Zamyka kolekcję. Kolekcja
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
30/174
Nadview
Element Typ elementu Funkcja
Opis
Strona globalnego wykorzystania
Identyfikuje funkcję dostępną w urządzeniu.
Globalna logiczna Definiuje dolną granicę zgłaszanych wartości w jednostkach logicznych. Minimalna
Globalna logiczna Definiuje górny limit raportowanych wartości w jednostkach logicznych. Maksymalna
Globalny fizyczny Definiuje dolną granicę zgłaszanych wartości w jednostkach fizycznych, czyli logiczne minimum wyrażone w jednostkach fizycznych.
Globalny fizyczny Definiuje górny limit raportowanych wartości w jednostkach fizycznych, czyli Logiczne Maksymalne Maksimum wyrażone w jednostkach fizycznych.
Jednostka globalna
Oznacza wykładnik jednostkowy w systemie dziesiętnym. Zakres wykładnika wynosi od -8 do +7.
Wykładnik potęgowy
Jednostka globalna
Wskazuje jednostkę podawanych wartości. Na przykład jednostki długości, masy, temperatury itp.
Globalny rozmiar raportu
Określa rozmiar pól raportu w bitach.
Globalny identyfikator raportu Wskazuje prefiks dodany do konkretnego raportu.
Globalna liczba raportów
Określa liczbę pól danych dla elementu.
Globalny Push
Umieszcza kopię tabeli stanów elementów globalnych na stosie procesora.
Global Pop
Zastępuje tabelę stanów elementów ostatnią strukturą ze stosu.
Użycie lokalne
Reprezentuje indeks wskazujący konkretne zastosowanie na stronie zastosowania. Wskazuje sugerowane przez dostawcę zastosowanie dla konkretnej kontrolki lub grupy kontrolek. Użycie dostarcza deweloperowi aplikacji informacji o tym, co kontrolka faktycznie mierzy.
Użycie lokalne
Definiuje początkowe użycie powiązane z tablicą lub mapą bitową.
Minimum
Użycie lokalne
Definiuje końcowe zastosowanie powiązane z tablicą lub mapą bitową.
Maksymalny
Oznaczenie lokalne Określa część ciała używaną do kontroli. Indeks wskazuje na oznaczenie w polu fizycznym.
Indeks
deskryptor.
Lokalny znacznik Definiuje indeks początkowego znacznika powiązanego z tablicą lub mapą bitową. Minimalny
Lokalny znacznik Definiuje indeks końcowego znacznika powiązanego z tablicą lub mapą bitową. Maksymalny
Lokalny indeks ciągu
Indeks ciągu dla deskryptora ciągu. Umożliwia powiązanie ciągu z konkretnym elementem lub kontrolką.
Lokalny ciąg znaków
Określa pierwszy indeks ciągu podczas przypisywania grupy kolejnych ciągów do kontrolek w tablicy
Minimalna lub bitmapowa.
Lokalny Lokalny
Maksymalna wartość ciągu
Rozgranicznik
Określa ostatni indeks ciągu podczas przypisywania grupy sekwencyjnych ciągów do kontrolek w tablicy lub mapie bitowej.
Definiuje początek lub koniec zestawu elementów lokalnych.
Dane kontrolne muszą definiować co najmniej następujące elementy:
Główne elementy wejściowe, wyjściowe lub funkcyjne Użycie Element lokalny Strona użycia Element globalny Minimum logiczne Element globalny Maksimum logiczne Element globalny Rozmiar raportu Element globalny
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
31/174
Nadview
Liczba raportów Element globalny. Poniższa tabela przedstawia reprezentację zawartości deskryptora raportu myszy z perspektywy parsera HID hosta. Mysz ma trzy przyciski (lewy, prawy i kółko). Kod przedstawiony w przykładzieampPoniżej znajduje się implementacja kodu odpowiadająca tej reprezentacji deskryptora raportu myszy.
Rysunek – Zawartość deskryptora raportu z parsera hosta HID View
(1) Funkcja elementu Strona użytkowania określa ogólną funkcję urządzenia. W tym przykładzieampczyli urządzenie HID należy do
ogólny element sterujący pulpitem.
(2) Kolekcja aplikacji grupuje elementy główne, które mają wspólny cel i mogą być znane aplikacjom. Na diagramie grupa składa się z trzech elementów głównych wejściowych. W przypadku tej kolekcji sugerowanym zastosowaniem elementów sterujących jest mysz, zgodnie z oznaczeniem „Użycie”. (3) Kolekcje zagnieżdżone mogą być używane w celu uzyskania bardziej szczegółowych informacji na temat użycia pojedynczej kontrolki lub grupy kontrolek w aplikacjach. W tym przykładzieamp„Import fizyczny kolekcji”, zagnieżdżony w aplikacji kolekcji, składa się z tych samych trzech elementów wejściowych, które tworzą aplikację kolekcji. Portfel fizyczny kolekcji jest używany dla zestawu elementów danych, które reprezentują punkty danych zebrane w jednym punkcie geometrycznym. W przypadku…ampsugerowanym zastosowaniem jest wskaźnik, jak wskazano w elemencie „Użycie”. W tym przypadku zastosowanie wskaźnika odnosi się do współrzędnych położenia myszy, a oprogramowanie systemowe będzie tłumaczyć współrzędne myszy na ruch kursora ekranowego. (4) Możliwe są również zagnieżdżone strony użycia, które podają więcej szczegółów na temat pewnego aspektu ogólnej funkcji urządzenia. W tym przypadku dwa elementy „Wejścia” są zgrupowane i odpowiadają przyciskom myszy. Jeden element „Wejścia” definiuje trzy przyciski myszy (prawy, lewy i kółko) pod względem liczby pól danych dla elementu (element „Liczba raportów”), rozmiaru pola danych (element „Rozmiar raportu”) oraz możliwych wartości dla każdego pola danych (elementy „Minimum i maksimum użycia”, „Logiczne minimum i maksimum”). Drugi element „Wejścia” to 13-bitowa stała, umożliwiająca wyrównanie danych raportu wejściowego na granicy bajtów. Ten element „Wejścia” służy wyłącznie do wypełnienia. (5) Inna zagnieżdżona strona użycia odnosząca się do ogólnego elementu sterującego pulpitu jest zdefiniowana dla współrzędnych położenia myszy. Na tej stronie użytkowania element Dane wejściowe opisuje pola danych odpowiadające osiom x i y, zgodnie ze specyfikacją dwóch elementów Użytkowanie.
rzeczy.
Po przeanalizowaniu poprzedniej zawartości deskryptora raportu myszy, parser HID hosta jest w stanie zinterpretować dane raportu wejściowego przesłane przez urządzenie z przerwaniem transferu IN lub w odpowiedzi na żądanie GET_REPORT. Dane raportu wejściowego odpowiadające deskryptorowi raportu myszy przedstawiono na rysunku – Zawartość deskryptora raportu z parsera HID hosta. View is
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
32/174
Nadview
pokazano w poniższej tabeli. Całkowity rozmiar danych raportu wynosi 4 bajty. Różne typy raportów mogą być wysyłane przez ten sam punkt końcowy. W celu rozróżnienia różnych typów raportów do raportu danych dodawany jest 1-bajtowy prefiks identyfikatora raportu. Jeśli w raporcie użyto identyfikatora raportu,ampW przypadku raportu myszy całkowity rozmiar danych raportu wyniósłby 5 bajtów.
Tabela – Raport wejściowy wysłany do hosta i odpowiadający stanowi myszy z 3 przyciskami
Przesunięcie bitowe
0 1 2 3 16 24
Liczba bitów 1 1 1 13 8 8
Opis Przycisk 1 (lewy przycisk). Przycisk 2 (prawy przycisk). Przycisk 3 (kółko). Nieużywane. Pozycja na osi X. Pozycja na osi Y.
Deskryptor fizyczny wskazuje część lub części ciała, które mają aktywować element sterujący lub elementy sterujące. Aplikacja może wykorzystać te informacje do przypisania funkcjonalności elementowi sterującemu urządzenia. Deskryptor fizyczny jest opcjonalnym deskryptorem specyficznym dla klasy, a większość urządzeń ma z jego używania niewielkie korzyści. Zobacz
Potrzeby zasobów klasy HID urządzenia USB z Core
Za każdym razem, gdy dodasz instancję klasy HID do konfiguracji USB poprzez wywołanie funkcji sl_usbd_hid_add_to_configuration(), z rdzenia zostaną przydzielone następujące zasoby.
Ratunek
Interfejsy Interfejsy alternatywne Punkty końcowe Grupy interfejsów
Ilość
1 1 1 (2 jeśli punkt końcowy przerwania OUT jest włączony) 0
Należy pamiętać, że te liczby dotyczą każdej konfiguracji. Konfigurując wartości parametrów SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY i SL_USBD_DESCRIPTOR_QUANTITY, należy pamiętać o uwzględnieniu liczby konfiguracji, które zostaną dodane do klasy. W przypadku wartości parametrów SL_USBD_OPEN_ENDPOINTS_QUANTITY, ponieważ punkty końcowe są otwierane tylko wtedy, gdy konfiguracja jest ustawiana przez hosta, wystarczy uwzględnić liczbę punktów końcowych wymaganych dla danej instancji klasy.
Konfiguracja klasy HID urządzenia USB
Do konfiguracji klasy HID stosuje się dwie grupy parametrów konfiguracyjnych:
Konfiguracje specyficzne dla aplikacji klasy HID urządzenia USB Konfiguracje instancji klasy HID urządzenia USB
Konfiguracje specyficzne dla aplikacji klasy HID urządzenia USB
Po pierwsze, aby użyć modułu klasy HID urządzenia USB Silicon Labs, należy dostosować definicje konfiguracji HID w czasie kompilacji do potrzeb aplikacji. Są one zgrupowane w nagłówku sl_usbd_core_config.h. file w sekcji HID. Można je podzielić na dwie sekcje: konfiguracje ilościowe i konfiguracje zadań HID. Konfiguracje ilościowe służą do informowania modułu urządzenia USB o liczbie obiektów USB HID do przydzielenia.
Poniższa tabela opisuje każdą zdefiniowaną konfigurację.
Tabela – Konfiguracja HID urządzenia USB Definiuje
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
33/174
Nadview
Nazwa konfiguracji
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_ILOŚĆ
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Opis
Liczba instancji klasy, które zostaną przydzielone poprzez wywołanie funkcji
sl_usbd_hid_create_instance() .
Liczba konfiguracji. Instancje klasy HID można dodać do jednej lub więcej konfiguracji aaaa, używając funkcji sl_usbd_hid_add_to_configuration(). Konfiguruje całkowitą liczbę identyfikatorów raportów do przydzielenia.
Konfiguruje całkowitą liczbę elementów Push/Pop do przydzielenia.
Zadanie timera obsługuje wszystkie operacje HID oparte na timerze. Ta konfiguracja pozwala ustawić rozmiar stosu (w bajtach). Priorytet zadania HID. Jest to priorytet CMSIS-RTOS2.
Wartość domyślna
2 1 2 0 2048
osPriorityHigh
Konfiguracje instancji klasy HID urządzenia USB Tworzenie instancji podklasy
kod_kraju_protokołu
interval_in i interval_out p_hid_callback Deskryptor raportu klasy HID Example Ta sekcja definiuje konfiguracje związane z instancjami klasy HID.
Tworzenie instancji klasy
Utworzenie instancji klasy HID odbywa się poprzez wywołanie funkcji sl_usbd_hid_create_instance(), która przyjmuje kilka argumentów konfiguracyjnych opisanych poniżej.
podklasa
Kod podklasy HID. Możliwe wartości to:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Urządzenie HID korzystające z podklasy boot musi używać standardowych formatów raportów. Więcej informacji na temat kodów podklas można znaleźć w sekcji 4.2 specyfikacji HID w wersji 1.11.
protokół
Protokół używany przez urządzenie HID. Możliwe wartości to:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Jeśli funkcją HID jest mysz, protokół powinien być ustawiony na SL_USBD_HID_PROTOCOL_MOUSE. Jeśli jest to klawiatura, protokół powinien być ustawiony na SL_USBD_HID_PROTOCOL_KBD. W przeciwnym razie protokół powinien być ustawiony na SL_USBD_HID_PROTOCOL_NONE. Więcej informacji na temat kodów podklas można znaleźć w sekcji 4.3 specyfikacji HID, wersja 1.11.
kod_kraju
Identyfikator kodu kraju. Możliwe wartości to:
SL_USBD_HID_KOD_KRAJU_NIE_OBSŁUGIWANY
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
34/174
Nadview
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODE_CZECH_REPUBLIC SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_HID_COUNTRY_CODE_HEBREW SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AND SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL AND SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TUREKISH_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
Kod kraju identyfikuje kraj, dla którego zlokalizowany jest sprzęt. Większość sprzętu nie jest zlokalizowana, dlatego ten kod błędu wyglądałby następująco: SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Klawiatury mogą jednak używać tego pola do wskazania języka klawiszy.
Więcej informacji na temat kodów krajów można znaleźć w rozdziale 6.2.1 specyfikacji HID w wersji 1.11.
interwał_wejściowy i interwał_wyjściowy
interval_in i interval_out reprezentują interwał sondowania punktu końcowego przerwania IN i punktu końcowego przerwania OUT.
Reprezentuje interwał sondowania punktu końcowego w milisekundach. Ustawienie tej wartości zależy od tego, jak często urządzenie jest skłonne generować nowy raport dla hosta. Na przykład, jeśli raport jest generowany co 16 milisekund, interwał powinien wynosić 16 lub mniej.
Wartość musi być potęgą liczby 2 (1, 2, 4, 8, 16 itd.).
interval_out v lue jest ignorowany, jeśli ctrl_rd_en jest ustawione na true.
p_hid_callback
aaaa p_hid_callback to wskaźnik do struktury typu sl_usbd_hid_callbacks_t. Jego celem jest dostarczenie HID Cl ss zestawu funkcji wywołania zwrotnego, które mają zostać wywołane w przypadku wystąpienia zdarzenia HID.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
35/174
Nadview
Nie wszystkie wywołania zwrotne są obowiązkowe. Wskaźnik null (NULL) można przekazać do zmiennej struktury wywołań zwrotnych, gdy wywołanie zwrotne nie jest potrzebne. Poniższa tabela opisuje każde pole konfiguracji dostępne w tej strukturze konfiguracji.
Tabela – struktura konfiguracji sl_usbd_hid_callbacks_t
Pola
Opis
Podpis funkcji
.włącz .wyłącz .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Wywoływane po pomyślnym włączeniu instancji klasy USB. Wywoływane po wyłączeniu instancji klasy USB.
Wywoływana podczas tworzenia instancji HID w celu przekazania deskryptora raportu. Dla każdej funkcji HID należy podać deskryptor raportu. Deskryptor raportu wskazuje hostowi, w jaki sposób powinien być analizowany okresowy raport, który zostanie wysłany przez urządzenie. Napisanie własnego deskryptora raportu może być trudne, dlatego istnieją zasoby, które mogą pomóc. Jest to jedyna obowiązkowa funkcja wywołania zwrotnego. Wywoływana podczas tworzenia instancji HID w celu przekazania deskryptora fizycznego. Deskryptor fizyczny to deskryptor, który dostarcza informacji o konkretnej części lub częściach ciała człowieka, które aktywują kontrolkę lub kontrolki. Aby uzyskać więcej informacji na temat deskryptorów fizycznych, zobacz sekcję 6.2.3 specyfikacji HID w wersji 1.11. Deskryptor fizyczny jest opcjonalny i najczęściej ignorowany. Przekazany tutaj bufor można ustawić na NULL, a długość na 0. Wywoływana, gdy host ustawia raport zgodnie z opisem w deskryptorze raportu (gdy wysyła raport).
Wywoływane, gdy host żąda raportu o funkcjach, zgodnie z opisem w deskryptorze raportu.
Wywoływane, gdy host ustawia raport funkcji zgodnie z opisem w deskryptorze raportu.
void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Pobiera bieżący aktywny protokół.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Ustawia aktualnie aktywny protokół.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Opis raportu klasy HID Example
Klasa HID firmy Silicon Labsampaplikacja zapewniaampopis raportu dla prostej myszy.ampPoniżej znajduje się opis raportu myszy.
Example – deskryptor raportu myszy
statyczny uint8_t app_usbd_hid_report_desc[] = {
(1) (2)
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE,
(3)
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
36/174
Nadview
SL_USBD_HID_MAIN_COLLECTION +1, APLIKACJA_KOLEKCJI_SL_USBD_HID,(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, PRZYCISK SL_USBD_HID_USAGE_PAGE,(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_GŁÓWNE_WEJŚCIE +1, SL_USBD_HID_GŁÓWNE_DANE |
SL_USBD_HID_ZMIENNA_GŁÓWNA |
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_GŁÓWNE_WEJŚCIE +1, SL_USBD_HID_GŁÓWNE_DANE |
SL_USBD_HID_ZMIENNA_GŁÓWNA |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_ENDCOLLECTION,(10)
SL_USBD_HID_MAIN_ENDCOLLECTION
(11)};
(1) Tabela reprezentująca deskryptor raportu myszy jest inicjowana w taki sposób, że każdy wiersz odpowiada krótkiemu elementowi. Ten ostatni jest tworzony z 1-bajtowego prefiksu i 1-bajtowych danych. Patrz viewwygenerowane przez parser HID hosta na rysunku – Zawartość deskryptora raportu z parsera HID hosta View.
(2) Używana jest strona Ogólne użytkowanie pulpitu.
(3) Na stronie Ogólnego użytkowania pulpitu należy zapoznać się z informacjami dotyczącymi użytkowania tag Sugeruje, że grupa elementów sterujących służy do sterowania myszą. Zestaw elementów sterujących myszy zazwyczaj składa się z dwóch osi (X i Y) oraz jednego, dwóch lub trzech przycisków.
(4) Rozpoczęto zbieranie myszy.
(5) W kolekcji myszy, użycie tag Sugeruje dokładniej, że elementy sterujące myszą należą do zbioru wskaźników. Zbiór wskaźników to zbiór osi, który generuje wartość, która kieruje, wskazuje lub wskazuje intencje użytkownika w stosunku do aplikacji.
(6) Rozpoczęto zbieranie wskaźników.
(7) Strona użycia przycisków definiuje element wejściowy składający się z trzech pól 1-bitowych. Każde pole 1-bitowe reprezentuje odpowiednio przycisk myszy 1, 2 i 3 i może zwracać wartość 0 lub 1.
(8) Element wejściowy dla strony użycia przycisków jest uzupełniony o 13 innych bitów.
(9) Wskazano inną stronę Ogólnego wykorzystania pulpitu, służącą do opisu położenia myszy względem osi X i Y. Element wejściowy składa się z dwóch 8-bitowych pól, których wartość może wynosić od -127 do 127.
(10) Zbiór wskaźników jest zamknięty.
(11) Kolekcja myszy jest zamknięta.
Strona HID USB.org
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
37/174
Nadview
USB Implementers Forum (USB-IF) udostępnia narzędzie o nazwie „HID Descriptor Tool” wraz z innymi informacjami na temat formatu deskryptorów raportów. Więcej informacji można znaleźć na stronie http://www.usb.org/developers/hidpage/.
Przewodnik programowania urządzeń USB klasy HID
W tej sekcji wyjaśniono, jak korzystać z klasy HID. Inicjowanie klasy HID urządzenia USB Dodawanie instancji klasy HID urządzenia USB do urządzenia Komunikacja za pomocą klasy HID urządzenia USB
Inicjalizacja klasy HID urządzenia USB
Aby dodać funkcjonalność klasy HID do swojego urządzenia, musisz najpierw zainicjować klasę, wywołując funkcję sl_usbd_hid_init().ampPoniższy przykład pokazuje, jak wywołać funkcję sl_usbd_hid_init() z użyciem argumentów domyślnych. Więcej informacji na temat argumentów konfiguracyjnych przekazywanych do funkcji sl_usbd_hid_init() można znaleźć w sekcji „Konfiguracje specyficzne dla aplikacji klasy HID urządzenia USB”.
Example – Wywołanie sl_usbd_hid_init()
sl_status_t status;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Dodawanie instancji klasy HID urządzenia USB do urządzenia
Aby dodać funkcjonalność klasy HID do swojego urządzenia, musisz utworzyć instancję, a następnie dodać ją do konfiguracji swojego urządzenia.
Tworzenie instancji klasy HID
Utwórz instancję klasy HID, wywołując funkcję sl_usbd_hid_create_instance().ampPoniższy przykład pokazuje, jak utworzyć prostą funkcję myszy za pomocą funkcji sl_usbd_hid_create_instance() z użyciem argumentów domyślnych. Więcej informacji na temat argumentów konfiguracyjnych przekazywanych do funkcji sl_usbd_hid_create_instance() można znaleźć w artykule Konfiguracje instancji klasy HID urządzenia USB.
Example – Dodawanie funkcji myszy za pomocą sl_usbd_hid_create_instance()
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
38/174
Nadview
/* Stałe globalne. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 02, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Zmienne lokalne.*/ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)nr_klasy;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, prawda, &app_usbd_hid_callbacks, &class_nbr);
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
39/174
Nadview
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */}
Dodawanie instancji klasy HID do konfiguracji urządzenia Po utworzeniu instancji klasy HID można dodać ją do konfiguracji, wywołując funkcję
sl_usbd_hid_add_to_configuration() .
ByłyampPoniżej pokazano, jak wywołać sl_usbd_hid_add_to_configuration().
Example – Wywołanie sl_usbd_hid_add_to_configuration()
sl_status_t status;
sl_usbd_hid_add_to_configuration(nr_klasy,
(1)
config_nbr_fs); (2)
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
(1) Numer klasy, który należy dodać do konfiguracji zwróconej przez sl_usbd_hid_create_instance(). (2) Numer konfiguracji (w tym przypadku dodawany do konfiguracji pełnej prędkości).
Komunikacja za pomocą urządzenia USB klasy HID
Komunikacja instancji klasy Komunikacja synchroniczna Komunikacja instancji klasy Klasa HID oferuje następujące funkcje umożliwiające komunikację z hostem.
Tabela – Podsumowanie interfejsu API komunikacji HID
Nazwa funkcji
sl_usb d _hid _ read _sy nc() sl_usb d _hid _write _sy nc()
Operacja Odbiera dane z hosta przez punkt końcowy przerwania OUT. Ta funkcja jest blokująca. Wysyła dane do hosta przez punkt końcowy przerwania IN. Ta funkcja jest blokująca.
Komunikacja synchroniczna. Komunikacja synchroniczna oznacza, że transfer jest blokowany. Po wywołaniu funkcji aplikacja blokuje się do momentu zakończenia transferu z błędem lub bez. Można określić limit czasu, aby uniknąć oczekiwania w nieskończoność.ampPoniżej przedstawiono operację odczytu i zapisu, w której dane są odbierane z hosta za pomocą punktu końcowego przerwania OUT, a dane są wysyłane do hosta za pomocą punktu końcowego przerwania IN.
Example – Synchroniczny odczyt i zapis HID
__WYRÓWNANE(4) uint8_t rx_buf[2];
__WYRÓWNANE(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_hid_read_sync(nr_klasy,
(1)
(void *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
40/174
Nadview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */}
(1) Numer instancji klasy utworzonej za pomocą sl_usbd_hid_create_instance() zawiera wewnętrzne odwołanie do klasy HID w celu skierowania transferu do właściwego punktu końcowego OUT lub IN przerwania.
(2) Aplikacja musi zapewnić, że bufor udostępniony funkcji jest wystarczająco duży, aby pomieścić wszystkie dane. W przeciwnym razie mogą wystąpić problemy z synchronizacją. Wewnętrznie operacja odczytu jest wykonywana albo z punktu końcowego sterowania, albo z punktu końcowego przerwania, w zależności od flagi odczytu sterowania ustawionej podczas wywołania funkcji sl_usbd_hid_create_instance().
(3) Aby uniknąć sytuacji nieskończonego blokowania, można określić limit czasu wyrażony w milisekundach. Wartość 809 powoduje, że zadanie aplikacji będzie czekać w nieskończoność.
(4) Aplikacja zapewnia zainicjowany bufor transmisyjny.
Zadanie okresowych raportów wejściowych HID
Aby oszczędzać przepustowość, host ma możliwość wyciszenia raportów z punktu końcowego przerwania IN poprzez ograniczenie częstotliwości raportowania. W tym celu host musi wysłać żądanie SET_IDLE. Klasa HID zaimplementowana przez Silicon Labs zawiera wewnętrzne zadanie, które uwzględnia ograniczenie częstotliwości raportowania, które można zastosować do jednego lub kilku raportów wejściowych. Rysunek „Zadanie okresowych raportów wejściowych” przedstawia działanie zadań okresowych raportów wejściowych.
Rysunek – Zadanie okresowych raportów wejściowych
(1) Urządzenie odbiera żądanie SET_IDLE. To żądanie określa czas bezczynności dla danego identyfikatora raportu. Aby uzyskać więcej informacji na temat żądania SET_IDLE, zobacz
(2) Struktura identyfikatora raportu (przydzielona podczas fazy inicjalizacji klasy HID) jest aktualizowana o czas bezczynności. Licznik czasu bezczynności jest inicjowany wartością tego czasu. Struktura identyfikatora raportu jest wstawiana na końcu listy powiązanej zawierającej wejściowe struktury identyfikatorów raportów. Wartość czasu bezczynności jest wyrażona w jednostkach 4 ms, co daje zakres od 4 do 1020 ms.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
41/174
Nadview
Jeżeli czas bezczynności jest krótszy niż interwał sondowania punktu końcowego IN przerwania, raporty są generowane zgodnie z interwałem sondowania.
(3) Co 4 ms zadanie okresowego raportu wejściowego przegląda listę identyfikatorów raportów wejściowych. Dla każdego identyfikatora raportu wejściowego zadanie wykonuje jedną z dwóch możliwych operacji. Czas trwania zadania jest zgodny z jednostką 4 ms używaną dla czasu bezczynności. Jeśli host nie wysłał żadnych żądań SET_IDLE, lista identyfikatorów raportów wejściowych jest pusta, a zadanie nie ma nic do przetworzenia. Zadanie przetwarza tylko identyfikatory raportów różne od 0 i z czasem bezczynności dłuższym niż 0.
(4) Dla danego identyfikatora raportu wejściowego zadanie weryfikuje, czy upłynął czas bezczynności. Jeśli czas bezczynności nie upłynął, licznik jest zmniejszany, a raport wejściowy nie jest wysyłany do hosta.
(5) Jeśli czas bezczynności upłynął (czyli licznik czasu bezczynności osiągnął zero), do hosta wysyłany jest raport wejściowy poprzez wywołanie funkcji sl_usbd_hid_write_sync() za pośrednictwem punktu końcowego IN przerwania.
(6) Dane raportu wejściowego wysyłane przez zadanie pochodzą z wewnętrznego bufora danych przydzielonego dla każdego raportu wejściowego opisanego w deskryptorze raportu. Zadanie aplikacji może wywołać funkcję sl_usbd_hid_write_sync(), aby wysłać raport wejściowy. Po wysłaniu danych raportu wejściowego, funkcja sl_usbd_hid_write_sync() aktualizuje bufor wewnętrzny powiązany z identyfikatorem raportu wejściowego o właśnie wysłane dane. Następnie zadanie okresowych raportów wejściowych zawsze wysyła te same dane raportu wejściowego po upływie każdego okresu bezczynności, aż do momentu aktualizacji danych w buforze wewnętrznym przez zadanie aplikacji. Istnieje mechanizm blokujący, który zapobiega uszkodzeniu danych identyfikatora raportu wejściowego w przypadku modyfikacji dokonanej dokładnie w momencie transmisji przez zadanie okresowych raportów wejściowych.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
42/174
Nadview
Nadview
Urządzenie USB klasy MSC
Urządzenie USB Klasa MSCview Potrzeby zasobów klasy MSC urządzenia USB z podstawowej konfiguracji klasy MSC urządzenia USB Przewodnik programowania klasy MSC urządzenia USB Sterowniki pamięci masowej klasy MSC urządzenia USB
W tej sekcji opisano klasę urządzeń pamięci masowej (MSC) obsługiwaną przez Silicon Labs USB Device. MSC to protokół umożliwiający przesyłanie informacji między urządzeniem USB a hostem. Przesyłane informacje obejmują wszystko, co można zapisać elektronicznie, takie jak programy wykonywalne, kod źródłowy, dokumenty, obrazy, dane konfiguracyjne lub inne dane tekstowe lub numeryczne. Urządzenie USB jest widoczne dla hosta jako zewnętrzny nośnik pamięci, umożliwiając przesyłanie danych. filepoprzez przeciąganie i upuszczanie.
A file system definiuje jak files są zorganizowane w nośnikach pamięci. Specyfikacja klasy pamięci masowej USB nie wymaga żadnych szczególnych file System ten ma być używany na zgodnych urządzeniach. Zamiast tego zapewnia prosty interfejs do odczytu i zapisu sektorów danych za pomocą transparentnego zestawu poleceń interfejsu SCSI (Small Computer System Interface). Dzięki temu systemy operacyjne mogą traktować dysk USB jak dysk twardy i formatować go dowolnymi metodami. file system, który im się podoba.
Urządzenia pamięci masowej USB obsługują dwa protokoły transportowe:
Transport zbiorczy (BOT) Sterowanie/transport zbiorczy/przerwanie (CBI) (stosowany wyłącznie w przypadku napędów dyskietek)
Klasa urządzeń pamięci masowej implementuje transparentny zestaw poleceń SCSI wyłącznie przy użyciu protokołu BOT, co oznacza, że do przesyłania danych i informacji o stanie będą używane wyłącznie punkty końcowe zbiorcze. Implementacja MSC obsługuje wiele jednostek logicznych.
Implementacja MSC jest zgodna z następującymi specyfikacjami:
Specyfikacja klasy pamięci masowej uniwersalnej magistrali szeregowejview, Wersja 1.3 z 5 września 2008 r. Uniwersalna magistrala szeregowa klasy pamięci masowej, transport wyłącznie masowy, Wersja 1.0 z 31 września 1999 r.
Urządzenie USB MSC aCl ss Overview
Protokół Punkty końcowe Klasa Żądania Interfejsu Małego Komputera (SCSI)
Protokół
W tej sekcji omówimy protokół Bulk-Only Transport (BOT) klasy pamięci masowej. Protokół Bulk-Only Transport ma trzytages:
Transport poleceń Transport danych Transport statusu
Polecenia pamięci masowej są wysyłane przez hosta za pośrednictwem struktury zwanej Command Block Wrapper (CBW). W przypadku poleceń wymagających transportu danychtage, host spróbuje wysłać lub odebrać dokładną liczbę bajtów z urządzenia, zgodnie z długością i polami flagi CBW. Po zakończeniu transportu danychtagnp. host próbuje odebrać od urządzenia opakowanie statusu polecenia (CSW), które zawiera szczegółowe informacje o statusie polecenia, a także wszelkie pozostałości danych (jeśli
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
43/174
Nadview
(dowolny). W przypadku poleceń, które nie obejmują transportu danych stagnp. host próbuje odebrać CSW bezpośrednio po wysłaniu CBW. Protokół jest szczegółowo opisany na rysunku – Protokół MSC.
Rysunek – Protokół MSC
Punkty końcowe
Po stronie urządzenia, zgodnie ze specyfikacją BOT, MSC składa się z następujących punktów końcowych: pary punktów kontrolnych wejściowych i wyjściowych, zwanych domyślnymi punktami końcowymi. pary punktów końcowych wejściowych i wyjściowych zbiorczych.
Poniższa tabela wskazuje różne zastosowania punktów końcowych.
Tabela – Wykorzystanie punktu końcowego MSC
Punkt końcowy
Sterowanie WEJŚCIE Sterowanie WYJŚCIE Wejście zbiorcze Wyjście zbiorcze
Kierunek
Urządzenie do hosta Host do urządzenia Urządzenie do hosta Host do urządzenia
Stosowanie
Wyliczenia i żądania specyficzne dla klasy MSC Wyliczenia i żądania specyficzne dla klasy MSC Wysyłanie CSW i danych Odbieranie CBW i danych
Prośby o zajęcia
Istnieją dwa zdefiniowane żądania sterujące dla protokołu MSC BOT. Żądania te i ich opisy są szczegółowo opisane w poniższej tabeli.
Tabela – Żądania klasy pamięci masowej
Prośby o zajęcia
Resetowanie pamięci masowej tylko zbiorczo
Opis
To żądanie służy do zresetowania urządzenia pamięci masowej i powiązanego z nim interfejsu. To żądanie przygotowuje urządzenie do odbioru kolejnego bloku poleceń.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
44/174
Nadview
Prośby o zajęcia
Opis
Pobierz Max. To żądanie służy do zwrócenia najwyższego numeru jednostki logicznej (LUN) obsługiwanego przez urządzenie. Na przykładample, a
LUN
urządzenie z LUN 0 i LUN 1 zwróci wartość 1. Urządzenie z pojedynczą jednostką logiczną zwróci 0 lub zatrzyma działanie.
żądanie. Maksymalna wartość, jaka może zostać zwrócona, to 15.
Interfejs SCSI małego systemu komputerowego
Na poziomie interfejsu programowania, urządzenie MSC implementuje jeden ze standardowych protokołów komunikacji z nośnikami pamięci masowej, takich jak SCSI i SFF-8020i (ATAPI). „Interfejs programowania” określa, który protokół jest implementowany i pomaga systemowi operacyjnemu hosta w załadowaniu odpowiedniego sterownika urządzenia do komunikacji z urządzeniem pamięci masowej USB. SCSI to najpopularniejszy protokół używany w urządzeniach pamięci masowej USB MSC. Zapewniamy implementację podklasy MSC SCSI, z której użytkownicy naszego zestawu GSDK mogą korzystać od razu.
SCSI to zestaw standardów obsługi komunikacji między komputerami a urządzeniami peryferyjnymi. Standardy te obejmują polecenia, protokoły, interfejsy elektryczne i optyczne. Urządzenia pamięci masowej korzystające z innych interfejsów sprzętowych, takich jak USB, używają poleceń SCSI do uzyskiwania informacji o urządzeniu/hoście, sterowania jego działaniem i przesyłania bloków danych na nośniku pamięci.
Polecenia SCSI obejmują szeroki zakres typów urządzeń i funkcji, dlatego urządzenia potrzebują podzbioru tych poleceń. Zasadniczo do podstawowej komunikacji niezbędne są następujące polecenia:
ZAPYTANIE ODCZYT POJEMNOŚĆ (10) ODCZYT (10) ŻĄDANIE TESTU CZUJNIKA JEDNOSTKA GOTOWA ZAPIS (10)
Potrzeby zasobów klasy MSC urządzenia USB z Core
Za każdym razem, gdy dodasz instancję klasy MSC do konfiguracji USB za pomocą funkcji sl_usbd_msc_add_to_configuration(), z rdzenia zostaną przydzielone następujące zasoby.
Ratunek
Interfejsy Interfejsy alternatywne Punkty końcowe Grupy interfejsów
Ilość
1 1 2 0
Należy pamiętać, że te liczby dotyczą każdej konfiguracji. Konfigurując wartości parametrów SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY i SL_USBD_DESCRIPTOR_QUANTITY, należy pamiętać o uwzględnieniu liczby konfiguracji, które zostaną dodane do klasy. W przypadku wartości parametrów SL_USBD_OPEN_ENDPOINTS_QUANTITY, ponieważ punkty końcowe są otwierane tylko wtedy, gdy konfiguracja jest ustawiana przez hosta, wystarczy uwzględnić liczbę punktów końcowych wymaganych dla danej instancji klasy.
Konfiguracja klasy MSC urządzenia USB
Do konfiguracji klasy MSC używane są dwie grupy parametrów konfiguracyjnych:
Konfiguracje specyficzne dla aplikacji klasy MSC urządzenia USB Konfiguracja jednostki logicznej klasy MSC urządzenia USB
Konfiguracje specyficzne dla aplikacji klasy MSC urządzenia USB
Konfiguracje klasy w czasie kompilacji Tworzenie instancji klasy
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
45/174
Nadview
Konfiguracje klasy w czasie kompilacji
Klasę MSC i podklasę SCSI urządzeń USB Silicon Labs można konfigurować w czasie kompilacji za pomocą polecenia #defines znajdującego się w pliku sl_usbd_core_config.h file.
Tabela – Stałe konfiguracji ogólnej
Nazwa konfiguracji
Opis
SL_USBD_MSC_CLASS_INST Liczba instancji klasy, które zostaną przydzielone poprzez wywołanie funkcji
ANCE_QUANTITY
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA Liczba konfiguracji, do której można dodać instancję klasy poprzez wywołanie
TION_QUANTITY
funkcja sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Liczba jednostek logicznych na instancję klasy, które zostaną dodane poprzez wywołanie
ITY
funkcja sl_usbd_msc_scsi_lun_add() .
SL_USBD_MSC_SCSI_64_BIT Włącza lub wyłącza obsługę adresu bloku logicznego (LBA) o długości 64 bitów.
_LBA_PL
SL_USBD_MSC_DATA_BUFF Rozmiar bufora danych na instancję klasy w bajtach ER_SIZE
Wartość domyślna
2
1
2
0
512
Tworzenie instancji klasy
Tworzenie instancji klasy MSC SCSI urządzenia USB odbywa się poprzez wywołanie funkcji sl_usbd_msc_scsi_create_instance(). Funkcja ta przyjmuje jeden argument konfiguracyjny opisany poniżej.
p_scsi_callbacks
p_scsi_callbacks to wskaźnik do struktury konfiguracji typu sl_usbd_msc_scsi_callbacks_t. Oprócz typowych dla klasy urządzeń USB wywołań zwrotnych connect/disconnect, udostępnia on klasie MSC zestaw opcjonalnych funkcji wywołania zwrotnego, które są wywoływane w przypadku wystąpienia zdarzenia w jednostce logicznej. Do tego argumentu można przekazać wskaźnik null (NULL), jeśli wywołania zwrotne nie są potrzebne.
Poniższa tabela opisuje każde pole konfiguracji dostępne w tej strukturze konfiguracji.
Tabela – struktura konfiguracji sl_usbd_msc_scsi_callbacks_t
Pola
Opis
.włączać
Wywoływane, gdy instancja klasy USB zostanie pomyślnie włączona.
.disable Wywoływane, gdy instancja klasy USB jest wyłączona.
.host_eject Funkcja wywoływana, gdy jednostka logiczna zostanie wysunięta z hosta.
Podpis funkcji
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
Konfiguracja jednostki logicznej klasy MSC urządzenia USB
Dodanie jednostki logicznej do instancji klasy MSC odbywa się poprzez wywołanie funkcji sl_usbd_msc_lun_add(). Funkcja ta przyjmuje jeden argument konfiguracyjny opisany poniżej.
p_lu_info
p_lu_info to wskaźnik do struktury typu sl_usbd_msc_scsi_lun_info_t. Jego celem jest dostarczenie informacji o jednostce logicznej do klasy MSC.
Poniższa tabela opisuje każde pole konfiguracji dostępne w tej strukturze konfiguracji.
Tabela – struktura konfiguracji sl_usbd_msc_scsi_lun_info_t
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
46/174
Nadview
Pole
Opis
Pole
.scsi_lun_api_p tr
Opis
Wskaźnik do interfejsu API sterownika multimediów, który będzie obsługiwał tę jednostkę logiczną. Więcej informacji na temat sterowników pamięci masowej można znaleźć w dokumencie „Sterowniki pamięci masowej klasy MSC urządzenia USB”.
.vendor_id_ptr
.product_id_ptr
.prod._ poziom_rewizji .is_ tylko_do_odczytu
Wskaźnik do ciągu zawierającego identyfikator dostawcy jednostki logicznej. Maksymalna długość ciągu to 8 znaków. Wskaźnik do ciągu zawierającego identyfikator produktu jednostki logicznej. Maksymalna długość ciągu to 16 znaków. Poziom wersji produktu.
Flaga wskazująca, czy jednostka logiczna powinna być postrzegana jako tylko do odczytu z punktu widzenia view hosta (prawda) lub nie (fałsz).
Przewodnik programowania urządzeń USB klasy MSC
W tej sekcji wyjaśniono, jak używać klasy MSC.
Inicjowanie klasy MSC urządzenia USB Dodawanie instancji klasy MSC urządzenia USB SCSI do urządzenia Obsługa jednostki logicznej klasy MSC urządzenia USB
Inicjowanie klasy MSC urządzenia USB
Aby dodać funkcjonalność klasy MSC SCSI do urządzenia, najpierw zainicjuj klasę bazową MSC i podklasę SCSI, wywołując funkcję sl_usbd_msc_init() i sl_usbd_msc_scsi_init().
ByłyampPoniżej pokazano, jak wywołać sl_usbd_msc_init() i sl_usbd_msc_scsi_init().
Example – Wywołanie sl_usbd_msc_init() i sl_usbd_msc_scsi_init()
sl_status_t status;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
Dodawanie instancji klasy MSC SCSI urządzenia USB do urządzenia
Aby dodać funkcjonalność klasy MSC SCSI do swojego urządzenia, najpierw utwórz instancję, a następnie dodaj ją do konfiguracji urządzenia. Musisz dodać co najmniej jedną jednostkę logiczną do swojej instancji.
Tworzenie instancji klasy MSC SCSI
Utwórz instancję klasy MSC SCSI, wywołując funkcję sl_usbd_msc_scsi_create_instance().
ByłyampPoniższy przykład pokazuje, jak wywołać funkcję sl_usbd_msc_scsi_create_instance() z użyciem argumentów domyślnych. Więcej informacji na temat argumentów konfiguracyjnych przekazywanych do funkcji sl_usbd_msc_scsi_create_instance() można znaleźć w sekcji Konfiguracje specyficzne dla aplikacji klasy MSC urządzenia USB.
Example – Wywołanie sl_usbd_ msc_scsi_create_instance()
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
47/174
Nadview
uint8_t numer_klasy; sl_status_t status;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Dodawanie instancji klasy MSC do konfiguracji urządzenia
Po utworzeniu instancji klasy MSC można dodać ją do konfiguracji, wywołując funkcję
sl_usbd_msc_add_to_configuration() .
ByłyampPoniżej pokazano, jak wywołać sl_usbd_msc_scsi_add_to_configuration() przy użyciu domyślnych argumentów.
Example – Wywołanie sl_usbd_ msc_scsi_add_to_configuration()
sl_status_t status;
status = sl_usbd_msc_scsi_add_to_configuration(nr_klasy,
(1)
config_nbr_fs);
(2)
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
(1) Numer klasy, który należy dodać do konfiguracji zwróconej przez sl_usbd_msc_scsi_create_instance(). (32) Numer konfiguracji (w tym przypadku dodawany do konfiguracji pełnej prędkości).
Obsługa jednostki logicznej klasy MSC urządzenia USB
Dodawanie jednostki logicznej Podłączanie/odłączanie nośnika danych
Dodawanie jednostki logicznej
Podczas dodawania jednostki logicznej do instancji klasy MSC SCSI, musi ona być powiązana z nośnikiem danych (dyskiem RAM, kartą SD, pamięcią flash itp.). Klasa MSC używa sterownika pamięci masowej do komunikacji z nośnikami danych. Sterownik ten należy podać podczas dodawania jednostki logicznej.
ByłyampPoniżej pokazano, jak dodać jednostkę logiczną za pomocą sl_usbd_msc_scsi_lun_add().
Example – Dodawanie jednostki logicznej za pomocą sl_usbd_msc_scsi_lun_add()
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
48/174
Nadview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
status;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= “Laboratoria Krzemowe”;
lu_info.product_id_ptr
= „urządzenie blokujące np.ample”;
lu_info.product_revision_level = 0x1000u;
lu_info.is_read_only
= fałsz;
status = sl_usbd_msc_scsi_lun_add(nr_klasy, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Podłączanie/odłączanie nośnika danych
Po dodaniu jednostki logicznej należy podłączyć nośnik pamięci, aby był dostępny po stronie hosta. Klasa MSC oferuje dwie funkcje do sterowania powiązaniem nośnika pamięci z jednostką logiczną: sl_usbd_msc_scsi_lun_attach() i sl_usbd_msc_scsi_lun_detach(). Funkcje te umożliwiają emulację usunięcia nośnika pamięci w celu ponownego uzyskania dostępu z aplikacji wbudowanej, jeśli zajdzie taka potrzeba.
ByłyampPoniżej pokazano, jak używać funkcji sl_usbd_msc_scsi_lun_attach() i sl_usbd_msc_scsi_lun_detach().
Example – Podłączanie/odłączanie nośników
sl_status_t status;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
…
(1)
status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
…
(2)
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
…
(3)
(1) Od tego momentu, jeśli urządzenie MSC jest podłączone do hosta, nośnik danych jest dostępny.
(2) Jeśli urządzenie MSC jest podłączone do hosta, nośnik będzie teraz wyświetlany jako niedostępny. W tym momencie operacje na nośniku można wykonywać z poziomu aplikacji wbudowanej.
(3) Ponownie, jeśli urządzenie MSC jest podłączone do hosta, nośnik pamięci będzie wyświetlany jako podłączony.
Sterowniki pamięci masowej klasy MSC dla urządzeń USB
Urządzenie USB klasy MSC wymaga sterownika pamięci masowej do komunikacji z nośnikiem pamięci. Na chwilę obecną Silicon Labs nie oferuje sterowników.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
49/174
Nadview
Sterownik TPY aa he AI jest zdefiniowany przez typedef sl_usbd_msc_scsi_lun_api_t. Nasz parametr sl_usbd_msc_scsi_lun_api_t musi zostać dołączony do parametru sl_usbd_msc_scsi_lun_info_t, który jest dodawany podczas dodawania jednostki logicznej za pomocą sl_usbd_msc_scsi_lun_add(). Więcej informacji na temat struktur można znaleźć w sekcji API USB Device MSC SCSI. Implementacja sterownika pamięci masowej może być tak prosta, jak tablica sektorów w pamięci RAM. Typowy rozmiar sektora (tj. rozmiar bloku) wynosi 512 dla urządzeń pamięci masowej i 2048 dla napędów CD-ROM.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
50/174
Nadview
Nadview
Klasa dostawcy urządzenia USB
Klasa dostawcy urządzenia USBview Potrzeby zasobów klasy dostawcy urządzenia USB z podstawowej konfiguracji klasy dostawcy urządzenia USB Podręcznik programowania klasy dostawcy urządzenia USB Klasa Vendor umożliwia tworzenie urządzeń specyficznych dla dostawcy, które mogą implementować zastrzeżony protokół. Polega ona na parze punktów końcowych zbiorczych w celu przesyłania danych między hostem a urządzeniem. Transfery zbiorcze są wygodne w przypadku przesyłania dużych ilości nieustrukturyzowanych danych i zapewniają niezawodną wymianę danych dzięki wykorzystaniu mechanizmu wykrywania błędów i ponawiania prób. Oprócz punktów końcowych zbiorczych klasa Vendor może również używać opcjonalnej pary punktów końcowych przerwań. Każdy system operacyjny (OS) może współpracować z klasą Vendor, pod warunkiem, że system operacyjny ma sterownik do obsługi klasy Vendor. W zależności od systemu operacyjnego sterownik może być natywny lub specyficzny dla dostawcy. Na przykład w systemie Microsoft Windows® aplikacja współpracuje ze sterownikiem WinUSB dostarczonym przez firmę Microsoft w celu komunikacji z urządzeniem dostawcy.
Klasa dostawcy urządzenia USBview
Rysunek – Ogólna architektura między hostem systemu Windows a klasą dostawcy przedstawia ogólną architekturę między hostem a urządzeniem za pomocą klasy dostawcy. W tym przykładzieampnp. systemem operacyjnym hosta jest MS Windows.
Rysunek – Ogólna architektura między hostem a klasą dostawcy systemu MS Windows
W systemie MS Windows aplikacja komunikuje się z urządzeniem dostawcy poprzez interakcję z biblioteką USB. Biblioteki, takie jak libusb, oferują API do zarządzania urządzeniem i powiązanymi z nim kanałami oraz do komunikacji z urządzeniem za pośrednictwem punktów końcowych sterowania, przetwarzania zbiorczego i przerwań.
Po stronie urządzenia klasa Vendor składa się z następujących punktów końcowych:
Para punktów końcowych sterujących IN i OUT, zwana domyślnym punktem końcowym. Para punktów końcowych zbiorczych IN i OUT.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
51/174
Nadview
Para punktów końcowych IN i OUT przerwania. Ta para jest opcjonalna. Poniższa tabela wskazuje zastosowanie różnych punktów końcowych:
Tabela – Wykorzystanie punktów końcowych klasy dostawcy
Kierunek punktu końcowego
Kontrola W
Kontrola
NA ZEWNĄTRZ
Hurtowe dostawy
Urządzenie-do-hosta
>Host-do-urządzenia
Urządzenie-do-hosta
Wyjście luzem
Przerwanie IN
Przerywać
NA ZEWNĄTRZ
Host-urządzenie
Urządzenie-do-hosta
Host-urządzenie
Stosowanie
Standardowe żądania dotyczące wyliczeń i żądania specyficzne dla dostawcy.
Standardowe żądania dotyczące wyliczeń i żądania specyficzne dla dostawcy.
Komunikacja surowych danych. Dane mogą być strukturyzowane zgodnie z zastrzeżonym protokołem.
Komunikacja surowych danych. Dane mogą być strukturyzowane zgodnie z zastrzeżonym protokołem.
Komunikacja lub powiadomienie w postaci surowych danych. Dane mogą być strukturyzowane zgodnie z zastrzeżonym protokołem. Komunikacja lub powiadomienie w postaci surowych danych. Dane mogą być strukturyzowane zgodnie z zastrzeżonym protokołem.
Aplikacja urządzenia może wykorzystywać punkty końcowe zbiorcze i przerywające do wysyłania i odbierania danych do lub z hosta. Do dekodowania żądań specyficznych dla dostawcy wysyłanych przez hosta może używać wyłącznie domyślnego punktu końcowego. Standardowe żądania są zarządzane wewnętrznie przez warstwę rdzeniową urządzenia USB Silicon Labs.
Potrzeby zasobów klasy dostawcy urządzeń USB z Core
Za każdym razem, gdy dodasz instancję klasy dostawcy do konfiguracji za pomocą funkcji sl_usbd_vendor_add_to_configuration(), z rdzenia zostaną przydzielone następujące zasoby.
Ratunek
Interfejsy Interfejsy alternatywne Punkty końcowe Grupy interfejsów
Ilość
1 1 2 (4 jeśli włączono punkty końcowe przerwań) 0
Należy pamiętać, że te liczby dotyczą każdej konfiguracji. Konfigurując wartości parametrów SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY i SL_USBD_DESCRIPTOR_QUANTITY, należy pamiętać o uwzględnieniu liczby konfiguracji, które zostaną dodane do klasy. W przypadku wartości parametrów SL_USBD_OPEN_ENDPOINTS_QUANTITY, ponieważ punkty końcowe są otwierane tylko wtedy, gdy konfiguracja jest ustawiana przez hosta, wystarczy uwzględnić liczbę punktów końcowych wymaganych dla danej instancji klasy.
Konfiguracja klasy dostawcy urządzenia USB
Do konfiguracji klasy Vendor służą dwie grupy parametrów konfiguracyjnych:
Konfiguracje specyficzne dla aplikacji klasy dostawcy urządzeń USB Konfiguracje instancji klasy dostawcy urządzeń USB
Konfiguracje specyficzne dla aplikacji klasy dostawcy urządzeń USB
Po pierwsze, aby skorzystać z modułu klasy Vendor urządzenia USB Silicon Labs, dostosuj definicje konfiguracji Vendor w czasie kompilacji do potrzeb swojej aplikacji. Są one zgrupowane w nagłówku sl_usbd_core_config.h. file w sekcji Dostawca. Celem konfiguracji ilości jest poinformowanie modułu urządzenia USB o liczbie obiektów Dostawcy USB do przydzielenia.
Poniższa tabela opisuje każdą zdefiniowaną konfigurację.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
52/174
Nadview
Tabela – Konfiguracja dostawcy urządzenia USB Definiuje
Nazwa konfiguracji
Opis
Wartość domyślna
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Liczba instancji klas, które zostaną przydzielone za pomocą wywołania funkcji 2 sl_usbd_vendor_create_instance().
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Liczba konfiguracji. Instancje klasy dostawcy można dodać do jednej lub większej liczby konfiguracji poprzez wywołanie funkcji sl_usbd_vendor_add_to_configuration().
Konfiguracje instancji klasy dostawcy urządzenia USB
W tej sekcji zdefiniowano konfiguracje dotyczące wystąpień klasy Vendor.
Tworzenie instancji klasy intr_en interval p_vendor_callbacks
Tworzenie instancji klasy
Utworzenie instancji klasy Vendor odbywa się poprzez wywołanie funkcji sl_usbd_vendor_create_instance(), która przyjmuje trzy argumenty konfiguracyjne opisane poniżej.
intr_en
Wartość logiczna wskazująca, czy należy dodać parę punktów końcowych przerwania, czy nie.
Wartość
prawda fałsz
Opis
Para punktów końcowych IN/OUT zostanie dodana i udostępniona aplikacji wbudowanej. Nie zostanie dodany żaden punkt końcowy przerwania. Dostępna będzie tylko para punktów końcowych zbiorczych IN/OUT.
interwał
Jeśli ustawisz intr_en na true, możesz określić interwał sondowania punktów końcowych przerwań (w milisekundach). Jeśli ustawisz intr_en na false, możesz ustawić interwał na 0, ponieważ zostanie on zignorowany przez klasę.
p_vendor_callbacks
p_vendor_callbacks to wskaźnik do zmiennej strukturalnej funkcji wywołania zwrotnego, którą można określić w celu obsługi żądań sterujących specyficznych dla danej klasy. Jeśli nie używasz żadnych żądań specyficznych dla danej klasy lub potrzebujesz włączyć/wyłączyć powiadomienia, możesz ustawić tę zmienną na NULL.
ByłyampPoniżej znajduje się oczekiwany podpis programu obsługi żądań specyficznego dla Twojej klasy.
Example – Sygnatura funkcji żądania specyficznej dla klasy
void app_usbd_vendor_req_handle(uint8_t
numer_klasy, (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) Numer instancji klasy dostawcy.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
53/174
Nadview
(2) Wskaźnik do otrzymanego żądania konfiguracji od hosta.
Przewodnik programowania klasy dostawcy urządzeń USB
W tej sekcji wyjaśniono, jak korzystać z klasy Vendor. Inicjowanie klasy Vendor urządzenia USB Dodawanie instancji klasy Vendor urządzenia USB do urządzenia Komunikacja za pomocą klasy Vendor urządzenia USB
Inicjowanie klasy dostawcy urządzenia USB
Aby dodać funkcjonalność klasy dostawcy do swojego urządzenia, najpierw zainicjuj klasę, wywołując funkcję USBD_Vendor_Init().ampPoniżej pokazano, jak wywołać sl_usbd_vendor_init().
Example – Wywołanie sl_usbd_vendor_init()
sl_status_t status;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */ }
Dodawanie instancji klasy dostawcy urządzenia USB do urządzenia
Aby dodać funkcjonalność klasy dostawcy do swojego urządzenia, musisz najpierw utworzyć instancję, a następnie dodać ją do konfiguracji urządzenia.
Tworzenie instancji klasy dostawcy Dodawanie instancji klasy dostawcy do konfiguracji urządzenia
Tworzenie instancji klasy dostawcy
Utwórz instancję klasy Vendor, wywołując funkcję sl_usbd_vendor_create_instance().ampPoniższy przykład pokazuje, jak wywołać funkcję sl_usbd_vendor_create_instance() z użyciem argumentów domyślnych. Więcej informacji na temat argumentów konfiguracyjnych przekazywanych do funkcji sl_usbd_vendor_create_instance() można znaleźć w sekcji Konfiguracje instancji klasy dostawcy urządzenia USB.
Example – Wywołanie sl_usbd_vendor_create_instance()
uint8_t numer_klasy; sl_status_t status;
status = sl_usbd_vendor_create_instance(fałsz,
(1)
0u,
(2)
funkcje_wywołania_zwrotnego_dostawcy_usbd_app, (3)
&class_nbr);
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
(1) Brak punktów końcowych przerwania z tą instancją klasy. (2) Interwał jest ignorowany, ponieważ punkty końcowe przerwania są wyłączone.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
54/174
Nadview
(3) Funkcja wywołania zwrotnego, która jest częścią aplikacji obsługującej żądania klas specyficznych dla dostawcy. Więcej informacji można znaleźć w sekcji Komunikacja za pomocą klasy dostawcy urządzenia USB. Dodawanie instancji klasy dostawcy do konfiguracji urządzenia. Po utworzeniu instancji klasy dostawcy można dodać ją do konfiguracji, wywołując funkcję USBD_Vendor_ConfigAdd().ampPoniżej pokazano, jak wywołać sl_usbd_vendor_add_to_configuration() przy użyciu domyślnych argumentów.
Example – Wywołanie sl_usbd_vendor_add_to_configuration()
sl_status_t status;
status = sl_usbd_vendor_add_to_configuration(nr_klasy,
(1)
config_nbr_fs);
(2)
jeśli (status ! SL_STATUS_OK) {
/* Wystąpił błąd. Tutaj należy dodać obsługę błędów. */
}
(1) Numer klasy, który należy dodać do konfiguracji zwróconej przez sl_usbd_vendor_create_instance(). (2) Numer konfiguracji (w tym przypadku dodawany do konfiguracji pełnej prędkości).
Komunikacja za pomocą klasy dostawcy urządzenia USB
Ogólna komunikacja synchroniczna Komunikacja asynchroniczna Żądanie dostawcy Ogólne Klasa Vendor oferuje następujące funkcje do komunikacji z hostem. Aby uzyskać więcej informacji na temat parametrów funkcji, zobacz API dostawcy urządzeń USB.
Tabela – Podsumowanie interfejsu API komunikacji z dostawcami
Nazwa funkcji
sl_usb_vendor_ read_bulk_sync() sl_usb_vendor_write_bulk_sync() sl_usb_vendor_ read_bulk_async() sl_usb_vendor_ write_bulk_async() sl_usb_vendor_ read_interrupt t_sync() sl_usb_vendor_ write_interrupt t_sync() sl_usb_vendor_ read_interrupt t_async
()
sl_usb d _v e nd o r_write _inte rrup t_asy nc
()
Operacja Odbiera dane z hosta przez punkt końcowy wyjścia zbiorczego. Ta funkcja jest blokująca. Wysyła dane do hosta przez punkt końcowy wejścia zbiorczego. Ta funkcja jest blokująca. Odbiera dane z hosta przez punkt końcowy wyjścia zbiorczego. Ta funkcja jest nieblokująca. Wysyła dane do hosta przez punkt końcowy wejścia zbiorczego. Ta funkcja jest nieblokująca. Odbiera dane z hosta przez punkt końcowy wyjścia przerwania. Ta funkcja jest blokująca. Wysyła dane do hosta przez punkt końcowy wejścia przerwania. Ta funkcja jest blokująca. Odbiera dane z hosta przez punkt końcowy wyjścia przerwania. Ta funkcja jest nieblokująca.
bloking.
Wysyła dane do hosta przez punkt końcowy IN przerwania. Ta funkcja nie jest blokująca.
Żądania dostawcy to kolejny sposób komunikacji z hostem. Zarządzając żądaniami dostawcy wysyłanymi przez hosta, aplikacja może odbierać lub wysyłać dane z hosta lub do hosta za pomocą punktu końcowego sterowania; konieczne będzie podanie wywołania zwrotnego aplikacji jako parametru funkcji sl_usbd_vendor_create_instance(). Komunikacja synchroniczna
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
55/174
Nadview
Komunikacja synchroniczna oznacza, że transfer jest blokowany. Po wywołaniu funkcji aplikacja blokuje się do momentu zakończenia transferu z błędem lub bez. Można określić limit czasu, aby uniknąć oczekiwania w nieskończoność.ampPoniżej przedstawiono operację odczytu i zapisu, która polega na odebraniu danych z hosta za pomocą punktu końcowego zbiorczego OUT i wysłaniu danych do hosta za pomocą punktu końcowego zbiorczego IN.
Example – Synchroniczny zbiorczy odczyt i zapis
__WYRÓWNANE(4) uint8_t rx_buf[2];
__WYRÓWNANE(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_vendor_read_bulk_sync(nr_klasy,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
status = sl_usbd_vendor_write_bulk_sync( klasa_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
FAŁSZ,
(5)
&xfer_len);
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
(1) Numer instancji klasy utworzonej za pomocą sl_usbd_vendor_create_instance() zawiera wewnętrzne odwołanie do klasy Vendor w celu skierowania transferu do właściwego punktu końcowego OUT lub IN.
(2) Aplikacja musi zapewnić, że bufor udostępniony funkcji jest wystarczająco duży, aby pomieścić wszystkie dane. W przeciwnym razie mogą wystąpić problemy z synchronizacją.
(3) Aby uniknąć sytuacji nieskończonego blokowania, można określić limit czasu wyrażony w milisekundach. Wartość 809 powoduje, że zadanie aplikacji będzie czekać w nieskończoność.
(4) Aplikacja zapewnia zainicjowany bufor transmisyjny.
(5) Jeżeli ta flaga jest ustawiona na wartość true, a długość transferu jest wielokrotnością maksymalnego rozmiaru pakietu punktu końcowego, stos urządzeń wyśle do hosta pakiet o zerowej długości, aby zasygnalizować zakończenie transferu.
Użycie funkcji komunikacji punktów końcowych przerwań, sl_usbd_vendor_read_interrupt_sync() i sl_usbd_vendor_write_interrupt_sync(), jest podobne do funkcji komunikacji punktów końcowych zbiorczych przedstawionych w Example – Synchroniczny zbiorczy odczyt i zapis.
Komunikacja asynchroniczna
Komunikacja asynchroniczna oznacza, że transfer jest nieblokujący. Po wywołaniu funkcji aplikacja przekazuje informacje o transferze do stosu urządzeń i nie blokuje się. Inne operacje aplikacji mogą być wykonywane podczas transferu przez magistralę USB. Po zakończeniu transferu stos urządzeń wywołuję funkcję zwrotną, aby poinformować aplikację o zakończeniu transferu.ampPoniżej przedstawiono asynchroniczny odczyt i zapis.
Example – Asynchroniczny zbiorczy odczyt i zapis
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
56/174
Nadview
void app_usbd_vendor_comm (uint8_t class_nbr)
{
__WYRÓWNANE(4) uint8_t rx_buf[2];
__WYRÓWNANE(4) uint8_t tx_buf[2];
sl_status_t
status;
status = sl_usbd_vendor_read_bulk_async(klasa_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NIEWAŻNY);
(4)
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
ZERO,
(4)
FAŁSZ);
(6)
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Obsłuż błąd. */
}
}
(1) (3)
(1) (3)
statyczna void app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
pustka *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
pustka *p_callback_arg,
sl_status_t status)
{
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Wykonaj przetwarzanie. */
} w przeciwnym razie {
/* $$$$ Obsłuż błąd. */
}
}
statyczna void app_usbd_vendor_tx_completed(uint8_t class_nbr,
(3)
pustka *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
pustka *p_callback_arg,
sl_status_t status)
{
jeśli (status ! SL_STATUS_OK) {
/* $$$$ Wykonaj przetwarzanie. */
} w przeciwnym razie {
/* $$$$ Obsłuż błąd. */
}
}
(1) Numer instancji klasy stanowi wewnętrzne odwołanie do klasy Vendor w celu skierowania transferu do właściwego punktu końcowego zbiorczego OUT lub IN. (2) Aplikacja musi upewnić się, że bufor jest wystarczająco duży, aby pomieścić wszystkie dane. W przeciwnym razie mogą wystąpić problemy z synchronizacją. (3) Aplikacja dostarcza wskaźnik do funkcji wywołania zwrotnego przekazywany jako parametr. Po zakończeniu transferu stos urządzeń wywołuje tę funkcję wywołania zwrotnego, aby aplikacja mogła sfinalizować transfer, analizując wynik transferu. Na przykład, po zakończeniu operacji odczytu, aplikacja może wykonać przetwarzanie odebranych danych. Po zakończeniu zapisu aplikacja może wskazać, czy zapis zakończył się powodzeniem i ile bajtów zostało wysłanych.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
57/174
Nadview
(4) Można również przekazać argument powiązany z wywołaniem zwrotnym. Następnie w kontekście wywołania zwrotnego można pobrać pewne prywatne informacje. (5) Aplikacja udostępnia zainicjowany bufor transmisji. (6) Jeśli ta flaga jest ustawiona na true, a długość transferu jest wielokrotnością maksymalnego rozmiaru pakietu punktu końcowego, stos urządzenia wyśle do hosta pakiet o zerowej długości, aby zasygnalizować koniec transferu. Użycie funkcji komunikacji przerwań punktu końcowego, sl_usbd_vendor_read_interrupt_async() i sl_usbd_vendor_write_interrupt_async(), jest podobne do funkcji komunikacji zbiorczej punktu końcowego przedstawionych w przykładzie.ample Asynchroniczny masowy odczyt i zapis.
Żądanie dostawcy
Specyfikacja USB 2.0 definiuje trzy typy żądań: standardowe, klasowe i dostawcy. Wszystkie standardowe żądania są obsługiwane bezpośrednio przez warstwę rdzeniową, natomiast żądania klasowe są zarządzane przez odpowiednią klasę skojarzoną. Żądania dostawcy mogą być przetwarzane przez klasę dostawcy. Aby przetworzyć żądania dostawcy, należy podać wywołanie zwrotne aplikacji jako parametr funkcji sl_usbd_vendor_create_instance(). Po odebraniu żądania dostawcy przez urządzenie USB, musi ono zostać poprawnie zdekodowane.ampPoniższy rysunek przedstawia dekodowanie żądań dostawcy. Niektóre żądania mogą być wymagane do odebrania lub wysłania do hosta podczas przetwarzania danych.tage transferu sterowania. Jeśli nie ma danych stagJeśli jest obecny, wystarczy zdekodować pakiet konfiguracyjny. To jestample pokazuje trzy typy danychtagZarządzanie danymi: brak danych, dane WYJŚCIE i dane PRZYJŚCIE.
Example – Dekodowanie żądania dostawcy
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
58/174
Nadview
#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
50 jednostek
statyczny uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];
statyczny bool app_usbd_vendor_req (uint8_t
numer_klasy,
const sl_usbd_setup_req_t *p_setup_req)
(1)
{
bool ważny;
sl_status_t status;
uint16_t req_len;
uint32_t xfer_len;
(void)nr_klasy;
switch(p_setup_req->bRequest) { przypadek APP_VENDOR_REQ_NO_DATA: prawidłowy = prawda; przerwa;
(2) (3)
przypadek APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:
(4)
req_len = p_setup_req->wLength;
jeśli (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {
// Za mało miejsca na odbiór danych.
zwróć (fałsz);
}
// Odbierz dane przez Control OUT EP. // Czekaj na zakończenie transferu w nieskończoność. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); if (status ! SL_STATUS_OK) { prawidłowy = fałsz; } else { prawidłowy = prawda; } przerwij;
przypadek APP_VENDOR_REQ_SEND_DATA_TO_HOST:
(5)
req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;
// Wypełnij bufor wzorcem. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
req_len);
// Wyślij dane przez Control IN EP. // Czekaj na zakończenie transferu w nieskończoność. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); if (status ! SL_STATUS_OK) { prawidłowy = DEF_FAIL; } else { prawidłowy = DEF_OK; } break;
domyślny:
(6)
// Żądanie nie jest obsługiwane.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
59/174
Nadview
ważny =prawda;przerwa;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Za mało miejsca na odbiór danych.return(false);}// Odbierz dane przez Control OUT EP.// Czekaj na ukończenie transferu w nieskończoność. status =sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(status ! SL_STATUS_OK){ prawidłowy =fałsz;}else{ prawidłowy =prawda;}przerwij;
przypadek APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Wypełnij buf wzorcem.Mem_Set((void *)&AppVendorReqBuf[0u],'A',
req_len);// Wyślij dane przez Control IN EP.// Czekaj na ukończenie transferu w nieskończoność. 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;
domyślne:(6)// Żądanie nie jest obsługiwane. valid = DEF_FAIL;break;}return(valid);}
(1) Rdzeń przekaże zawartość pakietu konfiguracyjnego do aplikacji. Struktura sl_usbd_setup_req_t zawiera te same pola, które zostały zdefiniowane w specyfikacji USB 2.0 (więcej szczegółów można znaleźć w sekcji „9.3 Żądania urządzeń USB” specyfikacji):
struktura typedef {
uint8_t bmRequestType; /* Charakterystyka żądania.
*/
uint8_t bRequest; /* Konkretne żądanie.
*/
uint16_t wValue; /* Różni się w zależności od żądania.
*/
uint16_t wIndex; /* Różni się w zależności od żądania; zwykle używany jako indeks.*/
uint16_t wLength; /* Długość transferu, jeśli dane stage obecny.
*/
} sl_usbd_setup_req_t;
(2) Określ żądanie. Możesz użyć instrukcji switch, jeśli używasz różnych żądań. W tym przykładzieamptzn. istnieją trzy różne żądania odpowiadające trzem typom danychtage: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST i APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) Jeżeli nie ma danychtagJeśli e jest obecne, wystarczy zdekodować pozostałe pola. Obecność danych stagTo, czy e czy nie, jest wskazywane przez pole wLength, które jest różne od null lub ma wartość null.
(4) Jeśli host wysyła dane do urządzenia, należy wywołać funkcję sl_usbd_core_read_control_sync(). Dostarczony bufor powinien pomieścić do wLength bajtów. W przypadku wystąpienia błędu należy zwrócić wartość false do rdzenia, co spowoduje zatrzymanie statusu.tage transmisji sterowania, wskazującej hostowi, że żądanie nie może zostać przetworzone. W przypadku powodzenia zwracana jest wartość true.
(5) Jeśli host odbiera dane z urządzenia, należy wywołać funkcję sl_usbd_core_write_control_sync(). W przypadku wystąpienia błędu należy zwrócić wartość false do rdzenia, co spowoduje zatrzymanie generowania statusu.tage transmisji sterowania, wskazującej hostowi, że żądanie nie może zostać przetworzone. W przypadku powodzenia zwracana jest wartość true.
(6) W tym przykładzieampCzyli wszystkie nierozpoznane żądania są oznaczane przez zwrócenie wartości false do rdzenia. To spowoduje zatrzymanie danych lub statusu.tage transmisji sterowania wskazującej hostowi, że żądanie nie jest obsługiwane.
Host wysyła żądania dostawcy za pośrednictwem aplikacji dostawcy hosta. Biblioteki USB, takie jak libusb, mogą być pomocne w opracowaniu własnej aplikacji dostawcy hosta.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
60/174
Dokumentacja API
Dokumentacja API
Dokumentacja API
Lista modułów
Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB HID Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API dostawców urządzeń USB
Opis
Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB HID Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API urządzeń USB Interfejs API dostawców urządzeń USB
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
61/174
Interfejs API urządzenia USB
Interfejs API urządzenia USB
Interfejs API urządzenia USB
API urządzeń USB.
Moduły
Interfejs API urządzenia USB ACM Interfejs API urządzenia USB CDC Interfejs API urządzenia USB Core Interfejs API urządzenia USB HID Interfejs API urządzenia USB MSC Interfejs API urządzenia USB MSC Interfejs API dostawcy urządzenia USB
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
62/174
Interfejs API ACM urządzenia USB
Interfejs API ACM urządzenia USB
Interfejs API ACM urządzenia USB
Urządzenie USB CDC ACM API.
Moduły
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Funkcje
sl_status_t sl_status_t
sl_status_t sl_status_t sl_status_t
sl_status_t
sl_status_t
sl_status_t
sl_status_t sl_status_t sl_status_t sl_status_t sl_status_t
a sl_usbd_cdc_ cm_init(void)
ZMIENNE GLOBALNE.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Dodaj nową instancję podklasy emulacji szeregowej CDC ACM.
aaaa sl_usbd_cdc_ cm_ dd_to_config tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
Dodaj instancję podklasy CDC ACM do konfiguracji urządzenia USB.
aa sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Pobierz stan włączenia podklasy emulacji szeregowej CDC ACM.
aaa 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) Odbieranie danych w podklasie emulacji szeregowej CDC ACM.
aaaa sl_usbd_cdc_ cm_re d_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Asynchroniczne odbieranie danych w podklasie emulacji szeregowej CDC ACM.
aa 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) Wysyłanie danych w podklasie emulacji szeregowej CDC ACM.
aaa sl_usbd_cdc_ cm_write_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Asynchroniczne wysyłanie danych w podklasie emulacji szeregowej CDC ACM.
aaa sl_usbd_cdc_ cm_get_line_control_st te(uint8_t subcl ss_nbr, uint8_t *p_line_ctrl)
Zwróć stan linii sterujących.
aaa sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Pobierz aktualny stan kodowania linii.
aaa sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Ustaw nowe kodowanie linii.
aaa sl_usbd_cdc_ cm_set_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Ustaw zdarzenie(a) stanu linii.
aaaa sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Wyczyść zdarzenie(a) stanu linii.
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
63/174
Interfejs API ACM urządzenia USB
Makra
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODUŁ.
#define SL_USBD_CDC_ACM_PARITY_NONE 0u
DEFINICJE USTAWIEŃ PORTU.
#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
DEFINICJE FLAG WYDARZEŃ LINII.
#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
MOŻLIWOŚCI ZARZĄDZANIA POŁĄCZENIAMI.
#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)
Dokumentacja funkcji
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (void )
ZMIENNE GLOBALNE. Parametry
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
64/174
Interfejs API ACM urządzenia USB
Typ
próżnia
Kierunek N/A
Nazwa argumentu
MAKRA STAŁE GLOBALNE FUNKCJE PROTOTYPY CDC FUNKCJE ACM
Zainicjuj podklasę emulacji szeregowej CDC ACM.
Zwroty
Zwraca SL_STATUS_OK w przypadku powodzenia lub inny kod SL_STATUS w przypadku niepowodzenia.
Opis
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)
Dodaj nową instancję podklasy emulacji szeregowej CDC ACM.
Parametry
Typ
uint16_t
uint16_t
Nazwa argumentu kierunku
Opis
Brak
line_state_interval Interwał powiadomień o stanie linii w milisekundach (wartość musi być
będzie potęgą liczby 2).
Brak
call_mgmt_capabilities Mapa bitowa możliwości zarządzania połączeniami. Połączona operatorem OR
następujące flagi:
SL_USBD_CDC_ACM_CALL_MGMT_DEV Urządzenie samo zarządza połączeniami. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Urządzenie może wysyłać/odbierać informacje dotyczące zarządzania połączeniami przez interfejs klasy danych.
sl_usbd_cdc_acm_callbacks_t N/A
*
uint8_t *
Brak
p_acm_callbacks p_subclass_nbr
Opcjonalne wskaźniki do funkcji wywołania zwrotnego, które mają być wywołane w przypadku różnych zdarzeń.
Parametr zmiennej, która otrzyma numer wystąpienia podklasy emulacji szeregowej CDC ACM.
Zwroty
Zwróć SL_STATUS_OK w przypadku powodzenia lub inny kod SL_STATUS w przypadku niepowodzenia.
sl_usbd_cdc_acm_dodaj_do_konfiguracji
sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t subclass_nbr, uint8_t config_nbr)
Dodaj instancję podklasy CDC ACM do konfiguracji urządzenia USB.
Parametry
Typ
uint8_t uint8_t
Kierunek N/AN/A
Nazwa argumentu
numer_podklasy numer_konfiguracji
Opis numeru instancji podklasy emulacji szeregowej CDC ACM. Indeks konfiguracji, do którego należy dodać nowy interfejs klasy testowej.
Zwroty
Copyright © 2025 Silicon Laboratories. Wszelkie prawa zastrzeżone.
65/174
Interfejs API ACM urządzenia USB
Zwraca SL_STATUS_OK w przypadku powodzenia lub inny kod SL_STATUS w przypadku niepowodzenia.
sl_usbd_cdc_acm_jest_włączony
sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)
Pobierz stan włączenia podklasy emulacji szeregowej CDC ACM.
Parametry
Typ
Kierunek
Nazwa argumentu
Opis
uint8_t N/A
subclass_nbr Numer instancji podklasy emulacji szeregowej CDC ACM.
bool * N/A
p_włączone
Wartość logiczna do zmiennej, która otrzyma status włączenia. Zmienna jest ustawiona na wartość true, emulacja szeregowa CDC ACM jest włączona.
Dokumenty / Zasoby
![]() |
Stos urządzeń USB SILICON LABS [plik PDF] Instrukcja obsługi Stos urządzeń USB, stos urządzeń, stos |