USB w urządzeniach elektronicznych

| Technika

Port USB jest obecnie nieodłącznym wyposażeniem współczesnych komputerów, a liczba dołączanych do niego urządzeń takich jak myszy, klawiatury, drukarki, aparaty, modemy GSM, pamięci masowe, programatory, debuggery, ładowarki, cały czas rośnie. Czasy, kiedy poszczególne urządzenia miały własne porty, np. LPT dla drukarek i skanerów, minęły bezpowrotnie. Jest to znaczący postęp i ułatwienie dla użytkowników sprzętu, ale nie dla producentów, gdyż oznacza to rezygnację z dotychczas stosowanych łatwych w implementacji portów komunikacyjnych takich jak RS 232. Współcześnie istnieje kilka możliwości zrealizowania transmisji przez port USB, takich jak moduły sprzętowe wbudowane w mikrokontrolery, układy konwertujące standard USB na inny, dedykowane przejściówki. Każde z tych rozwiązań ma wady i zalety warte omówienia.

USB w urządzeniach elektronicznych
Sterowniki urządzeń

Rys. 3. Ostrzeżenie wyświetlane przez system Windows XP, gdy instalowane są sterowniki bez certyfi katu Microsoftu

Po podłączeniu urządzenia USB do komputera system operacyjny rozpoczyna wyszukiwanie dla niego sterowników, jednak przed ich zainstalowaniem należy określić, jakie urządzenie zostało podłączone do hosta. Służą do tego specjalne numery przesyłane w procesie enumeracji. Są one oznaczane skrótami VID (Vendor ID) oraz PID (Product ID). Pierwszy z nich jest numerem przyznawanym producentom sprzętu elektronicznego przez organizację USB-IF (USB Implementers Forum).

Numer PID jest natomiast identyfikatorem produktu określającym konkretny wyrób i jest nadawany samodzielnie przez producenta urządzenia. Numery VID oraz PID stanowią kombinację pozwalającą jednoznacznie określić, jaki sprzęt został podłączony. Kombinacja ta musi być niepowtarzalna, gdyż w innej sytuacji nie będzie można jednoznacznie określić, który sterownik zainstalować.

W związku z tym organizacja USB-IF prowadzi ścisły nadzór nad przyznawaniem numerów VID, aby zapobiegać użytkowaniu jednego numeru przez kilku producentów. Za zarządzania numerami PID odpowiedzialni są już sami producenci. Tworząc nowy produkt, zapisują oni w deskryptorze przyznany VID oraz wybrany przez siebie PID, którego dotychczas nie wykorzystywali.

Może się zdarzyć, że urządzenia różnych producentów będą miały ten sam PID, ale będą się różniły numerem VID, więc ich jednoznaczna identyfikacja będzie możliwa. Warto wyraźnie zaznaczyć, że kombinacja VID/PID musi być unikalna dla danego typu urządzenia, a nie dla każdej sztuki urządzenia.

Przykładowo wszystkie myszki komputerowe pochodzące od jednego producenta i stanowiące ten sam model mają identyczne numery VID/PID, ale już klawiatury tego samego producenta będą się różnić numerem PID. Oznaczenia VID oraz PID przypominają, odpowiednio, nazwę producenta oraz model produktu - odszukanie sterowników np. do drukarki wymaga wejścia na stronę producenta wyszukaną w Internecie na podstawie jego nazwy (VID) oraz pobrania właściwych sterowników na podstawie modelu drukarki (PID).

Tryby przesyłania danych

Tryb kontrolny
Jest on używany przede wszystkim podczas konfiguracji urządzenia po dołączeniu do hosta i musi być obsługiwany przez każde urządzenie. Może on być również stosowany do przesyłania danych, gdy potrzebna jest gwarancja ich dostarczenia. Przesyłane pakiety nie mogą być jednak większe niż 64B. Host na transmisję w trybie kontrolnym rezerwuje 10% pasma magistrali. Komunikacja w tym trybie jest złożona z trzech etapów: przekazania rozkazu, przekazania danych oraz przekazania statusu.

Tryb masowy (bulk)
Tryb masowy charakteryzuje się przesyłaniem dużych ilości danych w sposób sekwencyjny, jest wykorzystywany np. przez drukarki i skanery. Dane w tym trybie mogą być przekazywane w sposób nieregularny i docierać z opóźnieniem. Specyfikacja gwarantuje jedynie dostarczenie przesłanych informacji, ale nie gwarantuje braku opóźnień oraz przydziału pożądanego pasma.

Jest to uzależnione od aktywności i liczby innych urządzeń pracujących na magistrali. Zasoby są przydzielane wedle aktualnych możliwości. Wykrycie błędów w transmisji pociąga za sobą konieczność powtórnego przesłania uszkodzonego pakietu. Wszystkie hosty muszą obsługiwać pakiety danych o rozmiarze 8, 16, 32 bądź 64B, a w trybie wysokiej szybkości (480MB/s) nawet 512B.

Nie muszą natomiast obsługiwać większych oraz mniejszych rozmiarów. Zakłada się, że dane są przesyłane w pakietach o maksymalnym rozmiarze ustalonym przez parametr MaxPacketSize, ale ostatni pakiet musi być mniejszy lub mieć zerowy rozmiar, aby zaznaczyć, że jest on ostatni. Warto dodać, że komunikacja w trybie masowym może zostać realizowana tylko z wysoką lub pełną prędkością.

Tryb przerwaniowy (Interrupt Transfer)
Tryb ten został przewidziany do obsługi urządzeń przesyłających lub odbierających niewielkie ilości danych w regularnych odstępach czasu, czego przykładem są klawiatury oraz myszy. Parametry transmisji zawarte w deskryptorze określają częstotliwość odpytywania urządzenia czy rozmiar ramki, który może wynosić od 8B (tryb low-speed), do 64B (tryb full-speed) lub do 1024B w przypadku trybu wysokiej szybkości.

Podobnie jak poprzednio wszystkie przesyłane pakiety muszą mieć maksymalny rozmiar ustalony parametrem MaxPacketSize, gdyż mniejsza ramka sygnalizuje ostatni pakiet. W przeciwieństwie do trybu masowego, pasmo w transmisji przerwaniowej jest zagwarantowane.

Tryb izochroniczny (Isochronous Transfers)
Tryb izochroniczny został przewidziany do obsługi urządzeń przesyłających bardzo duże ilości danych w sposób regularny. Przykładem mogą być urządzenia obsługujące strumienie audio lub wideo w trybie rzeczywistym, np. z kamer internetowych. W przypadku błędu należy go zignorować, gdyż każde wstrzymanie transmisji spowodowałoby ryzyko zapełniania bufora danych.

W tej sytuacji przekłamania pojedynczych bitów są bez znaczenia i zazwyczaj niezauważalne. Próba retransmisji uszkodzonych fragmentów mogłaby spowodować zakłócenia bądź "zamrożenie" obrazu i/lub dźwięku, co spowodowałoby duży dyskomfort u odbiorcy przekazu. Rozmiar pakietu (1023B w trybie pełnej prędkości lub 1024B w trybie wysokiej prędkości) oraz częstotliwość przesyłania ramek są zapisywane w deskryptorze odczytywanym na etapie konfiguracji.

Trzymając się dalej tego przykładu, można zauważyć, że nic nie stoi na przeszkodzie, aby wielu użytkowników miało ten sam model drukarki pochodzący od tego samego producenta (zgodność VID oraz PID). Nie może jednak być tak, że różne drukarki, np. laserową i atramentową, produkuje ten sam producent i nazywa je tak samo. Niektórzy producenci mikrokontrolerów (np. Microchip, Texas Instruments) oferują sublicencje na numery PID w ramach przyznanej im puli.

Oznacza to, że można wystąpić z prośbą o przyznanie PID dla opracowanego przez siebie produktu w ramach numeru VID należącego do Microchipa lub Texas Instruments. Taka możliwość jest dostępna po spełnieniu kilku warunków, m.in. wypełnieniu stosownego formularza znajdującego się na stronie internetowej oraz zaakceptowaniu stawianych w nim warunków licencji.

Warto jednak zauważyć, że numery te są przyznawane na potrzeby rozwojowe produktu (testowanie) oraz dla potrzeb wczesnej fazy sprzedaży. Licencja wygasa automatycznie po sprzedaniu ponad 10 tys. urządzeń (Microchip). Wtedy pozostaje jedynie zwrócić się do organizacji USB-IF w celu pozyskania "normalnego" numeru VID. Koszt jest zależny od wybranego wariantu i wynosi 2-4 tys. dolarów.

Pisanie sterowników do obsługi urządzeń wykorzystujących USB jest z wielu względów niepożądane. Po pierwsze. znalezienie osób dobrze zaznajomionych z tym zagadnienie może okazać się bardzo trudne, a zlecenie tego zadania byle komu jest na tyle ryzykowne, że nie powinno być w ogóle rozważane. Sterowniki pracują w obrębie jądra systemu i mają dostęp do krytycznych funkcji systemu.

Najmniejsze błędy mogą powodować niestabilną pracę bądź zawieszenie komputera. Brak należytej troski oraz wiedzy może też spowodować, że użytkownicy otrzymają niedopracowane i zawierające luki oprogramowanie, które ułatwi hakerom przeprowadzenie ataku. Opracowując sterowniki, należy mieć na uwadze ich testowanie, najlepiej przez dostawcę systemu operacyjnego.

Najczęściej będzie to Microsoft oferujący testowanie oprogramowania bądź sprzętu w ramach programu Windows Hardware Quality Labs (WHQL). Otrzymywany na końcu certyfikat umożliwia instalację sterowników bez ostrzeżeń o ich potencjalnej szkodliwości. Co prawda można samodzielnie przygotować stosowny certyfikat dla Windows Vista i Windows 7, ale XP nie będzie go honorował i wyświetli ostrzeżenie (rys. 3).

Instalacja dojdzie do skutku zarówno z certyfikatem, jak i bez niego, ale użytkownik może odnieść wrażenie, że zakupiony przez niego sprzęt jest niedopracowany i złej jakości. Problemy z pisaniem własnych sterowników sprawiają, że dużą popularnością cieszą się te gotowe znajdujące się w systemie operacyjnym przeznaczone dla różnych klas urządzeń (patrz ramka).

Można z nich skorzystać, jeżeli zaprojektowane urządzenie jest oprogramowane w taki sposób, aby posiadało funkcjonalność jednej ze zdefiniowanych klas urządzeń. Dzięki temu system operacyjny będzie w stanie zainstalować standardowe sterowniki i pozwoli to uniknąć problemów z samodzielnych ich przygotowaniem.

Biorąc pod uwagę fakt, że producenci mikrokontrolerów dostarczają biblioteki dla przynajmniej jednaj klasy urządzeń, można powiedzieć, że jest to w większości przypadków najlepsze rozwiązanie.

OTG

Tabela 1. Oznaczenia przewodów w standardzie USB

Tradycyjne urządzenia USB współpracują z hostem, którym najczęściej jest komputer. Zajmuje się on enumeracją sprzętu, przydziałem pasma i obsługą transmisji. Niekiedy zachodzi potrzeba połączenia dwóch urządzeń peryferyjnych bez udziału komputera, np. aparatu fotograficznego z drukarką, aby wydrukować zdjęcia. Pominięcie w tej kwestii komputera znacznie upraszcza cały proces i czyni go wygodniejszym oraz szybszym.

Specyfikacja USB 2.0 nie przewiduje jednak takiej ewentualności. Z tego względu organizacja USB-IF opracowała suplement wprowadzający taką możliwość - USB On-The-Go (USB OTG). Wśród wprowadzonych zmian należy wymienić:

  • możliwość współpracy urządzeń peryferyjnych w trybie punkt-punkt (point- -to-point),
  • nowe, mniejsze złącza,
  • możliwość pracy jako układ peryferyjny bądź host,
  • mechanizmy zmniejszania poboru energii, aby wydłużyć czas działania na bateriach.

Warto zauważyć, że współpraca urządzeń tradycyjnie uważanych za peryferyjne jest możliwa w sytuacji, gdy jedno z nich posiada funkcjonalność OTG. Jeżeli oba urządzenia są zgodne z OTG, wykorzystywany jest protokół HNP (Host Negotiation Protocol) pozwalający uzgodnić, który z nich będzie spełniać funkcję hosta.

Specyfikacja OTG przewiduje dodatkowo możliwość wyłączenia zasilania na linii Vbus, gdy nie jest ono wykorzystywane. Uzyskano w ten sposób oszczędność energii, ale kosztem utrudnionego wznowienia komunikacji i wprowadzenia dodatkowego protokołu zażądania rozpoczęcia sesji SRP (Session Request Protocol). Żądanie sesji odbywa się dwojako: poprzez pulsowanie na linii lub poprzez pulsowanie na linii Vbus.

Jakub Borzdyński