Vous êtes sur la page 1sur 26

1 Sisteme de intrare/ieire i echipamente periferice

5. INTERFAA USB





Aceast lucrare prezint magistrala USB i interfaa care se bazeaz pe aceast magis-
tral. Astfel, se prezint urmtoarele: noiunile de baz ale interfeei USB, conectorii i cablu-
rile utilizate, tipurile de transfer, modelul comunicaiei, protocolul magistralei, structura pa-
chetelor, descriptorii USB i comenzile USB. De asemenea, lucrarea introduce clasa dispozi-
tivelor HID i descrie modul n care se poate realiza comunicaia ntre calculator i dispoziti-
vele din aceast clas.
5.1. Prezentare general a magistralei USB
Elaborarea magistralei USB (Universal Serial Bus) a nceput n anul 1995 de ctre un
grup de firme care cuprindea Compaq, Digital, IBM, Intel, Microsoft, NEC i Northern
Telecom. Aceste firme s-au unit n asociaia USB Implementers Forum (USB-IF,
http://www.usb.org), care a publicat prima versiune a standardului USB. Aceast asociaie,
care s-a extins cu un numr mare de firme, continu s actualizeze standardele USB pentru
controlerele USB i diferitele categorii de periferice care se pot conecta la magistrala USB.
Una din motivaiile elaborrii magistralei USB a fost de a simplifica interconexiunile
dintre calculator i periferice prin reducerea numrului de cabluri care se conecteaz la calcu-
lator i utilizarea aceluiai tip de conector pentru diferite categorii de periferice. ntr-un sistem
coninnd o magistral USB, perifericele se pot conecta n serie sau ntr-o topologie sub for-
m de stea pe mai multe nivele, un singur periferic fiind conectat la un port USB al calculato-
rului gazd. A alt motivaie pentru elaborarea magistralei USB a fost asigurarea unei rate de
transfer mai ridicate dect cele permise de porturile seriale i paralele. Dei la primele versi-
uni (1.0 i 1.1) ale magistralei USB rata maxim de transfer era de numai 12 Mbii/s, aceast
rat a crescut n mod semnificativ (pn la 480 Mbii/s) la versiunea 2.0 a magistralei USB.
Un alt scop a fost de a oferi posibilitatea adugrii perifericelor la calculator ntr-un mod sim-
plu, fr deschiderea carcasei acestuia, fr deconectarea tensiunii de alimentare i fr ren-
crcarea sistemului de operare.
Calculatorul echipat cu un port USB detecteaz adugarea unui nou periferic i de-
termin n mod automat resursele necesare acestuia, inclusiv driverul software i rata de trans-
fer. Unul din perifericele calculatorului, de exemplu, tastatura sau monitorul, se conecteaz la
conectorul USB al calculatorului. Alte periferice se conecteaz la un distribuitor (hub) aflat
n cadrul tastaturii sau monitorului, fiind posibil realizarea unor conexiuni sub form de ar-
bore. Perifericele se pot afla la o distan de pn la 5 m unele fa de altele sau fa de un
distribuitor. n total, se pot conecta pn la 127 de periferice USB la un calculator, iar acestea
sunt alimentate cu o tensiune de +5 V prin cablul USB. Toate perifericele USB utilizeaz un
conector standard, eliminndu-se necesitatea utilizrii unor conectori diferii pentru fiecare tip
de periferic.
Componentele principale ale unui sistem care conine o magistral USB sunt dispozitive-
le USB, cablurile USB i programele de sistem. Dispozitivele de pe magistrala USB sunt conec-
tate fizic la calculatorul gazd utiliznd o topologie sub form de stea pe mai multe nivele, dup
cum se ilustreaz n figura 5.1.
Exist dou categorii de dispozitive USB: distribuitoare i funcii. Un distribuitor
reprezint o clas special de dispozitiv USB, care asigur puncte de conectare suplimentare
pentru alte dispozitive USB. Aceste puncte de conectare se numesc porturi. Calculatorul gaz-
d conine un distribuitor rdcin, care asigur unul sau mai multe puncte de conectare. n

2 5. Interfaa USB
plus, acest distribuitor conine controlerul magistralei USB; fiecare magistral are un singur
controler.

Figura 5.1. Topologia magistralei USB.
Figura 5.2 prezint un distribuitor USB tipic. Unul din porturile distribuitorului per-
mite conectarea la calculatorul gazd sau la un distribuitor de pe nivelul superior al topologi-
ei. Fiecare din celelalte apte porturi permit conectarea la un distribuitor sau la o funcie de pe
nivelul inferior. Distribuitoarele pot fi conectate n cascad pn la cinci nivele. Distribuitorul
detecteaz conectarea i deconectarea dinamic a unui periferic i asigur o putere de cel pu-
in 0,5 W pentru fiecare periferic n timpul iniializrii. Sub controlul programului de sistem,
distribuitorul poate asigura o putere suplimentar pentru funcionarea perifericelor, pn la
2,5 W (un curent de 0,5 A). Unele periferice, cum este tastatura, mouse-ul sau creionul optic,
pot fi alimentate numai cu tensiunea furnizat de cablul magistralei, n timp ce altele pot avea
o surs proprie de alimentare.

Figura 5.2. Porturile unui distribuitor USB tipic.
Un distribuitor const din dou pri: un controler i un repetor. Controlerul conine
registre de interfa pentru comunicaia cu calculatorul gazd. Comenzile de stare i de con-
trol permit calculatorului gazd configurarea distribuitorului, monitorizarea i controlul portu-
rilor sale. Repetorul este un comutator controlat prin protocol ntre portul de nivel superior i
porturile de nivel inferior. De asemenea, repetorul monitorizeaz semnalele de pe porturi i
gestioneaz tranzaciile care i sunt adresate. Toate celelalte tranzacii sunt repetate la dispozi-
tivele ataate. Fiecare port de nivel inferior poate fi validat individual i poate fi conectat la
dispozitive cu vitez ridicat sau cu vitez redus. Porturile cu vitez redus sunt izolate de
semnalele cu vitez ridicat.
Figura 5.3 ilustreaz modul n care distribuitoarele USB asigur conectarea ntr-un
sistem de calcul tipic.

3 Sisteme de intrare/ieire i echipamente periferice

Figura 5.3. Utilizarea distribuitoarelor USB ntr-un sistem de calcul tipic.
O funcie este un dispozitiv USB care poate transmite sau recepiona date sau infor-
maii de control pe magistral. Acest dispozitiv trebuie s rspund la cererile de tranzacie
transmise de calculatorul gazd. O funcie este implementat n mod obinuit ca un periferic
separat conectat printr-un cablu la un port al unui distribuitor. Un singur dispozitiv fizic poate
conine ns funcii multiple. De exemplu, o tastatur i un dispozitiv de trasare pot fi combi-
nate ntr-un singur dispozitiv fizic. n cadrul unui asemenea dispozitiv compus, funciile indi-
viduale sunt ataate la un distribuitor, iar acest distribuitor intern este conectat la magistrala
USB.
Fiecare funcie conine informaii de configuraie care descriu posibilitile sale i
resursele necesare. Aceste informaii sunt transmise calculatorului gazd ca rspuns la o tran-
zacie de control. naintea utilizrii unei funcii, aceasta trebuie configurat de calculatorul
gazd. Aceast configurare presupune alocarea unei limi de band n cadrul magistralei
USB i selectarea opiunilor specifice de configuraie.
Programele de sistem asigur o tratare uniform a sistemului de I/E de ctre toate
programele de aplicaii. Prin ascunderea detaliilor de implementare hardware, se asigur por-
tabilitatea programelor de aplicaii. Programele de sistem gestioneaz conectarea i deconec-
tarea dinamic a perifericelor. Faza de conectare, numit enumerare, implic comunicarea cu
un periferic pentru determinarea driverului de dispozitiv care trebuie ncrcat i asignarea unei
adrese unice acestuia. n timpul funcionrii, calculatorul gazd iniiaz tranzacii cu anumite
periferice. Informaiile sunt transmise pe magistral sub forma unor pachete, care sunt recep-
ionate de fiecare periferic. Pachetele conin adresa perifericului destinaie; doar acest perife-
ric va accepta o anumit tranzacie i va rspunde n mod corespunztor.
Controlerul magistralei USB, aflat pe placa de baz a calculatorului gazd, are propri-
ile specificaii. n cazul primelor versiuni ale magistralei USB, existau dou specificaii pentru
aceste controlere. Prima dintre ele, Universal Host Controller Interface (UHCI), a fost elabo-
rat de firma Intel i permitea simplificarea circuitelor, partea mai complex fiind cea de sof-
tware. A doua specificaie, Open Host Controller Interface (OHCI), a fost elaborat de firme-
le Compaq, Microsoft i National Semiconductor; aceast specificaie permitea simplificarea
prii de software, partea mai complex fiind cea de hardware. Odat cu introducerea versiu-
nii 2.0 a magistralei USB, a fost necesar elaborarea unei noi specificaii pentru controlerele
de magistral. Aceast specificaie, numit Enhanced Host Controller Interface (EHCI), a fost
elaborat de mai multe firme, printre care Intel, Compaq, NEC, Microsoft i Lucent Techno-
logies.
Exist specificaii separate pentru diferite categorii (clase) de periferice USB. O clas
USB reprezint un grup de periferice sau interfee cu atribute sau servicii similare. De exem-
plu, dou periferice sau interfee sunt incluse n aceeai clas dac utilizeaz iruri de date cu
acelai format pentru comunicaia cu calculatorul gazd. Dintre clasele de periferice USB se
amintesc urmtoarele: dispozitive audio, dispozitive de comunicaie (modemuri, telefoane
analogice i digitale, adaptoare de reea), dispozitive de interaciune cu utilizatorul (HID
Human Interface Device), dispozitive de captare a imaginilor fixe (aparate foto digitale), im-
primante, memorii de mas, dispozitive video.

4 5. Interfaa USB
5.2. Versiuni USB
Versiunea 1.0 a standardului USB a fost publicat n anul 1996, aceasta fiind urmat
de versiunea 1.1, adoptat n anul 1998. Rata de transfer maxim specificat de aceste versi-
uni este de 12 Mbii/s. Aceast rat de transfer este suficient pentru periferice cum sunt tele-
fonul sau difuzorul digital (care conine un convertor digital-analogic). Pentru periferice lente,
cum este tastatura sau creionul optic, a fost prevzut un canal de vitez redus, cu rata de
transfer de 1,5 Mbii/s.
Versiunea 2.0 a standardului USB a fost publicat n anul 2000. Aceast versiune
(numit i Hi-Speed USB) permite creterea ratei de transfer cu un factor de 40 fa de versiu-
nea 1.1, de la 12 Mbii/s pn la 480 Mbii/s. Aceast extensie a specificaiilor USB permite
utilizarea acelorai cabluri, conectori i drivere software. Utilizatorii pot beneficia ns de o
varietate suplimentar de periferice, de exemplu, camere video digitale, scanere, imprimante,
adaptoare ISDN, uniti de discuri magnetice sau uniti de discuri optice. Figura 5.4 ilustrea-
z simbolul magistralei USB 2.0.

Figura 5.4. Simbolul magistralei USB 2.0.
Perifericele USB 2.0 cu viteze de transfer superioare sunt conectate la un distribuitor
USB 2.0. Un distribuitor USB 2.0 accept tranzacii de vitez ridicat i furnizeaz datele cu
ratele corespunztoare perifericelor USB 2.0 i perifericelor USB 1.1. Posibilitatea de a utiliza
transferuri cu vitez ridicat este negociat cu fiecare periferic, iar dac un periferic nu permi-
te aceste transferuri, legtura cu acest periferic va funciona la o vitez mai redus de 12
Mbii/s sau 1,5 Mbii/s. Aceasta implic o complexitate mai ridicat a distribuitoarelor i ne-
cesit memorarea temporar a datelor recepionate. Un distribuitor USB 2.0 are porturi de
ieire pentru transferuri cu vitez ridicat i porturi de ieire pentru transferuri cu vitez nor-
mal.
Specificaiile USB On-The-Go (OTG) au fost elaborate ca un supliment al specifi-
caiilor USB 2.0 cu scopul de a permite conexiuni directe ntre echipamente mobile, fr utili-
zarea unui calculator. Magistrala USB standard utilizeaz o arhitectur master/slave, la care
calculatorul gazd are rolul de master, iar un periferic are rolul de slave. Doar calculatorul
gazd poate iniia transferuri de date pe magistral. Perifericele pot doar rspunde la cererile
de transfer iniiate de calculatorul gazd. n cazul versiunii USB OTG, un periferic poate avea
fie rolul de master, fie cel de slave. Rolurile de master i de slave se pot schimba n mod di-
namic n timpul funcionrii cu un protocol numit Host Negotiation Protocol (HNP). Astfel,
orice periferic compatibil cu specificaiile USB OTG poate iniia transferuri de date pe magis-
tral. Condiia este ca cele dou echipamente care comunic ntre ele s fie conectate direct i
nu printr-un distribuitor.
Un exemplu de utilizare a versiunii USB OTG este cel al unui terminal PDA (Perso-
nal Digital Assistant) sau telefon mobil, care poate avea rolul implicit de slave pentru un cal-
culator PC (n scopul sincronizrii datelor) sau rolul implicit de master pentru o imprimant.
Un alt exemplu este cel al unei imprimante, care poate avea rolul de slave pentru un terminal
PDA i rolul de master pentru un aparat foto digital, dac permite citirea fiierelor de la apa-
ratul foto n scopul tipririi lor. Figura 5.5 ilustreaz simbolul magistralei USB OTG.

Figura 5.5. Simbolul magistralei USB OTG.

5 Sisteme de intrare/ieire i echipamente periferice
Specificaiile versiunii 3.0 a standardului USB au fost finalizate de USB 3.0 Promoter
Group n anul 2008 i au fost transferate asociaiei USB Implementers Forum. Aceast versi-
une introduce magistrala SuperSpeed, care permite un nou mod de transfer cu viteza maxim
de 5 Gbii/s. n modul SuperSpeed, se utilizeaz dou canale simplex difereniale n plus fa
de canalul diferenial existent pentru modul convenional. Tehnologia este similar cu cea a
versiunii 2.0 a magistralei PCI Express. Se utilizeaz aceeai codificare 8b/10b, ceea ce per-
mite o rat maxim de transfer de 500 MB/s; conform specificaiilor, este posibil obinerea
unei rate de transfer de 400 MB/s dac se ia n considerare ntrzierea introdus de execuia
protocolului. Primele produse bazate pe aceast versiune a magistralei USB au nceput s apa-
r n cursul anului 2009. Figura 5.6 ilustreaz simbolul magistralei USB 3.0.

Figura 5.6. Simbolul magistralei USB 3.0.
5.3. Conectori i cabluri
Specificaiile iniiale ale interfeei USB definesc dou tipuri de fie, amplasate la ca-
petele unui cablu USB, i dou tipuri de mufe, amplasate ntr-un distribuitor sau periferic.
Fiele i mufele pot fi de tip A sau de tip B.
Distribuitoarele (de exemplu, cele ale unui calculator) conin o muf rectangular de tip
A, cu patru pini. Perifericele se conecteaz la aceast muf printr-o fi rectangular de tip A
(figura 5.7). Cablurile care sunt ataate permanent la periferice conin o fi de tip A. De obicei
ns, perifericele sunt conectate printr-un cablu detaabil. Perifericele conin o muf ptrat de tip
B, iar cablul care conecteaz perifericele la un distribuitor conine o fi de tip B la captul care
se conecteaz la periferic i o fi de tip A la captul care se conecteaz la distribuitor. n acest
fel, nu este posibil conectarea incorect a cablului.

Figura 5.7. Fie i mufe utilizate la interfaa USB.
Specificaiile USB 2.0 au fost modificate dup publicarea acestora pentru a include o
fi i o muf de tip B de dimensiuni mai reduse. Aceti conectori, numii mini-B, conin cinci
pini i se utilizeaz pentru echipamente mobile cum sunt terminale PDA, telefoane mobile i
aparate foto digitale. Aceste echipamente conin o muf mini-B, iar cablurile utilizate pentru
conectarea acestor echipamente la un calculator conin o fi mini-B la un capt i o fi de
tip A la cellalt capt. Dimensiunile conectorilor mini-B sunt de aproximativ 7x3 mm. Ulteri-
or, a fost definit i un conector mini-A. Figura 5.8 ilustreaz o fi mini-B alturat cu o fi
de tip A.
n anul 2007 au fost definii conectori de tip A i de tip B de dimensiuni i mai redu-
se, numii micro-A i micro-B. Aceti conectori au aceeai lime ca i conectorii mini-B, dar

6 5. Interfaa USB
grosimea este redus la aproximativ jumtate. Noii conectori sunt destinai nlocuirii conecto-
rilor mini-A i mini-B, care nu se mai utilizeaz la noile echipamente mobile.

Figura 5.8. Fi USB de tip mini-B alturat cu o fi de tip A.
Specificaiile USB OTG descriu noi tipuri de socluri, mini-AB i micro-AB. Aceste
socluri permit, printr-o proiectare mecanic adecvat, conectarea fie a unei fie de tip A, fie a
unei fie de tip B cu dimensiunea corespunztoare. Tipul fiei inserate este detectat cu ajuto-
rul unui pin suplimentar ID, care este conectat la mas ntr-un conector de tip A i este neco-
nectat ntr-un conector de tip B. Atunci cnd ntr-un soclu AB se insereaz un conector de tip
A, soclul va furniza tensiune de alimentare cablului i echipamentul cu soclul AB va avea
rolul de master. Atunci cnd ntr-un soclu AB se insereaz un conector de tip B, soclul va fi
alimentat cu tensiunea cablului i echipamentul cu soclul AB va avea rolul de slave. Specifi-
caiile USB OTG descriu i diferite tipuri de cabluri care utilizeaz conectori de dimensiuni
reduse sau o combinaie ntre un conector de dimensiuni reduse i unul de dimensiuni norma-
le. Figura 5.9 ilustreaz un soclu micro-AB i un soclu micro-B.

Figura 5.9. Socluri micro-AB i micro-B.
Pentru transferul semnalelor i a tensiunii de alimentare pe magistral, se utilizeaz
un cablu cu patru fire, ilustrat n figura 5.10. Semnalele difereniale de date se transmit pe li-
niile D+ i D-, formate din dou fire rsucite. Semnalul de ceas este codificat mpreun cu
datele. Metoda de codificare utilizat este numit NRZI (Non Return to Zero Invert). n cazul
acestei metode, un bit de 1 este reprezentat printr-o lips a schimbrii nivelului tensiunii, iar
un bit de 0 este reprezentat printr-o schimbare a nivelului tensiunii, fr revenire la tensiunea
de referin (zero) ntre biii codificai. Sunt inserai bii suplimentari n datele transmise pen-
tru a asigura tranziii suficiente ale semnalelor, n scopul garantrii unei sincronizri corecte.
Este inserat un bit de 0 dup fiecare ase bii consecutivi de 1 nainte de codificarea datelor,
pentru a fora o tranziie n irul de date. Fiecare pachet de date este precedat de un cmp de
sincronizare pentru a permite receptorilor sincronizarea ceasului lor de recepie.

Figura 5.10. Cablul USB.
Cablul USB transmite i tensiunea de alimentare pentru periferice pe liniile V
BUS
i
GND. Tensiunea pe linia V
BUS
este de +5 V la surs. Pentru a asigura nivele de tensiune corec-
te la intrarea perifericelor i o impedan de terminare corespunztoare, se utilizeaz termina-

7 Sisteme de intrare/ieire i echipamente periferice
tori de magistral la fiecare capt al cablului. Terminatorii de magistral permit, de asemenea,
detectarea conectrii sau deconectrii unui periferic i diferenierea ntre perifericele cu vitez
normal i cele cu vitez redus. La captul cablului din partea distribuitorului, se utilizeaz
terminatori rezistivi de 15 K , prin intermediul crora liniile D+ i D ale cablului sunt co-
nectate la mas. La captul cablului din partea perifericului, se utilizeaz ca terminator o re-
zisten de 1,5 K , prin intermediul creia una din liniile D+ sau D este conectat la o surs
de tensiune cuprins ntre 3 V i 3,6 V. Pentru un periferic cu vitez normal (12 Mbii/s) re-
zistena este conectat la linia D+, n timp ce pentru un periferic cu vitez redus rezistena
este conectat la linia D.
Exist dou tipuri de cabluri USB. Primul tip se utilizeaz pentru comunicaia de vi-
tez redus (1,5 Mbii/s). Acest tip de cablu trebuie s fie ataat permanent de echipamentul
care l utilizeaz. Al doilea tip de cablu este destinat pentru comunicaia cu viteza normal (12
Mbii/s) i nalt (480 Mbii/s). Acest tip de cablu poate fi ataat permanent de echipament sau
poate fi detaabil. Deosebirea dintre cele dou tipuri de cabluri este c, n cazul cablului pen-
tru viteza redus nu este necesar utilizarea unor fire rsucite (standardul recomand ns uti-
lizarea unor asemenea fire). Un cablu detaabil trebuie s fie terminat cu o fi de tip A la un
capt i cu o fi de tip B la cellalt capt. Standardul USB specific diferite caracteristici
electrice ale cablurilor utilizate pentru comunicaia de vitez ridicat.
Pentru identificarea simpl a firelor din cablurile USB, standardul specific utilizarea
culorilor indicate n tabelul 5.1 pentru aceste fire. Acest tabel indic i asignarea pinilor
conectorilor la semnalele magistralei.
Tabelul 5.1. Asignarea pinilor conectorilor la semnalele magistralei USB i culorile firelor cablurilor.
Nr. pin Semnal Culoare
1 VBUS Rou
2 D- Alb
3 D+ Verde
4 GND Negru
Observaie
Nu este posibil interconectarea a dou calculatoare printr-un cablu USB obinuit.
Chiar dac s-ar utiliza un cablu cu doi conectori de tip A, prin interconectarea calcula-
toarelor ar exista dou controlere USB ntr-un sistem, ceea ce nu este permis. Exist
ns cabluri speciale care conin o punte USB sub forma unui circuit integrat, prin in-
termediul cruia este posibil comunicaia ntre dou calculatoare gazd.
5.4. Tipuri de transfer
Arhitectura USB permite patru tipuri de transferuri de date: de control, de ntrerupere,
de date voluminoase i izocrone.
Transferurile de control se utilizeaz de driverele calculatorului gazd pentru
configurarea dispozitivelor care sunt ataate la sistem. Alte drivere pot utiliza transferuri de
control n moduri specifice implementrii.
Transferurile de ntrerupere se utilizeaz pentru date care trebuie transferate cu o n-
trziere limitat. Transferul acestor date poate fi solicitat de un dispozitiv n orice moment, iar
rata de transfer pe magistral nu poate fi mai redus dect cea specificat de dispozitiv. Datele
pentru care se utilizeaz transferurile de ntrerupere constau din notificarea unor evenimente,
din caractere sau coordonate care sunt organizate pe unul sau mai muli octei. Un exemplu l
reprezint coordonatele de la un dispozitiv indicator (mouse, tablet grafic). Datele interacti-
ve pot avea anumite limite ale timpului de rspuns care trebuie garantate de magistrala USB.
Transferurile de date voluminoase (bulk) se utilizeaz cu periferice cum sunt me-
morii de mas, imprimante sau scanere. Aceste date sunt secveniale. Fiabilitatea transferuri-
lor este asigurat la nivel hardware prin utilizarea unui cod detector de erori i reluarea unui
transfer cu erori de un numr de ori. Rata de transfer poate varia n funcie de alte activiti de
pe magistral.

8 5. Interfaa USB
Transferurile izocrone (isos egal, chronos timp) se utilizeaz pentru datele care
trebuie furnizate cu o anumit rat de transfer constant i a cror sincronizare trebuie garan-
tat. Izocron are semnificaia cu durat egal sau care apare la intervale regulate. Datele
izocrone sunt generate n timp real i trebuie furnizate cu rata cu care sunt recepionate pentru
a pstra sincronizarea lor. Pe lng rata de transfer impus, pentru datele izocrone trebuie res-
pectat i ntrzierea maxim cu care acestea sunt furnizate. Furnizarea la timp a datelor izo-
crone este asigurat cu preul unor pierderi poteniale n irul de date. Deci, erorile de trans-
misie nu sunt corectate prin mecanisme hardware, cum ar fi retransmiterea lor. n concluzie,
transferurile izocrone se caracterizeaz prin furnizarea la timp a datelor i prin lipsa retransmi-
terii lor n cazul unor erori, deoarece datele ntrziate nu mai sunt utile. Spre deosebire de
transferurile izocrone, transferurile asincrone se caracterizeaz prin faptul c fiabilitatea
transmiterii datelor este mai important dect asigurarea sincronizrii. De aceea, se utilizeaz
retransmiterea datelor n cazul unor erori, chiar dac apar ntrzieri din aceast cauz.
Un exemplu tipic de date izocrone este reprezentat de imaginile video. Dac rata de
transfer a acestor iruri de date nu este meninut, va avea loc pierderea unor date datorit de-
pirii capacitii bufferelor. Chiar dac datele sunt furnizate de magistrala USB cu rata adec-
vat, ntrzierile introduse de programe pot afecta negativ aplicaiile care utilizeaz aceste
date, cum sunt aplicaiile pentru video-conferine.
irurilor de date izocrone li se aloc o poriune dedicat a limii de band a magistra-
lei USB. Aceast magistral este proiectat i pentru o ntrziere minim a transferurilor de
date izocrone.
5.5. Modelul comunicaiei USB
Un sistem USB permite comunicaia dintre un program de aplicaie (client) rulat pe
un calculator gazd i unul sau mai multe dispozitive USB conectate la acest calculator. Un
dispozitiv fizic USB conine o interfa cu magistrala USB, un dispozitiv logic USB i o func-
ie. O funcie USB poate avea cerine diferite ale fluxului de comunicaie pentru diferite inter-
aciuni ntre acea funcie i calculatorul gazd. Prin separarea diferitelor fluxuri de comunica-
ie cu o funcie USB, sistemul USB asigur o utilizare mai eficient a magistralei. Fluxurile
de comunicaie utilizeaz magistrala USB pentru realizarea comunicaiei ntre programul de
aplicaie i funcia USB. Fiecare flux de comunicaie se termin la un punct terminal
(endpoint) dintr-un dispozitiv USB.
Un punct terminal este o parte a unui dispozitiv USB, reprezentnd punctul de sfrit
al fluxului de comunicaie dintre calculatorul gazd i dispozitiv. Fiecare dispozitiv logic
USB este format din mai multe puncte terminale independente. Fiecare dispozitiv logic are o
adres unic, care este asignat de sistem n momentul conectrii dispozitivului la magistrala
USB. Fiecare punct terminal dintr-un dispozitiv USB este identificat printr-un numr unic,
care este atribuit la proiectarea dispozitivului. De asemenea, fiecare punct terminal are o
anumit direcie a fluxului de date: intrare (IN), pentru transferul datelor de la dispozitivul
USB la calculatorul gazd, sau ieire (OUT), pentru transferul datelor de la calculatorul gazd
la dispozitivul USB. Combinaia dintre adresa dispozitivului, numrul punctului terminal i
direcia acestuia permite identificarea unic a fiecrui punct terminal.
Punctele terminale conin buffere de intrare sau de ieire prin intermediul crora se
realizeaz comunicaia ntre calculatorul gazd i dispozitivul USB. De exemplu, dac pro-
gramul de aplicaie rulat pe calculatorul gazd transmite un pachet adresat unui anumit dispo-
zitiv USB, acest pachet va fi depus n bufferul unui punct terminal de ieire al dispozitivului.
Ulterior, controlerul dispozitivului va citi din buffer pachetul recepionat. Dac dispozitivul
trebuie s transmit date la calculatorul gazd, nu poate depune datele direct pe magistral,
deoarece toate tranzaciile sunt iniiate de calculatorul gazd. Dispozitivul va depune datele n
bufferul unui punct terminal de intrare, iar aceste date vor fi transferate la calculatorul gazd
atunci cnd calculatorul va transmite un pachet de intrare prin care solicit transferul unor
date, dac acestea sunt disponibile.
Fiecare dispozitiv trebuie s conin cel puin punctele terminale cu numrul 0 (att
punctul terminal de intrare, ct i cel de ieire). Aceste puncte terminale se utilizeaz pentru

9 Sisteme de intrare/ieire i echipamente periferice
transferul informaiilor de control i de stare n timpul fazei de enumerare i n timpul n care
dispozitivul este operaional i conectat la magistrala USB. Dispozitivele cu vitez redus (1,5
Mbii/s) pot conine doar dou puncte terminale suplimentare, pe lng cele dou cu numrul
0. Dispozitivele cu vitez normal (12 Mbii/s) sau vitez ridicat pot conine un numr ma-
xim de 15 puncte terminale de intrare i 15 puncte terminale de ieire, pe lng cele dou
puncte terminale cu numrul 0.
O colecie a unor puncte terminale dintr-un dispozitiv USB implementeaz o interfa-
. O asemenea interfa indic clasa dispozitivului USB, iar aceast clas va determina drive-
rul generic de dispozitiv care va fi utilizat de sistemul de operare pentru comunicaia cu punc-
tele terminale care implementeaz interfaa respectiv.
Comunicaia dintre programul de aplicaie de pe calculatorul gazd i un punct termi-
nal dintr-un dispozitiv USB se realizeaz printr-o conexiune logic numit conduct (pipe).
O conduct reprezint o legtur ntre un buffer din memoria calculatorului gazd i un punct
terminal din dispozitivul USB. Fiecrei conducte i se asociaz anumite informaii, cum sunt
rata de transfer necesar, tipul transferului i caracteristicile punctului terminal asociat, ca di-
recia i dimensiunea bufferului.
Exist dou moduri de comunicaie printr-o conduct: ir sau mesaj. n modul ir,
datele nu au o structur definit de specificaiile USB. Datele sunt transferate secvenial i au
o direcie predefinit, de intrare sau de ieire. Conductele de tip ir permit transferuri de ntre-
rupere, de date voluminoase sau izocrone. Aceste conducte sunt controlate fie de calculatorul
gazd, fie de dispozitivul USB. n modul mesaj, datele au o anumit structur definit de spe-
cificaiile USB. Cu toate acestea, coninutul datelor transferate printr-o conduct de tip mesaj
nu este interpretat de controlerul USB. Aceste conducte sunt controlate de calculatorul gazd
i permit doar transferuri de control, n ambele direcii.
Comunicaia ntre punctele terminale de intrare i de ieire cu numrul 0 i calculato-
rul gazd se realizeaz printr-o conduct special, numit conduct implicit de control.
Aceast conduct de tip mesaj este disponibil imediat dup ce dispozitivul USB este conectat
i resetat, asigurnd o legtur bidirecional pentru interogarea dispozitivului de ctre pro-
gramele de sistem ale calculatorului gazd i transmiterea informaiilor de configuraie de la
dispozitiv ctre calculatorul gazd. Dup configurarea dispozitivului USB, vor fi disponibile
alte conducte necesare pentru transferurile de date; conducta implicit de control va fi utiliza-
t n continuare de programele de sistem ale calculatorului gazd pentru transferurile de con-
trol.
5.6. Protocolul USB
Similar cu alte interfee mai recente, interfaa USB utilizeaz un protocol bazat pe
pachete. Toate transferurile sunt iniiate de controlerul USB al calculatorului gazd. Tranzac-
iile de pe magistral implic transmisia a patru tipuri de pachete:
Pachet antet (simbol token);
Pachet de date;
Pachet de confirmare (handshake);
Pachet special.
Fiecare tranzacie ncepe n momentul n care controlerul USB transmite, pe baza unei
planificri, un pachet antet care descrie tipul tranzaciei, direcia acesteia, adresa dispozitivului
USB i numrul punctului terminal. Sursa tranzaciei transmite apoi un pachet de date coninnd
datele care trebuie transferate, sau poate indica faptul c nu are date de transmis prin faptul c
pachetul de date nu conine informaii utile. n general, destinaia rspunde cu un pachet de
confirmare indicnd dac transferul s-a terminat cu succes sau dac punctul terminal nu este
disponibil.
5.6.1. Cmpurile pachetelor USB
Principalele cmpuri ale pachetelor USB sunt descrise n continuare.

10 5. Interfaa USB
Cmpul de sincronizare
Toate pachetele ncep cu un cmp de sincronizare (SYNC), care este utilizat de circui-
tele receptorului pentru sincronizarea cu ceasul transmitorului. Cmpul de sincronizare are o
lungime de 8 bii pentru viteza normal/joas i 32 de bii pentru viteza ridicat. Acest cmp
conine un numr de 6 sau 30 de tranziii succesive de la valoarea 1 la valoarea 0 sau invers,
urmate de un marcaj de doi bii care este utilizat pentru a identifica sfritul cmpului de sin-
cronizare.
Cmpul de identificare al pachetului
Cmpul de identificare al pachetului (PID) urmeaz imediat dup cmpul de sincroni-
zare. Cmpul PID conine patru bii care indic tipul pachetului urmai de patru bii de control
care asigur decodificarea corect a cmpului PID. Biii de control conin complementul fa
de 1 al biilor care reprezint tipul pachetului. Formatul cmpului PID este ilustrat n continu-
are, unde nPID
i
reprezint complementul fa de 1 al bitului PID
i
.
7 6 5 4 3 2 1 0
nPID3 nPID2 nPID1 nPID0 PID3 PID2 PID1 PID0
Calculatorul gazd i toate funciile USB execut o decodificare complet a tuturor
biilor recepionai ai cmpului PID. Dac un cmp PID este recepionat cu valori incorecte ale
biilor de control sau cu valori nedefinite ale tipului pachetului, se presupune c a fost alterat
i restul pachetului este ignorat de receptor.
Tabelul 5.2 indic tipurile de pachete, codificarea i descrierea acestora. Pentru sim-
plitate, pachetele speciale nu sunt detaliate.
Tabelul 5.2. Codificarea i descrierea tipurilor de pachete USB.
Tip pachet Subtip pachet PID [3..0] Descriere
Antet (Token)
OUT 0001
Adresa i numrul punctului terminal ntr-o
tranzacie de ieire
IN 1001
Adresa i numrul punctului terminal ntr-o
tranzacie de intrare
SOF 0101 Indicator de nceput al cadrului i numrul cadrului
SETUP 1101
Adresa i numrul punctului terminal ntr-o
tranzacie de control n faza de setare
Date
DATA0 0011 Identificator pentru pachetele de date cu numr par
DATA1 1011
Identificator pentru pachetele de date cu numr
impar
DATA2 0111
Identificator pentru pachetele de date la tranzaciile
izocrone de intrare de vitez ridicat i cu limea de
band ridicat
MDATA 1111
Identificator pentru pachetele de date la tranzaciile
izocrone de ieire de vitez ridicat i cu limea de
band ridicat
Confirmare
ACK 0010
Confirmarea recepionrii fr erori a pachetului de
date
NAK 1010
Dispozitivul receptor nu poate primi date sau
dispozitivul transmitor nu poate transmite date
STALL 1110 Punctul terminal este oprit
NYET 0110 Nu s-a recepionat nc un rspuns de la receptor
Special XY00
Identificator al unui pachet special; XY poate fi 01,
10 sau 11
Cmpul de adres
Cmpul de adres (ADDR) specific adresa funciei USB care este sursa sau destinaia
unui pachet de date. Acest cmp are o lungime de 7 bii, permind specificarea a pn la 128
de adrese. Fiecare adres definete o singur funcie. Adresa 0 este rezervat ca adres impli-
cit i nu poate fi asignat n mod explicit unei funcii. La punerea sub tensiune i resetarea

11 Sisteme de intrare/ieire i echipamente periferice
unei funcii, adresa acesteia va avea valoarea implicit 0. Calculatorul gazd trebuie s seteze
adresa funciei n timpul procesului de enumerare.
Cmpul punctului terminal
Cmpul punctului terminal (ENDP) permite o adresare mai flexibil a funciilor la
care sunt necesare mai multe puncte terminale. Acest cmp are o lungime de 4 bii, ceea ce
permite adresarea a pn la 16 puncte terminale. Dispozitivele cu vitez redus pot avea doar
dou puncte terminale suplimentare pe lng punctul terminal cu numrul 0.
Cmpul de date
Cmpul de date poate conine ntre zero i 1024 de octei, n funcie de tipul transferu-
lui. Biii de date din cadrul fiecrui octet sunt transmii pe magistral ncepnd cu bitul cel
mai puin semnificativ.
Cmpurile de control ciclic redundant
Aceste cmpuri conin codurile de control ciclic redundant (CRC) utilizate pentru
verificarea integritii diferitelor cmpuri din pachetele de antet i de date. Cmpul PID nu
este inclus n codul CRC al unui pachet. Codurile CRC pentru pachetele de antet i de date
asigur detectarea tuturor erorilor de un singur bit i de doi bii. n cazul n care codul CRC
calculat de receptor difer de codul transmis ntr-un cmp CRC, receptorul va ignora cmpuri-
le protejate i, n majoritatea cazurilor, ntregul pachet. Standardul USB specific polinoamele
generatoare utilizate pentru calculul codurilor CRC. Pentru pachetele de antet se utilizeaz un
cmp CRC de 5 bii (CRC5), iar pentru pachetele de date se utilizeaz un cmp CRC de 16
bii (CRC16).
Cmpul de sfrit al pachetului
Cmpul de sfrit al pachetului (EOP) indic sfritul unui pachet prin valoarea 0 pe
durata a doi bii, urmat de valoarea 1 pe durata unui bit.
5.6.2. Formatul pachetelor USB
Aceast seciune prezint formatul pachetelor de antet, SOF, de date i de confirmare.
Pachete de antet
Aceste pachete sunt transmise doar de calculatorul gazd. Structura unui pachet de
antet este ilustrat n figura 5.11.

Figura 5.11. Structura unui pachet USB de antet.
Cmpul de identificare al pachetului, PID, poate specifica un pachet de antet cu subti-
pul IN, OUT sau SETUP. Pachetele cu subtipul IN sau OUT informeaz dispozitivul USB
asupra direciei transferului care urmeaz: intrare (citire de ctre calculatorul gazd), respectiv
ieire (scriere de ctre calculatorul gazd). Un pachet cu subtipul SETUP se utilizeaz la n-
ceputul transferurilor de control. n cazul pachetelor cu subtipul OUT sau SETUP, cmpurile
ADDR i ENDP identific n mod unic punctul terminal care va recepiona urmtorul pachet
de date. n cazul unui pachet cu subtipul IN, cmpurile ADDR i ENDP identific punctul ter-
minal care va transmite un pachet de date. Cmpul CRC5 conine codul CRC pentru cmpuri-
le ADDR i ENDP.

12 5. Interfaa USB
Pachete SOF
Pentru sincronizarea ntregului sistem USB, calculatorul gazd transmite cte un pa-
chet SOF (Start Of Frame) la fiecare interval de timp corespunztor nceputului unui cadru
sau micro-cadru. Un cadru reprezint un interval de timp de 1 ms 0,0005 ms i este definit
pentru magistrala USB cu viteza normal (12 Mbii/s). Un micro-cadru reprezint un interval
de timp de 125 s 0,0625 s i este definit pentru magistrala USB cu viteza ridicat (480
Mbii/s). Un pachet SOF const dintr-un cmp de sincronizare, un cmp PID i un cmp de 11
bii reprezentnd numrul cadrului, dup cum se ilustreaz n figura 5.12. n cazul magistralei
USB cu viteza ridicat, numrul cadrului va fi acelai pentru opt pachete SOF consecutive, pe
durata unei perioade de 1 ms.

Figura 5.12. Structura unui pachet USB SOF.
Toate funciile i distribuitoarele USB recepioneaz pachetele SOF. Recepia acestor
pachete nu va iniia generarea unor pachete de confirmare de ctre receptor.
Pachete de date
Informaiile propriu-zise sunt transmise pe magistrala USB n pachetele de date. Un
pachet de date const din cmpul de sincronizare SYNC, un cmp de identificare al pachetului
PID, un cmp de date, un cmp CRC de 16 bii i cmpul de sfrit al pachetului EOP (figura
5.13). Codul CRC se calculeaz numai din cmpul de date. Datele sunt transmise ntr-un nu-
mr ntreg de octei. Pentru dispozitivele cu vitez redus, lungimea maxim a cmpului de
date este de 8 octei. Pentru dispozitivele cu vitez normal (12 Mbii/s) lungimea maxim a
cmpului de date este de 1023 octei, iar pentru cele de vitez ridicat (480 Mbii/s) lungimea
maxim este de 1024 octei.

Figura 5.13. Structura unui pachet USB de date.
Pachete de confirmare
Pachetele de confirmare constau doar din cmpul de sincronizare SYNC, un cmp de
identificare al pachetului PID i cmpul de sfrit al pachetului EOP (figura 5.14). Aceste pa-
chete se utilizeaz pentru a raporta starea unei tranzacii de date prin subtipul returnat n cm-
pul PID. Subtipul unui pachet de confirmare poate fi ACK (Acknowledge), NAK (Negative
Acknowledge), STALL (Stall) sau NYET (No Response Yet). Aceste subtipuri sunt descrise n
tabelul 5.2.

Figura 5.14. Structura unui pachet USB de confirmare.
5.7. Descriptori USB
Dispozitivele USB au o ierarhie de descriptori care descriu atributele lor. Aceti de-
scriptori sunt utilizai pentru raportarea atributelor dispozitivelor calculatorului gazd. Un de-
scriptor reprezint o structur de date cu un format definit de standardul USB. Fiecare de-

13 Sisteme de intrare/ieire i echipamente periferice
scriptor ncepe cu un octet care conine numrul total de octei ai descriptorului, urmat de un
octet care indic tipul descriptorului. Pe lng descriptorii standard, dispozitivele USB pot
returna i descriptori specifici unei clase de dispozitiv sau unui productor.
Principalele tipuri de descriptori standard sunt urmtoarele:
Descriptori de dispozitiv;
Descriptori de configuraie;
Descriptori de interfa;
Descriptori ai punctelor terminale;
Descriptori de tip ir de caractere.
Ierarhia de descriptori are ca rdcin la nivelul superior descriptorul de dispozitiv.
La nivelul urmtor se afl descriptorii de configuraie; exist cte un asemenea descriptor
pentru fiecare configuraie a dispozitivului. Pentru fiecare configuraie pot exista unul sau mai
muli descriptori de interfa, n funcie de numrul de interfee ale configuraiei respective. n
sfrit, pentru fiecare punct terminal al fiecrei interfee exist cte un descriptor al punctului
terminal (figura 5.15).

Figura 5.15. Ierarhia de descriptori ai unui dispozitiv USB.
Descriptorul de dispozitiv conine informaii generale despre dispozitivul USB; aceste
informaii se refer la toate configuraiile dispozitivului. Un dispozitiv USB poate avea un
singur descriptor de dispozitiv. Descriptorul de dispozitiv conine informaii ca revizia stan-
dardului USB cu care este conform dispozitivul, clasa din care face parte dispozitivul, subcla-
sa dispozitivului, identificatorul productorului (asignat de organizaia USB-IF), identificato-
rul produsului (asignat de productor), numrul de configuraii posibile ale dispozitivului.
Un dispozitiv USB poate avea mai multe configuraii, caracterizate prin atribute dife-
rite. Un descriptor de configuraie caracterizeaz o anumit configuraie a dispozitivului.
Acest descriptor conine informaii ca numrul de interfee ale configuraiei, dac dispozitivul
este alimentat de la magistrala USB sau de la o surs de alimentare proprie i curentul maxim
consumat de dispozitiv n cazul n care acesta este alimentat de la magistrala USB.
n faza de enumerare, calculatorul gazd citete descriptorii de configuraie i pe baza
lor valideaz o anumit configuraie a dispozitivului. La un moment dat, poate fi validat o
singur configuraie. De exemplu, un dispozitiv poate avea o configuraie pentru alimentarea
de la magistral i o configuraie pentru alimentarea de la o surs proprie. Dac dispozitivul
este conectat la un calculator alimentat de la reea, driverul dispozitivului poate selecta prima
configuraie, permind alimentarea dispozitivului fr conectarea acestuia la o surs de ali-
mentare separat. Dac dispozitivul este conectat la un calculator portabil, driverul poate se-

14 5. Interfaa USB
lecta a doua configuraie, care necesit conectarea dispozitivului la o surs de alimentare pro-
prie.
Un descriptor de interfa caracterizeaz un set de puncte terminale din cadrul unei
configuraii, care sunt grupate ntr-o interfa. De exemplu, considerm un dispozitiv multi-
funcional coninnd un fax, un scaner i o imprimant. Unul din descriptorii de interfa poa-
te caracteriza funcia de fax a dispozitivului, un al doilea descriptor de interfa poate caracte-
riza funcia de scaner, iar un al treilea descriptor de interfa poate caracteriza funcia de im-
primant. Un dispozitiv poate avea mai muli descriptori de interfa validai simultan. Un
descriptor de interfa nu este accesibil direct, ci este returnat ca parte a unui descriptor de
configuraie.
O interfa poate conine setri alternative, care permit modificarea punctelor termina-
le asociate interfeei sau a caracteristicilor acestora dup configurarea dispozitivului. n mod
implicit, pentru o interfa este selectat setarea alternativ cu numrul zero. Setrile alterna-
tive permit modificarea unei interfee a dispozitivului n timp ce alte interfee rmn n funci-
une, ceea ce este mai avantajos dect utilizarea unor configuraii diferite. Dac o configuraie
conine setri alternative pentru una sau mai multe din interfeele sale, pentru fiecare setare
trebuie s se includ n descriptorul de configuraie un descriptor de interfa separat i de-
scriptorii asociai ai punctelor terminale.
Un descriptor de interfa conine informaii ca numrul interfeei, numrul setrii
alternative a interfeei, numrul punctelor terminale utilizate de interfa, codul clasei i codul
subclasei (asignate de organizaia USB-IF). Numrul punctelor terminale utilizate de interfa
nu include punctul terminal zero.
Fiecare punct terminal utilizat de o interfa are cte un descriptor propriu. n princi-
piu, un descriptor al unui punct terminal conine informaiile necesare calculatorului gazd
pentru determinarea cerinelor limii de band a punctului terminal. Descriptorul unui punct
terminal conine informaii ca numrul (adresa) punctului terminal, direcia acestuia, tipul
transferului utilizat pentru comunicarea cu punctul terminal, dimensiunea maxim a pachete-
lor pe care le poate transmite sau recepiona punctul terminal i intervalul de timp pentru inte-
rogarea punctului terminal de ctre calculatorul gazd n vederea transferurilor de date. De-
scriptorii punctelor terminale nu sunt accesibili direct, fiind returnai ca parte a unui descriptor
de configuraie. Punctul terminal zero nu are un descriptor propriu.
Descriptorii de tip ir de caractere sunt opionali. Aceti descriptori furnizeaz in-
formaii despre dispozitivul USB ntr-o form care poate fi afiat direct. Referirea la descrip-
torii de tip ir de caractere se realizeaz prin valori de index din cadrul descriptorilor de dis-
pozitiv, de configuraie i de interfa. n cazul n care pentru un dispozitiv USB nu se utili-
zeaz descriptori de tip ir de caractere, toate referinele la asemenea descriptori trebuie setate
la zero n descriptorii de dispozitiv, de configuraie i de interfa.
Descriptorii de tip ir de caractere au o structur standard. Primul octet din fiecare
descriptor indic dimensiunea n octei a descriptorului, iar al doilea octet indic tipul descrip-
torului. n cadrul unui descriptor, irul de caractere ncepe de la deplasamentul 2. Fiecare ir
de caractere este codificat n formatul UNICODE, n modul definit de Consoriul Unicode
(http://www.unicode.com). irurile de caractere nu sunt terminate cu un octet NULL. Dimen-
siunea (n octei) a unui ir se poate determina ca fiind L2, unde L este dimensiunea n octei
a descriptorului. Descriptorii pot conine iruri de caractere n diferite limbi. Atunci cnd se
solicit un descriptor de tip ir de caractere, limba dorit trebuie specificat printr-un identifi-
cator al limbii (LANGID) de 16 bii.
5.8. Procesul de enumerare
Atunci cnd un dispozitiv USB este conectat la magistrala USB sau este deconectat
de la magistral, calculatorul gazd execut un proces numit enumerare pentru a determina
modificrile aprute n configuraia sistemului USB. La conectarea unui dispozitiv USB la
magistral, se execut urmtoarele operaii:
1. Distribuitorul la care este conectat dispozitivul detecteaz conectarea acestuia cu aju-
torul rezistenei utilizate ca terminator al magistralei de la captul dispozitivului. Dis-

15 Sisteme de intrare/ieire i echipamente periferice
tribuitorul informeaz calculatorul gazd asupra modificrii aprute. n acest moment,
dispozitivul USB este alimentat de la magistral i portul la care este conectat este
dezactivat.
2. Calculatorul gazd determin tipul modificrii aprute i portul la care a aprut modi-
ficarea prin interogarea distribuitorului.
3. Calculatorul gazd ateapt un timp de cel puin 100 ms pentru ca tensiunea de ali-
mentare a dispozitivului s devin stabil, dup care transmite o comand de validare
i de resetare a portului. n cazul unui dispozitiv cu vitez ridicat (480 Mbii/s), aces-
ta iniiaz un protocol electric special pentru stabilirea unei legturi cu aceast vitez.
Dac acest protocol electric nu este iniiat sau nu se termin cu succes, comunicaia se
va realiza cu viteza normal (12 Mbii/s).
4. Dup terminarea procedurii de resetare, portul este validat. Dispozitivul se afl acum
n starea implicit i poate absorbi un curent de maxim 100 mA de pe linia V
BUS
a
magistralei. Dispozitivul va rspunde la tranzaciile cu adresa implicit zero.
5. Calculatorul gazd solicit descriptorul de dispozitiv, iar dispozitivul transmite acest
descriptor prin intermediul conductei implicite.
6. Calculatorul gazd asigneaz o adres unic dispozitivului.
7. Calculatorul gazd solicit descriptorii de configuraie, iar dispozitivul transmite cal-
culatorului gazd aceti descriptori.
8. Pe baza informaiilor de configuraie, calculatorul gazd asigneaz o anumit configu-
raie dispozitivului. Dispozitivul se afl acum n starea configurat i toate punctele
terminale ale acestei configuraii sunt configurate conform caracteristicilor specificate
n descriptorii acestora. Dispozitivul este pregtit pentru utilizare i poate absorbi de
pe linia V
BUS
a magistralei curentul specificat pentru configuraia selectat.
Observaie
Detaliile operaiilor executate n timpul procesului de enumerare pot varia n funcie
de sistemul de operare.
Atunci cnd dispozitivul USB este deconectat de la un port USB, distribuitorul in-
formeaz calculatorul gazd asupra modificrii aprute. Calculatorul gazd dezactiveaz por-
tul respectiv i actualizeaz informaiile sale despre topologia magistralei.
5.9. Comenzi USB
Fiecare dispozitiv USB trebuie s rspund la comenzile USB transmise de calculato-
rul gazd. Comenzile sunt transmise de calculatorul gazd pe conducta implicit de control,
iar rspunsul este transmis de dispozitiv pe aceeai conduct. Specificaiile USB definesc o
serie de comenzi standard care trebuie implementate de fiecare dispozitiv USB. n plus, pot
exista comenzi specifice pentru diferite clase de dispozitive. De asemenea, productorii dis-
pozitivelor pot defini comenzi proprii.
Transmiterea i execuia unei comenzi USB poate necesita dou sau trei faze de trans-
fer. n prima faz, calculatorul gazd transmite comanda i parametrii acesteia ntr-un pachet
SETUP utiliznd un transfer de control. n faza a doua, care este opional, se transfer date
de la calculatorul gazd la dispozitivul USB sau invers. n faza a treia, se transfer informaii
de stare de la dispozitivul USB la calculatorul gazd sau invers. Direcia transferului din faza
de stare este invers direciei transferului din faza de date. Dac faza de date lipsete, n faza
de stare direcia transferului este de la dispozitivul USB la calculatorul gazd.
Fiecare pachet SETUP conine opt octei. Structura unui pachet SETUP este ilustrat
n tabelul 5.3. Dimensiunea cmpurilor este indicat n octei. Biii din cadrul octetului care
descrie caracteristicile comenzii sunt indicai prin b7..b0.

16 5. Interfaa USB
Tabelul 5.3. Structura unui pachet SETUP.
Offset Cmp Dimensiune Descriere
0 bmRequestType 1 Caracteristici ale comenzii:
b7: Direcia transferului de date
0 = De la calculator la dispozitiv
1 = De la dispozitiv la calculator
b6..b5: Tipul comenzii
0 = Standard
1 = Specific clasei
2 = Definit de productor
3 = Rezervat
b4..b0: Destinaia comenzii
0 = Dispozitiv
1 = Interfa
2 = Punct terminal
3 = Alt destinaie
4..31 = Rezervat
1 bRequest 1 Codul comenzii
2 wValue 2 Parametru; variaz n funcie de comand
4 wIndex 2 Parametru; n mod tipic, numrul interfeei sau
al punctului terminal
6 wLength 2 Numrul octeilor de transferat n faza de date
Comenzile USB pot fi destinate dispozitivelor, interfeelor sau punctelor terminale. n
funcie de destinaie, aceeai comand poate avea efecte diferite.
5.9.1. Comenzi standard destinate dispozitivelor
Comenzile standard care sunt destinate dispozitivelor sunt prezentate sintetic n tabe-
lul 5.4. Coloana Data indic datele transferate n faza de date.
Tabelul 5.4. Comenzi standard destinate dispozitivelor.
bmRequestType bRequest wValue wIndex wLength Data
1000 0000
GET_STATUS
(0x00)
0 0 2
Stare
dispozitiv
0000 0000
CLEAR_FEATURE
(0x01)
Selector
caracteristic
0 0
0000 0000
SET_FEATURE
(0x03)
Selector
caracteristic
0 0
0000 0000
SET_ADDRESS
(0x05)
Adres
dispozitiv
0 0
1000 0000
GET_DESCRIPTOR
(0x06)
Tip i index
descriptor
0 sau
LANGID
Lungime
descriptor
Descriptor
0000 0000
SET_DESCRIPTOR
(0x07)
Tip i index
descriptor
0 sau
LANGID
Lungime
descriptor
Descriptor
1000 0000
GET_CONFIGURATION
(0x08)
0 0 1
Numr
configuraie
0000 0000
SET_CONFIGURATION
(0x09)
Numr
configuraie
0 0
Comanda Get_Status destinat unui dispozitiv returneaz un cuvnt de stare de la dis-
pozitiv la calculatorul gazd n timpul fazei de date. Structura cuvntului returnat este ilustrat
mai jos.
15 2 1 0
Rezervat
Remote
Wakeup
Self
Powered
Bitul Self Powered indic prin valoarea 1 faptul c dispozitivul este alimentat de la o
surs proprie. Dac acest bit este 0, dispozitivul este alimentat de la magistrala USB. Bitul

17 Sisteme de intrare/ieire i echipamente periferice
Self Powered nu poate fi modificat prin comenzile Set_Feature sau Clear_Feature. Bitul
Remote Wakeup indic prin valoarea 1 faptul c dispozitivul are caracteristica Remote
Wakeup validat. Atunci cnd aceast caracteristic este validat, dispozitivul poate determina
trecerea calculatorului gazd din starea inactiv (Suspend) n starea activ. Atunci cnd bitul
Remote Wakeup este 0, caracteristica Remote Wakeup a dispozitivului este invalidat. Bitul
Remote Wakeup poate fi modificat prin comenzile Set_Feature i Clear_Feature utiliznd
selectorul DEVICE_REMOTE_WAKEUP (cu valoarea 0x01).
Comenzile Clear_Feature i Set_Feature destinate unui dispozitiv permit invalidarea,
respectiv validarea anumitor caracteristici ale dispozitivului. Cmpul wValue al comenzilor
trebuie s conin selectorul caracteristicii respective. Caracteristicile care pot fi invalidate sau
validate sunt Remote Wakeup, cu selectorul DEVICE_REMOTE_WAKEUP (0x01), i Test Mode,
cu selectorul TEST_MODE (0x02). Caracteristica Test Mode este implementat doar de dispo-
zitivele USB cu vitez ridicat i de distribuitoare, permind acestora s efectueze diferitele
teste de conformitate cu standardul USB la nivelul interfeei electrice. Caracteristica Test Mo-
de nu poate fi invalidat prin comanda Clear_Feature.
Comanda Set_Address este utilizat n timpul procesului de enumerare pentru asigna-
rea unei adrese unice dispozitivului USB. Adresa trebuie specificat n cmpul wValue i poa-
te avea valoarea maxim 127. Adresa dispozitivului va fi setat doar dup terminarea cu suc-
ces a fazei de stare a comenzii Set_Address.
Comanda Get_Descriptor returneaz un descriptor specificat, dac acesta exist.
Cmpul wValue trebuie s specifice tipul descriptorului n octetul superior i indexul descrip-
torului n octetul inferior. Tipul descriptorului poate specifica un descriptor de dispozitiv
(0x01), un descriptor de configuraie (0x02) sau un descriptor de tip ir de caractere (0x03).
Indexul descriptorului selecteaz un anumit descriptor n cazul n care dispozitivul implemen-
teaz mai muli descriptori de acelai tip. Acest index se utilizeaz numai pentru un descriptor
de configuraie sau de tip ir de caractere. Pentru un descriptor de dispozitiv, indexul trebuie
setat la 0. n cazul descriptorilor de tip ir de caractere, cmpul wIndex trebuie s specifice
identificatorul limbii (LANGID), iar n cazul altor descriptori acest cmp trebuie setat la 0.
Cmpul wLength trebuie s conin numrul de octei care trebuie returnai. Dac descriptorul
are o lungime mai mare dect valoarea din cmpul wLength, dispozitivul returneaz doar nu-
mrul specificat de octei.
Dac n cmpul wValue al comenzii Get_Descriptor se specific un descriptor de
configuraie, dispozitivul va returna descriptorul de configuraie, toi descriptorii de interfa
pentru acea configuraie i toi descriptorii punctelor terminale pentru toate interfeele. Dup
descriptorul de configuraie, se va returna primul descriptor de interfa. Dup acest descrip-
tor, vor urma descriptorii punctelor terminale pentru prima interfa. Dac exist alte interfee,
se va returna descriptorul lor de interfa, urmat de descriptorii punctelor terminale ai acesto-
ra.
Comanda Set_Descriptor este opional i se poate utiliza pentru actualizarea unor
descriptori existeni sau adugarea unor noi descriptori. Semnificaia cmpurilor comenzii
este aceeai ca i la comanda Get_Descriptor.
Comanda Get_Configuration returneaz numrul configuraiei curente a dispozitivu-
lui. Valoarea este returnat ntr-un octet n timpul fazei de date. Dac valoarea returnat este
0, dispozitivul nu este configurat.
Comanda Set_Configuration permite validarea unei anumite configuraii a dispoziti-
vului. Numrul configuraiei dorite trebuie specificat n octetul inferior al cmpului wValue.
Acest numr trebuie s corespund cu numrul unei configuraii dintr-un descriptor de confi-
guraie. Octetul superior al cmpului wValue este rezervat.
5.9.2. Comenzi standard destinate interfeelor
Tabelul 5.5 prezint comenzile standard care sunt destinate interfeelor.
Pentru toate comenzile destinate interfeelor, cmpul wIndex trebuie s conin n oc-
tetul inferior numrul interfeei la care se refer comanda.

18 5. Interfaa USB
Tabelul 5.5. Comenzi standard destinate interfeelor.
bmRequestType bRequest wValue wIndex wLength Data
1000 0001
GET_STATUS
(0x00)
0 Interfa 2
Stare
interfa
0000 0001
CLEAR_FEATURE
(0x01)
Selector
caracteristic
Interfa 0
0000 0001
SET_FEATURE
(0x03)
Selector
caracteristic
Interfa 0
1000 0001
GET_INTERFACE
(0x0A)
0 Interfa 1
Setare
alternativ
0000 0001
SET_INTERFACE
(0x0B)
Setare
alternativ
Interfa 0
Comanda Get_Status destinat unei interfee returneaz doi octei cu valoarea 0 n
timpul fazei de date. Aceti octei sunt rezervai pentru versiunile viitoare ale standardului
USB.
Comenzile Clear_Feature i Set_Feature destinate unei interfee permit invalidarea,
respectiv validarea anumitor caracteristici ale interfeei. Versiunea 2.0 a standardului USB nu
permite invalidarea sau validarea nici uneia din caracteristicile interfeelor.
Comanda Get_Interface returneaz setarea alternativ selectat pentru interfaa speci-
ficat. Setarea alternativ este returnat ntr-un octet n timpul fazei de date. Principiul setri-
lor alternative a fost descris n seciunea 5.7.
Comanda Set_Interface permite selectarea unei setri alternative pentru interfaa spe-
cificat. Cmpul wValue trebuie s conin setarea alternativ care trebuie selectat.
5.9.3. Comenzi standard destinate punctelor terminale
Comenzile standard care sunt destinate punctelor terminale sunt prezentate n tabelul
5.6.
Tabelul 5.6. Comenzi standard destinate punctelor terminale.
bmRequestType bRequest wValue wIndex wLength Data
1000 0010
GET_STATUS
(0x00)
0
Punct
terminal
2
Stare punct
terminal
0000 0010
CLEAR_FEATURE
(0x01)
Selector
caracteristic
Punct
terminal
0
0000 0010
SET_FEATURE
(0x03)
Selector
caracteristic
Punct
terminal
0
1000 0010
SYNCH_FRAME
(0x0C)
0
Punct
terminal
2
Numr
cadru
n cazul comenzilor destinate punctelor terminale, cmpul wIndex trebuie s conin
numrul punctului terminal la care se refer comanda i direcia acestuia. Formatul cmpului
wIndex este ilustrat mai jos.
15 8 7 6 4 3 0
Rezervat Dir Rezervat Nr. punct terminal
Bitul Dir indic prin valoarea 0 un punct terminal de ieire i prin valoarea 1 un punct
terminal de intrare. n cazul unui punct terminal de control, bitul Dir trebuie setat la 0. Biii
3..0 specific numrul punctului terminal.
Comanda Get_Status destinat unui punct terminal returneaz doi octei de stare n
timpul fazei de date. Bitul 0 al octetului inferior returnat indic prin valoarea 1 faptul c punc-
tul terminal este oprit (are caracteristica Halt setat la 1).
Comenzile Clear_Feature i Set_Feature destinate unui punct terminal permit invali-
darea, respectiv validarea unor caracteristici ale punctului terminal respectiv. Cmpul wValue
al comenzilor trebuie s conin selectorul caracteristicii respective. Versiunea 2.0 a standar-

19 Sisteme de intrare/ieire i echipamente periferice
dului USB permite invalidarea (resetarea la 0) i validarea (setarea la 1) unei singure caracte-
ristici care se refer la un punct terminal, i anume caracteristica Halt, pentru care trebuie s
se utilizeze selectorul ENDPOINT_HALT (0x00). Aceast caracteristic va fi resetat la 0 n
mod automat dup o comand Set_Configuration sau Set_Interface.
Comanda Synch_Frame determin returnarea de ctre un punct terminal a numrului
unui cadru de sincronizare. Atunci cnd un punct terminal permite transferuri izocrone, poate
fi necesar ca dimensiunea transferurilor s varieze conform unui model repetitiv. Prin aceast
comand, punctul terminal returneaz calculatorului gazd numrul cadrului de la care ncepe
modelul repetitiv.
5.10. Clasa de dispozitive USB HID
5.10.1. Prezentare general a clasei de dispozitive HID
Clasa de dispozitive USB HID (Human Interface Device) const n principal din dis-
pozitive utilizate de operatori pentru controlul funcionrii unui sistem de calcul. Exemple
tipice de dispozitive din aceast clas sunt urmtoarele:
Tastaturi i dispozitive indicatoare: mouse, trackball;
Comenzi de pe panouri frontale: comutatoare, butoane, glisoare;
Comenzi aflate pe dispozitive cum sunt jocuri sau simulatoare: volane, pedale;
Dispozitive de afiare: diode electroluminiscente, afiaje alfanumerice;
Instrumente medicale: aparate cu ultrasunete;
Dispozitive care nu necesit intervenie uman, dar care pot transmite date ntr-un
format similar cu dispozitivele din clasa HID: cititoare pentru coduri de bare, termo-
metre, aparate de msur.
Clasa HID const deci dintr-o categorie larg de dispozitive, cu caracteristici variate.
n aceast clas se pot ncadra i multe dispozitive care nu sunt prevzute cu o interfa uma-
n. Prin utilizarea modelului clasei HID, este posibil comunicarea unitar ntre calculatorul
gazd i diferite dispozitive, ceea ce permite dezvoltarea mai simpl a unor aplicaii diverse.
Diferitele sisteme de operare i, n particular, sistemele de operare Windows, pun la dispoziie
drivere pentru dispozitivele din clasa HID, care se pot utiliza pentru comunicaia cu aceste
dispozitive. Utilizarea acestor drivere este avantajoas, deoarece astfel se elimin necesitatea
scrierii unor drivere pentru comunicaia cu dispozitivele respective.
Ca orice dispozitiv USB, un dispozitiv din clasa HID poate fi sursa sau destinaia unei
tranzacii n fiecare cadru (1 ms) sau micro-cadru (125 s). O tranzacie poate conine mai
multe pachete, dar este limitat ca dimensiune la 8 octei pentru dispozitive cu vitez redus,
64 octei pentru dispozitive cu vitez normal i 1024 octei pentru dispozitive cu vitez ridi-
cat. Pentru dispozitivele cu vitez ridicat, este posibil s se execute dou sau trei tranzacii
n fiecare micro-cadru. Un transfer reprezint mai multe tranzacii care creeaz un set de date
cu o anumit structur i semnificaie pentru dispozitiv. n cazul dispozitivelor din clasa HID,
un transfer se numete raport. Datele rapoartelor au o anumit structur, care este specificat
n descriptorii de raport (seciunea 5.10.2).
Exist trei tipuri de rapoarte: de intrare, de ieire i de caracteristici. Un raport de in-
trare este transmis de un dispozitiv i conine date destinate aplicaiilor rulate pe calculatorul
gazd. Asemenea date sunt, de exemplu, coordonatele x i y de la un dispozitiv indicator. Un
raport de ieire este transmis de calculatorul gazd unui dispozitiv i conine date de la aplica-
ii care sunt destinate unor comenzi sau afiaje. Un raport de caracteristici conine date desti-
nate unui dispozitiv sau date reprezentnd starea unui dispozitiv. Spre deosebire de datele din
rapoartele de intrare sau de ieire, datele dintr-un raport de caracteristici sunt destinate utiliz-
rii de ctre utilitarele de configurare ale dispozitivelor i nu de ctre aplicaii. De exemplu,
valoarea ratei de repetare a unei taste poate fi o dat dintr-un raport de caracteristici.
Anumite dispozitive pot avea mai multe structuri de rapoarte. De exemplu, o tastatur
cu un dispozitiv indicator integrat poate raporta n mod independent date referitoare la tastele

20 5. Interfaa USB
apsate i date referitoare la coordonate prin acelai punct terminal. Pentru diferenierea aces-
tor structuri, se utilizeaz un identificator al raportului, care este o valoare de un octet care
precede fiecare raport. Pentru exemplul anterior, identificatorul permite driverului clasei de
dispozitive HID s deosebeasc datele referitoare la taste de datele referitoare la coordonate.
Dezavantajul utilizrii clasei HID este c driverele tipice ale acestei clase permit nu-
mai transferuri de ntrerupere i rata maxim de transfer este limitat la o valoare inferioar
limii de band a magistralei USB. Rata de transfer este limitat la 8.000 B/s (8 B/msec) pen-
tru dispozitivele cu vitez redus i la 64.000 B/s (64 B/msec) pentru dispozitivele cu vitez
normal. Pentru dispozitivele cu vitez ridicat, presupunnd c se execut trei tranzacii n
fiecare micro-cadru, rata de transfer este limitat la aproximativ 23,4 MB/s (3*1024 B/micro-
cadru, sau 3*1024*8 = 24.576 B/msec).
5.10.2. Descriptori specifici pentru clasa HID
Pe lng descriptorii standard utilizai pentru toate clasele de dispozitive USB, exist
descriptori specifici utilizai pentru clasa de dispozitive HID. Astfel de descriptori sunt de-
scriptorul HID, descriptorul de raport i descriptorul fizic. Figura 5.16 ilustreaz poziia aces-
tor descriptori n ierarhia descriptorilor USB standard.

Figura 5.16. Poziia descriptorilor specifici clasei HID n ierarhia descriptorilor USB standard.
Un descriptor HID conine numrul, lungimea i tipul descriptorilor subordonai spe-
cifici clasei HID pentru un dispozitiv. Numrul descriptorilor subordonai ai unui descriptor
HID trebuie s fie cel puin 1, deoarece trebuie s existe ntotdeauna un descriptor de raport.
Descriptorul HID mai conine informaii ca versiunea specificaiilor clasei HID cu care este
conform dispozitivul i codul rii pentru care este localizat dispozitivul.
Un descriptor de raport conine articole care descriu dimensiunea i structura datelor
raportate. Un asemenea descriptor furnizeaz informaii despre datele raportate de dispozitiv
pentru fiecare din funciile sale i despre datele care sunt destinate funciilor dispozitivului.
Exemple de informaii sunt dimensiunea datelor returnate, dac datele sunt absolute sau rela-
tive, valorile minime i maxime ale datelor individuale. De asemenea, un descriptor de raport
indic natura datelor raportate, de exemplu, dac ele reprezint coordonatele x i y.
Descriptorii fizici sunt opionali. Aceti descriptori furnizeaz informaii despre par-
tea sau prile corpului uman care se utilizeaz pentru activarea comenzilor dispozitivului. n
plus, un descriptor fizic poate conine valori care cuantific efortul care trebuie depus de utili-
zator pentru activarea diferitelor comenzi.

21 Sisteme de intrare/ieire i echipamente periferice
5.10.3. Comenzi USB specifice pentru clasa HID
Dispozitivele din clasa HID trebuie s implementeze comenzile USB standard
Get_Descriptor i Set_Descriptor. Pe lng aceste comenzi, dispozitivele din clasa HID pot
implementa diferite comenzi specifice acestei clase. Aceste comenzi iniiaz tranzacii care
permit calculatorului gazd determinarea posibilitilor i a strii unui dispozitiv i setarea
strii articolelor de ieire i de caracteristici. Principalele comenzi specifice clasei HID sunt
Get_Report i Set_Report. Implementarea comenzii Get_Report este obligatorie.
Tabelul 5.7 prezint comenzile Get_Report i Set_Report.
Tabelul 5.7. Comenzile Get_Report i Set_Report specifice dispozitivelor din clasa HID.
bmRequestType bRequest wValue wIndex wLength Data
1010 0001
GET_REPORT
(0x01)
Tip raport i
ID raport
Interfa
Lungime
raport
Raport
0010 0001
SET_REPORT
(0x09)
Tip raport i
ID raport
Interfa
Lungime
raport
Raport
Comanda Get_Report permite calculatorului gazd recepionarea unui raport de la un
dispozitiv prin conducta implicit de control. Cmpul wValue trebuie s conin tipul raportu-
lui n octetul superior i identificatorul raportului (ID raport) n octetul inferior. Tipul raportu-
lui specific un raport de intrare (0x01), un raport de ieire (0x02), sau un raport de caracteris-
tici (0x03). Dac nu se utilizeaz identificatori ai rapoartelor, octetul inferior al cmpului
wValue trebuie setat la 0.
Comanda Get_Report este util n momentul iniializrii dispozitivului pentru deter-
minarea strii caracteristicilor acestuia. Comanda nu este destinat pentru a interoga starea
dispozitivului la intervale regulate. Pentru rapoartele de intrare repetate, trebuie s se utilizeze
o conduct de ntrerupere de intrare. n mod opional, pentru rapoartele de ieire se poate uti-
liza o conduct de ntrerupere de ieire (seciunea 5.10.4).
Comanda Set_Report permite calculatorului gazd s transmit un raport la un dispo-
zitiv pentru setarea strii unor comenzi. Semnificaia cmpurilor acestei comenzi este aceeai
ca i pentru comanda Get_Report.
5.10.4. Interfaa cu dispozitivele din clasa HID
Un dispozitiv din clasa HID comunic cu driverul acestei clase fie prin conducta im-
plicit de control, fie printr-o conduct de ntrerupere. Dispozitivul utilizeaz conducta impli-
cit de control pentru urmtoarele operaii:
Recepionarea comenzilor USB transmise de calculatorul gazd i transmiterea rs-
punsului la aceste comenzi;
Transmiterea datelor atunci cnd dispozitivul este interogat de driverul clasei HID
prin comanda Get_Report;
Recepionarea datelor de la calculatorul gazd.
Driverul clasei HID utilizeaz o conduct de ntrerupere pentru urmtoarele operaii:
Recepionarea unor date de la dispozitiv n mod asincron (date care nu au fost solici-
tate n mod explicit);
Transmiterea cu o ntrziere redus a unor date la dispozitiv.
Utilizarea unei conducte de ntrerupere de ieire este opional. Dac un dispozitiv
iniializeaz un punct terminal de ntrerupere cu direcia de ieire, atunci rapoartele de ieire
sunt transmise de calculatorul gazd la dispozitiv prin aceast conduct. Dac nu este dispo-
nibil un punct terminal de ntrerupere cu direcia de ieire, atunci rapoartele de ieire sunt
transmise de calculatorul gazd prin punctul terminal de control, utiliznd comenzi
Set_Report.

22 5. Interfaa USB
5.11. Comunicaia cu dispozitivele din clasa HID
La conectarea unui dispozitiv din clasa HID la un port USB al calculatorului, sistemul
de operare execut procesul de enumerare, n modul descris n seciunea 5.8. Acest proces nu
implic utilizarea unor drivere specifice clasei HID sau specifice dispozitivului. n prima par-
te a procesului de enumerare, driverul USB solicit dispozitivului transmiterea descriptorului
de dispozitiv, dup care preia descriptorul i asigneaz o adres unic dispozitivului. n conti-
nuare, driverul USB solicit dispozitivului transmiterea descriptorului de configuraie i preia
acest descriptor (care include descriptorii de interfa i descriptorii punctelor terminale). Din
descriptorul de interfa, driverul USB determin clasa dispozitivului, iar dac aceast clas
este HID, driverul USB pred controlul driverului clasei HID. Dac descriptorul de interfa
nu specific o anumit clas, atunci driverul USB selecteaz un driver corespunztor pentru
dispozitiv pe baza identificatorului productorului (VID Vendor Identifier) i a identificato-
rului produsului (PID Product Identifier), sau solicit utilizatorului specificarea unui driver
specific dispozitivului.
Dup ce dispozitivul este recunoscut de sistemul de operare ca un dispozitiv din clasa
HID, se pot utiliza funcii de sistem pentru scrierea unei aplicaii de comunicaie cu dispoziti-
vul. Aceste funcii utilizeaz driverul dispozitivelor din clasa HID, astfel nct nu este necesa-
r scrierea unui driver specific dispozitivului. n aceast seciune se descriu operaiile necesa-
re pentru comunicaia cu un dispozitiv din clasa HID n cazul unui sistem de operare Win-
dows. Aceste operaii sunt diferite pentru alte sisteme de operare, cum sunt Linux sau MacOS.
naintea utilizrii unui dispozitiv din clasa HID, este necesar stabilirea comunicaiei
cu acel dispozitiv, ceea ce presupune mai multe etape. Aceste etape sunt descrise n continua-
re.
1. Se apeleaz funcia HidD_GetHidGuid pentru a obine identificatorul unic global
GUID (Globally Unique Identifier) pentru dispozitivele din clasa HID. Parametrul
acestei funcii este un pointer la o structur de tip _GUID, reprezentnd un buffer n
care va fi returnat identificatorul GUID. Aceast funcie este declarat n fiierul
hidsdi.h, care face parte din pachetul de dezvoltare WDK (Windows Driver Kit) al
Microsoft. Pentru linkeditarea static este necesar utilizarea fiierului de bibliotec
hid.lib. Pentru apelul funciei HidD_GetHidGuid, adugai urmtoarele linii n fiierul
surs:
struct _GUID GUID;
HidD_GetHidGuid (&GUID);
2. Se apeleaz funcia de sistem SetupDiGetClassDevs pentru a obine informaii despre
toate dispozitivele din clasa HID care sunt ataate la sistem. Aceast funcie returnea-
z un indicator (variabil de tip HANDLE) la setul de informaii despre lista de dispozi-
tive. Unul din parametrii acestei funcii este un pointer la identificatorul global GUID
obinut n etapa anterioar. Aceast funcie este declarat n fiierul setupapi.h, iar
pentru linkeditarea static este necesar utilizarea fiierului de bibliotec setupapi.lib.
Pentru apelul funciei SetupDiGetClassDevs, adugai urmtoarele linii:
HANDLE PnPHandle;
PnPHandle = SetupDiGetClassDevs (&GUID, NULL, NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
Afiai un mesaj de eroare dac funcia returneaz valoarea INVALID_HANDLE_VALUE.
3. Etapele 3-8 trebuie repetate pentru fiecare dispozitiv din clasa HID. Se apeleaz func-
ia de sistem SetupDiEnumDeviceInterfaces pentru a obine informaii despre interfa-
a unui dispozitiv din lista dispozitivelor din clasa HID. Unul din parametrii acestei
funcii este indicatorul la setul de informaii coninnd dispozitivele pentru care se so-
licit informaii despre interfa; acest indicator s-a obinut n etapa 2. Un alt parame-
tru este pointerul la identificatorul global GUID. Dispozitivul despre care se solicit
informaii este specificat printr-un parametru reprezentnd indexul (ncepnd cu 0) n

23 Sisteme de intrare/ieire i echipamente periferice
lista de dispozitive. Funcia completeaz o structur de tip SP_DEVICE_
INTERFACE_DATA cu informaiile despre interfaa dispozitivului i returneaz un
pointer la aceast structur ntr-un parametru de ieire. naintea apelului funciei,
membrul cbSize al structurii trebuie setat la sizeof (SP_DEVICE_INTERFACE_
DATA). n caz de succes, funcia returneaz o valoare diferit de zero. Aceast funcie
este declarat n fiierul setupapi.h.
4. Dac apelul funciei din etapa 3 s-a realizat cu succes, se apeleaz funcia de sistem
SetupDiGetDeviceInterfaceDetail pentru a afla informaii detaliate despre interfaa
dispozitivului selectat n etapa 3. Unul din parametrii acestei funcii este indicatorul la
setul de informaii, care a fost obinut n etapa 2. Un alt parametru este pointerul la
structura cu informaiile despre interfaa dispozitivului, care a fost obinut n etapa 3.
Funcia completeaz o structur de tip SP_DEVICE_INTERFACE_DETAIL_DATA cu
calea de acces la dispozitivul selectat i returneaz un pointer la aceast structur
ntr-un parametru de ieire. Structura conine doi membri, cbSize i DevicePath, al
doilea membru fiind un ir de caractere de lungime variabil terminat cu un octet ze-
ro. naintea apelului funciei, membrul cbSize trebuie setat la sizeof(SP_
DEVICE_INTERFACE_DETAIL_DATA), care reprezint dimensiunea prii fixe a
structurii i nu dimensiunea irului de lungime variabil. Membrul DevicePath va fi
completat de funcia apelat cu calea de acces la dispozitiv, cale care poate fi transmi-
s ca parametru pentru apelul funciei CreateFile. Un alt parametru trebuie s specifi-
ce dimensiunea total a structurii amintite. n caz de succes, funcia returneaz o va-
loare diferit de zero. Aceast funcie este declarat n fiierul setupapi.h.
5. Se apeleaz funcia de sistem CreateFile pentru a deschide comunicaia cu dispoziti-
vul, utiliznd calea de acces care a fost obinut n etapa 4. Definii atributele de secu-
ritate necesare pentru apelul funciei CreateFile prin urmtoarele linii:
SECURITY_ATTRIBUTES SecurityAttributes;
SecurityAttributes.nLength = sizeof (SECURITY_ATTRIBUTES);
SecurityAttributes.lpSecurityDescriptor = NULL;
SecurityAttributes.bInheritHandle = FALSE;
La apelul acestei funcii, setai parametrul pentru modul de acces la GENERIC_READ |
GENERIC_WRITE, iar parametrul pentru modul de partajare la FILE_SHARE_READ |
FILE_SHARE_WRITE. Afiai un mesaj de eroare dac funcia CreateFile returneaz va-
loarea INVALID_HANDLE_VALUE.
6. Dac indicatorul returnat de funcia CreateFile nu este valid, se continu cu etapa 8.
Dac aceast funcie returneaz un indicator valid de fiier, se determin irul de
identificare al dispozitivului din clasa HID prin apelul funciei
HidD_GetProductString. Parametrii acestei funcii sunt indicatorul returnat de funcia
CreateFile, pointerul la un buffer alocat de utilizator n care funcia va depune irul
de identificare i lungimea n octei a bufferului alocat. Aceast funcie este declarat
n fiierul hidsdi.h, care face parte din pachetul de dezvoltare WDK al Microsoft. Pen-
tru apelul funciei HidD_GetProductString, adugai urmtoarele linii:
char cBuffer [256];
HidD_GetProductString (hFile, cBuffer, sizeof (cBuffer));
unde hFile este indicatorul returnat de funcia CreateFile.
7. Se compar irul de identificare obinut n etapa 6 cu irul de identificare al dispoziti-
vului cu care trebuie s se realizeze comunicaia. Trebuie s se in cont c irul de
identificare al dispozitivului este reprezentat n codul Unicode. Dac cele dou iruri
sunt diferite, se nchide fiierul deschis n etapa 5 prin apelarea funciei de sistem
CloseHandle i se continu cu etapa 8. Dac irurile sunt identice, se apeleaz funcia
SetupDiDestroyDeviceInfoList pentru eliberarea memoriei alocate pentru informaiile

24 5. Interfaa USB
despre dispozitive. n acest moment, operaia de stabilire a comunicaiei cu dispoziti-
vul este terminat.
8. Se incrementeaz indexul dispozitivului i, dac acesta nu a ajuns la o anumit valoa-
re maxim, se continu cu etapa 3 pentru a obine informaii despre interfaa urmto-
rului dispozitiv. Valoarea maxim poate fi setat, de exemplu, la 20.
Dup stabilirea comunicaiei cu dispozitivul, aplicaia poate prelua rapoarte de intrare
de la dispozitiv prin apelul funciei ReadFile sau ReadFileEx i poate transmite rapoarte de
ieire la dispozitiv prin apelul funciei WriteFile. Pentru apelul acestor funcii, trebuie utilizat
indicatorul de fiier returnat de funcia CreateFile.
Funciile ReadFile i ReadFileEx preiau rapoartele de intrare de la dispozitiv utili-
znd transferuri de ntrerupere. Aceasta nseamn c dispozitivul trebuie s transmit aceste
rapoarte utiliznd transferuri de ntrerupere printr-un punct terminal de intrare. Primul octet
din fiecare raport reprezint identificatorul raportului. ncepnd cu sistemul de operare Win-
dows XP, este posibil preluarea rapoartelor de intrare utiliznd transferuri de control. Pentru
aceasta se poate utiliza funcia HidD_GetInputReport, care va transmite dispozitivului o co-
mand Get_Report.
Funcia WriteFile transmite rapoartele de ieire prin comenzi Set_Report. Dac dis-
pozitivul nu are un punct terminal de ntrerupere cu direcia de ieire, funcia WriteFile utili-
zeaz transferuri de control, iar n caz contrar utilizeaz transferuri de ntrerupere. Primul oc-
tet din fiecare raport reprezint identificatorul raportului. ncepnd cu sistemul de operare
Windows XP, se poate utiliza funcia HidD_SetOutputReport pentru transmiterea unui raport
de ieire printr-un transfer de control.
5.12. Aplicaii
5.12.1. Rspundei la urmtoarele ntrebri:
a. Care este rolul terminatorilor utilizai la magistrala USB?
b. De ce nu este posibil conectarea a dou calculatoare printr-un cablu USB obinuit?
c. Care este deosebirea dintre transferurile asincrone i transferurile izocrone pe
magistrala USB?
d. Ce reprezint punctele terminale i cum se realizeaz comunicaia ntre calculatorul
gazd i un dispozitiv USB prin intermediul punctelor terminale?
e. Ce informaii conine un descriptor de dispozitiv i un descriptor de configuraie?
f. Care sunt avantajele i dezavantajele utilizrii modelului clasei HID pentru
comunicaia cu perifericele?
5.12.2. Creai un nou proiect (File New Project General Empty Project).
Copiai n directorul proiectului fiierele din arhiva Hid.zip, disponibil pe pagina laboratorului.
Includei fiierele setupapi.h i hidsdi.h n proiectul aplicaiei i adugai directivele #include
corespunztoare n fiierul surs. n setrile proiectului, adugai fiierele setupapi.lib i hid.lib n
lista modulelor de bibliotec (Project <nume_proiect> Properties Configuration
Properties Linker Input Additional Dependencies). Scriei o funcie pentru afiarea
irurilor de identificare ale dispozitivelor din clasa HID conectate la sistem. Pentru scrierea
funciei, parcurgei etapele descrise n seciunea 5.11. Consultai biblioteca MSDN
(http://msdn.microsoft.com/library/) pentru mai multe detalii despre parametrii funciilor.
Dup scrierea funciei, adugai apelul acestei funcii n programul principal. Conec-
tai un dispozitiv din clasa HID la un port USB al calculatorului, iar apoi verificai execuia
programului.
5.12.3. Creai un nou proiect (File New Project General Empty Project).
Pe baza funciei scrise pentru aplicaia 5.12.2, scriei o funcie pentru stabilirea comunicaiei
ntre calculator i placa de dezvoltare CP-JRARM7 USB-LPC2148 prin interfaa USB. Placa
este configurat ca un dispozitiv din clasa HID cu irul de identificare Keil MCB2140 HID.

25 Sisteme de intrare/ieire i echipamente periferice
Funcia trebuie s returneze valoarea boolean TRUE n cazul n care comunicaia cu placa a
fost stabilit i valoarea FALSE n caz contrar.
Dup scrierea funciei, adugai apelul acestei funcii n programul principal. Rulai
programul fr ca placa de dezvoltare CP-JRARM7 USB-LPC2148 s fie conectat la calcu-
lator. Conectai apoi placa la calculator printr-un cablu USB. Verificai dac placa este recu-
noscut de calculator ca un dispozitiv din clasa HID. Rulai din nou programul i verificai
dac a fost posibil stabilirea comunicaiei cu placa de dezvoltare.
5.12.4. Scriei un program pentru setarea strii diodelor LED de pe placa de dezvolta-
re CP-JRARM7 USB-LPC2148 prin interfaa USB. Utilizai funcia scris pentru aplicaia
5.12.3 pentru stabilirea comunicaiei cu placa. Apelai funcia WriteFile pentru transmiterea
unui raport de ieire de doi octei; primul octet trebuie s fie identificatorul raportului (0x00),
iar al doilea octet trebuie s fie comanda pentru diodele LED de pe plac. Placa va prelua
acest octet printr-o comand Set_Report pe conducta implicit de control. Cele patru diode
LED sunt asignate biilor 7..4 ai octetului de comand. Pentru aprinderea unei diode, bitul
corespunztor trebuie setat la 0. Programul va solicita introducerea valorii octetului de co-
mand de la tastatur.
5.12.5. Scriei un program pentru citirea strii butoanelor de pe placa de dezvoltare
CP-JRARM7 USB-LPC2148 prin interfaa USB. Utilizai funcia scris pentru aplicaia
5.12.3 pentru stabilirea comunicaiei cu placa. Apelai funcia ReadFile pentru preluarea unui
raport de intrare de doi octei; primul octet este identificatorul raportului (0x00), iar al doilea
este octetul de stare al butoanelor de pe plac. Placa transmite n mod repetat octetul de stare
utiliznd transferuri de ntrerupere. Cele patru butoane sunt asignate biilor 3..0 ai octetului de
stare. Valoarea 0 a unui bit indic faptul c butonul corespunztor este apsat. Programul va
afia valoarea octetului de stare.
Bibliografie
[1] Allman, S., Using the HID class eases the job of writing USB device drivers, EDN,
September 19, 2002, http://www.edn.com/contents/images/243218.pdf.
[2] Axelson, J., USB Complete, Third Edition, Lakeview Research,
http://www.lvr.com/usbc.htm.
[3] Compaq, Hewlett-Packard, Intel, Lucent, Microsoft, NEC, Philips, Universal Serial Bus
Specification, Revision 2.0, 2000,
http://www.usb.org/developers/docs/usb_20_02212005.zip.
[4] Hyde, J., Learning USB by Doing, Intel Corp.,
http://www.devasys.com/PD11x/JHWP.pdf.
[5] Microsoft Corp., Microsoft Windows Driver Kit, 2009,
http://www.microsoft.com/whdc/devtools/WDK/default.mspx.
[6] Microsoft Corp., MSDN Library, 2009, http://msdn.microsoft.com/library/.
[7] Peacock, C., On-The-Go Supplement Point-to-Point Connectivity for USB, Beyond
Logic, 2005, http://www.beyondlogic.org/usb/otghost.htm.
[8] Peacock, C., USB in a Nutshell Making Sense of the USB Standard, Beyond Logic,
2005, http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf.
[9] Rosch, W. L., Hardware Bible, Sixth Edition, Que Publishing, 2003.
[10] USB Implementers Forum, Inc., A Technical Introduction to USB 2.0,
http://www.usb.org/developers/usb20/developers/whitepapers/usb_20g.pdf.
[11] USB Implementers Forum, Inc., Device Class Definition for Human Interface Devices
(HID), Version 1.11, 2001,
http://www.usb.org/developers/devclass_docs/HID1_11.pdf.

26 5. Interfaa USB
[12] USB Implementers Forum, Inc., HID Usage Tables, Version 1.12, 2005,
http://www.usb.org/developers/devclass_docs/Hut1_12.pdf.
[13] USB Implementers Forum, Inc., Introduction to USB On-The-Go,
http://www.usb.org/developers/onthego/USB_OTG_Intro.pdf.
[14] USB Implementers Forum, Inc., On-The-Go Supplement to the USB 2.0 Specification,
Revision 1.0a, 2003, http://www.usb.org/developers/docs/usb_20_02212005.zip.
[15] USB Implementers Forum, Inc., USB 2.0 Specification Engineering Change Notice
(ECN) #1: Mini-B Connector, 2000, http://www.usb.org/developers/docs/ecn1.pdf.
[16] USB Implementers Forum, Inc., USB Frequently Asked Questions,
http://www.usb.org/developers/usbfaq/.
[17] USB Implementers Forum, Inc., USB On-The-Go,
http://www.usb.org/developers/onthego/.
[18] USB Implementers Forum, Inc., USB Specification Expanding, Boosting Performance
Up to 40 Times Beyond Current Capability, http://www.usb.org/developers/usb20/
backgrounder/.

Vous aimerez peut-être aussi