Universal Serial Bus Téma 12: USB
• Komunikační principy • Enumerace • Standardní třídy zařízení
Universální sériová sběrnice - USB
Obecné charakteristiky – distribuovaná datová pro připojení počítačových periferií • klávesnice, myš, Flash disk, tiskárna, modem, DAQ modul …
– deterministická technologie (Master/Slave) • až 127 zařízení v rámci jedné USB sítě
– optimalizace pro různé typy přenosů • malé i větší bloky dat • spolehlivá i nespolehlivá komunikace • podpora isochronních přenosů
– přenosové rychlosti fyzické vrstvy od Mbit/s do jednotek Gbit/s • podle varianty (low-/full-/high-/super-speed)
– podpora plug&play a hot swap • detekce připojení/odpojení, automatická konfigurace
– podpora napájení periferií z USB rozhraní • včetně režimů šetření energie
Universální sériová sběrnice - USB
Topologie systému – 3 typy uzlů – hostitel (host) • řízení Master/Slave
– rozbočovače (hub), od verze 2.0 se chovají spíše jako přepínače – zařízení (function)
Universální sériová sběrnice - USB
Topologie systému – max. 5 úrovní • omezení zpoždění
Universální sériová sběrnice - USB
Hostitel (Host) – v systému jediný • ale !!! USB On the Go !!! – výběr role při spojení
– typicky PC nebo nějaký embedded systém • mobilní zařízení, průmyslový kontroler, TV přijímač …
– řídí datové přenosy v celém systémů • má roli Master
– řídí proces enumerace • rozpoznání zařízení a hubů, konfigurace a spuštění
– power management • detekce konfigurace napájení • režimy snížené spotřeby
– obvykle integruje řadič hostitele a tzv. kořenový rozbočovač (root hub) • ten obvykle nabízí 2 USB porty
Universální sériová sběrnice - USB
Rozbočovač (Hub) – tvoří komunikační infrastrukturu USB – detekuje připojení/odpojení dalšího zařízení • na down-stream portech
– distribuuje/koncentruje datové toky • dolů/vzhůru vzhledem k hierarchii v topologii systému
– povoluje/zakazuje přenosy z a na jednotlivé down-stream porty • důležité pro enumeraci
– management napájení na down-stream portech – detekce low/full speed – překlad high low/full speed
– napájen ze sběrnice nebo z vlastního zdroje
Universální sériová sběrnice - USB
Zařízení (Function) – – – –
koncové periferní zařízení s požadovanou funkcionalitou připojuje se vždy do down-stream portu rozbočovače komunikuje low/full/high/super –speed rychlostí může být napájeno ze sběrnice či mít vlastní zdroj • bus X self powered • max. odběr z USB portu 500 mA
– power management – podpora P&P – standardní třídy zařízení • • • •
zařízení s obdobnou funkcionalitou kompletně definovaná komunikace a funkčnost podpora celé třídy jediným ovladačem v OS např. Mass Storage, HID, Printer …
Universální sériová sběrnice - USB
Princip komunikace
Universální sériová sběrnice - USB
Princip komunikace
Universální sériová sběrnice - USB
Princip komunikace
Universální sériová sběrnice - USB
Typy rour (pipes) – stream pipes • přenáší nestrukturovaná data • jednosměrné (IN, OUT) • využívají protokoly pro přenosy typu – Interrupt /přerušovací) – Bulk (blokový) – Isochronous (isochronní)
– message pipes • • • •
typicky strukturovaná data obousměrná komunikace sekvence žádost – data – potvrzení využívá protokol pro přenos typu – Control (řídicí)
Universální sériová sběrnice - USB
Typy rour (pipes) – stream pipes • přenáší nestrukturovaná data • jednosměrné (IN, OUT) • využívají protokoly pro přenosy typu – Interrupt /přerušovací) – Bulk (blokový) – Isochronous (isochronní)
– message pipes • • • •
typicky strukturovaná data obousměrná komunikace sekvence žádost – data – potvrzení využívá protokol pro přenos typu – Control (řídicí)
Universální sériová sběrnice - USB
Typy přenosů (transfer types) – mají definovány základní vlastnosti • • • • • • • •
formát dat směr přenosu omezení velikosti paketu omezení přístupu ke sběrnici omezení dle rychlostní varianty časové latence předepsaná sekvence paketů a transakcí způsob zpracování chyb
– každé rouře je při jejím vytvoření přiřazen jeden ze čtyř typů přenosu • • • •
řídicí (control) izochronní (isochronous) přerušovací (interrupt) blokový (bulk)
Universální sériová sběrnice - USB
Přenos – Transakce – Paket
– komunikace probíhá cyklicky v (mikro)framech (1 ms / 125μs)
Universální sériová sběrnice - USB
Typy přenosů – řídicí – každé USB zařízení implementuje řídicí přenos na rouře 0 • tzv. default pipe • slouží pro enumeraci zařízení
– jako jediný je obousměrný – maximální velikost paketu závisí na rychlosti sběrnice • 8 bajtů pro LS • 8, 16, 32 nebo 64 bajtů pro FS • 64 bajtů pro HS
– v případě chyby se přenos paketu opakuje – pro řídicí přenosy je rezervováno 10% (LS, FS) nebo 20% (HS) přenosové kapacity – skládá se ze dvou, tří nebo více formálně odlišných transakcí • závěrečná transakce (status) slouží k potvrzení provedení požadované akce
Universální sériová sběrnice - USB
Typy přenosů – izochronní – v USB zařízeních volitelný • slouží pro přenosy streamů (audio, video) v reálném čase
– jednosměrný – maximální velikost paketu závisí na rychlosti sběrnice • • • •
nelze pro LS 1023 bajtů pro FS 1024 bajtů pro HS možnost tzv. high-bandwidth endpointů
– pro izochronní (spolu s interrupt) přenosy je rezervováno až 90% (FS) nebo 80% (HS) přenosové kapacity – standardně maximálně jedna transakce za (mikro)frame – garantovaná latence odeslání dat – v případě chyby se transakce neopakuje – skládá se ze sekvence formálně totožných transakcí
Universální sériová sběrnice - USB
Typy přenosů – přerušovací – v USB zařízeních volitelný • slouží především pro emulaci přerušení
– jednosměrný – maximální velikost paketu závisí na rychlosti sběrnice • • • •
8 bajtů pro LS 64 bajtů pro FS 1024 bajtů pro HS možnost tzv. high-bandwidth endpointů
– pro přerušovací (spolu s izochronními) přenosy je rezervováno až 90% (FS) nebo 80% (HS) přenosové kapacity – standardně maximálně jedna transakce za (mikro)frame • pro LS max. 1 transakce za 10 frame
– v případě chyby se transakce opakuje – skládá se ze sekvence formálně totožných transakcí
Universální sériová sběrnice - USB
Typy přenosů – blokový – v USB zařízeních volitelný • slouží především pro spolehlivý přenos bloků dat
– jednosměrný – maximální velikost paketu závisí na rychlosti sběrnice • nelze pro LS • 64 bajtů pro FS • 512 bajtů pro HS
– není rezervována žádná přenosová kapacita • využívá tu zbývající • žádná garance latence odeslání dat
– v případě chyby se transakce opakuje – skládá se ze sekvence formálně totožných transakcí
Universální sériová sběrnice - USB
Transakce – skládá se typicky ze tří paketů • Token (výzva) • Data • Handshake (potvrzení)
– transakci vždy iniciuje hostitel (Master) • posílá Token
– podle směru jde o transakci typu vstupní nebo výstupní • vždy z pohledu hostitele • vstupní transakce přenáší datový paket do hostitele, výstupní od něj • potvrzení generuje příjemce datového paketu
– ze samotné transakce nelze jednoznačně určit, jaký typ přenosu realizuje • to je dáno způsobem provádění transakcí
Universální sériová sběrnice - USB
Pakety – pole PID definuje typ paketu – SOF (Start of Frame) • indikuje počátek (mikro)rámce
– Token (výzva) • výzva od hostitele pro zařízení (či hub) • ADDR – adresa zařízení, až 127 různých (0 je rezervovaná) • ENDP – identifikace roury (koncového bodu), 0 – 15, 0 je vždy řídicí
Universální sériová sběrnice - USB
Pakety – pole PID definuje typ paketu – datový paket • slouží k přenosu dat • odesílá buď hostitel nebo zařízení dle směru přenosu
– Handshake (potvrzení) • odesílá příjemce datového paketu • potvrzuje správný příjem dat
Universální sériová sběrnice - USB
Transakce přerušovacích (Interrupt) přenosů
Universální sériová sběrnice - USB
Transakce blokových (Bulk) přenosů
Token
Data
Handshake
Universální sériová sběrnice - USB
Transakce izochronních (Isochronous) přenosů
Universální sériová sběrnice - USB
Transakce řídicích (Control) přenosů
– datová fáze se řídí pravidly transakcí blokového přenosu
Universální sériová sběrnice - USB
Transakce řídicích (Control) přenosů – řídicí přenos se skládá ze 2 a více transakcí – 1. transakce – Setup • data posílá vždy hostitel • definují, co hostitel chce
– 2. transakce – Data • může být vynechána • může být vícenásobná • buď IN nebo OUT
– 3. transakce – Status • prázdný datový paket – vše OK
• nebo info o chybě • OUT nebo IN
Universální sériová sběrnice - USB
Transakce řídicích (Control) přenosů – řídicí přenos se skládá ze 2 a více transakcí – 1. transakce – Setup • data posílá vždy hostitel • definují, co hostitel chce
– 2. transakce – Data • může být vynechána • může být vícenásobná • buď IN nebo OUT
– 3. transakce – Status • prázdný datový paket – vše OK
• nebo info o chybě • OUT nebo IN
Universální sériová sběrnice - USB
Transakce řídicích (Control) přenosů – řídicí přenos se skládá ze 2 a více transakcí – 1. transakce – Setup • data posílá vždy hostitel • definují, co hostitel chce
– 2. transakce – Data • může být vynechána • může být vícenásobná • buď IN nebo OUT
– 3. transakce – Status • prázdný datový paket – vše OK
• nebo info o chybě • OUT nebo IN
Universální sériová sběrnice - USB
Přehled PIDů – typů paketů
Universální sériová sběrnice - USB
Přehled PIDů – typů paketů
Universální sériová sběrnice - USB
Fyzická vrstva – standardní kabel
Universální sériová sběrnice - USB
Fyzická vrstva – bit stuffing • po 6 bitech log. 1 je vložen bit log.0 • neprovádí se pro sekvenci logických nul
– kanálové kódování NRZI
Universální sériová sběrnice - USB
Fyzická vrstva – LS/FS signalizace
Universální sériová sběrnice - USB
Fyzická vrstva – detekce připojení/odpojení – současně detekce rychlosti – full speed
Universální sériová sběrnice - USB
Fyzická vrstva – detekce připojení/odpojení – současně detekce rychlosti – low speed
– pro high speed specielní mechanismus během resetu • nabídka (od USB2.0 hubu) a potvrzení (od high speed zařízení)
Universální sériová sběrnice - USB
Fyzická vrstva – napájení – ze sběrnice • hub – max. odběr 500 mA, napájení max. 100 mA na 4 portech • zařízení – max. 500 mA (high power) – max. 100 mA (low power) • max. 500 A v režimu spánku • před konfigurací vždy max. 100 mA
– vlastní zdroj • odběr ze sběrnice omezen na 100 mA
– nominální hodnota napětí 5 V • úbytek na kabelech • interně v zařízeních 3,3 V regulátor
Universální sériová sběrnice - USB
Proces enumerace – – – – – – –
reset vyčtení deskriptoru zařízení reset vyčtení deskriptoru zařízení přiřazení adresy vyčtení dalších deskriptorů nastavení konfigurace
– zde je dokončena enumerace a práci se zařízením „přebírá“ specifický ovladač
Universální sériová sběrnice - USB
Deskriptor zařízení – Device Descriptor – 14 položek – jediný – obsahuje základní informace o zařízení a použité specifikaci USB, podle které se zařízení chová – identifikuje výrobce a produkt – na základě těchto informací vybírá operační systém vhodný ovladač – definuje velikost bufferu endpointu 0 (default pipe, min 8B a max 64B) – hostitel se musí přizpůsobit – definuje počet různých konfigurací zařízení – definuje případnou standardní třídu zařízení – obsahuje indexy na popisy položek v textovém deskriptoru
Universální sériová sběrnice - USB
Deskriptor zařízení (Device Descriptor) Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
18
délka deskriptoru v bajtech
1
bDescriptorType
1
2
bcdUSB
2
4
bDeviceClass
1
kód třídy
5
bDeviceSubClass
1
kód podtřídy
6
bDeviceProtocol
1
podporovaný protokol třídy
7
bMaxPacketSize
1
velikost bufferu (a paketu)
8
idVendor
2
ID výrobce
10
idProduct
2
ID výrobku
12
bcdDevice
2
14
iManufacturer
1
index do textového deskriptoru
15
iProduct
1
index do textového deskriptoru
16
iSerialNumber
1
index do textového deskriptoru
17
bNumConfigurations
1
počet konfigurací
kód typu deskriptoru BCD
BCD
podporovaná verze USB
verze zařízení
Universální sériová sběrnice - USB
Deskriptor konfigurace – Configuration Descriptor – pro každou konfiguraci jeden – definuje počet možných rozhraní v dané konfiguraci – identifikuje vlastnosti zařízení v dané konfiguraci • vlastní či sběrnicové napájení • podpora pro remote-wakeup
– definuje spotřebu zařízení v dané konfiuraci – obsahuje indexy na popisy položek v textovém deskriptoru
Universální sériová sběrnice - USB
Deskriptor konfigurace (Configuration Descriptor) – i pro konfigurační deskriptor alternativní rychlosti Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
9
délka deskriptoru v bajtech
1
bDescriptorType
1
kód typu deskriptoru
2
wTotalLength
2
celková délka všech deskriptorů této konfigurace (včetně interface a endpoint deskriptorů)
4
bNumInterfaces
1
počet rozhraní (interface)
5
bConfigurationValue
1
hodnota pro výběr
6
iConfiguration
1
index do textového deskriptoru
7
bmAttributes
1
bity 0..4 rezervovány bit5 – remote wakeup bit6 – self powered bit7 – rezervován
8
bMaxPower
1
spotřeba (rozlišení 2 mA)
Universální sériová sběrnice - USB
Deskriptor rozhraní – Interface Descriptor – jeden pro každé rozhraní – definuje počet endpointů, tvořících rozhraní – definuje třídu zařízení, pokud není definována deskriptorem zařízení – obsahuje indexy na popisy položek v textovém deskriptoru
Universální sériová sběrnice - USB
Deskriptor rozhraní (Interface Descriptor) Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
9
délka deskriptoru v bajtech
1
bDescriptorType
1
kód typu deskriptoru
2
bInterfaceNumber
1
pořadové číslo rozhraní (od 0)
3
bAlternateSetting
1
hodnota pro výběr
4
bNumEndpoints
1
počet endpointů (mimo nultý)
5
bInterfaceClass
1
0xff pro uživatelské
6
bInterfaceSubClass
1
0xff pro uživatelské
7
bInterfaceProtocol
1
0xff pro uživatelské
8
iInterface
1
index do textového deskriptoru
Universální sériová sběrnice - USB
Deskriptor koncového bodu – Endpoint Descriptor – – – – –
jeden pro každý endpoint definuje směr roury, končící v endpointu definuje podporovaný typ přenosu definuje číslo endpointu (roury) definuje velikost datového bufferu a tedy max. velikost datového paketu – pro přerušovací roury definuje periodu dotazování – pro isochronní roury periodu zasílání dat – obsahuje indexy na popisy položek v textovém deskriptoru
Universální sériová sběrnice - USB
Deskriptor koncového bodu (Endpoint Descriptor) Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
7
délka deskriptoru v bajtech
1
bDescriptorType
1
kód typu deskriptoru
1
bity 0..3 – číslo endpointu bity 4..6 – rezervováno (0) bit 7 – směr (0 – OUT, 1 – IN)
2
bEndpointAddress
3
bAttributes
1
bity 0..1 – typ přenosu bity 2..3 – synchronizace (isochr.) bity 4..5 – použití (data, feedback ..)
4
wMaxPacketSize
2
velikost bufferu
6
bInterval
1
časování pro interrupt a isochr. NAK četnost pro bulk
Universální sériová sběrnice - USB
Textový deskriptor (String Descriptor) – jeden pro zařízení – obsahuje člověkem čitelné textové popisy – řetězce v Unicode • nejsou zakončeny nulou • na počátku délka a typ deskriptoru
– na indexu 0 tabulka s podporovanými jazykovými verzemi
Universální sériová sběrnice - USB
Textový deskriptor (String Descriptor) – index 0 Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
2N + 2
délka deskriptoru v bajtech
1
bDescriptorType
1
kód typu deskriptoru
2
wLANGID[0]
2
kód 1. podporovaného jazyka
4
wLANGID[1]
2
kód 2. podporovaného jazyka
…
…
…
…
2N
wLANGID[N-1]
2
kód N. podporovaného jazyka
Textový deskriptor (String Descriptor) – index > 0 Pozice
Pole
Velikost
Hodnota
Popis
0
bLength
1
N+2
délka deskriptoru v bajtech
1
bDescriptorType
1
kód typu deskriptoru
2
bString
N
textový řetězec v Unicode
Universální sériová sběrnice - USB Formát standardní žádosti
– datový paket v Setup transakci řídicího přenosu Pozice
Pole
Velikost
Hodnota
Popis
0
bmRequestType
1
bity 0..4 – příjemce 0 – device 1 – interface 2 – endpoint 3 – jiný 4 až 31 rezervováno bity 5 .. 6 – typ 0 – standardní 1 – specifický třídy 2 – specifický výrobce 3 – rezervováno bit 7 – směr 0 – host to device 1 – device to host
1
bRequest
1
kód typu žádosti
Universální sériová sběrnice - USB Formát standardní žádosti
– datový paket v Setup transakci řídicího přenosu
Pozice
Pole
Velikost
Hodnota
Popis
2
wValue
2
význam dle typu žádosti
4
wIndex
2
význam dle typu žádosti, typicky index nebo offset
6
wLength
2
velikost dat pro datovou fázi
Např. Get Device Descriptor – – – – –
bmRequestType = 0x80 : datová fáze „device to host“ bRequest = 0x06 : GetDescriptor wValue = 0x0001 : Device Descriptor wIndex = 0x0000 : je pouze jediný, nevyužito wLength = 0x0012 : standardní délka, požadavek může být i nižší