Obsah
1. Universální sériová sběrnice (USB)
2. Způsob propojení a vzájemné komunikace zařízení
3. Rozbočovače
4. Přenosové rychlosti
5. Třídy a podtřídy USB zařízení
6. Podpora USB v Linuxu – příkaz dmesg
7. Podpora USB v Linuxu – příkaz lsusb
8. Literatura a odkazy na Internetu
9. Obsah další části seriálu
1. Universální sériová sběrnice (USB)
V dnešní části seriálu si popíšeme základní charakteristiky takzvané universální sériové sběrnice – USB. Zkratka v názvu této sběrnice vznikla z anglického sousloví Universal Serial Bus. Jedná se o externí sběrnici, která je – kromě svého značného rozšíření – zajímavá především tím, že na fyzické úrovni jsou jednotlivá komunikující zařízení (včetně hubů popsaných dále) propojena systémem point to point (jedním kabelem jsou propojena vždy jen dvě zařízení) a ne skutečnou sběrnicí tvořenou společnými vodiči. Naproti tomu minule a předminule popsaná sběrnice I2C společný vodič pro přenos dat a synchronizačního hodinového signálu obsahuje. Na logické úrovni se však o sběrnici skutečně jedná, neboť komunikace může probíhat i mezi zařízeními mezi nimiž leží i několik hubů, tj. uzlů, ve kterých dochází k větvení. Jak konstrukční provedení konektorů, tak i způsob propojení jednotlivých komunikujících uzlů (včetně možnosti odpojit a znovu připojit nějaký uzel bez nutnosti jeho vypnutí/zapnutí nebo vypnutí a opětovného zapnutí řídicího počítače – hot plug) je navrženo s ohledem na co nejsnazší práci se zařízeními určenými pro tuto sběrnici.

Obrázek 1: Logo sběrnice USB připomíná její topologickou strukturu s jedním zařízením pracujícím v režimu master a dvěma rozbočovači. Povšimněte si, že stejné logo se nachází například na některých konektorech; viz obrázek umístěný vlevo od perexu tohoto článku. Pro marketing jsou určena další (vícebarevná) loga, která si můžete prohlédnout například na stránce http://www.usb.org/. Logo zobrazené na tomto obrázku se v literatuře také nazývá „trident“ (trojzubec).
U externí sběrnice USB byly také do značné míry vyřešeny potíže s neexistencí napájecího napětí se zaručenou proudovou zátěží. V předchozích částech tohoto seriálu jsme si řekli, že například u sériového portu RS-232C či paralelního portu (a s ním souvisejícího rozhraní Centronics) mohly vzniknout dosti závažné problémy v případě, že počítač a připojené zařízení bylo napájeno z odlišné fáze nebo ze zcela jiné napájecí sítě. Mnoho menších zařízení, které se připojují ke sběrnici USB má tak malé výkonové požadavky, že je lze napájet přímo pomocí napájecích vodičů vyvedených z počítače na konektory USB. V posledních několika letech jsme tak svědky vzniku více či méně užitečných zařízení, které se obejdou bez vlastního napájení (baterie či transformátoru), což mj. vede k nižší ceně těchto zařízení. Sběrnice USB díky svým vlastnostem postupně vytlačila prakticky všechny starší technologie sloužící k připojení externích zařízení k počítačům – například port pro klávesnici a myš (původně se na IBM PC jednalo o konektor typu DIN, později PS/2), sériový port RS-232C (v některých oblastech je však sériový port sběrnicí USB jen těžko nahraditelný), paralelní porty atd. Jedinou výjimkou jsou vysokorychlostní externí zařízení, pro které se dnes používá převážně rozhraní FireWire a SCSI, i když i zde může dojít ke změně po přechodu na nejrychlejší verzi USB.

Obrázek 2: Miniaturní cestovní myš určená pro sběrnici USB. Přívodní kabel k myši je schován v malém mechanismu vybaveném samonavíjecí pružinou. Sběrnice USB obsahuje kromě dvou datových vodičů i napájecí vodiče, přičemž je normou stanoveno, jaký proud mohou jednotlivá zařízení z počítače odebírat. Díky tomu se k USB mohou připojit různé cestovní lampičky, ohřívače na kávu, nabíječe baterií, větráčky atd., které již nemusí mít vlastní (mnohdy neefektivní) napájecí zdroj.
2. Způsob propojení a vzájemné komunikace zařízení
V úvodní kapitole jsme si řekli, že i přes svůj název není fyzické topologické schéma USB založeno na sběrnicové (lineární) topologii, ale na víceúrovňové hvězdicové či, přesněji řečeno, stromové struktuře (strom je mj. charakteristický i tím, že neobsahuje žádný cyklus, tj. na USB není možné vytvořit zařízení zapojená do kruhu). Kořenem tohoto stromu je zařízení, které komunikaci řídí, tj. jedná se o zařízení pracující v režimu master; ostatní zařízení, jichž může být až 127, pracují v režimu slave. Jako master většinou vystupuje počítač, do kterého jsou připojována další zařízení a také rozbočovače (hubs). Existence pouze jednoho zařízení typu master vede ke zjednodušení komunikačního protokolu, na druhou stranu to však také znamená, že bez použití nějakých mezičlánků není možné mezi sebou propojit dvě zařízení typu master, tj. ani dva počítače. Rozdíl mezi oběma typy zařízení je zajištěn i na fyzické úrovni – konektor umístěný v počítači je mechanicky odlišný od konektorů zabudovaných na dalších zařízeních. Existují sice zařízení, které mohou pracovat jako master i slave – například se jedná o digitální fotoaparáty schopné při připojení k počítači emulovat mass storage device a naopak dokáží ovládat k nim připojenou tiskárnu – ovšem v daném okamžiku je aktivní pouze jeden z těchto režimů (nehledě na to, že se používají odlišné konektory či propojovací kabely).

Obrázek 3: Konektor typu A určený pro externí sběrnici USB. Tento konektor se připojuje vždy do počítače (přesněji řečeno do zařízení typu master), na druhé straně propojovacího kabelu je umístěn konektor typu B, protože na USB není možné připojit dvě zařízení pracující v režimu master. To mj. znamená, že přes USB nelze přímo (bez nějakého mezičlánku) propojit dva počítače.
3. Rozbočovače
Vzhledem k tomu, že jedním kabelem lze propojit pouze dva uzly, musí existovat způsob, jak celkový počet uzlů (zařízení) zvýšit až na maximální hranici, která činí 127 uzlů připojitelných k jednomu kořenovému uzlu (master). Řešení problému připojení většího množství zařízení spočívá v použití takzvaných rozbočovačů (hubs). Každý rozbočovač, který může být představován buď specializovaným zařízením, jež slouží pouze pro připojení dalších uzlů, nebo má i jinou funkci (rozbočovače na monitorech, klávesnicích atd.) obsahuje vždy jeden konektor (většinou typu B) určený pro připojení buď přímo ke kořenu (počítači) nebo k dalšímu rozbočovači a prakticky libovolný počet konektorů (většinou typu A), na které lze připojit koncová zařízení. Díky tomuto uspořádání je již mechanicky zajištěno, že nevznikne zakázaná topologie obsahující cyklus. Na tomto místě je vhodné upozornit na to, že rozbočovač obsahuje poměrně složité obvody, které zajišťují řízení sběrnice, zesilování signálů, úpravu jejich hran a směrování paketů, tj. nejedná se o pouhé paralelní propojení několika konektorů. Norma stanovuje, že za sebou může být zapojeno maximálně pět rozbočovačů, ovšem díky tomu, že počet rozbočovačů na stejné úrovni již omezen není, lze snadno vybudovat i velmi rozsáhlé sítě, které jsou omezené především maximální povolenou délkou propojovacích kabelů (3m v případě USB 2.0).

Obrázek 4: Zařízení poskytující možnost připojení až pěti dalších USB zařízení.
4. Přenosové rychlosti
Zařízení, která jsou připojena na sběrnici USB mohou přenášet data několika rychlostmi. Původní norma, dnes označovaná jako USB 1.0, stanovovala dvě rychlosti. Základní rychlost 1,5 MB za sekundu (12 Mb za sekundu), neboli Full Speed, musí být podporována všemi rozbočovači a většinou i samotným kořenovým uzlem (master), nikoli však nutně koncovými zařízeními, protože některá zařízení, například klávesnice či joysticky, tak vysokou rychlost ke své činnosti nepotřebují. Taková pomalá zařízení pracují na rychlosti 187,5 kB za sekundu (1,5 Mb za sekundu), jež se označuje termínem Low Speed. Při této rychlosti se každý bit přenáší osmkrát pomaleji než při použití základní (plné) rychlosti. V roze 2001 byla v normě USB 2.0 stanovena i vyšší rychlost – High speed – při které lze teoreticky dosáhnout až hodnot 60 MB za sekundu (480 Mb za sekundu), ovšem ne všechna zařízení, která na sobě mají nálepku USB 2.0, skutečně až této rychlosti dosahují. Zařízení dovolující použití High speed může v případě potřeby přejít i na základní rychlost, což je nutné pro udržení zpětné kompatibility.

Obrázek 5: Miniaturizace integrovaných obvodů s paměťmi typu Flash umožňuje konstrukci stylových USB disků. Ten, který je zobrazen na pátém obrázku, je možné použít ve stavebnici LEGO (má „kompatibilní“ rozměry).
V současnosti se většinou můžeme setkat se základními deskami a zařízeními, které plně podporují USB 2.0, tedy i všechny tři výše popsané přenosové rychlosti. Ovšem poměrně nedávno, konkrétně v létě minulého roku, byla vydána specifikace USB 3.0, která mj. obsahuje i tzv. SuperSpeed, což je označení přenosové rychlosti, jejíž hodnota dosahuje 625 MB za sekundu (5,0 Gb za sekundu). V současnosti se se zařízeními, které by tuto rychlost podporovaly, pravděpodobně nesetkáme, ale firma Intel (jeden z autorů této specifikace) očekává, že by se již koncem tohoto roku mohly na trh dostat základní desky i externí zařízení odpovídající USB 3.0. SuperSpeed již umožňuje práci s videem či s rychlými externími pevnými disky, tj. jedná se o alternativu k externímu SCSI či FireWire (v současnosti například pevné disky připojené přes FireWire pracují rychleji než srovnatelné disky připojené přes USB 2.0). Zajímavé porovnání obou technologií můžete najít pod tímto odkazem: http://www.pcfastlane.com/features/usb-30-vs-firewire-3200/.

Obrázek 6: Velmi praktické externí zařízení: USB disk zabudovaný v propisce, který je možné doplnit i o laserové ukazovátko.
5. Třídy a podtřídy USB zařízení
Na universální sériovou sběrnici je možné připojit velké množství různých zařízení, od pomalorychlostních klávesnic, myší a joysticků přes známé paměti Flash (Flash disky) až po tiskárny, webové kamery či skenery. Každému zařízení je podle jeho funkce přiřazen kód nazývaný třída zařízení. Podle třídy zařízení, kterou je možné zjistit ihned po zapojení zařízení do sítě a jeho resetu, operační systém zvolí vhodný ovladač, přičemž – a to je docela důležité, především na Linuxu – zařízení, která spadají do stejné třídy, mohou používat shodný či velmi podobný ovladač, i když se může jednat o zařízení od různých výrobců. Některé třídy zařízení se dále dělí na specializované podtřídy a pod-podtřídy. V následujícím výpisu jsou všechny třídy zařízení vypsány, včetně podtříd (subclasses).
00 (Defined at Interface level)
01 Audio
01 Control Device
02 Streaming
03 MIDI Streaming
02 Communications
01 Direct Line
02 Abstract (modem)
00 None
01 AT-commands (v.25ter)
02 AT-commands (PCCA101)
03 AT-commands (PCCA101 + wakeup)
04 AT-commands (GSM)
05 AT-commands (3G)
06 AT-commands (CDMA)
fe Defined by command set descriptor
ff Vendor Specific (MSFT RNDIS?)
03 Telephone
04 Multi-Channel
05 CAPI Control
06 Ethernet Networking
07 ATM Networking
08 Wireless Handset Control
09 Device Management
0a Mobile Direct Line
0b OBEX
0c Ethernet Emulation
07 Ethernet Emulation (EEM)
03 Human Interface Device
00 No Subclass
00 None
01 Keyboard
02 Mouse
01 Boot Interface Subclass
00 None
01 Keyboard
02 Mouse
05 Physical Interface Device
06 Imaging
01 Still Image Capture
01 Picture Transfer Protocol (PIMA 15470)
07 Printer
01 Printer
00 Reserved/Undefined
01 Unidirectional
02 Bidirectional
03 IEEE 1284.4 compatible bidirectional
ff Vendor Specific
08 Mass Storage
01 RBC (typically Flash)
00 Control/Bulk/Interrupt
01 Control/Bulk
50 Bulk (Zip)
02 SFF-8020i, MMC-2 (ATAPI)
03 QIC-157
04 Floppy (UFI)
00 Control/Bulk/Interrupt
01 Control/Bulk
50 Bulk (Zip)
05 SFF-8070i
06 SCSI
00 Control/Bulk/Interrupt
01 Control/Bulk
50 Bulk (Zip)
09 Hub
00 Unused
00 Full speed (or root) hub
01 Single TT
02 TT per port
0a CDC Data
00 Unused
30 I.430 ISDN BRI
31 HDLC
32 Transparent
50 Q.921M
51 Q.921
52 Q.921TM
90 V.42bis
91 Q.932 EuroISDN
92 V.120 V.24 rate ISDN
93 CAPI 2.0
fd Host Based Driver
fe CDC PUF
ff Vendor specific
0b Chip/SmartCard
0d Content Security
0e Video
00 Undefined
01 Video Control
02 Video Streaming
03 Video Interface Collection
dc Diagnostic
01 Reprogrammable Diagnostics
01 USB2 Compliance
e0 Wireless
01 Radio Frequency
01 Bluetooth
02 Ultra WideBand Radio Control
03 RNDIS
02 Wireless USB Wire Adapter
01 Host Wire Adapter Control/Data Streaming
02 Device Wire Adapter Control/Data Streaming
03 Device Wire Adapter Isochronous Streaming
ef Miscellaneous Device
01 ?
01 Microsoft ActiveSync
02 Palm Sync
02 ?
01 Interface Association
02 Wire Adapter Multifunction Peripheral
03 ?
01 Cable Based Association
fe Application Specific Interface
01 Device Firmware Update
02 IRDA Bridge
03 Test and Measurement
01 TMC
02 USB488
ff Vendor Specific Class
ff Vendor Specific Subclass
ff Vendor Specific Protocol

Obrázek 7: Flash disk připojený do počítače se ohlašuje jako zařízení třídy 08, podtřída 06. Stejný flash disk byla použit i pro otestování dále popsaných Linuxových příkazů dmesg a lsusb.
6. Podpora USB v Linuxu – příkaz dmesg
Linux (zde mám na mysli samotné jádro, moduly a základní systémové utility) samozřejmě podporuje jak samotnou universální sériovou sběrnici, tak i velké množství zařízení určených pro USB. Při připojení nového zařízení se přitom Linux chová podobně, jako mnoho dalších operačních systémů. Nejdříve je na nově připojené zařízení poslán příkaz reset a poté je zjištěna třída (a popř. i podtřída) zařízení a jeho výrobce (vendor ID). Na základě těchto informací je zařízení přes nahraný ovladač obsluhováno a je dostupné i uživatelům s příslušnými přístupovými právy – flash disk se například může obsluhovat přes symbolické jméno zařízení /dev/sda1 (lze jednoduše provést fyzickou kopii dat, vhodné například ve chvíli, kdy se poškodí souborový systém Flash paměti pro fotoaparát, na které jsou důležité fotky), kamera jako /dev/video0, USB myš jako /dev/input/mice (zkuste si pro zajímavost cat /dev/input/mice a zahýbejte myší) atd.

Obrázek 8: Ohřívač na kávu napájený přímo z počítače přes USB.
Při řešení různých problémů se zařízeními určenými pro USB či jen pro zjištění třídy a výrobce nějakého zařízení je možné použít příkaz dmesg, který při připojení i odpojení zařízení vypíše některé zajímavé informace (pro oddělení nových informací od informací předchozích lze použít dmesg -c a posléze dmesg). Ukážeme si několik příkladů výpisu:
Připojení flash disku
(Viz též obrázek 7, kde jsou informace o stejném disku, ovšem připojeném do půjčeného počítače s Windows XP. Díky dmesg však máme k dispozici i mnohem více informací, například přesný počet a délku sektorů).
[ 101.568000] usb 1-1: new full speed USB device using uhci_hcd and address 3
[ 101.720000] usb 1-1: configuration #1 chosen from 1 choice
[ 101.892000] usbcore: registered new interface driver libusual
[ 101.924000] Initializing USB Mass Storage driver...
[ 101.928000] scsi0 : SCSI emulation for USB Mass Storage devices
[ 101.928000] usb-storage: device found at 3
[ 101.928000] usb-storage: waiting for device to settle before scanning
[ 101.928000] usbcore: registered new interface driver usb-storage
[ 101.928000] USB Mass Storage support registered.
[ 106.928000] usb-storage: device scan complete
[ 106.932000] scsi 0:0:0:0: Direct-Access JetFlash TS256MJF110 0.00 PQ: 0 ANSI: 2
[ 106.996000] sd 0:0:0:0: [sda] 491520 512-byte hardware sectors (252 MB)
[ 107.000000] sd 0:0:0:0: [sda] Write Protect is off
[ 107.000000] sd 0:0:0:0: [sda] Mode Sense: 00 00 00 00
[ 107.000000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 107.004000] sd 0:0:0:0: [sda] 491520 512-byte hardware sectors (252 MB)
[ 107.008000] sd 0:0:0:0: [sda] Write Protect is off
[ 107.008000] sd 0:0:0:0: [sda] Mode Sense: 00 00 00 00
[ 107.008000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 107.008000] sda: sda1
[ 107.120000] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 107.148000] sd 0:0:0:0: Attached scsi generic sg0 type 0
Odpojení flash disku
[ 219.012000] usb 1-1: USB disconnect, address 3
Připojení flash disku, které skončilo s chybou
(může jít buď o vadný kabel či nekompatibilitu mezi základní deskou a daným diskem)
[17187317.880000] ohci_hcd 0000:00:02.0: wakeup
[17187318.264000] usb 1-3: new full speed USB device using ohci_hcd and address 2
[17187318.448000] usb 1-3: device descriptor read/64, error -110
[17187318.736000] usb 1-3: device descriptor read/64, error -110
[17187319.016000] usb 1-3: new full speed USB device using ohci_hcd and address 3
[17187319.200000] usb 1-3: device descriptor read/64, error -110
[17187319.488000] usb 1-3: device descriptor read/64, error -110
[17187319.768000] usb 1-3: new full speed USB device using ohci_hcd and address 4
[17187320.176000] usb 1-3: device not accepting address 4, error -110
[17187320.352000] usb 1-3: new full speed USB device using ohci_hcd and address 5
[17187320.760000] usb 1-3: device not accepting address 5, error -110
Připojení USB myši
[ 510.816000] usb 1-1: new low speed USB device using uhci_hcd and address 4
[ 510.988000] usb 1-1: configuration #1 chosen from 1 choice
[ 511.008000] input: Logitech Optical USB Mouse as /class/input/input6
[ 511.008000] input: USB HID v1.10 Mouse [Logitech Optical USB Mouse] on usb-0000:00:07.2-1
Odpojení USB myši
[ 569.292000] usb 1-1: USB disconnect, address 4
7. Podpora USB v Linuxu – příkaz lsusb
Dalším užitečným linuxovým příkazem je příkaz lsusb, který – jak asi správně tušíte – provede výpis všech zařízení připojených na universální sériovou sběrnici (pro sběrnici PCI je určen podobně vypadající příkaz lspci atd.). Z níže uvedeného výpisu je i přes absenci podrobnějších informací zřejmé, že jsou připojena tři zařízení – Flash disk, optická myš a klávesnice:
Bus 001 Device 006: ID 0457:0151 Silicon Integrated Systems Corp. Super Flash 1GB Flash Drive
Bus 001 Device 005: ID 046d:c016 Logitech, Inc. M-UV69a Optical Wheel Mouse
Bus 001 Device 002: ID 04f2:0110 Chicony Electronics Co., Ltd KU-2971 Keyboard
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Pokud je zapotřebí získat podrobnější informace o nějakém zařízení (například o flash disku z předchozího výpisu), lze použít modifikátor -v (verbose) a popř. i přímo specifikovat požadované zařízení. Níže ukázaný výpis byl získán příkazem lsusb -v -d 0457:0151 > flash_drive.txt, kde 0457:0151 je identifikace výrobce a zařízení:
Bus 1 Device 4: ID 0457:0151 Silicon Integrated Systems Corp. Super Flash 1GB Flash Drive
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0457 Silicon Integrated Systems Corp.
idProduct 0x0151 Super Flash 1GB Flash Drive
bcdDevice 1.00
iManufacturer 0
iProduct 2 USB Mass Storage Device
iSerial 3 9287b453dc70d6
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 98mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk (Zip)
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0000
(Bus Powered)
Obrázek 9: Konektory typu A sběrnice USB umístěné na moderní základní desce. Pro starší počítače, které nemají řadič USB umístěný přímo na základní desce je možné použít přídavnou kartu, určenou buď do sběrnice PCI, PCI-X nebo PCI-Express.
8. Literatura a odkazy na Internetu
- USB.ORG,
http://www.usb.org/ - Bit-banging,
http://en.wikipedia.org/wiki/Bit-banging - List of USB ID's,
http://www.linux-usb.org/usb.ids - EUSB to SPI bus Kit,
http://www.eidusa.com/Electronics_Kits_EUSB_To_SPI_BUS.htm - Basic USB Configuration,
http://www.linux-usb.org/USB-guide/c122.html#AEN124 - Linux-USB device overview,
http://www.qbik.ch/usb/devices/ - USBMan – USB 1, 2, & 3 Help and Information,
http://www.usbman.com/linuxusb.htm - ThinkGeek – Elekronics Gadgets,
http://www.thinkgeek.com/gadgets/electronic/85b6/ - HID Information,
http://www.usb.org/developers/hidpage/ - Bit rate,
http://en.wikipedia.org/wiki/Bit_rate - USB 3.0 vs. FireWire 3200,
http://www.pcfastlane.com/features/usb-30-vs-firewire-3200/
9. Obsah další části seriálu
V následující části seriálu o architekturách počítačů si popíšeme komunikační protokol použitý universální sériovou sběrnicí při přenosu dat i řídicích kódů. Také si popíšeme fyzickou a linkovou vrstvu této sběrnice, včetně způsobu kódování jednotlivých bajtů, adresování zařízení atd.