240 likes | 371 Views
USB Universal Serial Bus – univerz ální sériová sběrnice USB Implementers Forum – definice průmyslového standardu specifikace se zabývá mechanickou, elektrickou, spojovou a transportní vrstvou a komunikačním protokolem tři verze: 1.0, 1.1, 2.0 zdarma dostupné, nepatří mezi IEEE
E N D
USB • Universal Serial Bus – univerzální sériová sběrnice • USB Implementers Forum – definice průmyslového standardu • specifikace se zabývá mechanickou, elektrickou, spojovou a transportní vrstvou a komunikačním protokolem • tři verze: 1.0, 1.1, 2.0 • zdarma dostupné, nepatří mezi IEEE • www.usb.org • smrz.chrudim.cz/usb/usbspec.zip
Vlastnosti USB • sériová poloduplexní sběrnice • 1,5 Mbaud (low speed), 12Mbaud (full speed), 480Mbaud (high-speed USB 2.0) • diferenciální vedení, galvanické spojení s napájením (Vbus) a zemí (GND) • zařízení mohou být napájena přes Vbus a GND, I<500mA, nutný sleep mode • linková vrstva používá NRZI kanálové kódování a bit stuffing • pakety chráněny cyklickou redundantní kontrolou CRC16 nebo CRC5 • spojení hostitele (host, hub) a zařízení (device) • de facto se nejedná o sběrnici, ale o propojení PTP (point-to-point) • síťová topologie stromového typu, v každém uzlu přepínač (switch, zván hub) • z pohledu transportní vrstvy se vše jeví jako roury mezi odesílatelem a příjemcem • zařízení max. 16 rour (pipe) • enumerace – počáteční vyjednávání, Plug and Play • max. 127 zařízení připojitelných ke kořenovému přepínači
Elektrická vrstva • nositelem informace je rozdíl napětí mezi vodiči D+ a D- • volba low-speed a full-speed se děje pull-up rezistorem
Elektrická vrstva Galvanické spojení D+, D-, Vbus, GND Impedanční přizpůsobení
Kanálové kódování • NRZI – Non-Return to Zero Invert • lidsky: odesíláš-li nulu, invertuj linku • sousední úrovně se liší: logická 0 • sousední úrovně jsou stejné: logická 1
Bit stuffing – bitová výplň • po šesti jedničkách dat musí přijít nula • zabraňuje klidu na lince (1 se v NRZI kóduje jako neaktivita)
SYNC – synchronizace na začátku paketu • před začátkem paketu je linka v klidovém stavu (log. 1) • start paketu začíná odesláním bytu 0x80 (LSb first) • 0x80 (LSb first 0000 0001) po provedení NRZI je 1010 1011 • tím se synchronizují hodiny vysílače a přijímače
End of Packet – konec paketu • vysílač musí dát přijímači jasně najevo, že končí přenos • signalizace musí být jednoznačná • nesmí se předpokládat porozumění datům (tím by se porušila vrstvená hierarchie) • EOP = na obou linkách je elektricky zem (GND)
Řazení proudových filtrů • na každou operaci s daty máme bitový proudový filtr Vysílač D+ serializer bit stuffing NRZI zesilovač invertor D- EOP CRC16 čistá data D+ deNRZI bit unstuffing deserializer Zesilovač komparátor D- EOP CRC16 CRC OK Přijímač
Souhrn a porovnání • zatím se USB jeví jako sériová linka • používá dva kroucené vodiče D+ a D- • přidává kanálové kódování NRZI a bit stuffing • dovede přenést neomezený počet bitů • start bit je nahrazen sekvencí 0x80 • stop bit je nahrazen EOP signálem (SE0 – single ended 0) • nemáme vyřešen směr komunikace a přepínání • zatím nemáme prostředek, jak oddělit data od příkazů • musíme ještě definovat protokol (příkazy)
Obecný formát paketu • pakety dělíme na 16 druhů, nejdůležitější jsou: • DATA – přenos dat • IN, OUT – řízení směru komunikace • SETUP – podobné jako OUT, následující data jsou příkaz • ACK, NAK – handshake pakety pro vzájemné potvrzování • Typ paketu je určen číslem PID (Packet IDentifier). • Komunikace je řízená hostitelem. Zařízení odesílá data pouze po výslovné žádosti hostitele (IN paket).
Datový paket SYNC 0x80 PID 0x4B DATA CRC16 2 byty EOP (SE0) IN, OUT, SETUP SYNC 0x80 PID ADRESA 7 bitů ENDPOINT 4 bity CRC5 5 bitů EOP (SE0) ACK, NAK SYNC 0x80 PID 0xD2 EOP (SE0)
CRC 16 • Cyklická redundantní kontrola • generuje se z čistých dat pomocí posuvného registru • vznikne-li v datech kumulovaná chyba (16 bit), je odhalena • má-li vzniknout neodhalitelná chyba, musí být poruchy vurčitém vztahu, což je u náhodných jevů nepravděpodobné
CRC 16 • posuvný registr má délku 16 bitů a počáteční hodnotu 0 • generující polynom je binární číslo o stejné délce jako registr • jednička se nasouvá zleva do registru • pokud je datový bit a vysunutý bit shodný, provede se XOR generujícího polynomu a registru • CRC spočítaný z dat a správného CRC je konstantní! var crc:word; {pocatecni hodnota je 0} procedure crcpipe(bit:byte); var lsb:byte; begin lsb:=crc and 1; crc:=(crc shr 1) or $8000; if lsb=bit then crc:=crc xor $A001; end;
Konečná délka přenosu • stále řešíme stejný problém – MTU (maximum transfer unit) • připravíme si čistá data do bufferu a chceme je přenést na druhý konec linky • opatříme data začátkem, koncem a eventuelně potvrzením správého přenosu (handshake) • nutnost rozdělit data na menší části, protože médium není ochotno velké kusy přenést • po rozdělení na menší části musíme každou z nich též opatřit začátkem, koncem a potvrzením
Konečná délka přenosu • koncové signály musejí být jednoznačné (jako je EOP) • malé části – pakety, obsahují začátek (SYNC), konec (SE0) a potvrzení (ACK packet od příjemce) • pakety mají MTU 8, 16, 32, 64 až 4096 bytů • velké části – transakce – po jejich ukončení jsou data od odesílatele úspěšně přenesena k příjemci v původní podobě • transakce iniciují prvním OUT nebo IN paketem nebo též SETUP paketem • transakce se ukončují DATA paketem bez dat
Transakce • setup stage – žádost o data (SETUP vs. SYNC 0x80) • data stage – přenos dat (konec při data<MTU vs. EOP) • status stage – potvrzení (zero DATA vs. ACK)
Příkazy • Get Descriptor – vyčtení informací o zařízení • Set Address – nastavení adresy zařízení • Set Configuration – volba jedné z více konfigurací • Set Interface – výběr rozhraní (složené z rour endpointů) • třídně specifické požadavky (HID, Mass Storage, …)
Deskriptory • Device Descriptor – základní údaje o zařízení, verzi protokolu • Configuration Descriptor – kolik má zařízení možných konfigurací (napájené z Vbus, externě) • Interface Descriptor – různá rozhraní • Endpoint Descriptor – více rour k cílové aplikaci 2 endpointy – levé a pravé sluchátko 2 interface – sluchátka nebo reproduktory 2 konfigurace – provoz z baterie nebo ze sítě
Hierarchie deskriptorů • při žádosti o Configuration descriptor se vrátí celý podstrom prohledaný do hloubky
Enumerace • inicializace po připojení zařízení k počítači • vyčte se prvních 8 bytů Device Descriptoru • provede se reset (SE0 po dobu 10ms) • nastaví se adresa zařízení (Set Address) • provede se vyčtení celého Device Descriptoru • následuje čtení Configuration Descriptoru (prvních 8 bytů) • hostitel přečte celý Configuration Descriptor
Shrnutí • USB poskytuje dostatečný rozptyl rychlostí (1,5Mbaud až 480MBaud) • data jsou chráněna proti rušení (diferenciální vedení, CRC) • nativně PnP, power management, variabilita interface • největší přínos je PnP a 5V napájení • téměř žádná z vymožeností se nepoužívá • nesnadná implementace, drahé převodníky • overhead, přílišný počet Deskriptorů • inženýrská ignorance, USB se degraduje na sériovou linku