USB
USB
Adam Orzechowski 2TIB
Adam Orzechowski 2TIB
Anatomia USB
Koncepcja magistrali USB (Universal Serial Bus) jest wspólnym
dziełem zespołu powołanego do życia przez grupę firm
założycielskich: Compaq, DEC, IBM, Intel, NEC i Northerm Telecom.
Choć znaczna część twórców USB przeszła już do historii, z tego
sposobu łączenia komputerów z urządzeniami peryferyjnymi
korzystać będziemy jeszcze długo.
Głównym założeniem konstrukcyjnym magistrali USB było optymalne
wykorzystanie pasma przepustowego na potrzeby urządzeń
peryferyjnych o różnych wymaganiach szybkości transmisji danych.
Łącze USB charakteryzuje się szeregową transmisją danych,
transferem danych w formie pakietowej z wydzielonym kanałem o
paśmie gwarantowanym i automatycznym sposobem konfiguracji
magistrali w trakcie pracy (rozpoznawane jest podłączenie nowego
urządzenia peryferyjnego oraz jego odłączenie). USB zapewnia
automatyczny przydział adresów dla podłączonych urządzeń
peryferyjnych oraz pracę magistrali bez konieczności instalacji
terminatorów - końcówek dopasowujących na końcach magistrali.
Zaletą USB jest możliwość dostarczania przez łącze zasilania również
dla urządzeń peryferyjnych o niewielkim poborze mocy.
Magistrala USB ma strukturę drzewa rozrastającego się od kontrolera
USB (Host Adapter), w dół do każdego gniazda, do którego można
podłączyć urządzenie peryferyjne (NODE lub FUNCTION) albo kolejny
rozdzielacz (HUB). Dopuszczalna liczba wszystkich urządzeń (łącznie
z rozdzielaczami i urządzeniami końcowymi) nie może przekroczyć
127.
Ponieważ liczba dopuszczalnych poziomów nie może przekroczyć 7, a
długość przewodu łączącego urządzenie peryferyjne z rozdzielaczem
nie może być większa niż 5 m, maksymalna odległość urządzeń
peryferyjnych od kontrolera USB (korzenia) wynosi 35 m. W
podstawowej wersji specyfikacji (USB 1.1) zdefiniowano dwa kanały
informacyjne o różnej przepustowości - Low Speed (LS) dla wolnych
urządzeń (pasmo do 1,5 Mb/s) oraz Full Speed (FS) - pasmo do 12
Mb/s. W specyfikacji USB 2.0 zdefiniowano dodatkowy kanał High
Speed (HS) o przepustowości 480 Mb/s. Koncentratory (HUB)
stanowią układy aktywne wzmacniające sygnały magistrali, które są
wyposażone w jeden port wejściowy połączony z wyższym poziomem
(Upstream Port) oraz kilka portów wyjściowych, przeznaczonych do
połączenia z niższym poziomem (Downstream Port). W skład
urządzeń niższego poziomu mogą wchodzić urządzenia peryferyjne
jako końcówki lub rozdzielacze kolejnego poziomu. Rozdzielacze poza
powielaniem gniazd USB zapewniają dostarczanie energii dla
urządzeń peryferyjnych pozbawionych własnego zasilania.
Dopuszczalny pobór prądu z magistrali wynosi bowiem jedynie 500
mA.
Wszelkie akcje na magistrali realizuje kontroler USB, będący częścią składową
architektury komputera. Każde urządzenie peryferyjne USB jest odpytywane
przez kontroler, czy nie potrzebuje obsługi. Zaletą tej procedury obsługi jest
zabezpieczenie przed możliwością kolizji, do której mogłoby dojść przy
równoległej wymianie danych urządzeń peryferyjnych podłączonych do
magistrali USB. Wadą natomiast zajmowanie dużej części dostępnego pasma
magistrali przez pakiety odpytujące poszczególne urządzenie magistrali USB,
dlatego też z zaoferowanych w trybie Full Speed 12 Mb/s do praktycznego
wykorzystania pozostaje około 1 Mb/s.
Magistrala USB synchronizuje transmisję pakietów pomiędzy
kontrolerem USB a urządzeniami peryferyjnymi wewnętrznym
sygnałem zegarowym, wkomponowanym w przesyłany strumień
danych. Sygnał USB kodowany jest zgodnie z zasadami określonymi
dla kodu NRZI (Non Return to Zero Invert). Każde logiczne 0 wyzwala
zmianę polaryzacji sygnału na przeciwną, a logiczna 1 pozostawia bez
zmian poziom sygnału cyfrowego. Oznacza to, że jak długo w ciągu
impulsów wejściowych występuje 1 logiczne, kodowany przebieg ma
stałą polaryzację.
Specjalny algorytm kodowania zapewnia obecność impulsów
synchronizujących w dowolnej sekwencji danych, nawet składających
się z samych logicznych 1. Przewiduje stosowanie zerowych impulsów
wypełniających (Bit stuffing), wstawianych w ciąg danych
zawierających co najmniej 6 impulsów jedynek logicznych. Oznacza
to w praktyce, że każde urządzenie USB ma możliwość
zsynchronizowania swojego wewnętrznego zegara co najmniej raz na
siedem taktów sygnału danych. Do synchronizacji transmisji pakietów
USB stosowany jest 8-bitowy ciąg binarny KJKJKJKK, rozpoczynający
każdy pakiet USB, gdzie: K odpowiada 0 logicznemu, a J - 1 logicznej
dla FS i odwrotnie dla LS. Urządzenie peryferyjne dekoduje dane kodu
NRZI, rozpoznaje i usuwa impulsy wypełnienia z ciągu danych przed
odczytem.
Obsługa magistrali USB
Obsługa magistrali USB
►
identyfikacja rodzaju transmisji
identyfikacja rodzaju transmisji
►
przesyłanie danych pomiędzy
przesyłanie danych pomiędzy
kontrolerem USB komputera a
kontrolerem USB komputera a
urządzeniem peryferyjnym, zgodnie z
urządzeniem peryferyjnym, zgodnie z
kierunkiem określonym w fazie
kierunkiem określonym w fazie
identyfikacji rodzaju transmisji
identyfikacji rodzaju transmisji
►
potwierdzenie realizacji lub informacja o
potwierdzenie realizacji lub informacja o
błędach transmisji danych.
błędach transmisji danych.
Obsługa łącza USB odbywa się poprzez transmisję sygnałów sterujących oraz
danych złożonych z protokołów. Każdorazowa transmisja sygnałów przebiega
w trzech fazach:
W fazie identyfikacji wykorzystywane mogą być trzy rodzaje grup protokołów.
Protokoły identyfikacyjne służą do konfigurowania dołączonych do
magistrali urządzeń. Pakiet identyfikacji kierunku przesyłania danych określa
kierunek transmisji danych (OUT - z komputera do urządzeń peryferyjnych; IN
w odwrotnym kierunku).
Pakiet SOF (Start of Frame) wskazuje na początek ramki transmisyjnej
synchronizującej magistralę USB z okresem 1 mikrosekunda (0,5 ms dla
przepustowości LS i FS, a 125 ms +/- 6,25 ns dla przepustowości HS), czyli do
480 Mb/s. Pakiet zawiera 11-bitowe pole numeru bieżącego ramki, która
może być wykorzystana przy synchronizacji transmisji danych, szczególnie
izochronicznych.
Format pakietu SETUP
Pakiet SETUP sygnalizuje wysyłanie w kolejnych pakietach danych, które
sterują urządzeniami peryferyjnymi przez kontroler USB. Do danych
sterujących zaliczamy np. komendy SET_ADDRESS (ustawienie adresu dla
wybranego urządzenia peryferyjnego), GET_DEVICE_DESCRIPTOR (żądanie
przez kontroler USB pełnej informacji o konfiguracji wybranego urządzenia
peryferyjnego podłączonego do magistrali), SET_CONFIGURATION (ustawienie
wymaganej konfiguracji dla wybranego urządzenia peryferyjnego).
Ze względu na wymagania synchronizacji magistrali USB, protokoły danych
(o maksymalnej długości 1024 bajtów) dla transmisji LS i FS rozróżniane są za
pomocą nagłówka pakietu PID (Packed Identifier) - Data0/Data1. W praktyce
oznacza to, że kolejne pakiety danych występujące na przemian jako Data0
oraz Data1 rozróżniane są za pomocą nagłówków PID, tzn. pakiet z danymi
oznaczony jako Data0 ma PID o wartości binarnej 0011, a następny pakiet
oznaczony jako Data1 - PID o wartości binarnej 1011. W transmisji HS
wykorzystywane są dodatkowe dwa rodzaje nagłówków PID Data2(binarnie
0111)/Mdata(binarnie 1111).
Format pakietu potwierdzenia
Protokoły potwierdzenia stosowane są do przekazywania informacji
zwrotnej o sukcesie lub błędzie zrealizowanego transferu danych w magistrali
USB. Mamy trzy typy pakietów potwierdzenia, różniące się wartością
nagłówka PID: ACK (acknowledgement - potwierdzenie odbioru danych przez
urządzenie pełniące funkcje odbiornika), NAK (negative acknowledgement -
urządzenie odbiorcze chwilowo nie może odebrać ani wysyłać danych (w
przypadku transferu obsługi przerwania NAK informuje kontroler USB, że nie
ma żadnych danych do wysłania); STALL - urządzenie końcowe znajduje się w
stanie wymagającym interwencji kontrolera.
Skróty literowe nazw stosowane do identyfikacji pól w
Skróty literowe nazw stosowane do identyfikacji pól w
przedstawionych protokołach oznaczają odpowiednio:
przedstawionych protokołach oznaczają odpowiednio:
►
SYNC(8b) - sygnał synchronizacji pakietów USB (8 bitów);
SYNC(8b) - sygnał synchronizacji pakietów USB (8 bitów);
►
PID(8b) - identyfikator rodzaju pakietu;
PID(8b) - identyfikator rodzaju pakietu;
►
ADRESS(7b) - adres urządzenia peryferyjnego dołączonego do
ADRESS(7b) - adres urządzenia peryferyjnego dołączonego do
magistrali USB;
magistrali USB;
►
ENDP(4b) - adres bufora (rejestru) cyfrowego w wybranym
ENDP(4b) - adres bufora (rejestru) cyfrowego w wybranym
urządzeniu USB odpowiedzialnego za wymianę danych z komputerem
urządzeniu USB odpowiedzialnego za wymianę danych z komputerem
w magistrali USB;
w magistrali USB;
►
FRAME(11b) - kolejny numer ramki;
FRAME(11b) - kolejny numer ramki;
►
DATA(1024b) - dane cyfrowe przesyłane w magistrali USB;
DATA(1024b) - dane cyfrowe przesyłane w magistrali USB;
►
EOP(3b) - znacznik końca pakietu;
EOP(3b) - znacznik końca pakietu;
►
CRC(5b) (cykliczny kod nadmiarowy) - służy do detekcji błędów w
CRC(5b) (cykliczny kod nadmiarowy) - służy do detekcji błędów w
transmisji danych. Po każdym pakiecie informacji cyfrowej przesyłany
transmisji danych. Po każdym pakiecie informacji cyfrowej przesyłany
jest przykładowo 5-bitowy kod CRC obliczony na podstawie wartości
jest przykładowo 5-bitowy kod CRC obliczony na podstawie wartości
bitowej tego pakietu. Jeżeli odbiorca otrzyma pakiet informacji
bitowej tego pakietu. Jeżeli odbiorca otrzyma pakiet informacji
cyfrowej z błędem, to obliczony na jego podstawie kod CRC będzie
cyfrowej z błędem, to obliczony na jego podstawie kod CRC będzie
różny od nadanego i odbiorca może zażądać powtórzenia transmisji
różny od nadanego i odbiorca może zażądać powtórzenia transmisji
pakietu cyfrowego.
pakietu cyfrowego.
Pakiety danych występują we wszystkich rodzajach
Pakiety danych występują we wszystkich rodzajach
transmisji, do których możemy zaliczyć transfery:
transmisji, do których możemy zaliczyć transfery:
►
masowy (asynchroniczny);
masowy (asynchroniczny);
►
izochroniczny (synchroniczny);
izochroniczny (synchroniczny);
►
obsługi przerwania;
obsługi przerwania;
►
sterująco-kontrolny.
sterująco-kontrolny.
Podstawowy rodzaj transmisji ma charakter asynchroniczny i jest stosowany
do przesyłania masowych danych (Bulk Transfer). Zapewnia powtarzanie
pakietów uszkodzonych, co prowadzi do niezawodności i spójności
przekazywanych danych, ale nie gwarantuje ani określonej przepustowości,
ani limitu czasu transmisji, ponieważ obie te wartości zależą od chwilowej
aktywności magistrali USB. Typowe zastosowanie trybu masowego to obsługa
pamięci masowych, takich jak ZIP, odbiór danych ze skanera lub wysyłanie
danych do drukarki.
Dla danych, które muszą być dostarczane z określoną częstotliwością
(dyskretnością) w czasie rzeczywistym, stosowana jest transmisja
izochroniczna. Klasycznym przykładem zastosowania takiej transmisji jest
cyfrowy sygnał wizyjny z/do kamery lub fonii z mikrofonu do głośników.
Rezerwacja kanału transmisji izochronicznej przez kontroler USB odbywa się
na podstawie deklaracji złożonej przez urządzenie peryferyjne na etapie
konfiguracji magistrali USB. Oparty na zapytaniach kontrolera system
przydziału pasma w kanale asynchronicznym mógłby spowodować
niedopuszczalne opóźnienia zakodowanych sygnałów wizyjnych i fonicznych,
dyskwalifikując całkowicie sens tego typu transferu. Dla transferu
izochronicznego kontroler USB rezerwuje fragment pasma magistrali USB w
regularnych wycinkach czasowych, które odpowiadają w praktyce
częstotliwości próbkowania sygnału analogowego, np. przy digitalizacji
obrazu lub dźwięku. W trybie izochronicznym błędy nie są korygowane (brak
pakietów potwierdzenia ACK), ale transfer ten ma pierwszeństwo przed
transmisją asynchroniczną.
Transfer obsługi przerwania charakteryzuje się ekspresowym
przekazywaniem danych o rozmiarze nieprzekraczającym kilku bitów. Dzięki
temu możliwe jest błyskawiczne powiadomienie kontrolera o konieczności
obsługi przerwania zgłoszonego przez podłączone do magistrali USB
urządzenie, np. mysz komputerową. Transfer obsługi przerwania realizowany
jest w wyniku cyklicznego odpytywania urządzeń peryferyjnych podłączonych
do magistrali USB przez kontroler z częstotliwością zdefiniowaną podczas
identyfikacji wszystkich urządzeń USB.
Jeżeli urządzenie typu mysz komputerowa oczekuje na obsługę, to po
otrzymaniu pakietu identyfikatora IN z kontrolera zrealizuje przekazanie
danych do niego. Zakończona sukcesem transmisja zostanie potwierdzona
pakietem identyfikatora ACK. Jeżeli kontroler chce wysłać dane obsługi
przerwania do urządzenia - myszy komputerowej, wysyła na magistralę
pakiet identyfikatora OUT oraz pakiet danych zaadresowanych do wybranego
urządzenia. Urządzenie po odbiorze danych wysyła identyfikator
potwierdzenia ACK, w przeciwnym razie informuje kontroler za pomocą
identyfikatora NAK lub STALL o błędnym zakończeniu transmisji.
Wielkość danych przesyłanych podczas tego typu transferu zależy od
szybkości transmisji zdefiniowanej dla tego typu urządzenia i wynosi 8 bajtów
dla urządzeń w trybie LS, 64 bajty - w trybie FS lub 1024 bajty w trybie HS.
Transfer sterująco-kontrolny przeznaczony jest do konfiguracji każdego
urządzenia peryferyjnego USB w procesie enumeracji urządzeń podłączonych
do magistrali USB. Po włączeniu nowego urządzenia kontroler rozpoznaje
rodzaj urządzenia oraz jego parametry obsługi. Transfer sterujący realizowany
jest w trzech etapach: SETUP, DATA, STATUS.
W pierwszym etapie kontroler USB wysyła identyfikator
SETUP, który zawiera adres odpytywanego urządzenia, a
następnie przesyła dane sterujące zawarte w pakiecie
DATA0, np. GET_DEVICE _DESKRYPTOR. Odpytywane
urządzenie potwierdza przyjęcie skierowanych do niego
danych sterujących za pomocą identyfikatora potwierdzenia
ACK, w przeciwnym razie ignoruje otrzymane dane.
Na etapie DATA, jeżeli kontroler ustalił odczyt danych z
urządzenia peryferyjnego za pomocą identyfikatora IN,
następuje odbiór danych DATA z urządzenia, a następnie
potwierdzenie identyfikatorem ACK zakończenia transferu
sukcesem.
Podczas etapu STATUS kontroler informuje urządzenie o
prawidłowym przebiegu wcześniejszych etapów, tzn. SETUP
i DATA. Zgodnie z przedstawionym rysunkiem STATUS
rozpoczyna się identyfikatorem OUT, a następnie
przesyłany jest pakiet danych DATA0 o zerowej wartości
(DATA0 Zero Length). W odpowiedzi urządzenie peryferyjne
przesyła pakiet potwierdzenia ACK. Cechą
charakterystyczną dla etapu STATUS jest kierunek
przesyłania pakietu DATA0, który jest zawsze przeciwny do
kierunku przesyłanych danych.
W działaniu magistrali USB podstawową rolę odgrywa buforowanie danych i
to zarówno przez kontroler USB, jak i urządzenie peryferyjne oczekujące w
kolejce na dostęp do magistrali. Ponieważ czas oczekiwania na obsługę bywa
różny, a urządzenie nie może go przewidzieć, rozmiary buforów lokalnych
muszą być dobrane z dużym zapasem, tym większym, im większymi porcjami
realizowana jest wymiana danych. Całkowita przepustowość magistrali USB
dzielona jest przez kontroler, który tworzy wirtualne kanały przepustowe
określonego typu. Kontroler przekazuje zdefiniowane kanały wirtualne o
określonej szerokości i danym kierunku przepływu do dyspozycji
wyznaczonych urządzeń peryferyjnych.
Obsługa poszczególnych urządzeń peryferyjnych, zgodnie ze zdefiniowanymi
priorytetami, odbywa się wyłącznie poprzez regulacje częstotliwości
rozsyłania pakietów identyfikatorów odpytujących poszczególne urządzenia
peryferyjne o gotowość do wymiany danych użytkowych.
Generalną zasadą obsługi urządzeń USB jest zakaz przerywania trwających
transmisji na korzyść tych oczekujących w kolejce. W praktyce oznacza to, że
kontroler może zignorować prośbę o dostęp do magistrali przez urządzenie
peryferyjne, jeżeli rezerwy pasma nie są wystarczające.
Poza możliwością organizacji kanału o przepływności 480 Mb/s nie ma różnic
między urządzeniami USB 2.0 a 1.1. Twórcy standardu USB 2.0 zaproponowali
specjalne logo HI-SPEED USB dla sprzętu, który będzie pracował z prędkością
480 Mb/s.
Podstawową wadą koncepcji USB jest niemożność wykorzystania łącza USB
do bezpośredniej transmisji pomiędzy dwoma komputerami czy dwoma
urządzeniami peryferyjnymi. W ramach rozwoju standardu USB w grudniu
2001 r. powstała więc specyfikacja urządzeń USB On-The-Go. Stanowi ona
rozszerzenie standardowej specyfikacji USB, pozwalające na komunikację
pomiędzy urządzeniami USB bez pośrednictwa komputera (host). Potrzeba
stworzenia takiego rozszerzenia powstała wraz z rosnącą popularnością
urządzeń mobilnych (telefony komórkowe, odtwarzacze MP3, palmtopy,
przenośne pamięci masowe), które do samodzielnej pracy nie wymagają
wcale komputera PC. Zgodnie ze specyfikacją urządzenia USB On-The-Go
mają zapewnić: możliwość pełnienia funkcji hosta (w ograniczonym zakresie),
mniejsze wtyczki i gniazda USB, które pozwolą na zwiększenie mobilności
urządzeń, niski pobór mocy w celu zapewnienia pracy na bateriach.
KONIEC
KONIEC