Sunteți pe pagina 1din 25

5.

INTERFAA USB

Aceast lucrare prezint magistrala USB i interfaa care se bazeaz pe aceast magistral. Astfel, se prezint urmtoarele: noiunile de baz ale interfeei USB, conectorii i cablurile utilizate, tipurile de transfer, modelul comunicaiei, protocolul magistralei, structura pachetelor, descriptorii USB i comenzile USB. De asemenea, lucrarea introduce clasa dispozitivelor HID i descrie modul n care se poate realiza comunicaia ntre calculator i dispozitivele 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 calculator 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 form de stea pe mai multe nivele, un singur periferic fiind conectat la un port USB al calculatorului 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 versiuni (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 simplu, fr deschiderea carcasei acestuia, fr deconectarea tensiunii de alimentare i fr rencrcarea sistemului de operare. Calculatorul echipat cu un port USB detecteaz adugarea unui nou periferic i determin n mod automat resursele necesare acestuia, inclusiv driverul software i rata de transfer. 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 arbore. 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 dispozitivele USB, cablurile USB i programele de sistem. Dispozitivele de pe magistrala USB sunt conectate 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 gazd conine un distribuitor rdci-

Sisteme de intrare/ieire

n, care asigur unul sau mai multe puncte de conectare. n 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 permite conectarea la calculatorul gazd sau la un distribuitor de pe nivelul superior al topologiei. 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 puin 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 control permit calculatorului gazd configurarea distribuitorului, monitorizarea i controlul porturilor 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 dispozitivele 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.

5. Interfaa USB

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 informaii 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 combinate ntr-un singur dispozitiv fizic. n cadrul unui asemenea dispozitiv compus, funciile individuale 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 tranzacie 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 portabilitatea programelor de aplicaii. Programele de sistem gestioneaz conectarea i deconectarea 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 recepionate de fiecare periferic. Pachetele conin adresa perifericului destinaie; doar acest periferic va accepta o anumit tranzacie i va rspunde n mod corespunztor. Controlerul magistralei USB, aflat pe placa de baz a calculatorului gazd, are propriile specificaii. n cazul primelor versiuni ale magistralei USB, existau dou specificaii pentru aceste controlere. Prima dintre ele, Universal Host Controller Interface (UHCI), a fost elaborat de firma Intel i permitea simplificarea circuitelor, partea mai complex fiind cea de software. A doua specificaie, Open Host Controller Interface (OHCI), a fost elaborat de firmele Compaq, Microsoft i National Semiconductor; aceast specificaie permitea simplificarea prii de software, partea mai complex fiind cea de hardware. Odat cu introducerea versiunii 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 Technologies. 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 exemplu, 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), imprimante, memorii de mas, dispozitive video.

Sisteme de intrare/ieire

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 versiuni este de 12 Mbii/s. Aceast rat de transfer este suficient pentru periferice cum sunt telefonul 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 versiunea 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 ilustreaz 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 permite 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 necesit 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 normal. Specificaiile USB On-The-Go (OTG) au fost elaborate ca un supliment al specificaiilor USB 2.0 cu scopul de a permite conexiuni directe ntre echipamente mobile, fr utilizarea 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 dinamic 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 magistral. 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 (Personal Digital Assistant) sau telefon mobil, care poate avea rolul implicit de slave pentru un calculator 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 aparatul foto n scopul tipririi lor. Figura 5.5 ilustreaz simbolul magistralei USB OTG.

Figura 5.5. Simbolul magistralei USB OTG.

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 versiune 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

5. Interfaa USB

pentru modul convenional. Tehnologia este similar cu cea a versiunii 2.0 a magistralei PCI Express. Se utilizeaz aceeai codificare 8b/10b, ceea ce permite 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 apar 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 capetele 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. Ulterior, 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 reduse, numii micro-A i micro-B. Aceti conectori au aceeai lime ca i conectorii mini-B, dar grosimea este redus la aproximativ jumtate. Noii conectori sunt destinai nlocuirii conectorilor mini-A i mini-B, care nu se mai utilizeaz la noile echipamente mobile.

Sisteme de intrare/ieire

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 ajutorul unui pin suplimentar ID, care este conectat la mas ntr-un conector de tip A i este neconectat 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. Specificaiile 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 normale. 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 liniile 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 pentru 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 VBUS i GND. Tensiunea pe linia VBUS este de +5 V la surs. Pentru a asigura nivele de tensiune corecte la intrarea perifericelor i o impedan de terminare corespunztoare, se utilizeaz terminatori 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

5. Interfaa USB

liniile D+ i D ale cablului sunt conectate la mas. La captul cablului din partea perifericului, se utilizeaz ca terminator o rezisten 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) rezistena 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 vitez 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 pentru viteza redus nu este necesar utilizarea unor fire rsucite (standardul recomand ns utilizarea 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 1 2 3 4 Semnal VBUS DD+ GND Culoare Rou Alb Verde 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 calculatoarelor 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 intermediul 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 ntrziere 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 interactive 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 memorii de mas, imprimante sau scanere. Aceste date sunt secveniale. Fiabilitatea transferurilor 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. 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 garantat. Izocron are

Sisteme de intrare/ieire

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 respectat i ntrzierea maxim cu care acestea sunt furnizate. Furnizarea la timp a datelor izocrone este asigurat cu preul unor pierderi poteniale n irul de date. Deci, erorile de transmisie 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 retransmiterii 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 depirii capacitii bufferelor. Chiar dac datele sunt furnizate de magistrala USB cu rata adecvat, ntrzierile introduse de programe pot afecta negativ aplicaiile care utilizeaz aceste date, cum sunt aplicaiile pentru videoconferine. irurilor de date izocrone li se aloc o poriune dedicat a limii de band a magistralei 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 funcie. O funcie USB poate avea cerine diferite ale fluxului de comunicaie pentru diferite interaciuni ntre acea funcie i calculatorul gazd. Prin separarea diferitelor fluxuri de comunicaie 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 programul de aplicaie rulat pe calculatorul gazd transmite un pachet adresat unui anumit dispozitiv 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 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 maxim de 15 puncte terminale de intrare i 15 puncte terminale de ieire, pe lng cele dou puncte terminale cu numrul 0.

5. Interfaa USB

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 driverul generic de dispozitiv care va fi utilizat de sistemul de operare pentru comunicaia cu punctele terminale care implementeaz interfaa respectiv. Comunicaia dintre programul de aplicaie de pe calculatorul gazd i un punct terminal 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 direcia 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 ntrerupere, 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 specificaiile 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 calculatorul 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 programele 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 utilizat n continuare de programele de sistem ale calculatorului gazd pentru transferurile de control.

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. Tranzaciile 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.
Cmpul de sincronizare

Toate pachetele ncep cu un cmp de sincronizare (SYNC), care este utilizat de circuitele 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 sincronizare.

10

Sisteme de intrare/ieire
Cmpul de identificare al pachetului

Cmpul de identificare al pachetului (PID) urmeaz imediat dup cmpul de sincronizare. 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 continuare, unde nPIDi reprezint complementul fa de 1 al bitului PIDi.
7 nPID3 6 nPID2 5 nPID1 4 nPID0 3 PID3 2 PID2 1 PID1 0 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 simplitate, pachetele speciale nu sunt detaliate.
Tabelul 5.2. Codificarea i descrierea tipurilor de pachete USB.
Tip pachet Antet (Token) Subtip pachet OUT IN SOF SETUP Date DATA0 DATA1 DATA2 PID [3..0] 0001 1001 0101 1101 0011 1011 0111 Descriere Adresa i numrul punctului terminal ntr-o tranzacie de ieire Adresa i numrul punctului terminal ntr-o tranzacie de intrare Indicator de nceput al cadrului i numrul cadrului Adresa i numrul punctului terminal ntr-o tranzacie de control n faza de setare Identificator pentru pachetele de date cu numr par Identificator pentru pachetele de date cu numr impar Identificator pentru pachetele de date la tranzaciile izocrone de intrare de vitez ridicat i cu limea de band ridicat Identificator pentru pachetele de date la tranzaciile izocrone de ieire de vitez ridicat i cu limea de band ridicat Confirmarea recepionrii fr erori a pachetului de date Dispozitivul receptor nu poate primi date sau dispozitivul transmitor nu poate transmite date Punctul terminal este oprit Nu s-a recepionat nc un rspuns de la receptor Identificator al unui pachet special; XY poate fi 01, 10 sau 11

MDATA

1111

Confirmare

ACK NAK STALL NYET

0010 1010 1110 0110 XY00

Special

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 implicit i nu poate fi asignat n mod explicit unei funcii. La punerea sub tensiune i resetarea unei funcii, adresa acesteia va avea valoarea implicit 0. Calculatorul gazd trebuie s seteze adresa funciei n timpul procesului de enumerare.

5. Interfaa USB
Cmpul punctului terminal

11

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 transferului. 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 cmpurile 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 subtipul 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 nceputul 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 terminal care va transmite un pachet de date. Cmpul CRC5 conine codul CRC pentru cmpurile ADDR i ENDP.
Pachete SOF

Pentru sincronizarea ntregului sistem USB, calculatorul gazd transmite cte un pachet 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 vi-

12

Sisteme de intrare/ieire

teza 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 numr 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 pachete se utilizeaz pentru a raporta starea unei tranzacii de date prin subtipul returnat n cmpul 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 descriptori sunt utilizai pentru raportarea atributelor dispozitivelor calculatorului gazd. Un descriptor reprezint o structur de date cu un format definit de standardul USB. Fiecare descriptor 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:

5. Interfaa USB Descriptori de dispozitiv; Descriptori de configuraie; Descriptori de interfa; Descriptori ai punctelor terminale; Descriptori de tip ir de caractere.

13

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 standardului USB cu care este conform dispozitivul, clasa din care face parte dispozitivul, subclasa dispozitivului, identificatorul productorului (asignat de organizaia USB-IF), identificatorul produsului (asignat de productor), numrul de configuraii posibile ale dispozitivului. Un dispozitiv USB poate avea mai multe configuraii, caracterizate prin atribute diferite. 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 alimentare separat. Dac dispozitivul este conectat la un calculator portabil, driverul poate selecta a doua configuraie, care necesit conectarea dispozitivului la o surs de alimentare proprie. 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 multifuncional coninnd un fax, un scaner i o imprimant. Unul din descriptorii de interfa poate caracteriza funcia de fax a dispozitivului, un al doilea descriptor de interfa poate caracteriza funcia de scaner, iar un al treilea descriptor de interfa poate caracteriza funcia de imprimant. Un dispozitiv poate avea mai muli

14

Sisteme de intrare/ieire

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 terminale asociate interfeei sau a caracteristicilor acestora dup configurarea dispozitivului. n mod implicit, pentru o interfa este selectat setarea alternativ cu numrul zero. Setrile alternative permit modificarea unei interfee a dispozitivului n timp ce alte interfee rmn n funciune, 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 descriptorii 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 principiu, 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 pachetelor pe care le poate transmite sau recepiona punctul terminal i intervalul de timp pentru interogarea punctului terminal de ctre calculatorul gazd n vederea transferurilor de date. Descriptorii 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 informaii despre dispozitivul USB ntr-o form care poate fi afiat direct. Referirea la descriptorii de tip ir de caractere se realizeaz prin valori de index din cadrul descriptorilor de dispozitiv, de configuraie i de interfa. n cazul n care pentru un dispozitiv USB nu se utilizeaz 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 descriptorului. 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. Dimensiunea (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 identificator 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 ajutorul rezistenei utilizate ca terminator al magistralei de la captul dispozitivului. Distribuitorul 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 modificarea prin interogarea distribuitorului. 3. Calculatorul gazd ateapt un timp de cel puin 100 ms pentru ca tensiunea de alimentare 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), acesta iniiaz un protocol electric special pentru stabilirea unei legturi cu aceast vitez. Dac acest protocol electric nu

5. Interfaa USB

15

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 VBUS 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 calculatorului gazd aceti descriptori. 8. Pe baza informaiilor de configuraie, calculatorul gazd asigneaz o anumit configuraie 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 VBUS 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 informeaz calculatorul gazd asupra modificrii aprute. Calculatorul gazd dezactiveaz portul respectiv i actualizeaz informaiile sale despre topologia magistralei.

5.9. Comenzi USB


Fiecare dispozitiv USB trebuie s rspund la comenzile USB transmise de calculatorul 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 dispozitivelor pot defini comenzi proprii. Transmiterea i execuia unei comenzi USB poate necesita dou sau trei faze de transfer. 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.
Tabelul 5.3. Structura unui pachet SETUP.
Offset 0 Cmp bmRequestType Dimensiune 1 Descriere 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

16

Sisteme de intrare/ieire

Offset

Cmp

Dimensiune

Descriere b4..b0: Destinaia comenzii 0 = Dispozitiv 1 = Interfa 2 = Punct terminal 3 = Alt destinaie 4..31 = Rezervat Codul comenzii Parametru; variaz n funcie de comand Parametru; n mod tipic, numrul interfeei sau al punctului terminal Numrul octeilor de transferat n faza de date

1 2 4 6

bRequest wValue wIndex wLength

1 2 2 2

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 tabelul 5.4. Coloana Data indic datele transferate n faza de date.
Tabelul 5.4. Comenzi standard destinate dispozitivelor.
bmRequestType 1000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 1000 0000 0000 0000 bRequest GET_STATUS (0x00) CLEAR_FEATURE (0x01) SET_FEATURE (0x03) SET_ADDRESS (0x05) GET_DESCRIPTOR (0x06) SET_DESCRIPTOR (0x07) GET_CONFIGURATION (0x08) SET_CONFIGURATION (0x09) wValue 0 Selector caracteristic Selector caracteristic Adres dispozitiv Tip i index descriptor Tip i index descriptor 0 Numr configuraie wIndex 0 0 0 0 0 sau LANGID 0 sau LANGID 0 0 wLength 2 0 0 0 Lungime descriptor Lungime descriptor 1 0 Data Stare dispozitiv Descriptor Descriptor Numr configuraie

Comanda Get_Status destinat unui dispozitiv returneaz un cuvnt de stare de la dispozitiv la calculatorul gazd n timpul fazei de date. Structura cuvntului returnat este ilustrat mai jos.
15 Rezervat 2 1 Remote Wakeup 0 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 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

5. Interfaa USB

17

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 dispozitivele USB cu vitez ridicat i de distribuitoare, permind acestora s efectueze diferitele teste de conformitate cu standardul USB la nivelul interfeei electrice. Caracteristica Test Mode nu poate fi invalidat prin comanda Clear_Feature. Comanda Set_Address este utilizat n timpul procesului de enumerare pentru asignarea unei adrese unice dispozitivului USB. Adresa trebuie specificat n cmpul wValue i poate avea valoarea maxim 127. Adresa dispozitivului va fi setat doar dup terminarea cu succes 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 descriptorului 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 implementeaz 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 numrul 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 descriptor, 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 acestora. 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 dispozitivului. 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 dispozitivului. Numrul configuraiei dorite trebuie specificat n octetul inferior al cmpului wValue. Acest numr trebuie s corespund cu numrul unei configuraii dintr-un descriptor de configuraie. 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 octetul inferior numrul interfeei la care se refer comanda. 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.

18

Sisteme de intrare/ieire
Tabelul 5.5. Comenzi standard destinate interfeelor.
bmRequestType 1000 0001 0000 0001 0000 0001 1000 0001 0000 0001 bRequest GET_STATUS (0x00) CLEAR_FEATURE (0x01) SET_FEATURE (0x03) GET_INTERFACE (0x0A) SET_INTERFACE (0x0B) wValue 0 Selector caracteristic Selector caracteristic 0 Setare alternativ wIndex Interfa Interfa Interfa Interfa Interfa wLength 2 0 0 1 0 Data Stare interfa Setare alternativ

Comanda Get_Interface returneaz setarea alternativ selectat pentru interfaa specificat. Setarea alternativ este returnat ntr-un octet n timpul fazei de date. Principiul setrilor alternative a fost descris n seciunea 5.7. Comanda Set_Interface permite selectarea unei setri alternative pentru interfaa specificat. 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 1000 0010 0000 0010 0000 0010 1000 0010 bRequest GET_STATUS (0x00) CLEAR_FEATURE (0x01) SET_FEATURE (0x03) SYNCH_FRAME (0x0C) wValue 0 Selector caracteristic Selector caracteristic 0 wIndex Punct terminal Punct terminal Punct terminal Punct terminal wLength 2 0 0 2 Data Stare punct terminal 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 Rezervat 8 7 Dir 6 Rezervat 4 3 Nr. punct terminal 0

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 punctul terminal este oprit (are caracteristica Halt setat la 1). Comenzile Clear_Feature i Set_Feature destinate unui punct terminal permit invalidarea, respectiv validarea unor caracteristici ale punctului terminal respectiv. Cmpul wValue al comenzilor trebuie s conin selectorul caracteristicii respective. Versiunea 2.0 a standardului USB permite invalidarea (resetarea la 0) i validarea (setarea la 1) unei singure caracteristici 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.

5. Interfaa USB

19

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 dispozitive 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, termometre, 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 uman. 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 ridicat. 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 intrare 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 aplicaii care sunt destinate unor comenzi sau afiaje. Un raport de caracteristici conine date destinate 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 utilizrii 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 apsate i date referitoare la coordonate prin acelai punct terminal. Pentru diferenierea acestor 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.

20

Sisteme de intrare/ieire

Dezavantajul utilizrii clasei HID este c driverele tipice ale acestei clase permit numai 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) pentru 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 descriptorul HID, descriptorul de raport i descriptorul fizic. Figura 5.16 ilustreaz poziia acestor 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 specifici 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 relative, 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 partea 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 utilizator pentru activarea diferitelor comenzi.

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 co-

5. Interfaa USB

21

menzi 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 1010 0001 0010 0001 bRequest GET_REPORT (0x01) SET_REPORT (0x09) wValue Tip raport i ID raport Tip raport i ID raport wIndex Interfa Interfa wLength Lungime raport Lungime raport Data 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 raportului n octetul superior i identificatorul raportului (ID raport) n octetul inferior. Tipul raportului specific un raport de intrare (0x01), un raport de ieire (0x02), sau un raport de caracteristici (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 determinarea 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 utiliza o conduct de ntrerupere de ieire (seciunea 5.10.4). Comanda Set_Report permite calculatorului gazd s transmit un raport la un dispozitiv 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 implicit de control, fie printr-o conduct de ntrerupere. Dispozitivul utilizeaz conducta implicit de control pentru urmtoarele operaii: Recepionarea comenzilor USB transmise de calculatorul gazd i transmiterea rspunsului 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 solicitate 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 disponibil 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

Sisteme de intrare/ieire

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 parte a procesului de enumerare, driverul USB solicit dispozitivului transmiterea descriptorului de dispozitiv, dup care preia descriptorul i asigneaz o adres unic dispozitivului. n continuare, 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 identificatorului 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 dispozitivul. Aceste funcii utilizeaz driverul dispozitivelor din clasa HID, astfel nct nu este necesar scrierea unui driver specific dispozitivului. n aceast seciune se descriu operaiile necesare pentru comunicaia cu un dispozitiv din clasa HID n cazul unui sistem de operare Windows. 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 continuare. 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 returneaz un indicator (variabil de tip HANDLE) la setul de informaii despre lista de dispozitive. 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 funcia de sistem SetupDiEnumDeviceInterfaces pentru a obine informaii despre interfaa unui dispozitiv din lista dispozitivelor din clasa HID. Unul din parametrii acestei funcii este indicatorul la setul de informaii coninnd dispozitivele pentru care se solicit informaii despre interfa; acest indicator s-a obinut n etapa 2. Un alt parametru este pointerul la identificatorul global GUID. Dispozitivul despre care se solicit informaii este specificat printr-un parametru reprezentnd indexul (ncepnd cu 0) n 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

5. Interfaa USB

23

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 zero. 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 transmis ca parametru pentru apelul funciei CreateFile. Un alt parametru trebuie s specifice dimensiunea total a structurii amintite. n caz de succes, funcia returneaz o valoare diferit de zero. Aceast funcie este declarat n fiierul setupapi.h. 5. Se apeleaz funcia de sistem CreateFile pentru a deschide comunicaia cu dispozitivul, utiliznd calea de acces care a fost obinut n etapa 4. Definii atributele de securitate 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 valoarea 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. Pentru 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 dispozitivului 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 despre dispozitive. n acest moment, operaia de stabilire a comunicaiei cu dispozitivul este terminat. 8. Se incrementeaz indexul dispozitivului i, dac acesta nu a ajuns la o anumit valoare maxim, se continu cu etapa 3 pentru a obine informaii despre interfaa urmtorului 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 dispozi-

24

Sisteme de intrare/ieire

tiv 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 utiliznd 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 Windows XP, este posibil preluarea rapoartelor de intrare utiliznd transferuri de control. Pentru aceasta se poate utiliza funcia HidD_GetInputReport, care va transmite dispozitivului o comand Get_Report. Funcia WriteFile transmite rapoartele de ieire prin comenzi Set_Report. Dac dispozitivul nu are un punct terminal de ntrerupere cu direcia de ieire, funcia WriteFile utilizeaz transferuri de control, iar n caz contrar utilizeaz transferuri de ntrerupere. Primul octet 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: Care este rolul terminatorilor utilizai la magistrala USB? De ce nu este posibil conectarea a dou calculatoare printr-un cablu USB obinuit? Care este deosebirea dintre transferurile asincrone i transferurile izocrone pe magistrala USB? 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? a. b. c. d. 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. Conectai 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. 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 calculator. Conectai apoi placa la calculator printr-un cablu USB. Verificai dac placa este recunoscut 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 dezvoltare 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

5. Interfaa USB

25

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 comand 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. [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/.

S-ar putea să vă placă și