USB Protocol

12
Interfaţa USB Interfaţa USB a fost dezvoltată mai recent, cu scopul de a se rezolva într-o manieră unitară problema comunicaţiei între dispozitive, obţinând în acelaşi timp performanţe superioare care acoperă o gamă largă de funcţii. Acestea pot fi satisfăcute cu un hardware relativ complex, dar usor accesibil în formă integrată. Aşa cum arată denumirea interfaţa are un caracter universal, putând conecta echipamente diferite, cu structuri diferite. Este interesant faptul că, din punctul de vedere clasic, inerfaţa USB nu se bazează pe o arhitectură foarte performantă. De exemplu, magistrala internă a unui calculator oferă performanţe foarte ridicate datorită comunicaţiei simultane pe un număr mare de biţi (comunicaţie paralelă), posibilităţii conectării în paralel a dispozitivelor, folosirii întreruperilor hardware şi acceptării de mai multe dispozitive care pot avea calitatea de “master”. Spre deosebire de aceasta, inerfaţa USB (care, aşa cum sugerează trermenul “bus” ar trebui să aibă caracteristici de magistrală) este de tip serial, nu permite nici conecarea paralelă, nici lucrul în întreruperi, iar calitatea de “master” o poate avea numai calculatorul, prin intermediul cuplorului USB. Având în vedere că numărul de dispozitive conectate în exteriorul calculatorului este mult mai redus şi viteza de transfer relativ mai mică, au fost găsite soluţii acceptabile cu o conexiune serială este simplă şi ieftină, care însă utilizează o frecvenţă mult superioară faţă de cazul interfeţei RS232 (zeci de MHz, faţă de aprox. 10kHz). Problema conectării mai multor dispozitive este rezolvată prin folosirea ramificaţiilor (“split”) de tip “hub”, iar lipsa întreruperilor hardware printr-o frecvenţă de “polling” (interogare) ridicată. Mecanismul întreruperilor permitea, prin intermediul vectorului de întrerupere, identificarea uşoară a echipamentului care dorea să comunice cu dispozitivul “master”. În cazul USB problema identificării este rezolvată prin utilizarea mecanismului de “polling” şi a structurilor de date de tip “pachet”, care sunt vehiculate prin conexiunea serială. Acestea, în afară de transmisia efectivă de date, pot avea rolul de a transmite mesaje sau comenzi, între dispozitive. Pachetele de informaţie conţin coduri de adresă şi mijloace de

description

USB Protocol română

Transcript of USB Protocol

Interfaa USB

Interfaa USB

Interfaa USB a fost dezvoltat mai recent, cu scopul de a se rezolva ntr-o manier unitar problema comunicaiei ntre dispozitive, obinnd n acelai timp performane superioare care acoper o gam larg de funcii. Acestea pot fi satisfcute cu un hardware relativ complex, dar usor accesibil n form integrat. Aa cum arat denumirea interfaa are un caracter universal, putnd conecta echipamente diferite, cu structuri diferite.

Este interesant faptul c, din punctul de vedere clasic, inerfaa USB nu se bazeaz pe o arhitectur foarte performant. De exemplu, magistrala intern a unui calculator ofer performane foarte ridicate datorit comunicaiei simultane pe un numr mare de bii (comunicaie paralel), posibilitii conectrii n paralel a dispozitivelor, folosirii ntreruperilor hardware i acceptrii de mai multe dispozitive care pot avea calitatea de master. Spre deosebire de aceasta, inerfaa USB (care, aa cum sugereaz trermenul bus ar trebui s aib caracteristici de magistral) este de tip serial, nu permite nici conecarea paralel, nici lucrul n ntreruperi, iar calitatea de master o poate avea numai calculatorul, prin intermediul cuplorului USB.

Avnd n vedere c numrul de dispozitive conectate n exteriorul calculatorului este mult mai redus i viteza de transfer relativ mai mic, au fost gsite soluii acceptabile cu o conexiune serial este simpl i ieftin, care ns utilizeaz o frecven mult superioar fa de cazul interfeei RS232 (zeci de MHz, fa de aprox. 10kHz). Problema conectrii mai multor dispozitive este rezolvat prin folosirea ramificaiilor (split) de tip hub, iar lipsa ntreruperilor hardware printr-o frecven de polling (interogare) ridicat.

Mecanismul ntreruperilor permitea, prin intermediul vectorului de ntrerupere, identificarea uoar a echipamentului care dorea s comunice cu dispozitivul master. n cazul USB problema identificrii este rezolvat prin utilizarea mecanismului de polling i a structurilor de date de tip pachet, care sunt vehiculate prin conexiunea serial. Acestea, n afar de transmisia efectiv de date, pot avea rolul de a transmite mesaje sau comenzi, ntre dispozitive. Pachetele de informaie conin coduri de adres i mijloace de sincronizare a receptorilor, pentru identificarea strilor de 0 sau 1 coninute n mesaj.

Pentru stabilirea direciei de transfer se folosete conceptul de token (jeton). Acesta este un mesaj special, cu rol de comand care, n anumite situaii, permite unui dispozitiv s transmit date.

O caracteristic important a interfeei USB este posibilitatea de a lucra pe nivele diferite att din punct de vedere hardware ct i software. Astfel, prin intermediul hub-urilor comunicaia se poate face cu echipamente diferite, dar i cu zone diferite a acestora, identificate prin anumite adrese. Fiecare zon adresat poate avea funcii specifice. La nivel software, interfaa poate lucra cu programe aflate fie la nivelul sistemului de operare fie la nivelul programelor de aplicaie.

n prezent, pentru majoritatea gamei de dispozitive care pot fi conectate la calculator (PC) se folosete (sau exist opiunea) interfaa USB, chiar dac soluiile precedente erau mult mai simple (pentru cuplorul de tastatur i mouse, de exemplu). Se pare c explicaia se afl n universalitatea i flexibilitatea interfeei USB.

Codificarea datelor (informaiei)

Foarte interesant, n cazul USB este modul cum este codificat informaia, prin nivelele de tensiune ale conexiunii seriale. Aceasta folosete modul de codare NRZI (Non Return to Zero Invert) bazat pe existena sau non-existena unor tranziii ale tensiunii, corespunztoare unor anumite momente de timp. Acestea sunt determinate, la rndul lor, prin metoda de sincronizare folosit. n acest context, starea 1 este reprezentat prin lipsa unei tranziii, iar starea 0 prin apariia unei tranziii (fa de starea precedent a nivelului de tensiune). Astfel, un sir de 1 duce la lipsa tranziiilor pe durat mai lung, iar un i de 0 produce tranziii la fiecare pas de timp (stabilit prin mecanismul de sincronizare). Un exemplu de codificare NRZI este artat mai jos.

Aa cum s-a artat mai sus, pentru utilizarea codului NRZI este necesar s existe o corelaie ntre tranziiile de tensiune pe linie i momentele (paii) de timp. Deci, transmitorul produce anumite tranziii de tensiune, corespunztor unor anumite momente de timp care se succed periodic. Fizic, acestea sunt determinate cu ajutorul unui generator de impulsuri. La nivelul receptorului trebuie s existe, de asemenea, un generator de impulsuri, care ns trebuie sincronizat cu cel al transmitorului. Aceasta se poate realiza prin detectarea momentelor (fazelor) tranziiilor, atunci cnd au loc, n cadrul unui mesaj oarecare, oscilatorul generatorului fiind astfel comandat, nct fronturile impulsurilor s fie sincrone cu apariia tranziiilor (utiliznd un bloc electronic cunoscut sub denumirea de PLLPhase Looked Loop adic bucl de blocare a fazei).

Procedura Bit Stuffing

Este evident c mecanismul de sicronizare este cu att mai eficient cu ct tranziiile recepionate sunt mai frecvente, deci cnd cantitatea de zerouri transmise este mai mare. Situaia devine critic atunci cnd se transmit foarte multe stri de unu, deci cnd tranziiile devin foarte rare. Atunci este necesar introducerea de tranziii, ntr-o manier artificial. Aceasta se realizeaz prin procedeul de Bit Stuffing atunci cnd este transmis un pachet USB. Astfel, nainte de codificarea NRZI, este inserat cte un zero, dup fiecare ir de stri de unu consecutive, pentru a fora apariia unei tranziii dup codificarea NRZI. n acest fel se obine cel puin o tranziie, dup fiecare set de apte pai de timp, garantnd meninerea sincronizrii.

Procedura de Bit Stuffing este activat ncepnd cu blocul de date de sincronizare (Sync Pattern). Bitul de 1 cu care se termin Sync Pattern este considerat primul 1 din cadrul secvenei. Totdeauna transmitorul realizeaz Bit Stuffing, exceptnd durata unui EOP (End-of-Packet) de mare vitez (high speed EOP). Dac algoritmul de Bit Stuffing o cere, un bit de zero este inserat, chiar dac acesta este ultimul bit nainte de semnalul de End-of-Packet (EOP). Receptorul trebuie s decodifice datele codificate NRZI, s recunoasc bii de Bit Stuffing i s-i elimine.

Structura de adres

Structura unui sistem USB, din punctul de vedere al protocolului este diferit n raport cu structura fizic (constructiv). Un dispozitiv conectat la un hub (denumit aici i host- gazd), acesta reprezentnd echipamentul de ramificaie al conexiunilor, este referit n acest context sub denumirea de funcie (function), dei sensul propriu al cuvntului are alt semnificaie. n documentaia de specificaie a produsului acest termen este definit astfel: Funcie un dispozitiv USB care ofer o anumit capabilitate (facilitate) dispozitivului host, ca de exemplu, o conexiune ISDN , un microfon cu transmisie numeric, dispozitive audio, comandate numeric, etc. O funcie poate s posede mai multe endpoints (capete). Pentru un anumit dispozitiv, acestea sunt definite astfel: Device endpoints o poriune (zon) unui adresabil a unui dispozitiv USB, care poate fi sursa sau destinaia unui flux de informaie, vehiculat ntre host i dispozitiv.

Cmpurile unui pachet

Specific comunicaiei USB este faptul c datele transmise, indiferent c acestea sunt purttoare de informaie sau sunt necesare protocolului din punct de vedere tehnic (pentru sincronizare, identificarea dispozitivelor, transmisia comenzilor, detecia erorilor, etc.) sunt structurate n pachete. Acestea reprezint uniti de informaie vehiculat i, la rndul lor pot fi organizate n mai multe zone (cmpuri). Dac anumite cmpuri, ca de exemplu, cele de tip SYNC sau PID sunt coninute n mod standard n toate tipurile de pachete, altele sunt specifice numai pentru anumite grupuri particulare de pachete. Astfel cmpul FrameNumber (numr de cadru), apare numai n cadrul pachetelor de tip Start-of-Frame (nceput de cadru). Zona biilor de definiie a pachetului nu este n format codificat. n mod special s-a renunat la codificarea NRZI i bit stuffing din mootive de claritate a reprezentrii. Toate pachetele conin cmpurile de delimitare disticte: Start-of-Packet i End-of-Packet.

Cmpul SYNC

Toate pachetele conin la nceput un cmp de sincronizare (SYNC), care const ntr-o secven codificat astfel nct s asigure o densitate de tranziii maxim. Aceasta permite circuitului de intrare s sincronizeze oscilatorul (clock) local cu faza de tranziie a datelor de intrare. Secvena de SYNC corespunde duratei a 8 bii pentru regimul de vitez full/low i 32 de bii pentru regimul de vitez high. n continuare cmpul SYNC va fi considerat implicit i nu va fi figurat n diagramele structurilor pachetelor. Ultimii doi bii ai cmpului SYNC reprezint un marker i sunt utilizai pentru identificarea sfritului cmpului SYNC i nceputul cmpului PID.

Cmpul de identificare a pachetuluiAcesta este referit ca packet identifier field i urmeaz imediat dup cmpul SYNC al fiecrui pachet USB. Un PID conine patru bii, care indic tipul pachetului, urmai de nc patru bii de verificare. Tot din cmpul PID este determinat formatul pachetului i modul de detecie a erorii de transmisie. Cei patru bii de verificare, permit confirmarea recepionrii corecte a codului PID, pentru ca restul pachetului s poat fi interpretat corect. Sub-cmpul de verificare este generat din codul PID, prin aplicarea complementului fa de unu (prin negarea individual a biilor). Dac biii de verificare nu reprezint negarea biilor de identificare nsemn ca cmpul PID a fost recepionat eronat.

(LSb)

(MSb)

PID0PID1PID2PID3

Cmpurile de adres

Punctul de destinaie a unui trasfer de date, definit ca Function Endpoint este adresat prin utilizarea a dou cmpuri: cmpul de adres a funciei (Address Field) i cmpul adresei captului (endpoint). Pentru ca un mesaj (token) s poat s fie transmis corect, ambele cmpuri trebuie decodificate i interpretate corect.

Cmpul de adres a funciei (Address Field)

Cmpul de adres a funciei (ADDR) specific funcia, prin adresa ei, care reprezint fie sursa fie destinaia unui pachet de date, aceasta depinznd de valoarea codului PID. Aa cum se arat n figura de mai jos, pot fi specificate 128 de adrese, prin cmpul ADDR, coninnd apte bii (). Cmpul ADDR este specificat pentru mesajele de tip: IN, SETUP sau OUT i pentru mesajele speciale de tip PING sau SPLIT. Prin definiie, fiecare valoare ADDR definete o singur funcie. Pn la apariia unei comenzi de reset sau power-up, adresa unei funcii are valoarea implicit zero i apoi adresa trebuie stabilit (programat) de host, n timpul procesului de enumerare. Adresa zero este rezervat ca adres implicit i poate fi folosit pentru alt scop.

(LSb)

(MSb)

ADDR0ADDR1ADDR2ADDR3ADDR4ADDR5ADDR6

Cmpul de adres de capt (Endpoint Field)

Un cmp de suplimentar de patru bii, denumit Endpoint Field (ENDP) permite o adresare mai flexibil, atunci cnd, n cadrul funciilor, sunt necesare mai multe destinaii. Exceptnd adresa zero, valorile corespunztoare capetelor sunt specifice funciilor. Cmpul endpoint sunt definite pentru mesajele (token) de tip: IN, SETUP sau OUT i pentru mesajul special de tip PING.

Din punct de vedere funcional, comunicarea cu funciile este structurat la nivelul unor ci (linii) de comunicaie abstracte (independente de structura fizic), referite cu termenul de pipe. Fiecare funcie trebuie s accepte o linie de comand asignat unui capt (endpoint) cu adresa implicit zero (Default Control Pipe).

Dispozitivele cu vitez redus (lowspeed devices) suport maximum trei ci (pipes) pentru fiecare funcie: o linie de comand implicit, plus dou linii adiionale (fie dou de tip control pipe, fie una control pipe i una de tip interrupt endpoint, fie dou interrupt endpoint). Funciile de tip full-speed i high-speed pot suporta pn la 16 capete de tip IN i OUT.

(LSb)

(MSb)

ENDP0ENDP1ENDP2ENDP3

Cmpul Numr de Cadru

Cmpul pentru Numrul de Cadru conine 11 bii i este incrementat de ctre Host, n funcie de numrul cadrului. Acesta poate crete pn la o valoare maxim de 7FF (H) i este transmis numai n mesajele de tip Start-of-Frame la nceputul fiecrui cadru sau micro-cadru. Figura de mai jos arat structura cadrelor, respectiv a micro-cadrelor, corespunztor variantelor de standard 1.1 i 2.0.

Cmpul de Date

Cmpul de date poate conine ntre zero i 1024 bytes (octei) i trebuie s aib un numr ntreg de bytes. n cadrul fiecrui byte, biii de date sunt decalai n timp (transmisie de tip serial), ncepnd cu bitul cel mai puin semnificativ (LSb Low Significant bit). Formatul cmpului de date i dimensiunea unui pachet de date depinde de tipul de transfer (mesaj), de exemplu, transfer (mesaj) de ntrerupere, transfer (mesaj) de comand sau transfer uniform n timp (isochronous transfer)

Tipuri de pachete

Pachete de tip jeton

Figura de mai jos arat formatul cmpului pentru un pachet de tip jeton. Acesta const ntr-o zon de PID, care specific dac cmpul este de tip IN, OUT sau SETUP eventual de tip ADDR sau ENDP. Pachetul special de tip PING conine aceleai cmpuri ca i alte pachete jeton. Pentru transferurile de tip OUT sau SETUP, cmpurile de adres i de capt (endpoint) definesc n mod univoc destinaia (corespunztoare unui endpoint) care trebuie s primeasc pachetul de date urmtor. Pentru transferul de tip IN acestea definesc n mod univoc care surs (corespunztoare unui endpoint) trebuie s transmit pachetul de date. Pentru transferul de tip PING acestea definesc dispozitivul (specificat prin endpoint) care va rspunde cu un pachet de tip handshake.

Pachetele de tip jeton pot fi generate numai de ctre host. Un pachet de tip IN PID definete un transfer de date de la un dispozitiv (function) ctre host. Pachetele de tip OUT i SETUP, PID definesc transferuri de date de la host ctre un dispozitiv (function). Un pachet de tip PING PID definete un transfer handshake de la dispozitiv ctre host.

Pachetele de tip jeton i SOF (Start-of-Frame) sunt delimitate de un cod EOP (End-of-Pachet) dup trei bytes ai cmpului pachetului de date. Dac la decodificarea pachetului este recunoscut codul unui jeton sau SOF, dar care nu se termin cu un EOP, dup trei bytes, acesta trebuie considerat invalid i trebuie ignorat de ctre receptor.

(LSb)

(MSb)

CmpulPIDADDRENDPCRCs

Nr.de bii8745

Pachete de tip Handshake

Pachetele de tip handshake, aa cum se arat mai jos, constau numai n codul PID. Acestea sunt utilizate pentru a raporta starea transferului de date i pot returna valori (coduri) indicnd recepia cu succes a datelor, acceptarea sau respingerea unei comenzi, controlul fluxului de date i condiiile de oprire. Codurile handshake pot fi returnate numai dac tipul de transfer respectiv suport controlul fluxului de date. Codurile handshake sunt totdeauna returnate n faza (etapa) de handshake a transferului i pot fi returnate, n locul datelor, n faza de transfer de date. Pachete handshake sunt delimitate de un EOP dup un byte al cmpului pachetului. Dac la decodificarea pachetului este recunoscut codul handshake, dar care nu se termin cu un EOP dup un byte, acesta trebuie considerat invalid i trebuie ignorat de ctre receptor.

(LSb) (MSb)

CmpulPID

Nr.de bii8

Pachete de tip Start-of-Frame

Pachetele de nceput de cadru (Start-of-Frame - SOF) sunt generate de host cu o rat nominal, la fiecare 1,00 ms ( 0,0005 ms pentru conexiunea de tip full-speed i la fiecare 125(s ( 0,0625(s, pentru conexiunea de tip high-speed. Pachetele SOF constau ntr-un cod PID, care indic tipul de pachet, urmat de cmpul numrului de cadru, reprezentat pe 11 bii, aa cum este reprezentat mai jos.

(LSb)

(MSb)

CmpulPIDNumr CadruCRCs

Nr.de bii8115

Pachetul SOF face obiectul unui transfer de tip jeton n sensul propriu i nu date suplimentare. Acesta distribuie (transfer) o informaie de marcare (SOF marker), nsoit de numrul de cadru, sincronizat la anumite intervale de timp corespunztoare nceputului fiecrui cadru. Toate dispozitivele (funciile) de tip full-speed i high-speed, incluznd pe cele de tip hub pot recepiona pachete SOF. La recepionarea pachetelor jeton SOF dispozitivele (funciile) receptoare nu returneaz nici un mesaj. De aceea nu poate fi garantat primirea codului SOF.

Pachete de date

Un pachet de date const ntr-un cod PID, un cmp de date coninnd zero sau mai muli bytes de date (informaie) i un cod CRC, aa cum este indicat mai jos. Exist patru tipuri de pachete de date, identificate de coduri PID diferite: DATA0, DATA1, DATA2 i MDATA. Dou dintre codurile PID, pentru DATA0 i DATA1, sunt astfel definite pentru a putea realiza sincronizarea tranziiilor pe calea de date. Toate cele patru coduri PID pot fi utilizate n secvena de PID pentru dispozitive (endpoints) cu mare lrgime de band (high bandwidth) i transfer uniform n timp de mare vitez (high-speed isochronous transfer). Trei dintre codurile PID (MDATA, DATA0, DATA1) sunt utilizate n transferuri de tip Split. Datele trebuie transmise totdeauna printr-un numr ntreg de bytes. Codul CRC este calculat numai n funcie de cmpul de date din pachet i nu include codul PID, care are propriul su cmp de verificare. ntinderea maxim a cmpului de date pentru dispozitivele low-speed este de 8 bytes. Pentru dispozitivele full-speed este 1023 bytes, iar pentru dispozitivele high-speed 1024 bytes.

(LSb)

(MSb)

CmpulPIDDateCRC 16

Nr.de bii80 - 819216

Pachete tip PING

Pachete de tip PING formeaz o clas de pachete utilizate numai pentru dispozitive de tip high-speed. Acestea sunt utilizate pentru determinarea vitezei de transfer.

Nivele de transfer

Nivelul handshake

Procedurile de handshake sunt diferite, corespunzator diferitelor tipuri de conexiuni. Un dispozitiv de tip host poate s trimit unui dispozitiv de tip funcie o cerere de interogare de tip IN sau OUT. n funcie de starea dispozitivului funcie, rspunsul poate s permit dispozitivului host s scrie date n registrul tampon (buffer) al primului sau s anuleze transferul. Acelai lucru este posibil n situaia inversat.

Corecia erorilor

Apariia unei erori poate fi detectat datorit cmpului CRC al unui pachet, dar anumite cmpuri posed propriile mijloace de verificare. Cmpul PID conine informaia redundant a biilor negai i eroarea poate fi detectat chiar dac convenia de bit-stuffing nu este respectat. Trebuie notat totui, c n cazul transferului izocron, care are loc ntr-o manier unidirecional, nu exist nici o posibilitate pentru trimiterea pachetelor de tip NAK i re-recepionarea datelor, de aceea acest tip de transmisie este rezervat pentru dispozitivele cu comunicaie de tip stream, unde controlul erorii nu este important (camere de luat vederi, etc.).

Ramificaia conexiunilor USB

n sensul clasic, conexiunea USB permite numai transferul ntre dou dispozitive aflate la capete (host i function). Dezvoltarile ulterioare (USB 2.0) au permis ramificarea unei conexiuni USB cu ajutorul unui dispozitiv de tip Hub. Acesta conine circuite electonice care permit identificarea dispozitivelor interconectate i transferul ntre acestea. Dipozitivele plasate la captul ramificaiilor pot lucra pe un nivel de vitez mai redus.

Comunicaia prin intermediul unui hub conine secvene specifice de comunicaie, ntre host i hub, numite split transctions. Acestea conin dou pri: strat-split i complete-split, necesare nceperii i ncheierii unui ciclu de comunicaie.

n diagrama de mai jos sunt indicate categoriile (nivelele) de comunicaie, ntre host i hub, respectiv ntre hub i device.

Nivelele de protocol abstracte

Este important de remarcat, c modul de comunicaie USB poate fi reprezentat, la nivel abstract, pe mai multe nivele, aa cum se obinuieste, de exemplu, n tehnica reelelor de date. n general, aceste nivele pot reprezenta conexiuni cablate, plci (circuite) de comunicaie i ci de comunicaie (pipes) ntre programe de sistem, programe de aplicaie sau proceduri ale sistemului de operare.

Aceste nivele sunt legturi logice (abstracte sau simbolice) i reprezint asocieri ntre un capt (adres sau locaie) al unui dispozitiv i programe localizate la nivel de host. O astfel de cale de comunicaie (pipe) poate avea diferite atribute, de exemplu, poate transfera date sub form de iruri (stream pipe) sau date sub form de mesaje (message pipe). Calea de nivel zero (Pipe 0) este rezervat i este prevzut n software-ul asociat oricrui dispozitiv.

Cadru full/low speed

1ms

1ms

Cadru high speed

_1240644646.unknown

_1240644647.unknown

_1240644645.unknown

_1240644644.unknown