Ten rozdział opisuje strukturę oprogramowania komponentu USB Host i wyjaśnia jego zastosowanie do tworzenia aplikacji USB Host. Ten komponent oprogramowania jest dostępny tylko dla użytkowników MDK-Professional.
Komponent Hosta USB upraszcza tworzenie oprogramowania systemów mikrokontrolerów, które pozwalają na podłączenie urządzeń USB. Atrybuty komponentu Hosta USB to:
- Zgodność ze specyfikacją USB 2.0.
- Obsługa klas HID, MSC, CDC i niestandardowych urządzeń USB, które można podłączyć do Hosta USB.
- Obsługa typów sterowania, przerwania i transferu masowego.
Komponenty RTE
Następujący rysunek przedstawia zależności komponentów RTE z peryferiami USB Host mikrokontrolera (kontroler USB). Komponenty RTE dostarczają pliki konfiguracyjne i szablony kodu użytkownika. Pliki konfiguracyjne konfigurują komponenty RTE, interfejsy sprzętowe, zasoby pamięci i parametry hosta USB. Szablony kodu użytkownika dostarczają szkielet do implementacji wsparcia dla różnych klas urządzeń USB.
Kroki tworzenia aplikacji mikrokontrolera, która działa jako Host USB są następujące:
- Wybierz Komponenty RTE, które są wymagane dla Twojej aplikacji.
- Włącz i skonfiguruj sterownik hosta USB.
- Skonfiguruj hosta USB, który łączy oprogramowanie pośredniczące USB z peryferiami USB mikrokontrolera.
- Skonfiguruj zasoby systemowe zgodnie z wymaganiami zasobów komponentu hosta USB.
- Konfiguracja parametrów dołączonych urządzeń USB.
- Implementacja kodu aplikacji przy użyciu szablonów kodu, które są dostarczane w celu obsługi różnych klas urządzeń USB.
- Debugowanie aplikacji przy użyciu wbudowanych mechanizmów komponentu USB.
Wybór komponentu RTE
Wybór komponentu RTE odbywa się w kilku krokach:
- Z komponentu USB:
- Wybierz USB:CORE, który zapewnia podstawową funkcjonalność wymaganą do komunikacji USB.
- Ustaw USB:Host na '1′. To tworzy jeden host USB do komunikacji z podłączonymi urządzeniami USB.
- Wybierz pożądane wsparcie dla klas USB (HID/MSC/CDC/klasa własna). Na przykład, wybierz USB:Host:HID, aby obsługiwać wyłącznie urządzenia klasy HID.
- Z komponentu Drivers:
- Wybierz odpowiedni sterownik hosta USB, odpowiedni dla Twojej aplikacji.
- Z komponentu Device:
- W zależności od wyników walidacji mogą być wymagane dodatkowe sterowniki specyficzne dla urządzenia.
- Z komponentu CMSIS:
- Wybierz CMSIS:CORE, aby zapewnić podstawowy interfejs do procesora.
- Wybierz odpowiedni CMSIS:RTOS lub CMSIS:RTOS2, który jest wymagany dla aplikacji.
Sterownik i kontroler USB
Sterownik hosta USB i kontroler USB mikrokontrolera muszą być poprawnie skonfigurowane. W szczególności oznacza to:
- Sterownik Hosta USB wybrany w komponencie Drivers jest zazwyczaj skonfigurowany z plikiem konfiguracyjnym RTE_Device.h. Chociaż ten plik zapewnia wiele opcji, zazwyczaj wystarczy włączyć peryferia hosta USB związane z tym sterownikiem. Niektóre mikrokontrolery mogą wymagać ustawień związanych z interfejsem warstwy fizycznej (PHY), zasilaniem USB VBUS i zabezpieczeniem nadprądowym.
- Kontroler USB mikrokontrolera wymaga zazwyczaj specyficznych ustawień zegara. Zapoznaj się z podręcznikiem użytkownika mikrokontrolera aby zrozumieć wymagania. Alternatywnie możesz skopiować konfigurację przykładowego hosta USB, który jest dostarczany dla różnych płytek ewaluacyjnych.
Konfiguracja hosta USB
Plik USBH_Config_n.c zawiera dodatkowe ustawienia dla konkretnego hosta USB:
- Numer sterownika jest ustawiony zgodnie z wybranym kontrolerem USB. Dla pojedynczych kontrolerów urządzeń USB będzie to '0′.
- Niektóre mikrokontrolery mogą korzystać z różnych sprzętowych interfejsów kontrolera. Aby wybrać prawidłowe ustawienie, należy zapoznać się z podręcznikiem użytkownika wybranego mikrokontrolera.
Szczegółowa lista wszystkich dostępnych ustawień znajduje się w rozdziale Konfiguracja.
Konfiguracja zasobów systemowych
Do prawidłowego działania, komponent hosta USB wymaga pewnych ustawień konfiguracji systemu. Wymagania te są następujące:
- Dodatkowy rozmiar stosu 512 bajtów. Można to skonfigurować w pliku urządzenia (
Stack_Size
). - Komponent urządzenia USB używa wątków CMSIS-RTOS. W przypadku używania RTX v5 nie są konieczne żadne zmiany w ustawieniach RTX, ponieważ wszystkie zasoby są przydzielane statycznie. W przypadku używania RTX v4 należy zmienić następujące ustawienia w pliku:
- Increase the Number of concurrent running user threads by number of threads required by USB Host
- Increase the Number of threads with user-provided stack size by number of threads required by USB Host
- Increase Total stack size for threads with user-provided stack size by size of threads required by USB Host
- Enable User Timers
Aby uzyskać więcej informacji, sprawdź sekcję Wymagania dotyczące zasobów komponentu Host USB.
Konfiguracja dołączalnych urządzeń USB
W USBH_Config_HID.h, USBH_Config_MSC.h, USBH_Config_CDC.h, lub USBH_Config_CustomClass.h można określić liczbę współbieżnych urządzeń USB, które host USB będzie obsługiwał. Ma to wpływ na ilość pamięci, która zostanie zarezerwowana w aplikacji na dołączenie urządzeń USB. Examples shows how to configure an USB Host to interact with different HID, MSC or CDC peripheral devices.
User Code Implementation
files provide function templates to support various USB Device Classes on the USB Host. Dostępne funkcje są wyjaśnione w sekcji Reference komponentu hosta USB. Te procedury mogą być dostosowane do potrzeb aplikacji mikrokontrolera, w przypadku, gdy potrzebna jest inna niż domyślna funkcjonalność.
Dla komponentu Hosta USB dostępne są następujące szablony:
Nazwa szablonu | Przeznaczenie |
---|---|
USBH_MSC.c | Wymagane funkcje do obsługi urządzeń MSC. Szablon można znaleźć tutaj. |
USBH_PL2303.c | Wymagane funkcje do obsługi adaptera Prolific PL2303 USB do szeregowego RS232. Szablon można znaleźć tutaj. |
USBH_User_CustomClass.c | Wymagane funkcje do obsługi dowolnej klasy urządzenia USB. Szablon można znaleźć tutaj. |
Debugowanie
Komponent Hosta USB jest dystrybuowany w formie biblioteki i nie pozwala na bezpośrednie debugowanie jego kodu. Można go jednak łatwo skonfigurować tak, aby generował zdarzenia debugowania i zapewniał dynamiczną widoczność działania komponentu.
Następujące warianty można wybrać dla komponentu oprogramowania USB:CORE w oknie Manage Run-Time Environment:
- Debug: ten wariant obsługuje adnotacje zdarzeń i bardzo ułatwia analizę wewnętrznego działania komponentu hosta USB podczas debugowania aplikacji. Obsługa rejestratora zdarzeń poniżej wyjaśnia, jak skonfigurować i używać tego wariantu.
- Release: ten wariant nie zawiera dodatkowego kodu debugowania. Użyj tego wariantu podczas wdrażania aplikacji.
Następny rysunek przedstawia wybór wariantu Debug.
Wariant USB Host:Debug Events opisuje zdarzenia zaimplementowane w komponencie USB Device Component.
Obsługa rejestratora zdarzeń
to potężne narzędzie, które zapewnia widoczność dynamicznego wykonywania programu.
Komponent hosta USB generuje szeroki zestaw zdarzeń debugowania dla rejestratora zdarzeń i implementuje wymaganą infrastrukturę do interfejsu z nim.
Aby użyć rejestratora zdarzeń, wymagane jest stworzenie obrazu z obsługą generowania zdarzeń. Niezbędne kroki to:
- : w oknie dialogowym zarządzania RTE wybierz wariant Debug dla komponentu oprogramowania USB:CORE.
- : w oknie dialogowym zarządzania RTE włącz komponent oprogramowania Compiler:Event Recorder.
- Upewnij się, że Event Recorder jest zainicjalizowany najlepiej przez, jeśli używany jest CMSIS-RTOS2 RTX v5, lub alternatywnie przez wywołanie funkcji w kodzie aplikacji.
- Konfiguracja Event Recorder: jeśli to konieczne, dostosuj domyślną konfigurację Event Recorder.
- Zbuduj kod aplikacji, pobierz go na docelowy sprzęt i rozpocznij sesję debugowania.
Teraz, gdy host USB generuje informacje o zdarzeniach, można je przeglądać w .
Konfiguracja Event Recorder
Ta sekcja opisuje ustawienia konfiguracyjne Event Recorder. Użycie wymaga wariantu debugowania komponentu programowego USB:CORE; więcej informacji można znaleźć w dziale Event Recorder Support.
USB Event Generation Configuration
Wybranie wariantu debugowania USB:CORE spowoduje dodanie pliku USB_Debug.c
do projektu. Użyj tego pliku, aby ustawić konfigurację generowania zdarzeń dla rdzenia USB, sterowników i klas urządzeń oddzielnie. Plik jest dostępny dla komponentów USB Device i Host.
Do konfiguracji generowania zdarzeń dla każdego modułu dostępne są następujące ustawienia:
- Off oznacza, że moduł nie będzie generował żadnych zdarzeń
- Errors oznacza, że moduł będzie generował tylko zdarzenia błędów
- Errors + API oznacza, że moduł będzie generował zdarzenia błędów i wywołań API
- All oznacza, że moduł będzie generował wszystkie dostępne zdarzenia. Oprócz zdarzeń błędów i wywołań API, zawiera to zdarzenia operacji i zdarzenia szczegółowe.
Event IDs
Komponent USB Host używa następujących identyfikatorów zdarzeń:
Komponent | Event ID |
---|---|
USBH_Core | 0xB0 |
USBH_Driver | 0xB1 |
USBH_CC. | 0xB2 |
USBH_CDC | 0xB3 |
USBH_HID | 0xB4 |
USBH_MSC | 0xB5 |
.