Sunteți pe pagina 1din 8

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 hostgazd), 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 pachetului
Acesta 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)
PID0 PID1

(MSb)
PID2

PID3

P ID 0 P ID1 P ID 2

P ID 3

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 (<0:6>). 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 powerup, 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)
ADDR0 ADDR1 ADDR2 ADDR3 ADDR4
ADDR5 ADDR6
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)
ENDP0

ENDP1

ENDP2

(MSb)
ENDP3

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.
1ms

1ms
Cadru full/low speed

Cadru high speed

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.
Cmpul
Nr.de bii

(LSb)
PID ADDR
8
7

(MSb)
ENDP CRCs
4
5

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)
Cmpul
PID
Nr.de bii 8
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
125s 0,0625s, 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.

Cmpul
Nr.de bii

(LSb)
PID Numr Cadru
8
11

(MSb)
CRCs
5

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)
Cmpul
PID Date
CRC 16
Nr.de bii 8
0 - 8192
16
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 rerecepionarea 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.