[DLA PRAKTYKÓW] USB w systemie Linux

W artykule przyjrzymy się konfiguracji Linuksa Embedded do pracy w charakterze urządzenia (klienta/device) USB. Posłużę się Linuksem w wersji 4.0 uruchomionym na Wandboard Quad. Jest to komputer jednopłytkowy z 4-rdzeniowym procesorem Freescale i.MX6.

*******************

Wspólnie z autorem artykułu zapraszamy do udziału w szkoleniu „Programowanie sterowników urządzeń w jądrze Linux”, które odbędzie się w dniach 25-28.05.2015 w Warszawie. Szczegółowe informacje są dostępne pod adresem.

*******************

USB to standard interfejsu opracowany w latach ‘90. Normalizuje kable, wtyczki i gniazda oraz protokół komunikacyjny. USB jest używany do podłączania szerokiej gamy urządzeń elektronicznych do komputera i innych urządzeń konsumenckich.

 

Wersje USB

Urządzenia podłączane są do kontrolera hosta. Dzięki zastosowaniu HUB-ów – magistrala tworzy strukturę drzewiastą.

USB może przesyłać dane w kilku trybach:

  • Low Speed – 1,5 Mb/s
  • Full Speed – 12 Mb/s
  • High Speed – 480 Mb/s
  • Super Speed – 5,0 Gb/s

Jest to przepustowość w bitach na sekundę, którą przesyłane są sygnały na magistrali, a nie efektywna prędkość przesyłania danych. Protokoły komunikacyjne używane w USB mogą wprowadzać stosunkowo duży narzut. Podczas projektowania urządzeń – bardzo istotny jest dobór odpowiedniego protokołu.

USB Implementers Forum – organizacja odpowiedzialna za standaryzację i upowszechnianie protokołu, wprowadziła kilka wersji protokołu:

  • USB 1.1 – 1998 – Low Speed i Full Speed
  • USB 2.0 – 2000 – dodano High Speed
  • USB 3.0 – 2008 – Super Speed

Standard USB nie narzuca przepustowości magistrali. Na przykład urządzenie USB 2.0 może pracować w trybie: High Speed, Full Speed lub Low Speed. Klawiatura USB 2.0 w zupełności zadowoli się trybem Full Speed.

 

Terminologia

  • Device (urządzenie) – fizyczne lub logiczne urządzenie, wykonujące jakąś funkcję: mysz, klawiatura, pendrive, modem GSM itp.
  • Configuration (konfiguracja) – tryb, w jakim działa urządzenie. Każde urządzenie ma co najmniej jeden tryb. Na przykład pendrive pracuje jako dysk USB.
    Niektóre urządzenia mają więcej niż jedną konfigurację, ale tylko jedna może być w danej chwili aktywna. Na przykład modem GSM może pracować jako dysk USB (tylko do odczytu – ze sterownikami dla niektórych systemów), a po wysłaniu odpowiedniej sekwencji poleceń – przełączać się na właściwą funkcję (karta sieciowa).
  • Interface (interfejs) – konfiguracja definiuje jeden lub kilka interfejsów. Wszystkie są aktywne w danej konfiguracji. Na przykład modem GSM może równocześnie udostępniać kartę sieciową (do komunikacji) i port szeregowy (do wysyłania SMS-ów). Interfejs składa się z określonej liczby endpointów.
  • Endpoint – pozwala przesyłać dane w jednym kierunku: do albo od urządzenia.

 

Endpointy

Standard definiuje cztery typy konfiguracji endpointów:

  • Control (kontrolny) – wyjątkowo dwukierunkowy (zwracany jest status: suckes/porażka). Każde urządzenie posiada skonfigurowany w ten sposób EP 0 – używany do wykrywania (enumeration) urządzeń na magistrali.
  • Interrupt – przesyła niewielkie ilości danych stara się robić to z możliwie najmniejszym opóźnieniem (low-latency). Kontroler rezerwuje pasmo magistrali dla każdego skonfigurowanego w ten sposób endpointu. Najczęściej używany w urządzeniach typu HID (klawiatury,, myszy, joysticki).
  • Bulk – przesyłanie dużych ilości danych – pakiety sieciowe, dyski itp. Stosowany w sytuacji, kiedy opóźnienia nie są istotne. Nie rezerwuje pasma.
  • Isochronous – przesyłanie dużych ilości danych, przy których istotne jest jak najmniejsze opóźnienie. Dostarczenie danych nie jest gwarantowane (kontroler może zgubić część pakietów). Endpointy tego typu mają zastosowanie przede wszystkim w urządzeniach multimedialnych: karty dźwiękowe, kamery, w sytuacji, gdy zgubienie części danych jest mniejszym problemem niż dostarczenie ich z opóźnieniem.

Każdy typ ma określoną maksymalną ilość danych, która może zostać przesłana w jednej transakcji:

 

Interrupt

Bulk

Isochronous

Full Speed

64B

64B

1024B

High Speed

3072B

512B

1024Bx3

Transakcja – to wysłanie/odebraie danych do/z urządzenia. Zawsze inicjowane przez host.

Jedna lub więcej transakcji składa się na transfer. W jednym transferze można przesyłać wiele danych (nawet używając niewielkich transakcji).

 

O autorze