Druhy přenosů
- Řídicí přenosy
- Izochronní přenosy
- Přerušovací přenosy
- Hromadné přenosy
- Limity přenosů - stručný tabulkový přehled jednotlivych typů
Řídicí přenosy
Řídicí přenosy umožňují přístup k různým částem zařízení. Řídicí přenosy jsou použity k zajištění přenosu konfiguračních / řídicích / stavových dat mezi klientským SW a zařízením. Řídicí přenos je složen z transakce SETUP, která přenáší požadovanou informaci z hostitele do koncového zařízení, z různého počtu (0 a více) datových transakcí, které přenáší data ve směru určeném SETUP transakcí, a ze stavové transakce (STATUS), která vrací stavovou informaci z koncového zařízení hostiteli. Stavová transakce vrací informaci o úspěchu, pokud endpoint úspěšně provedl požadovanou operaci.
Řídicí přenosy probíhají pouze skrz roury zpráv (message pipes). Jak bylo řečeno v minulém dílu, data v těchto rourách musí dodržovat definovanou strukturu, jak bude popsána dále. USB systém řídí běh řídicích přenosů mezi hostitelem a zařízeními, proto si klientský SW ani koncové zařízení nemůže nárokovat ani frekvenci přístupu kesběrnici, ani šířku přenosového pásma. USB systém může omezit jak frekvenci, tak šířku pásma.
Formát dat řídicích přenosů
SETUP paket má definovanou strukturu, která je přizpůsobena minimální sadě příkazů, potřebných pro navázání komunikace mezi hostitelem a zařízením. Struktura dovoluje uživatelská rozšíření sady příkazů. Datová transakce, následující po SETUPu, má definovanou strukturu, s výjimkou transakcí přenášejících informace dle specifikace výrobce (vendor specific).
Směr řídicích přenosů
Řídicí přenosy podporují obousměrný přenos dat. To vyžaduje, aby roura zpráv, použitá pro řídicí přenosy, byla nakonfigurována tak, aby používala pro vstup i výstup dva endpointy se stejným číslem.
Omezení velikosti paketu
Endpointy pro řídicí přenosy specifikují maximální velikost dat, kterou jsou schopny přijmout nebo vyslat. Povolené maximální velikosti pro full-speed zařízení jsou 8, 16, 32 nebo 64 bytů; pro high-speed zařízení to je 64 bytů a pro low-speed je to 8 bytů. Toto maximum omezuje velikost datového paketu následujícího za SETUP paketem. USB nevyžaduje, aby velikost datového paketu odpovídala maximální velikosti, pokud je tedy potřeba vyslat menší počet bytů než je maximum, lze tak učinit a není třeba doplňovat paket na maximální velikost.
Při zjišťování maximální velikosti paketu u Default Control Pipe vyšle USB software požadavek na přečtení popisovače zařízení (device descriptor). Následně přečte prvních osm byte odpovědi. Zařízení vždy vyšle minimálně těchto osm bytů v jednom paketu. V těchto osmi bytech je vyslána informace wMaxPacketSize (sedmý byte) a klientský SW si podle ní může nastavit parametry pro další přenosy. Pro všechny ostatní endpointy je maximální velikost paketu zjištěna během konfigurace zařízení.
Omezení přístupu ke sběrnici
Endpoint nemá žádnou možnost jak oznámit požadovanou frekvenci přístupu ke sběrnici nebo jak si ji vyžádat. USB upravuje přístup ke sběrnici pro všechny řídicí přenosy ačekající požadavky na přenos dat tak, aby zajistil co možná nejlepší doručování dat.
USB požaduje, aby část každého (mikro)rámce byla vyhrazena pro řídicí přenosy podle následujících pravidel:
- Pokud požadované řídicí přenosy zabírají míň než 10% rámce (full/low speed) nebo míň než 20% mikrorámce (high speed), může být zbývající část využita pro hromadné(bulk) přenosy.
- Řídicí přenos, který musí být vyslán znovu, může být vyslán v aktuálním nebo budoucím (mikro)rámci, není tedy třeba znovuvyslání ve stejném (mikro)rámci.
- Pokud je víc řídicích přenosů než dostupného času a jsou k dispozici (mikro)rámce nevyužité pro izochronní nebo přerušovací přenosy, může hostitelský řadič přesunoutřídicí přenosy do dostupných (mikro)rámců.
- Pokud čeká více řídicích přenosů pro více endpointů, jsou vybrány přenosy pro různé endpointy, aby tak bylo zajištěno spravedlivé rozdělení přístupu.
Pro všechny rychlosti platí, že pakety jednoho řídicího přenosu mohou být rozprostřeny do několika (mikro)rámců.
Datové sekvence
V rámci řídicího přenosu je nejprve poslána SETUP transakce, která popisuje akci, jež má zařízení provést. Setup transakce je následována žádnou nebo několika datovýmitransakcemi, které nesou dodatečné informace pro daný typ akce. Nakonec je přenesena stavová informace. Jejím přenosem je ukončen řídicí přenos a hostitel může vyslat dalšířídicí přenos pro tento endpoint.
Endpoint může být během datové nebo stavové transakce na určitý čas zaneprázdněn. Během tohoto času endpoint indikuje, že je zaneprázdněn, a hostitel znovuvyšle transakci později.
Pokud endpoint obdrží Setup transakci před tím, než byl dokončen předchozí přenos, musí tento přenos ukončit a obsloužit nově příchozí Setup požadavek. Setup požadavek není za normálních okolností vyslán před ukončením aktuálního řídicího přenosu. Ale v případě, že byl přenos přerušen, např. kvůli chybám na sběrnici, může hostitel poslatdalší Setup požadavek, který je (z pohledu zařízení) předčasný.
Pokud dojde k zastavení přenosu nebo k nějaké chybě, měl by se endpoint příchodem dalšího Setup požadavku dostat zpět do definovaného stavu, tak aby nebyly nutné žádné "opravné akce" po nějakém jiném komunikačním kanálu. Pokud se do takového stavu dostane endpoint 0 a není schopen obsloužit další Setup požadavek, může vyvolat až reset celého zařízení.
USB nabízí robustní systém detekce chyb a opravu / znovuvyslání v případech chyb v řídicích přenosech. Znovuvyslání datového či stavového paketu je rozpoznánopříjemcem pomocí příznaku opakování v paketu. Vysílač může spolehlivě zjistit, zda příjemce obdržel vyslaný paket z informace, vrácené jako handshake. Protokol dovoluje odlišit znovuvyslaný paket od původního s výjimkou Setup paketu. Setup pakety mohou být znovuvyslány z důvodu přenosové chyby, ale nijak neindikují, zd jde o originální paket nebo o opakované vysílání.
Limity přenosu
V tabulkách k tomuto článku naleznete informace o maximálním možném počtu přenesených dat pro low-speed řídicí přenos, full-speed řídicí přenos a high-speed řídicí přenos pro různé velikosti paketů.
Izochronní přenosy
V prostředí mimo USB jsou za izochronní přenosy považovány přenosy konstatntní frekvencí s tolerovanými chybami. Ve světě USB je od izochronních přenosů požadováno následující:
- Garantovaný přístup k USB pásmu s omezeným zpožděním.
- Garantovaný konstantní tok dat skrz rouru po celou dobu, kdy jsou přenášena data.
- V případě chybného doručení dat v důsledku chyby nejsou data vysílána znovu.
Izochronní přenosy nemají nijak definovaný formát dat. Izochronní roura je proudová roura (stream pipe) a jako taková je vždy jednosměrná. Popisovač endpointu udává, zda daná izochronní roura přenáší data ze zařízení nebo do zařízení. Pokud je potřeba přenášet data v obou směrech, je nutné použít dvě roury, každou pro jeden směr.
Omezení velikosti paketu
Endpoint, konfigurovaný pro izochronní rouru, specifikuje maximální velikost dat, kterou může přijmout či vyslat. USB systém používá tuto informaci během konfigurace k tomu, aby zjistil, zda je dostatek prostoru (času) na sběrnici k tomu, aby mohl přizpůsobit tuto velikost (mikro)rámcům. Pokud je dostatek času, je spojení navázáno. Nemůže-li systém zaručit dostatečnou velikost přenosového pásma, spojení navázáno není.
USB omezuje maximální velikost dat na 1023 bytů pro každý full-speed izochronní endpoint. High-speed endpointy mohou přenášet až 1024 bytů. High-speed high-bandwidth (širokopásmový) endpoint může specifikovat, zda požaduje dva nebo tři transakce během mikrorámce. V následujících tabulkách jsou popsány parametry full-speed a high-speed izochronních přenosů pro různé velikosti přenášených dat.
Transakce pro izochronní roury nemusí mít vždy maximální velikost, kterou umožňuje daný endpoint. Velikost přenášených dat je určena vysílačem (klientským SW nebo koncovým zařízením) a může se měnit podle aktuálních požadavků od transakce k transakci. Chyby na sběrnici mohou způsobit, že příjemce dostane paket s menší velikostí než byla vyslána. Tyto chyby však mohou být detekovány pomocí CRC nebo tím, že příjemce zná očekávanou velikost dat.
Po inicializaci nemusí USB interface obsahovat žádné isochronní endpointy s nenulovou maximální velikostí dat. Dodatečné nastavení interface může specifikovat izochronní endpointy s nenulovou maximální velikostí dat. Pokud má endpoint vysokou hodnotu maximální velikosti dat, je dobré, aby bylo možno v rámci dalšího nastavení nebo alternativní konfigurace určit rozsah možných velikostí, čímž se zvýší šance, že zařízení bude správně pracovat v systému s dalšími USB zařízeními.
Omezení přístupu ke sběrnici
Izochronní přenosy mohou být použity pouze ve full-speed nebo high-speed zařízeních. USB požaduje, aby periodické přenosy (izochronní a přerušovací) pro full-speed endpoint zabíraly max. 90% rámce. High-speed endpointy mohou pro tyto přenosy alokovat max. 80% mikrorámce.
Izochronní endpoint musí specifikovat požadovanou periodu přístupu ke sběrnici. Perioda je určena výrazem (2bInterval — 1) × F, kde bInterval je v rozsahu 1 - 16 (včetně) a F je 125 µs pro high-speed a 1ms pro full-speed. To umožňuje, aby měly izochronní přenosy delší periodu než jedna transakce za (mikro)rámec. Přesto musí být izochronní endpoint připraven přijímat data rychleji než touto specifikovanou rychlostí. Hostitel nesmí poslat v jednom (mikro)rámci víc než jednu izochronní transakci (s výjimhou high-speed high-bandwidth endpointů, viz dále). Izochronní endpoint musí vrátit datový paket s nulovou délkou, pokud nemá připravena žádná data a hostitel je požaduje rychleji než je specifikovaný interval.
High-speed endpoint může přesunout až 3072 byte v mikrorámci (tedy 192 Mb/s). High-speed endpoint, který potřebuje přenést víc než 1024 bytů dat v jednom cyklu, je nazýván high-speed high-bandwidth endpoint (s vysokou šířkou pásma, širokopásmový). Širokopásmový endpoint používá několik transakcí během jednoho mikrorámce a musí specifikovat periodu rovnou 1×125 µs (tedy bInterval roven jedné). Širokopásmovým endpointům se budu věnovat později.
Chyby na sběrnici nebo zpoždění vyvolaná plánováním úloh v OS mohou způsobit, že během (mikro)rámce není přijat žádný paket. V takovém případě může být vrácen klientskému SW chybový kód. Zařízení může tento stav zjistit sledováním SOF (start-of-frame) tokenů a zjišťením nesrovnalostí ve specifikované periodě přístupu ke sběrnici.
Frekvence sběrnice a časování (mikro)rámce omezuje maximální počet úspěšných izochronních transakcí během (mikro)rámce pro libovolný USB systém na méně než 151 full-speed jednobytových přenosů a méně než 193 high-speed jednobytových přenosů. Hostitelský řadič nemusí být z nejrůznějších implementačních příčin schopen dosáhnout tohoto teoretického maxima izochronních transakcí během (mikro)rámce.
Datové sekvence
Izochronní přenosy nepoužívají opakované vyslání dat v případě chyby. Příjemce může detekovat, že došlo k chybě. Protokol na nízké úrovni nepovoluje handshake mezi příjemcem a vysílačem. Normálně je použit handshake k topmu, aby příjemcve oznámil vysílajícímu, zda data obdržel v pořádku nebo ne. U izochronních přenosů je časování důležitější než správnost dat a protokol je, vzhledem k očekávanému nízkému počtu chyb na sběrnici, optimalizován tak, aby předpokládal, že data jsou správná. Příjemce může detekovat, zda nějaká data v (mikro)rámci chybí a může též zjistit kolik jich chybí.
Endpoint pro izochronní přenosy nemůže být nikdy zastaven, protože u izochronních přenosů není žádný handshake mechanismus, který by nahlásil potřebu zastavení. Chyby jsou předávány v rámci stavových informací jednotlivých IRP, ale izochronní roura není nikdy zastavena. Pokud je zjištěna chyba, pokračuje hostitel ve zpracovávání dat z dalšího (mikro)rámce.
Limity přenosu
V tabulkách k tomuto článku naleznete informace o maximálním možném počtu přenesených dat pro low-speed řídicí přenos, full-speed řídicí přenos a high-speed řídicí přenos pro různé velikosti paketů.
Tento druh přenosů slouží zařízením, která potřebují poslat nebo přijmout data relativně zřídka, ovšem požadují rychlé doručení. Přerušovací (interrupt) přenosy poskytují:
- Garantovanou maximální periodu, ve které je požadavek obsloužen.
- Znovuvyslání v případě chyby při doručení.
Přerušovací přenos nemá nijak definovanou strukturu přenášených dat. Tento přenos se uskutečňuje proudovou (stream) rourou, která je, podobně jako u izochronních přenosů, jednosměrná. Směr je dán směrem endpointu, který je s tou kterou rourou asociován.
Omezení velikosti paketu
Endpointy pro přerušovací přenosy specifikují maximální velikost dat, kterou jsou schopny přijmout nebo vyslat. Povolená maximální velikost pro full-speed zařízení je 64 bytů; pro high-speed zařízení to je až 1024 bytů. High-speed high-bandwidth (širokopásmový) endpoint může specifikovat, zda požaduje dva nebo tři transakce během mikrorámce. Low-speed zařízení jsou omezena maximální velikostí 8 byte na přenos. Toto omezení se vztahuje pouze na přenášená data, nezahrnuje tedy data definovaná protokolem. USB nevyžaduje, aby velikost datového paketu odpovídala maximální velikosti, pokud je tedy potřeba vyslat menší počet bytů než je maximum, lze tak učinit a není třeba doplňovat paket na maximální velikost.
Od hostitelských řadičů USB vyžaduje, aby dokázaly v rámci přerušovacích přenosů obsloužit maximální možné velikosti dat pro danou rychlost (8 byte pro low-speed, 64 pro full a 1024 pro high speed).
Maximální velikost dat přenášených těmito přenosy je určeno během úvodní konfigurace zařízení. Tato velikost se nemění po celou dobu, po kterou je zařízení nakonfigurováno. USB systém používá tuto informaci, aby zjistil, zda je dostatek prostoru (času) na sběrnici k tomu, aby mohl přizpůsobit tuto velikost (mikro)rámcům. Pokud je dostatek času, je roura vytvořena. Nemůže-li systém zaručit dostatečnou velikost přenosového pásma, roura vytvořena není.
Endpoint přenáší v rámci jedné transakce maximálně tolik bytů, kolik odpovídá jeho wMaxPacketSize hodnotě. Zařízení může přenést větší počet dat než je tato hodnota tak, že data rozdělí do více přenosů. Tyto přenosy jsou uskutečněny s periodou, která je určena pro danou rouru. Data se rozdělí na jednotlivé přenosy tak, aby byl jeden či více přenosů s maximálním počtem dat a v posledním přenosu byl zůstatek (nebo nulový počet). Celý přerušovací přenos je ukončen tehdy, když:
- je přeneseno přesně tolik dat, kolik bylo očekáváno
- byl přenesen paket s velikostí menší než wMaxPacketSize, popř. s nulovou velikostí.
Pokud je přenos ukončen, uzavře hostitelský řadič aktuální IRP a začne zpracovávat další. Pokud je přijato více dat než bylo očekáváno, je IRP přerušen nebo uzavřen a roura pozastaví další IRP až do doby, než je tento stav opraven a oprava potvrzena.
High-speed zařízení v defaultní konfiguraci nesmí obsahovat interrupt endpoint s velikostí dat větší než 64 bytů. Alternativní konfigurace může specifikovat endpoint s větší velikostí. Pokud má takový endpoint nastaven velký počet přenášených dat, je dobré, když lze další konfigurací nebo alternativním nastavením určit rozsah tohoto počtu, čímž se zvýší šance, že zařízení bude moci být použito v systému s dalšími připojenými USB zařízeními.
Omezení přístupu ke sběrnici
High-speed endpointy mohou alokovat až 80% mikrorámce pro periodické přenosy (přerušovací a izochronní). Full a low-speed endpointy mohou pro tyto přenosy alokovat maximálně 90% rámce.
Frekvence sběrnice a časování (mikro)rámce omezuje maximální počet úspěšných přerušovacích transakcí během (mikro)rámce pro libovolný USB systém na méně než 108 full-speed jednobytových přenosů, méně než 10 low-speed jednobytových přenosů a méně než 134 high-speed jednobytových přenosů. Hostitelský řadič nemusí být z nejrůznějších implementačních příčin schopen dosáhnout tohoto teoretického maxima izochronních transakcí během (mikro)rámce.
Přerušovací endpoint musí specifikovat požadovanou periodu přístupu ke sběrnici. Full-speed endpoint může specifikovat periodu v rozsahu 1 - 255 ms. Low-speed v rozsahu 10 - 255 ms. Perioda u high-speed endpointu je určena výrazem (2bInterval — 1) × 125 µs, kde bInterval je v rozsahu 1 - 16 (včetně). USB systém použije tuto hodnotu k tomu, aby určil periodu, kterou je schopen udržet. Perioda nabízená systémem může být kratší než perioda požadovaná zařízením, a to až rovna nejkratší definované periodě (125 µs mikrorámce nebo 1 ms rámce). Klientský software a zařízení mají zaručeno pouze to, že čas mezi dvěma přerušovacími přenosy nebude delší než požadovaná perioda. Je třeba si uvědomit, že v případě chyby na sběrnici může být tato doba překročena. Endpoint je dotazován na data pouze v případě, že klientský SW poslal IRP (požadavek) na přerušovací přenos. Pokud nadejde čas pro přerušovací přenos a žádný takový IRP nečeká, tak endpoint nedostane příležitost vyslat svá data. Pokud se IRP objeví, budou data přenesena v dalším vyhrazeném cyklu.
High-speed endpoint může přesunout až 3072 byte v mikrorámci (tedy 192 Mb/s). High-speed přerušovací endpoint, který potřebuje přenést víc než 1024 bytů dat v jednom cyklu, je nazýván širokopásmový (high-bandwidth) endpoint. Širokopásmový endpoint používá několik transakcí během jednoho mikrorámce a musí specifikovat periodu rovnou 1×125 µs (tedy bInterval roven jedné).
Přerušovací přenosy jsou realizovány periodickým přístupem k přerušovacím endpointům. Hostitel nemá jinou možnost, jak zjistit, jestli takový endpoint má připravena data, než poslat požadavek na přenos. Pokud endpoint nemá žádná připravená data, odpoví NAK. Endpoint by měl posílat data pouze v případě, že nějaká má, aby předešel případu, že klientu bude (chybně) oznámeno dokončení IRP. Interrupt přenos s nulovou velikostí dat je platný přenos a může být využit pro některé specifické případy.
Datové sekvence
Přerušovací transakce mohou použít buď změnu data toggle bitů tak, že tyto bity jsou změněny po každém úspěšném přenosu nebo po každém přenosu. Hostitel pak musí předpokládat, že zařízení dodržuje pravidla pro handshake/retry, jak bude popsáno v dalších dílech. Zařízení může také vždy přepínat DATA0/DATA1 PID a ignorovat handshake zprávy vrácené z hostitele. V tomto případě může, dojde-li k chybě, klientský SW ztratit nějaká data, protože hostitelský řadič bude považovat vyslání dalšího paketu za znovuvyslání chybně přijatého předchozího paketu.
V případě, že je detekována podmínka pro zastavení přerušovací roury (chyba při přenosu nebo vrácen STALL příznak v rámci handshake), jsou pozastaveny všechny čekající IRP. Příčina zastavení musí být opravena zásahem software po řídicí rouře. Tato oprava nastaví data toggle bit na hodnotu DATA0 jak v hostiteli, tak v zařízení.Následně jsou přerušovací transakce opakovány.
Limity přenosu
V tabulkách k tomuto článku naleznete informace o maximálním možném počtu přenesených dat pro low-speed řídicí přenos, full-speed řídicí přenos a high-speed řídicí přenos pro různé velikosti paketů.
Hromadné přenosy
Hromadný (bulk) přenos je navržen pro zařízení, která potřebují přenášet velké bloky dat v různých chvílích, kdy může přenos použít veškeré dostupné přenosové pásmo. Tento druh přenosů nabízí:
- Přístup k USB na základě aktuálně dostupné přenosové kapacity
- Opakování přenosů v případě chyb na sběrnici
- Garanci správného doručení dat.
Hromadný přenos nemůže garantovat ani šířku přenosového pásma (tedy rychlost přenosu dat) ani zpoždění při přenosu.
Hromadné přenosy jsou založeny na využití neobsazeného prostoru (mikro)rámce. V USB systému s velkou částí volného přenosového pásma jsou tyto přenosy relativně rychlé. V systémech, kde je volného pásma málo, trvají tyto přenosy delší dobu.
USB nedefinuje nijak strukturu dat přenášených hromadným přenosem. Pro hromadný přenos jsou používány jednosměrné proudové roury. Pokud zařízení potřebuje přenášet data v obou směrech, je třeba vytvořit dvě komunikační roury.
Omezení velikosti paketu
USB definuje maximální možné velikosti dat přenesených hromadným přenosem. V rámci jedné hromadné transakce může být přeneseno maximálně 8, 16, 32 nebo 64 bytů u full-speed endpointu nebo 512 butů u high-speed endpointu. Tato maximální hodnota se vztahuje k vlastním datům a nejsou do ní započítávána data protokolu.
Hromadný (bulk) endpoint je navržen tak, aby dokázal přenést maximální velikost dat. Tuto hodnotu vrací ve své konfigurační informaci. USB opět nevyžaduje, aby přenesená data měla maximální velikost. Je-li třeba přenést dat méně, nemusí být nijak doplňována do maximální velikosti.
Během konfigurace přečte systémový software hodnotu, udávající maximální počet dat pro daný endpoint a zajistí, aby nebylo tomuto endpointu zasláno víc dat, než dokáže zpracovat.
Endpoint musí vždy vyslat maximálně tolik dat, kolik udává hodnota wMaxPacketSize daného endpointu. Pokud IRP požaduje víc dat než je možné přenést jedním přenosem s maximální velikostí, jsou tato data rozdělena do více přenosů tak, aby byl vyslán jeden nebo více přenosů s maximálním možným počtem dat a nakonec jeden přenos, obsahující zbylá data. Hromadný přenos je ukončen tehdy, když:
- bylo přeneseno přesně tolik dat, kolik bylo požadováno, nebo
- byl přenesen paket o menší velikosti než je maximální definovaná, popř. byl přenesen paket nulové délky.
Když je hromadný přenos dokončen, hostitelský řadič odloží aktuální IRP a poktračuje dalším čekajícím IRP. Bylo-li přijato více dat než bylo požadováno, jsou všechny čekající hromadné IRP pro daný endpoint odstraněny nebo odloženy.
Omezení přístupu ke sběrnici
Hromadné přenosy mohou používat pouze full-speed nebo high-speed zařízení.
Bulk endpoint nemá žádnou možnost, jak oznámit požadavek na frekvenci přístupu ke sběrnici. USB se snaží vyrovnávat požadavky všech bulk rour, aby bylo zajištěno co nejlepší doručování dat mezi klientem a koncovým zařízením, přičemž při plánování upřednostňuje řídicí přenosy na úkor hromadných.
Pro hromadný přenos není vyhražena žádná část (mikro)rámců, jako je tomu u předchozích přenosů a tento přenos je realizován pouze tehdy, pokud není sběrnice použita pro jiné přenosy. Pokud čeká na obsloužení více přenosů pro více endpointů, jsou vybírány přenosy pro různé endpointy, aby byl zajištěn spravedlivý přístup. Tento výběr závisí na implementaci konkrétního USB řadiče.
Všechny čekající hromadné přenosy "soupeří" o stejný prostor na sběrnici. Je na USB systému, který upřednostní. Endpoint ani jeho klientský SW nemůže ovlivnit ani zjistit, kdy přijde řada na jeho požadavek. Čas, volný pro hromadné přenosy pro určitý endpoint, se mění s tím, jak jsou připojována či odpojována další zařízení či s tím, jak ostatní zařízení požadují také hromadné přenosy.
High-speed OUT endpoint musí implementovat PING protokol, jak bude popsán v dalších dílech.
Frekvence sběrnice a časování (mikro)rámce omezuje maximální počet úspěšných hromadných transakcí během (mikro)rámce pro libovolný USB systém na méně než 72 full-speed osmibytových přenosů a méně než 14 high-speed 512bytových přenosů. Hostitelský řadič nemusí být z nejrůznějších implementačních příčin schopen dosáhnout tohoto teoretického maxima hromadných transakcí během (mikro)rámce.
Datové sekvence
Hromadné přenosy používají data toggle bity, které jsou přepnuty pouze po úspěšném ukončení transakce, a tím je udržována synchronizace mezi vysílačem a příjemcem dat i v případě znovuvyslání paketu kvůli chybě. Hromadné přenosy jsou inicializovány na hodnotu DATA0 v okamžiku konfigurace endpointu řídicím přenosem. Hostitel začíná rovněž shodnotou DATA0. Pokud nastane podmínka vedoucí k zastavení roury (chyba na sběrnici, STALL handshake), jsou všechny čekající IRP odloženy. Chybový stav je opraven zásahem software po oddělené řídicí rouře. Tato oprava nastaví data toggle bit na hodnotu DATA0 jak u endpointu, tak i v hostiteli.
Hromadné přenosy jsou opakovány, pokud se na sběrnici vyskytla chyba, která ovlivnila danou transakci.
Limity přenosu
V tabulkách k tomuto článku naleznete informace o maximálním možném počtu přenesených dat pro low-speed řídicí přenos, full-speed řídicí přenos a high-speed řídicí přenos pro různé velikosti paketů.
Závěr třetího dílu
V tomto dílu jsem podrobně popsal jednotlivé druhy přenosů (řídicí, hromadné, izochronní a přerušovací), jejich možnosti a omezení. V dalším dílu bych se rád věnovalpřenosovému protokolu, tedy formátu paketů a rámců.
hw@ maly.cz
DOWNLOAD & Odkazy
- USB.ORG - USB.ORG
- Specifikace USB - Dokumentace ke stažení
- MCU.CZ - USB sekce
- ing. Igor Češko - hardware
Předchozí díly