česky english Vítejte, dnes je neděle 22. prosinec 2024

Rozhraní USB 3.0 – úvod pro vývojáře embedded aplikací

USB rozhraní je dnes součástí celé řady embedded aplikací, kde nabízí jednoduchý způsob propojení a standardizovaný kanál pro přenos dat. Tyto výhody jsou však v aplikaci vykoupeny poměrně vysokou složitostí implementace. To pro koncového uživatele USB portu nemá samozřejmě žádný význam, ale vývojář a konstruktér embedded zařízení musí mít o funkci rozhraní alespoň určitou představu. Zbytek je pak možné zajistit pomocí některého z komerčně dostupných USB stacků, vyžadujících pouze minimální úsilí implementace.

Tento článek do detailů přibližuje jak samotnou historii, tak i vlastní komunikaci USB rozhraní. Dále se pak zaměřuje na změny a novinky, přicházející se specifikací USB 3.0.

Úvod

Dnes již není žádných pochyb o tom, že zavedení rozhraní USB před více než deseti lety způsobilo doslova revoluci v oblasti počítačových periferií. Připojení naprosté většiny periferních zařízení je od té doby mnohem jednodušší a zvládnou jej i netechničtí uživatelé. Jednoduchost použití je však vyvážena náročností jeho implementace. A přestože konstruktér embedded aplikací nemusí znát všechny detaily práce USB rozhraní, určité znalosti jsou užitečné i v případě použití běžně dostupných, komerčních USB řešení.

Cílem USB rozhraní je poskytnout efektivní a uživatelsky příjemné alternativy k tradičním sériovým a paralelním rozhraním. Minimální počet konektorů a kabelů umožňuje skutečné připojení typu „plug-n-play“. USB subsystém může navíc díky své rozšiřitelnosti podporovat až 127 zařízení, takže nedostatkem „volných portů“ rozhodně netrpí. První verze USB rozhraní nabízela malou (Low Speed – 1,5 Mb/s) a velkou (Full Speed – 12 Mb/s) rychlost přenosu dat, což jsou hodnoty, které v té době vyhovovaly naprosté většině uživatelských požadavků. Příchod USB 2.0 znamenal zvýšení rychlosti přenosu dat až na 480 Mb/s, tedy High Speed, což umožnilo přenášet velké objemy dat, například z externích pevných disků. Nejnovější generace USB 3.0 přichází s rychlostí SuperSpeed, tedy až 5 Gb/s.

Dnes se můžeme setkat se třemi typy podporovaných zařízení:

  •  Host, který ovládá sběrnici (nejčastěji PC).
  •  Device, což je obvykle periferní zařízení (klávesnice, myš atd.).
  •  On-The-Go zařízení, které je schopné pracovat střídavě jako „host“ nebo „device“ (příkladem mohou být digitální fotoaparáty a kamery).

Samotná USB topologie je vždy koncipována do hvězdicového uspořádání, kde se na tzv. „root hub” v hostitelském zařízení připojují všechna USB zařízení, a to buď přímo, nebo přes další huby.

USB komunikace

USB kontrolér, kromě fyzického rozhraní s USB konektorem a kabelem, obsahuje vždy několik vyrovnávacích pamětí – bufferů, označovaných jako endpointy (koncové body). Každé zařízení může obsahovat až 16 číslovaných endpointů, přičemž každý z nich může být dále složen z jedné nebo dvou vyrovnávacích pamětí (endpointové adresy) – jedna se stará o data přijímaná zařízením a druhá o vysílaná data. Z toho vyplývá, že k dispozici může být celkem až 32 vyrovnávacích pamětí. Jedinou podmínkou na každé zařízení je však pouze přítomnost endpointu 0 s oběma buffery.

Přenos dat na USB rozhraní probíhá vždy stylem master/ slave, kde veškerou komunikaci zahajuje zařízení host. Základem je vytvoření logického spojení od hostitelského zařízení ke konkrétnímu endpointu na připojeném zařízení. Tato spojení se označují jako „pipe”. Definují (mimo jiné) typ přenosu dat a po odpojení zařízení jsou automaticky zrušena.

USB přenos

Komunikace zařízení přes USB rozhraní se označuje jako přenos dat. Každý takový přenos je složen z jedné nebo více transakcí, které se dále sestávají z datových paketů (podporované jsou „token“, „data“ nebo „handshake“). USB rozhraní podporuje navíc vícenásobné přenosy dat, kdy každé z jednotlivých vláken může být kdykoliv přerušeno, aby dovolilo přenos jiných dat. Za přenos se přitom považuje nepřetržitý tok dat.

USB podporuje čtyři typy přenosu: Control, Bulk, Interrupt a Isochronous.

Přenosy Control transfers jsou použity primárně pro identifikaci a konfiguraci zařízení, ale mohou přenášet i data. O bezproblémový přenos dat se stará mechanismus opravy chyb. Všechna zařízení s USB rozhraním musí uvedené přenosy podporovat, a to při jakékoliv přenosové rychlosti. Přenos řídicích povelů je založen na zprávách a používá se endpoint 0.

Bulk transfers jsou používány v případě zařízení s vysokým objemem přenášených dat (pevné disky, skenery, tiskárny atd.), kde není na prvním místě přenosová rychlost (i když i ta je důležitá), ale celistvost a neporušenost dat. Přenos je opět hlídán mechanismem pro opravu chyb. Tok přenášených dat není založen na přenosu zpráv a není zde podporována pomalá rychlost (Low Speed).

Interrupt transfers jsou pojmenovány poněkud zmatečně, protože koncové zařízení nemá možnost přerušit funkci USB hostu v konvenčním významu tohoto slova. Jedná se o typ přenosu používaného pro zařízení s nízkým objemem přenášených dat (jako klávesnice, myš atd.). Přenos je opět hlídán mechanismem pro opravu chyb. Tok přenášených dat není založen na přenosu zpráv a může být použita jakákoliv přenosová rychlost.

Isochronous transfers jsou používány pro velmi vysoké objemy dat (jako např. multimediální a streamovací zařízení). Přenos má garantované nízké latence, ovšem bez opravy chyb. Tok přenášených dat opět není založen na přenosu zpráv a pomalá rychlost (Low Speed) není podporována.

Software USB rozhraní

Aby bylo možné dosáhnout vysoké odolnosti, byl software USB rozhraní navržen v několika vrstvách s poměrně vysokou složitostí. Přestože funkce pro USB host a USB device jsou odlišné, lze v případě PC a embedded systémů pozorovat určitou symetrii v použité struktuře:

Horní vrstva je aplikační a je tvořena uživatelskou aplikací využívající USB rozhraní.

Jako v jiných případech i zde je aplikace k rozhraní připojena prostřednictvím funkcí operačního systému – přes střední vrstvu, nazývanou síťový stack nebo souborový systém.

Klíčovým prvkem systému USB komunikace je výběr třídy ovladačů, které charakterizují konkrétní druh připojeného zařízení. Počet standardních tříd ovladačů byl pevně definován a lze tedy očekávat, že bude k dispozici s jakýmkoliv USB stackem. Mezi základní třídy patří: audio, komunikace, lidské rozhraní, velkokapacitní paměťová zařízení, fotografická a video zařízení. Řada z nich je však ještě dále specifikována s možností širokého uplatnění, jako jsou například osobní zdravotnické pomůcky nebo funkce upgrade firmwaru. Při návrhu zařízení s USB rozhraním je tedy nutné být s ovladači příslušné třídy spojen na obou koncích sběrnice. Samozřejmě je možné vytvořit i vlastní třídy ovladačů pro danou funkci USB stacku, to ale obecně vyžaduje mnohem více práce, než když se zařízení sloučí s některým ze standardů a využije některou z dostupných tříd. Hlavní motivací standardizace je přitom nutnost použití odpovídajících ovladačů v hostitelské aplikaci. Vytvoření vlastních ovladačů totiž obvykle vyžaduje vynaložení značného úsilí a zahrnutí podpory systémů PC, Mac, Linux atd.

USB host a funkce USB stacku jsou součástí detailních specifikací USB protokolů.

Spodní vrstva USB stacku je tvořena ovladačem pro připojený hardware, který zajišťuje funkce na nejnižší, fyzické úrovni.

USB a embedded zařízení

Stále více embedded zařízení dnes využívá USB rozhraní, přičemž obvykle jde o USB rozhraní typu slave. Jmenovitě můžeme zmínit především kamery, tiskárny, skenery, herní konzole atd. V každé implementaci takového software je funkce USB stacku nezbytná, ovšem obvykle ji lze získat přímo od dodavatele IP softwaru.

Přestože USB host je dnes doménou především stolních nebo přenosných počítačů, existuje řada případů, kdy i od embedded zařízení vyžadujeme, aby se chovalo jako hostitel. Jedním z takových případů jsou dnes především set-top boxy. V tomto případě je nutné získat software pro USB stack jako host, ovšem i ten je dnes běžně komerčně dostupný.

Někdy se však můžeme setkat s požadavkem, kdy jediné zařízení musí pracovat jako USB host i jako USB device. Příkladem takového zařízení mohou být digitální fotoaparáty. Po připojení fotoaparátu k počítači musí být možné nahrát a stáhnout multimediální obsah, ale po připojení k tiskárně se musí naopak chovat jako USB host a umožnit tisk obrázků. Pro implementaci této funkce je nutné použít USB Stack host i device. Pokud je pak vyžadováno, aby zařízení pracovalo v obou těchto režimech současně, je jediným možným řešením použití USB Dual Stacku. Jakmile je pak na zařízení využívána jedna funkce, může být další funkce stále kdykoliv k dispozici.

USB On-The-Go (OTG) standard byl navržen tak, aby bylo cílové zařízení schopné podporovat provoz jak v režimu host, tak i jako device pro připojení k PC. Jedná se o rozšíření standardu USB, obsahující potřebné protokoly pro přepínání provozního režimu. Pro USB OTG se používají odlišné konektory, které musí být dostupné v obou zúčastněných zařízeních. V současné době není USB OTG příliš rozšířené, ale pomalu se začíná uplatňovat alespoň v oblasti digitálních fotoaparátů a tiskáren.

Úvod do USB 3.0

USB 3.0 je nejnovější verze standardu USB rozhraní, která vychází ze standardu USB 2.0, ovšem přidáním dvou symetrických párů zvyšuje funkčnost i rychlost přenosu dat. USB 3.0 nebo také rozhraní SuperSpeed využívá dvou jednosměrných komunikačních linek (do USB 2.0 byla komunikace obousměrná) s rychlostí až 5 Gb/s. Nový standard je rovněž navržen pro uspokojení vyšší poptávky po energii.

Výhodou USB 3.0 je zachování zpětné kompatibility, takže veškerá USB 3.0 rozhraní i rozbočovače podporují všechny USB 2.0 rychlosti. Rovněž USB 2.0 konektory lze bez problému použít pro USB 3.0.

Rychlost USB 3.0

Rozhraní USB 3.0 podporuje všechny tři rychlosti, které nabízelo rozhraní USB 2.0, ale navíc přidává komunikaci SuperSpeed s přenosovou rychlostí až 5 Gb/s.

Konektory USB 3.0 obsahují dvě části: vnitřní, která je kompatibilní s USB 2.0, a vnější, která využívá technologii SuperSpeed. SuperSpeed lze tedy použít pouze v případě, kdy obě připojená zařízení podporují tento standard (tedy host i device). Přípustné však je, aby koncové zařízení podporovalo pouze SuperSpeed, ale nikoliv nižší rychlosti. V tom případě je zařízení na USB 2.0 drženo v resetu.

USB 3.0 host musí podporovat různé rychlosti, které jsou vyžadovány připojeným USB zařízením – tato situace je blokově znázorněna na obr. 1.

Rozhraní USB 3.0 – úvod pro vývojáře embedded aplikací 1

Obr. 1 USB 3.0 – podpora různých rychlostí

USB 3.0 Hub komunikuje s hostitelem rychlostí SuperSpeed nebo High Speed tak, jak je znázorněno na obr. 2.

Rozhraní USB 3.0 – úvod pro vývojáře embedded aplikací 2

Obr. 2 Komunikace USB 3.0 Hub s hostitelem

Pokud je však k USB 3.0 hostiteli připojen USB 2.0 rozbočovač, probíhá vzájemná komunikace na rychlosti High Speed. Rovněž komunikace s připojeným USB 3.0 (SuperSpeed enabled) zařízením probíhá pouze na rychlosti High Speed (obr. 3).

Rozhraní USB 3.0 – úvod pro vývojáře embedded aplikací 3

Obr. 3 Komunikace při připojení USB 3.0 hostitele na USB 2.0 Hub

Napájení z USB portu

Užitečnou vlastností všech USB portů je možnost napájení připojeného zařízení, a tedy eliminace externího napájecího zdroje. Nominální napájecí napětí je zde 5 V. V případě rozhraní USB 2.0 je maximální odebíraný proud 500 mA, případně 100 mA pro nízkopříkonová zařízení. USB 3.0 zvyšuje maximální proud až na 900 mA a 150 mA pro nízkopříkonová zařízení.

Nevýhody USB rozhraní

Nasazení USB rozhraní do embedded systémů však s sebou nese i několik zásadních problémů, a to jak technických, tak i obchodních.

Z technického hlediska se jedná o poměrně komplikované datové rozhraní. Programátor však dnes může využít řadu komerčně dostupných USB stacků, které nabízí celá řada dodavatelů embedded IP softwaru, a tím si výrazně zjednodušit práci. Zbývající technické problémy do značné míry souvisejí s dodržováním a prokazatelností dodržení daných standardů.

Z komerčního pohledu se naopak vždy jedná o peníze. Většina z požadovaných informací, nutných pro implementaci USB rozhraní, je volně k dispozici na USB Implementers Forum (USB-IF). Registrace u USB-IF (za cenu přibližně 4.000 USD) však přináší hned celou řadu výhod. Všechna USB zařízení totiž ke své práci potřebují jedinečné Vendor ID a Product ID. Přidělení Vendor ID stojí přibližně 2.000 USD (je součástí členství v USB-IF). Majiteli Vendor ID lze poté přiřadit Product ID. Někteří dodavatelé čipů mají vlastní Vendor ID, a tak svým zákazníkům nabízejí určité bloky Product ID zdarma. Rovněž právo na použití jednoho z několika log a znaků USB s sebou nese jistý poplatek.

Závěr

USB rozhraní se ihned po svém nasazení stalo velmi úspěšným a vyhledávaným standardem. Samotný standard je přitom předmětem neustálých revizí, rozšiřování a zdokonalování. Některé ze standardů se zatím příliš neujaly, jako například USB OTG není zatím příliš rozšířen a například Wireless USB se nerozšířilo vůbec.

USB 3.0 představuje nejnovější verzi standardu s mnohem vyšší rychlostí (5 Gb/s), lepší správou napájení a dostupností většího výkonu pro připojená zařízení. Přestože u USB 3.0 bylo nutné přejít na nový typ konektorů, podařilo se zachovat velmi dobrou zpětnou kompatibilitu. http://blogs.mentor.com/colinwalls

Poznámka: tento článek je založen na prezentaci (Colin Walls, Mentor Graphics: USB 3.0 – An Introduction for Embedded Software Developers) z konference embedded world 2012 v Norimberku.