Jste zde

USB 2.0 - díl 2

usb_logo.jpg

V minulém díle seriálu bylo rozhraní USB stručně představeno. Nyní se podíváme na datový model USB 2.0, topologie sběrnice, model USB zařízení a na to, co jsou endpointy či roury.

USB zařízení a USB hostitel

usb

USB poskytuje komunikační služby mezi hostitelem a připojeným USB zařízením. Z hlediska uživatele se koncové USB zařízení tváří, jako by bylo přímo připojeno ke hostitelskému počítači. Věc je ovšem trochu složitější. Na následujícím obrázku je znázorněno spojení mezi hostitelem a zařízením podrobněji a je rozděleno do základních vrstev.

usb model

Znázornění USB Hostitele a USB Klienta


Z obrázku je patrné, že prostá komunikace mezi klientským SW a zařízením vyžaduje součinnost mnoha částí v několika úrovních. Na nejvyšší úrovni funkční vrstvy probíhá virtuální komunikace přímo mezi klientským SW a funkcí, poskytovanou USB zařízením. Toto spojení je zajišťováno komunikací na druhé úrovni, na úrovni zařízení. Na této úrovni probíhá (rovněž virtuální) komunikace prostřednictvím obecných USB operací se zařízením. Reálná výměna dat ovšem probíhá až na nejnižší úrovni, ve vrstvě fyzického rozhraní. Tato vrstva zajišťuje fyzické propojení hostitele a zařízení a komunikaci pomocí paketů.

Pro USB implementaci jsou důležité čtyři části:

  • USB zařízení: Hardware, připojený na konci USB kabelu, který poskytuje nějakou užitečnou funkci koncovému uživateli.
  • Klientský software: Software, který běží na hostitelském počítači a komunikuje s konkrétním USB zařízením. Tento software bývá nejčastěji součástí OS nebo bývá dodáván s USB zařízením (ovladač).
  • Software USB systému: Software, který obsluhuje USB sběrnici v OS. Bývá součástí jádra systému a je nezávislý na připojených USB zařízeních nebo klientském SW.
  • Hostitelský řadič: Hardware a software, který umožňují připojení USB zařízení k hostiteli.

Topologie sběrnice podrobněji

USB topologie má čtyři části:

  • Hostitelé a zařízení: Základní komponenty USB systému.
  • Fyzická topologie: Popisuje, jak jsou jednotlivé komponenty k sobě připojeny.
  • Logická topologie: Popisuje schopnosti různých USB zařízení, též to, jak se USB jeví z hlediska hostitele či zařízení.
  • Vztahy mezi klientem a zařízením popisují, jak se vzájemně vidí klientský software a jemu odpovídající funkční blok USB zařízeni.

Fyzická topoplogie

Zařízení jsou na USB sběrnici připojena tak, jak bylo znázorněno v minulém díle (USB pyramida). Základními kameny fyzické topologie jsou USB rozbočovače (huby) a koncová zařízení. Huby nabízí přípojné body, ke kterým jsou připojována koncová zařízení.

Logická topologie

Ačkoli jsou USB zařízení připojována ve vrstevné hvězdicové topologii, komunikuje hostitel s každým zařízením tak, jako by bylo přímo připojeno ke kořenovému rozbočovači. Huby jsou na této úrovni transparentní.

Vztahy mezi klientem a zařízením

Klientský software komunikuje s rozhraním USB zařízení tak, jako by byl na něj přímo napojen. Klient musí ke komunikaci používat programové rozhraní USB sběrnice, na rozdíl od přímých přístupů do paměti nebo na I/O porty u jiných sběrnic (PCI, EISA, PCMCIA apod.) Během provozu by měl být klientský software nezávislý na ostatních zařízeních, připojených k USB sběrnici, což umožňuje návrhářům, aby se zaměřili na detaily HW/SW spolupráce klienta a zařízení. Záležitosti spojené s topologií sběrnice a jejím provozem jsou tak odstíněny.

Datový tok

Na následujícím obrázku je podrobněji znázorněn datový tok mezi hostitelem a USB zařízením.

usb model

Podrobnější znázornění USB hostitele a USB klienta


Logické zařízení se v systému prezentuje jako množina koncových bodů (endpoints). Tyto koncové body jsou seskupeny do sad koncových bodů (endpoint sets), jenž implementují vlastní rozhraní. Rozhraní v systému představují "funkce" koncového zařízení. Systémový software ovládá zařízení pomocí defaultní řídící roury (Default Control Pipe), klientský software komunikuje pomocí svazků rour (Pipe Bundles).

Klientský software požaduje přenos dat po USB sběrnici mezi svým bufferem a endpointem. Hostitelský řadič (nebo USB zařízení, podle směru přenosu) tato data převede do podoby paketů, které jsou pak přenášeny po sběrnici. Hostitelský řadič také koordinuje přenos těchto paketů.

Koncové body

Koncový bod (endpoint) je jednoznačně identifikovatelná část USB zařízení, která stojí na jednom konci komunikačního toku mezi hostitelem a zařízením. Každé logické zařízení se skládá z několika nezávislých koncových bodů. Tomuto logickému zařízení je během připojování přiřazena jednoznačná identifikace v rámci sběrnice. Každý koncový bod v rámci zařízení má přiřazen výrobcem kód, nazývaný číslo bodu (endpoint number) v rozsahu 0-15. Endpointy mají zároveň návrhem pevně daný směr komunikace (příjem / vysílání dat). Kombinace identifikátoru zařízení, čísla endpointu a směru komunikace dává dohromady jednoznačné určení endpointu v rámci USB sběrnice. V jednom zařízení se tedy mohou vyskytnout dva endpointy se stejným číslem a různým směrem přenosu dat.

Koncový bod má jisté charakteristiky, které určují typ přenosů mezi ním a klientským SW. Koncový bod sám sebe popisuje:

  • Požadavky na frekvenci a latenci přístupů ke sběrnici
  • Požadavkem na šířku přenosového pásma
  • Číslem koncového bodu
  • Požadavky na chování obsluhy chyb
  • Maximální velikostí paketu, kterou je schopen endpoint přijmout nebo odeslat
  • Typem přenosu
  • Směrem přenosu

Endpointy jiné než endpoint 0 jsou po připojení v nedefinovaném stavu a nesmí k nim být přistupováno až do doby než je zařízení nakonfigurováno.

Koncový bod nula (endpoint zero) musí být implementován v každém USB zařízení a slouží k prvotní konfiguraci zařízení. (Ve skutečnosti jde o endpointy dva, jeden pro vstup dat a jeden pro výstup, oba s číslem 0, ale hovoří se pro zjednodušení o "koncovém bodu 0", nikoli o "koncových bodech".) USB systém používá endpoint 0 k inicializaci a k některým generickým úkonům, jako jsou konfigurace logického zařízení. Zároveň tento endpoint poskytuje informace o konfiguraci a stavu zařízení. Endpoint 0 podporuje řídící přenosy (control transfers).

Pokud je USB zařízení schopno práce v high speed módu, musí splňovat některé minimální požadavky: Musí být schopno inicializace v high speed módu a musí správně zpracovat a odpovědět na požadavky nastavení adresy (set_address), nastavení konfigurace (set_configuration) a získání popisu zařízení (get_descriptor). High speed zařízení může (a nemusí) poskytovat své funkce ve full speed módu.

Ostatní koncové body (Non-endpoint Zero) mohou být implementovány USB zařízením podle potřeby. Low speed zařízení jsou limitována počtem dvou dalších endpointů (kromě dvou s číslem 0). Full speed zařízení mohou mít dalších endpointů tolik, kolik umožňuje definice protokolu (tedy 15 vstupních a 15 výstupních).

Roury

Roura (USB pipe) je spojení mezi endpointem na straně zařízení a softwarem na straně hostitele. Roury reprezentují schopnost přenosu dat mezi bufferem v programu hostitele a endpointem v zařízení. Jsou dva navzájem se vylučující komunikační módy rour:

  • Proud (stream): Data, přenášená rourou, nemají specifikovanou strukturu, mohou to být libovolná data a jejich formát závisí na návrhu daného zařízení.
  • Zpráva (message): Data přenášená v tomto módu mají strukturu určenou specifikací USB.

USB nijak neinterpretuje data přenášená rourami. Ačkoli přenos zpráv vyžaduje, aby data byla strukturována podle USB specifikace, není jejich obsah USB sběrnicí nijak interpretován.

Roura, nazývaná Defaultní řídící roura (default control pipe), je vytvořena v okamžiku připojení zařízení do systému a je pevně spojena s endpointy 0. Případné další roury jsou vytvořeny v okamžiku nakonfigurování USB zařízení. Řídící roura je používána systémovým SW k identifikaci zařízení a jeho nastavení. Může být rovněž použita k přenosu některých informací po inicializaci, pokud je tak zařízení navrženo. USB systém si ovšem ponechává "vlastnictví" této roury a zprostředkovává případné použití této roury klientským SW.

Klientský software požaduje přenos dat tím, že pošle rouře IRP (I/O Request Packet, paket s požadavkem na vstup/výstup dat). Detaily IRP definuje konkrétní operační systém podle svých zvyklostí. Specifikace USB používá tento termín pro zjednodušení popisu požadavku klientského SW na přesun dat mezi jím samým a koncovým bodem zařízení v požadovaném směru. Klientský SW může rovněž požádat o storno všech čekajících IRP. Systém informuje klienta o výsledku jeho IRP ve chvíli, kdy je tento proveden, ať již úspěšně nebo neúspěšně.

Pokud roura neprovádí žádný IRP ani žádný IRP na provedení nečeká, je ve stavu nečinnosti (idle state) a hostitelský řadič tuto rouru neobsluhuje, tj. nepřiděluje jí přenosový čas.

Pokud u neizochronní roury nastane situace, které vede k vyslání STALL (Endpoint je zastaven nebo roura nepodporuje tento požadavek), nebo dojde-li k třem chybám sběrnice u některého paketu v rámci IRP, je IRP přerušen, všechny čekající IRP jsou odloženy a další IRP nejsou přijímány, dokud klient vzniklou závadu neopraví (v závislosti na implementaci). Izochronní roury se chovají trochu jinak, jak bude popsáno dále.

IRP může požadovat přenos takového množství dat, které se nevejde do jednoho USB paketu. Data jsou pak rozdělena do více paketů a přenášena postupně. Poslední paket tedy neobsahuje plné množství dat a USB systém se k takovému paketu může zachovat dvojím způsobem v závislosti na očekávání klienta:

  • Klient může očekávat proměnné množství dat. V tomto případě je neúplný paket brán jako signál konce dat, IRP je dokončen bez chybového hlášení a řadič může začít provádět další IRP.
  • Klient očekává předem určené množství dat. V tomto případě je kratší paket, který nedoplní počet přenesených dat na požadovanou hodnotu, brán jako chybný. IRP by měl být v tomto případě odložen, roura zastavena a všechny čekající IRP by měly být rovněž odloženy.

Protože se hostitelský řadič musí chovat v každém z těchto případů odlišně, a nemá možnost zjistit vlastními silami který případ nastal, je možné v rámci IRP určit chování, které klient očekává.

Koncový bod může informovat hostitele o tom, že je zaneprázdněn, tím, že na paket odpoví NAK (Not AcKnowledge). NAK nezpůsobí přerušení probíhajícího IRP a jeho vrácení klientovi, pouze pozastaví probíhající IRP. V rámci jednoho IRP může zařízení vrátit libovolný počet NAK odpovědí a tyto nejsou brány jako chybový stav.

Proudové roury přenášejí data, která nemají nijak standardizovanou strukturu. Data, která na jedné straně vsupují do roury, na druhé straně beze změny vystupují ve stejném pořadí. Proudové roury jsou vždy jednosměrné a data jsou v nich přenášena v sekvenčním pořadí.

USB předpokládá, že data, přenášená proudovou rourou, jsou zpracovávána jedním klientem. USB software nijak nesynchronizuje přístup více klientů k jedné rouře.

Proudová roura je připojena k endpointu, určenému svým číslem a směrem přenosu. Endpoint se stejným číslem, ale v opačném směru, může být použit pro další rouru. Proudové roury slouží k hromadným, izochronním a přerušovacím přenosům.

Roury zpráv (message pipes) pracují s endpointem jiným způsobem než proudové roury. Nejprve hostitel zašle zařízení požadavek. Následuje přenos dat v požadovaném směru a posléze je přenesena informace o stavu. Roury zpráv dodržují určitou strukturu dat, která umožňuje identifikaci příkazů a požadavků, čímž je zajištěno dodržení paradigmatu požadavek/data/stav. Tyto roury zároveň umožňují obousměrnou komunikaci, ačkoli komunikaci vždy zahajuje hostitel. Defaultní řídící roura je vždy tohoto typu.

USB systém zajišťuje, že není jednou rourou zpráv přenášeno více požadavků. Od zařízení je požadováno, aby bylo schopno obsloužit souběžně jediný požadavek. Více klientů může požadovat přístup k řídící rouře, ale tyto požadavky jsou posílány postupně v pořadí, v jakém došly. Zařízení může řídit tok informací při přenosu dat nebo stavové informace dle svých schopností.

Roury zpráv běžně neposílají žádný další požadavek, dokud není probíhající požadavek dokončen. Ovšem dojde-li k chybě, která způsobí přerušení prováděného IRP, může hostitelský řadič poslat předčasně (z hlediska zařízení) další požadavek. Z pohledu software, obsluhujícího rouru, způsobí chyba libovolné části IRP ukončení aktuálního IRP, odložení všech čekajících IRP a vrácení chybového hlášení klientovi, který požadoval IRP.

Roura zpráv je připojena k dvěma endpointům se stejným číslem v obou směrech. USB nepovoluje připojit tuto rouru k různým číslům endpointu pro jednotlivé směry.

Rámce a mikrorámce

USB zavádí časový úsek jedné milisekundy, nazývaný rámec (frame), pro low/full speed zařízení a úsek 125 µs, nazývaný mikrorámec (microframe), pro high speed zařízení. (Mikro)rámec může obsahovat několik transakcí. Každý typ přenosu definuje, jaké transakce jsou povoleny v jednom (mikro)rámci pro koncový bod. Izochronní a přerušovací koncové body mohou přistupovat ke sběrnici každých N (mikro)rámců - hodnota N a další detaily budou popsány v následujícím dílu.

Závěr druhého dílu

V tomto dílu jsem popsal datový model USB sběrnice, koncept logických zařízení, koncových bodů a komunikačních rour. V příštím popíšu podrobně jednotlivé druhy přenosů (řídící, hromadné, izochronní a přerušovací) a budu se věnovat jejich možnostem a omezením.

Martin Malý
hw@ maly.cz

DOWNLOAD & Odkazy

 

Hodnocení článku: