Analiza błędów w protokole USB

| Technika

Standard USB praktycznie już całkowicie wyparł z komputerów takie magistrale jak PS/2, RS-232 oraz port równoległy LPT oraz stał się jedynym interfejsem komunikacyjnym dla większości urządzeń przenośnych. Testowanie komunikacji RS-232 było sprawą dość prostą, a poprawność przesyłanych danych można było sprawdzić za pomocą oscyloskopu. Darmowe oprogramowanie dodatkowo ułatwiało to zadanie.

Analiza błędów w protokole USB

Skoro jednak dzisiaj króluje uniwersalna magistrala USB, warto zapoznać się z najważniejszymi problemami nadzorowania komunikacji, wyszukiwania błędów oraz testowania urządzeń z USB. Wbrew pozorom zadanie to nie jest takie trudne, a dostępne narzędzia mogą okazać się bardzo przydatne - w tym artykule opisane zostaną urządzenia "USB klient", współpracujące z Windowsami.

Przesyłanie pakietów w systemie Windows

W Windowsach nie ma bezpośredniego dostępu do jądra, przez co nie można w pełni kontrolować przepływu danych. W przypadku błędnego działania naszego urządzenia kluczowym momentem jest stwierdzenie, która z warstw systemu operacyjnego wykrywa niepoprawne dane (rys. 1). Analiza sygnałów przekazywanych do przestrzeni użytkownika nie jest skomplikowana i zapewnia ją większość dostępnych aplikacji (menadżer urządzeń, USB Deview czy USB Viewer, dostępny na stronie Microsoftu).

Rys. 1. Poglądowy rysunek warstw w jądrze Windows

Rys. 2. Struktura sterowników USB w systemie Windows XP

Dokładniejszą analizę można uzyskać przez podpięcie się do sterownika USB. Program USB Lyzer (jest darmowa 30-dniowa wersja) pozwala na analizę sygnałów przetwarzanych przez sterownik USB w jądrze systemu. Kolejnym rozwiązaniem jest użycie analizatora USB, dzięki któremu można przeglądnąć dane przesyłane przewodami. Jest to dość drogie narzędzie, które jednak, jako jedyne, pozwoli nam wykryć błędy integralności sygnału.

Każdy z wymienionych sposobów zostanie omówiony w dalszej części artykułu. Dodatkowo przedstawiony zostanie program USB Command Verifier - udostępniany za darmo na stronach usb.org - który pozwala na wstępne przetestowanie urządzenia pod kątem certyfikatów WHQL.

Wstępna analiza - menadżer urządzeń

Pierwszych informacji na temat urządzeń dostępnych w systemie oraz statusu ich działania dostarcza nam menadżer urządzeń. Po prawidłowym podłączeniu i zainstalowaniu urządzenia można między innymi sprawdzić, jakie interfejsy udostępnia to urządzenie, jaki sterownik jest wykorzystywany przez dany interfejs oraz informacje opisujące producenta. Z punktu widzenia projektanta ważną informację niesie ze sobą aktualny status (ewentualnie rozpoznany powód nieprawidłowego działania) oraz wykorzystywany sterownik.

Rysunek 2 przedstawia poglądową strukturę współpracy sterowników w systemie Windows XP. Przedstawiona została sytuacja, w której do komputera podpięte zostało urządzenie wyposażone w trzy interfejsy. Dwa z nich wykorzystują sterowniki wyższego poziomu dostarczane przez system - może to być HID - myszka lub klawiatura lub Mass Storage (pamięć USB). Trzeci interfejs odwołuje się bezpośrednio do sterownika magistrali USB (Bus Drivera) i jest dostarczany przez producenta.

Rys. 3. Menadżer urządzeń Windows XP: a) myszka optyczna – urządzenia HID, b) moduł odpowiedzialny za tryb High Speed

Rys. 4. Program USBDeview pozwoli przeglądać zainstalowane sterowniki, także dawno niepodłączanych urządzeń

Na rysunku 3 przedstawiono widok menadżera urządzeń z widocznymi kilkoma hostami i urządzeniami USB. Wśród tych urządzeń możemy wydzielić urządzenia komunikujące się poprzez sterowniki wbudowane w system - zewnętrzną pamięć Disk Drivers - USB Device czy myszkę optyczną - USB HID oraz urządzenie z kilkoma interfejsami obsługiwanymi przez sterowniki producenta (telefon Nokia 3310). Wadliwie działające urządzenie zostanie oznaczone żółtym wykrzyknikiem.

We właściwościach danego urządzenia mamy dostępną informacje na temat stanu pracy (device status). W przypadku wystąpienia błędu podczas ładowania sterownika lub komunikacji z urządzeniem w oknie statusu znajdziemy kod błędu. Szczegółowy opis poszczególnych kodów dostępny jest na stronie Microsoft u. Jeśli projektujemy i testujemy urządzenie USB 2.0 działające z najwyższą prędkością (High Speed), pierwszym krokiem, jaki należy podjąć, jest sprawdzenie, czy podobne problemy występują przy wolniejszej transmisji (Full Speed).

Jeśli nasze urządzenie nie umożliwia przełączania trybów, możemy tego dokonać wyłączając "Enhanced Host Controller" danego hosta USB. Urządzenie to znajdziemy w zakładce kontrolerów USB menadżera urządzeń.

Informacja o zainstalowanych sterownikach

Informacje na temat dodatkowych, a także dawno nieużywanych sterowników zainstalowanych w naszym systemie uzyskamy dzięki programowi USBDeview. Program ten, analizując zawartość katalogu WindowsSystem32, danych z rejestru oraz na podstawie aktualnego stanu systemu, podaje nam pełną listę urządzeń, dla których sterowniki są zainstalowane. Podczas projektowania oraz testowania nowych urządzeń pozwoli nam też w skuteczny sposób usunąć z systemu zainstalowane sterowniki.

Rys. 5. Test prędkości pamięci USB

Rys. 6. Program USB Lyzer jest jednym z najbardziej zaawansowanych narzędzi służących do analizy transmisji USB

W głównym oknie programu dostępne są takie informacje jak nazwa i opis urządzenia, typ urządzenia, numer seryjny dla urządzeń typu Mass Storage, data pierwszego oraz ostatniego podłączenia urządzenia, VID, PID i wiele innych. Program jest wciąż rozwijany i wzbogacany o dodatkowe funkcje. Do dodatkowych funkcji, takich jak możliwość wywoływania polecenia z linii komend podczas wykrycia urządzenia, dołączono ostatnio możliwość testowania prędkości urządzeń Mass Storage. Test przeprowadzany jest za pomocą jednego dużego pliku wielkości 100 MB. Dostępna jest także polska wersja językowa.

Zaawansowany programowy analizator USB

Program USB Lyzer jest jednym z najbardziej zaawansowanych narzędzi służących do analizy transmisji USB. Oprogramowanie jest idealnym rozwiązaniem zarówno dla osób, które opracowują nowe projekty urządzeń wyposażonych w USB, jak i tych, którzy chcą poznać ten sposób komunikacji. Specyfikacja USB i książki opisujące protokół transmisji USB staną się bardziej zrozumiałe, gdy wszystkie zawarte w nich informacje będziemy mogli przetestować na działających urządzeniach.

Program pozwala na analizę struktury urządzeń USB, sprawdzanie stanu ich aktywności oraz logowanie transmisji na bieżąco. Zebrane informacje można odczytać zarówno w postaci surowej - czystych pakietów binarnych (rys. 7), jak i zdekodować zgodnie z charakterem podłączonego urządzenia. Aktualnie oprogramowanie wspiera dekodowanie 3 klas urządzeń: CDC (Communication Device Class), HID (Human Interface Device) i HUB.

W praktyce oznacza to możliwość dekodowania pakietów przychodzących z takich urządzeń jak: modem ethernetowy, port OBEX, klawiatura czy myszka. Program jest wciąż rozwijany i wzbogacany o kolejne kategorie urządzeń, a zapotrzebowanie na specyficzny rodzaj dekodera można wysyłać bezpośrednio do producenta oprogramowania. Analizę zgranych logów ułatwiają mechanizmy wyszukiwania oraz filtracji pakietów.

Rys. 7. Analiza pakietów binarnych w programie USBLyzer

Rys. 8. Prawdopodobne błędy transmisji wskazane przez USB Lyzer

W wielu przypadkach oprogramowanie to zapewnia funkcjonalność podobną do analizatora sprzętowego. Program ma bardzo przyjazny interfejs użytkownika i pozwala na szybkie rozpoczęcie pracy. Ma również wbudowane analizatory transmisji USB i potrafiwskazać miejsca, w których może występować ewentualny błąd (rys. 8). Praca z analizatorem programowym ma jednak swoje ograniczenia. Ta metoda pozwala na analizowanie transmisji pomiędzy komputerem wyposażonym w Windowsy, a do niedawna nie było wersji USB Lyzera dla wersji 7.

Logowane sygnały są pobierane z warstwy sterownika, więc będą to dane częściowo przetworzone przez oprogramowanie. Powoduje to brak możliwości analizowania niektórych transmisji kontrolnych takich jak: negocjacja high-speed, proces usypiania urządzenia lub reset. Dane zebrane przez analizator programowy mogą się okazać także niewystarczające w przypadku niestabilnego działania systemu (bluescreen) lub odłączenia urządzenia bez odmontowania. Testowanie takich przypadków jest niezbędne podczas pisania i testowania sterowników USB.

Sprzętowy analizator USB

Wszystkie przytoczone wyżej metody lokalizacji błędów USB mają ograniczenia, związane z działaniem na urządzeniu typu host. Dostarczane informacje mogą okazać się niewystarczające w krytycznych przypadkach, takich jak zawieszenie systemu czy enumeracja urządzeń w BIOS-ie podczas startu komputera. Stosowanie dodatkowych programów może mieć także wpływ na testowany system. W przypadku częstych prac przy projektowaniu urządzeń USB warto rozważyć zakup sprzętowego analizatora USB.

Wydatek rzędu kilku tysięcy złotych w znacznym stopniu ułatwi zespołowi projektantów analizę transmisji i lokalizację ewentualnych źródeł błędów. Głównymi producentami takich urządzeń USB są firmy Ellisys i LeCroy. Analizatory takie są urządzeniami pośredniczącymi w transmisji pomiędzy hostem a klientem USB. Przechwytują i zapisują w pamięci wewnętrznej pełną informację o transmisji. Wielką zaletą takiego pomiaru jest podgląd informacji transmitowanej przez kabel USB.

Rys. 9. Transmisja USB przedstawiona w oknie analizatora Ellisys

Rys. 10. Zakończony sukcesem test pamięci USB. Test 100 enumeracji trwał 31s

Gdy programowe analizatory okażą się bezsilne w przypadku dużej liczby nierozpoznanych ramek, czy problemów z jakością sygnału, to wtedy sprzętowy analizator wychwyci wszystkie te problemy, a dołączone do niego oprogramowanie pozwoli na szybką lokalizację nieprawidłowości. Oprogramowanie dołączone do analizatora pozwala na dekodowanie zebranych sygnałów w zależności od rodzaju testowanego urządzenia.

Command Verifier (testy WHQL)

Ostatnim etapem pracy są testy Windows Hardware Quality Labs. Pozytywne przejście tych testów gwarantuje stabilną współpracę naszego urządzenia z systemami operacyjnymi Microsoftu. Certyfikowane urządzenia uzyskują specjalny klucz, dzięki któremu nie wyświetla się informacja o zagrożeniu dla systemu podczas instalacji sterownika, a proces instalacji można wtedy ustawić w tryb cichy - bez wymagania jakiejkolwiek akcji użytkownika.

W zależności od rodzaju urządzenia dla uzyskania certyfikatu wymagane jest przesłanie do Microsoft u jednego urządzenia lub samych logów zebranych podczas testu.Wstępne testy WHQL mogą zostać przeprowadzone za pomocą programu USB Command Verifier, dostępnego za darmo na stronach usb.org. Program podmienia sterownik USB w systemie i przeprowadza szereg testów interakcji naszego urządzenia z systemem operacyjnym.

Większość z nich jest bardzo wymagająca i może spowodować zawieszenie testowanego urządzenia bądź komputera testującego. Każdy taki przypadek wyklucza możliwość uzyskania certyfikatu i musi być naprawiony. Jednym z bardziej przydatnych testów, przeprowadzanych przez to narzędzie, jest "Chapter 9 test". W jego skład wchodzi Enumeration Stress Test, podczas którego urządzenie jest kilkaset razy dodawane i usuwane z systemu. Po każdym zainstalowaniu host wysyła do urządzenia kilka standardowych komend, na które musi uzyskać odpowiedź w ustalonym czasie.

Bartłomiej Grześkowiak