USB w urządzeniach elektronicznych

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.

W niniejszym artykule omawiamy podstawowe informacje na temat obsługi USB we własnych projektach. Za miesiąc, w dokończeniu artykułu, pokażemy najpopularniejsze rozwiązania z zakresu łączenia urządzeń cyfrowych z komputerem poprzez port USB.

Parametry

Największymi zaletami portu USB są duża szybkość przesyłania danych oraz udostępnienie zasilania, co pozwala zrezygnować z zewnętrznego, nieporęcznego zasilacza. Każde nowo podłączone urządzenie może pobierać maksymalnie 100mA prądu. Zwiększenie tej wartości jest możliwe tylko w sytuacji, gdy host zaakceptuje żądanie udostępnienia pełnego limitu wynoszącego 500mA.

Jest to wartość maksymalna, dostępna dla jednego portu, więc w sytuacji, gdy stosowane są huby bez zewnętrznego zasilacza, będzie ona dzielona pomiędzy wszystkie dołączone urządzenia. Po wprowadzeniu hosta w stan wstrzymania limit zostaje ograniczony do 2,5mA.

Napięcie dostępne na porcie USB wynosi nominalnie 5V±5%. W sytuacji, gdy urządzenie jest podłączone przez hub bez własnego zasilania, wartość ta może się zmniejszyć do około 4,4V, co pokazano schematycznie na rysunku 1. Na uwagę zasługuje fakt, że wtyczkę i gniazdko zaprojektowano w taki sposób, aby piny zasilające były dołączane w pierwszej kolejności, przed pinami sygnałowymi.

Dzięki temu możliwe jest podłączanie urządzenia bez potrzeby wyłączania komputera w obawie o uszkodzenie sprzętu. Złącze USB ma cztery wyprowadzenia: plus zasilania, masę oraz dwie linie sygnałowe przeznaczone do przesyłania sygnału różnicowego (oznaczane jako D+ oraz D-).

W standardzie określone zostały kolory poszczególnych przewodów (tab. 1) oraz wymiary różnych typów (np. mikro, mini, typu A, typu B). Szeregowy charakter magistrali i niewielka liczba wyprowadzeń oraz dostępność kilku rodzajów gniazdek upraszcza proces projektowania urządzenia.

Dostępność złączy o małych wymiarach (mini oraz micro) nie wymaga znaczącego zwiększania obudowy, natomiast niewiele sygnałów sprawia, że w zasadzie wystarczą tylko cztery połączenia na płytce drukowanej. Jest to znaczące ułatwienie w porównaniu np. z portem szeregowym RS232, który wymagał dodatkowo konwertera napięć.

Specyfikacja USB w wersji 2.0 przewiduje przesyłanie danych z jedną z trzech szybkości:

* małą, wynoszącą 1,5Mb/s (low speed)
* pełną, wynoszącą 12Mb/s (full speed)
* wysoką, do 480MB/s (high speed)

Wybór prędkości jest uzależniony od potrzeb, możliwości modułu USB wbudowanego w mikrokontroler oraz częstotliwości taktowania. Większe prędkości wymagają zegara o większej częstotliwości, co nie zawsze jest potrzebne i korzystne choćby z punktu widzenia kompatybilności elektromagnetycznej.

Przykładowo w mikrokontrolerach PIC18F1XK50 tryb low speed pracuje z zegarem 6 MHz, podczas gdy praca z pełną szybkością wymaga taktowania na poziomie 48 MHz. Podciągnięcie linii D- bądź D+ do plusa zasilania rezystorem 1,5kΩ pozwala wybrać prędkość transmisji (odpowiednio: low i full speed).

Ewentualny tryb wysokiej szybkości jest włączany programowo po nawiązaniu połączenia z pełną szybkością pomiędzy hostem i urządzeniem peryferyjnym. Trudno jednak wyobrazić sobie współczesne mikrokontrolery zdolne komunikować się z tak ogromną prędkością, gdyż taktowanie na poziomie 480 MHz i stosowne bufory potrzebne do odebrania ogromnej ilości danych są obecnie niespotykane wśród mikrokontrolerów.
Podciąganie linii danych do plusa zasilania spełnia jeszcze jedną ważną funkcję, mianowicie stanowi sygnał dla hosta, że dołączono nowy sprzęt. Stosowny rezystor jest najczęściej zintegrowany z kontrolerem USB i może być dołączony bądź odłączony w sposób programowo poprzez ustawienie lub wykasowanie odpowiedniego bitu w rejestrze.

W przypadku mikrokontrolerów firmy Microchip istnieje możliwość wyboru, do której linii rezystor ma być podłączony i tym samym można wybrać szybkość, z jaką ma pracować interfejs USB. W innych rozwiązaniach (np. układach AT90USB82/162 firmy Atmel) takiego wyboru nie ma.

Rezystor jest podłączany tylko do linii D+, gdyż układ został przewidziany do pracy z pełną szybkością, niemniej istnieje możliwość jego programowego odłączenia i dołączenia, aby przeprowadzić ponowną enumerację.

Protokół komunikacyjny
Komunikacja w standardzie USB polega na przesyłaniu pakietów, które dzielą się na:

* tokeny – określają one charakter przesyłanych informacji (kontrolny bądź dane), wyznaczają początek ramki i zarządzają magistralą,
* pakiet danych – informacje zapisywane do urządzenia bądź z niego odczytywane,
* pakiety potwierdzenia – zawiera informację o odebraniu danych bądź instrukcji sterujących oraz zdarzeniach występujących podczas transmisji: potwierdzenie pozytywne i negatywne, wewnętrzne błędy.

Przesyłane i odbierane dane są umieszczane w tzw. punktach końcowych (endpoints), które w rzeczywistości są buforami w formie kolejki FIFO zlokalizowanymi w pamięci. Dane są w nich zapisywane lub odczytywane w sposób sekwencyjny. Ze względu na przyjęty sposób adresowania, urządzenie może mieć maksymalnie 32 punkty końcowe (16 wejściowych i 16 wyjściowych).

Najważniejsze parametry to: rozmiar oraz wykorzystywany tryb transmisji (patrz ramka). Specyfikacja USB nakazuje, aby każde urządzenie obsługiwało Endpoint0 spełniający funkcje kontrolne. Jest on jako jedyny dwukierunkowy, pozostałe punkty końcowe mają charakter wyjściowy lub wejściowy, gdzie wyjściowy (Out) oznacza przesyłanie danych z hosta do urządzenia.

Należy wspomnieć, że punkty końcowe mają tylko urządzenia, host-komputer jest ich pozbawiony. Ze standardem USB nierozerwalnie związane jest pojęcie deskryptora. Są to tablice o ściśle określonej strukturze przechowujące pełną informację o urządzeniu. Zawierają one wpisy, takie jak: numery VID oraz PID, klasę urządzenia, wersję USB obsługiwaną przez urządzenie, maksymalny rozmiar pakietu czy nazwę produktu.

Korzystając z bibliotek dostarczonych przez producentów mikrokontrolerów, warto zmienić przynajmniej trzy parametry: identyfikatory VID/PID, a także nazwę urządzenia, która będzie widoczna w systemie. Przykładowe deskryptory pochodzące z biblioteki Microchipa pokazano na listingu 1. Deskryptory tworzą hierarchiczną strukturę o organizacji pokazanej na rysunku 2.

Deskryptor urządzenia służy przede wszystkim do identyfikacji sprzętu i zawiera informacje niezbędne do zainstalowania poprawnego sterownika. Pozwala również określić liczbę dostępnych konfiguracji urządzenia, gdyż niekiedy może występować więcej niż jedna, np. praca normalna, praca w stanie obniżonego poboru mocy. W takiej sytuacji zdefiniowana jest większa liczba deskryptorów konfiguracji.

Listing 1. Deskryptory USB pochodzące z biblioteki Microchipa
/* Device Descriptor */
ROM USB _ DEVICE _ DESCRIPTOR device _ dsc=
{
0x12, // Size of this descriptor in bytes
USB _ DESCRIPTOR _ DEVICE, // DEVICE descriptor type
0x0200, // USB Spec Release Number in BCD format
0x00, // Class Code
0x00, // Subclass code
0x00, // Protocol code
USB _ EP0 _ BUFF _ SIZE, // Max packet size for EP0, see
usb _ confi g.h
0x04D8, // Vendor ID
0x003F, // Product ID: Mouse in a circle fw demo
0x0002, // Device release number in BCD format
0x01, // Manufacturer string index
0x02, // Product string index
0x00, // Device serial number string index
0x01 // Number of possible confi gurations
};
/* Confi guration 1 Descriptor */
ROM BYTE confi gDescriptor1[]={
/* Confi guration Descriptor */
0x09,//sizeof(USB _ CFG _ DSC), // Size of this descriptor in bytes
USB _ DESCRIPTOR _ CONFIGURATION, // CONFIGURATION descriptor
type
0x29,0x00, // Total length of data for this cfg
1, // Number of interfaces in this cfg
1, // Index value of this confi guration
0, // Confi guration string index
_ DEFAULT | _ SELF, // Attributes, see usb _ device.h
50, // Max power consumption (2X mA)
/* Interface Descriptor */
0x09,//sizeof(USB _ INTF _ DSC), // Size of this descriptor in bytes
USB _ DESCRIPTOR _ INTERFACE, // INTERFACE descriptor type
0, // Interface Number
0, // Alternate Setting Number
2, // Number of endpoints in this intf
HID _ INTF, // Class code
0, // Subclass code
0, // Protocol code
0, // Interface string index
/* HID Class-Specifi c Descriptor */
0x09,//sizeof(USB _ HID _ DSC)+3, // Size of this descriptor in bytes
DSC _ HID, // HID descriptor type
0x11,0x01, // HID Spec Release Number in BCD format (1.11)
0x00, // Country Code (0x00 for Not supported)
HID _ NUM _ OF _ DSC, // Number of class descriptors, see usbcfg.h
DSC _ RPT, // Report descriptor type
HID _ RPT01 _ SIZE,0x00,//sizeof(hid _ rpt01), // Size of the report
descriptor
/* Endpoint Descriptor */
0x07,/*sizeof(USB _ EP _ DSC)*/
USB _ DESCRIPTOR _ ENDPOINT, //Endpoint Descriptor
HID _ EP | _ EP _ IN, //EndpointAddress
_ INTERRUPT, //Attributes
0x40,0x00, //size
0x01, //Interval
/* Endpoint Descriptor */
0x07,/*sizeof(USB _ EP _ DSC)*/
USB _ DESCRIPTOR _ ENDPOINT, //Endpoint Descriptor
HID _ EP | _ EP _ OUT, //EndpointAddress
_ INTERRUPT, //Attributes
0x40,0x00, //size
0x01 //Interval
};
//Language code string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[1];}sd000={
sizeof(sd000),USB _ DESCRIPTOR _ STRING,{0x0409
}};
//Manufacturer string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[25];}sd001={
sizeof(sd001),USB _ DESCRIPTOR _ STRING,
{‘M’,’i’,’c’,’r’,’o’,’c’,’h’,’i’,’p’,’ ‘,
‘T’,’e’,’c’,’h’,’n’,’o’,’l’,’o’,’g’,’y’,’ ‘,’I’,’n’,’c’,’.’
}};
//Product string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[22];}sd002={
sizeof(sd002),USB_DESCRIPTOR_STRING,
{‘S’,’i’,’m’,’p’,’l’,’e’,’ ‘,’H’,’I’,’D’,’ ‘,
‘D’,’e’,’v’,’i’,’c’,’e’,’ ‘,’D’,’e’,’m’,’o’
}};

Każda z takich konfiguracji może oferować kilka interfejsów do jednoczesnej realizacji różnorodnych zadań, przykładem jest napęd DVD umożliwiający zapisywanie danych, odtwarzanie muzyki oraz wideo. Deskryptor punktu końcowego opisuje element będący źródłem lub odbiornikiem informacji w urządzeniu.

Po podłączeniu urządzenia peryferyjnego konieczne jest jego rozpoznanie, sprawdzenie poprawności komunikacji, konfiguracja, przydzielenie adresu oraz instalacja sterowników. Proces ten nosi nazwę enumeracji. Dołączony sprzęt zostanie zaakceptowany tylko wtedy, gdy host będzie w stanie spełnić stawiane wymagania: przydział żądanego pasma czy zapewnienie wydajność prądowej na poziomie 500mA.

W przeciwnym przypadku komunikacja nie będzie możliwa mimo fizycznego połączenia. Enumeracja rozpoczyna się od wymuszenia na liniach danych stanu niskiego przez minimum 10ms, co jest informacją dla urządzenia, żeby przełączyło się w stan domyślny. Obejmuje on pracę z adresem 0 i otwarcie zerowego punktu końcowego (endpoint0), co pozwala ustanowić kanał komunikacyjny i skonfigurować urządzenie.

Komunikacja wówczas odbywa się za pomocą pakietów zawierających 8 bajtów, aby obsłużyć nawet najprostsze urządzenia. Po wprowadzeniu układu w stan domyślny host ma możliwość komunikowania się z nim i pobrania deskryptorów. Pozwoli to poznać konfigurację urządzenia: stosowany rozmiar pakietów danych, liczbę punktów kontrolnych i odczytać pozostałe deskryptory, a urządzenie otrzymuje nowy, unikalny adres wykorzystywany do późniejszej komunikacji.

W przeciwieństwie do starszych interfejsów komunikacyjnych, takich jak RS232, standard USB definiuje mechanizmy odpowiedzialne za wykrywanie błędów transmisji. Podstawowym działaniem w takiej sytuacji jest nieodsyłanie potwierdzenia. Jego brak wymusi retransmisję uszkodzonego pakietu. Warto zauważyć, że nie odnosi się to do trybu izochronicznego, gdyż nie gwarantuje on, że dostarczone pakiety pozbawione są przekłamań.

Wykrycie nieprawidłowości jest możliwe dzięki dołączaniu do pakietów sumy kontrolnej CRC i ograniczeniu czasu oczekiwania na odesłanie potwierdzenia. Po przekroczeniu dopuszczalnego czasu, odpowiadającego czasowi trwania od 16 do 18 bitów, pakiet zostanie uznany za stracony. Utracie synchronizacji, zwłaszcza w sytuacji przesyłania dużych bloków danych, zapobiega mechanizm przełączania pakietów.

Polega on na naprzemiennym przesyłaniu pakietów danych Data 0 oraz Data 1 różniących się identyfikatorem PID. Nadajnik oraz odbiornik przechowują bit (toggle bit) informujący o tym, który z pakietów powinien zostać nadany. Stan bitu ulega zmianie na przeciwny po poprawnym odbiorze. Oznacza to, że nadajnik wysyła pakiet Data 0, a odbiornik sprawdza, czy bit jest wyzerowany.

Po stwierdzeniu, że tak jest, uznaje się, że dostarczono poprawny pakiet danych – nadajnik i odbiornik zmieniają stan bitu na przeciwny. W kolejnym kroku wysyłany zostanie pakiet Data 1. Po jego odebraniu odbiornik sprawdzi, czy bit jest ustawiony, jeżeli tak będzie, bit jest ponownie negowany i wysyłany jest pakiet Data 0.

Procedura ta powtarza się cyklicznie. Nietrudno zauważyć, że utrata jednego pakietu sprawi, że zapamiętany bit nie będzie zgodny z zawartością pola PID w przesłanym pakiecie. Po stwierdzeniu takiego stanu rzeczy rozpocznie się przywracanie synchronizmu.

Sterowniki urządzeń

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).

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

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.

Technika
USB w urządzeniach elektronicznych – Strona 3
wtorek, 27 lipca 2010 08:27

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.
Spis treści » Parametry
» Protokół komunikacyjny
» Sterowniki urządzeń
» Pokaż wszystko
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.

Źródło : http://elektronikab2b.pl/

Post Author: swistak

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Potwierdz, że nie jesteś botem. *