Documente Academic
Documente Profesional
Documente Cultură
USB
USB a fost inventat si standardizat de către un grup de producători de calculatoare
si echipamente periferice in 1995. Idea era sa se aducă întreaga gama de porturi seriale si
de magistrale seriale la nivelul tehnologiei secolului 21. USB 2.0 a apărut in 2000 si
revizuieşte anumite caracteristici ale standardului pentru a mari viteza de transmisie a
datelor si a-l adapta la cerinţele sistemelor multimedia moderne.
Este adevărat ca la momentul apariţiei USB-ului existau mai multe standarde de
comunicare intre computerul gazda si echipamentele periferice, dar ţinta era crearea unei
tehnologii care sa combine activitatile magistalelor de viteza redusa si de viteza mare.
Tehnologia permite accesul la ambele viteze, o tehnologie care asigura protocol sigur,
solid, configurarea automata a dispozitivelor si o magistrala seriala care este mult
simplificat si uşor de conectat. Toate aceste cerinţe au fost îndeplinite de către USB.
USB a devenit foarte popular in ceea ce priveşte extinderea către PC-uri. Este
important sa amintim ca USB nu este un port serial, ci o magistrala seriala, un lucru care
permite unui singur port pe computer sa fie o legătura pentru o multitudine de mecanisme
si dispozitive (pana la 127 de dispozitive in sistemul USB).Putem lega uşor un dispozitiv
de altul si sa folosim un singur port ca un punct de legătura pentru multe dispozitive prin
simpla folosire a unui hub. Toate acestea ne permit sa privim sistemul USB ca pe o mica
reţea de dispozitive.
Capacitatea ”plug-and-play” a USB-ului este unul din marile avantaje fata de alte
magistrale seriale. Aceasta capacitate permite detectarea automata a unui nou dispozitiv
care este introdus in sistem, o configurare automata a sa de către gazda si o detectare
automata a decuplării de la sistem. Cuplarea si decuplarea uşoara a dispozitivelor la si din
sistem permit mobilitatea pe magistrala si asigurarea sistemului la noile dispozitive fara a
fi nevoie sa repornim întregul sistem de fiecare data când un nou dispozitiv este detectat.
O alta caracteristica importanta a USB-ului este flexibilitatea la viteze medii si
mari. Aceste aspect se refera la posibilitatea USB-ului de a suporta simultan dispozitive
de viteza medie (care lucrează in 1.5 Mbps) si dispozitive de viteza mare(12 Mbps si
400Mbps).
Capacitatea dispozitivelor USB de funcţiona in paralel isi gaseste utilizarea in
susţinerea atât a metodelor de alocare de banda isocronă si asincronă. Isocron înseamnă
dependent de timp (data este transferata intre anumite constrângeri temporale – spre
deosebire de transmisiile sincrone in care constrângerile de timp sunt mult mai stricte),
adică lăţimea necesară de bandă este garantată, oricând o cere dispozitivul fiind
disponibila. Pe de altă parte, asincron înseamnă ca nu exista nici o garanţie a momentului
transmisiei - datele vor fi transmise in momentul in care este posibil sa fie transmise.
Dispozitivele multimedia video si audio care folosesc transferul in flux de date, vor folosi
metoda isocronă in timp ce generează transfer de tip ‘bulk’(la grămadă), aşa cum e cazul
imprimantelor si scanerelor.
USB este o magistrala sigură: in orice nivel al protocolului exista un mecanism de
detectare si corecţie a erorilor ceea ce permite o rată scăzută a acestora. USB permite
depistarea dispozitivelor defecte si realizează mecanismul de control al fluxului chiar prin
modul in care este construit protocolul.
SISTEM TIPIC USB
Alte tehnologii au început sa apară pe piaţa, de exemplu Wireless USB, care promit
performante foarte bune, insa ele sunt doar la nivel de standard, implementările urmând
sa apară in viitorul apropiat. USB este cea mai folosita interfaţa din istoria
calculatoarelor, având in momentul de fata o baza instalata de zeci de milioane de
calculatoare si se bucura de un sprijin puternic din partea diferitelor segmente ale pieţei.
Wireless USB se bazează pe succesul USB-ului prin fir si se focalizează asupra
transmisiilor de mare viteza pe distante scurte, oferind viteza de pana la 480Mbps. In
acest sens este considerat un viitor înlocuitor al tehnologiei Bluetooth.
O gazda (host) - nu exista decât o singura gazda in sistemul USB, care este
responsabila cu întregul protocol complex (astfel se simplifica proiectarea perifericelor
USB). Gazda controlează accesul la mediul de transmisie - nimeni nu poate accesa
magistrala de date daca nu a primit aprobarea de la host.
Hub-ul, are rol asemănător ‘hub’-urilor folosite in reţelele de calculatoare. Hub-ul
asigura un punct de interconectare care permite mai multor dispozitive sa fie conectate la
un singur port USB. Topologia logica a USB-ului are o structura stelara iar toate
dispozitivele sunt conectate (logic) direct la gazdă. Concatenarea de ‘hub’-uri este
transparentă pentru dispozitiv (numărul de ‘hub’-uri prin care trebuie sa treacă datele).
’Hub’-ul este conectat intre gazda si dispozitivul USB (datele ‘curg’ in jos de la gazda la
dispozitiv). Responsabilitatea principala a ‘hub’-urilor este aceea de a detecta conectarea
sau o deconectarea dispozitivelor, având grija de managementul energiei pentru
dispozitivele care sunt alimentate de la magistrala (obţin energie de la bus) si răspund la
erorile magistralei pe care le si corectează. Un alt rol important al ‘hub’-ului este acela de
a coordona atât dispozitivele de viteza mica sau la viteza maxima. Când un dispozitiv
este conectat la sistem, ‘hub’-ul determină viteza la care operează acesta si pe toata
durata comunicării prin magistrala previne trecerea de la viteza mare la viteza mica si
vice-versa.
Dispozitivul - orice mecanism in sistemul USB care este o gazda este un
dispozitiv(inclusiv ‘hub-urile’). Un dispozitiv asigura una sau mai multe funcţii ale USB.
Majoritatea dispozitivelor asigura doar o funcţie, dar pot fi unele care asigura mai multe
funcţii si care se numesc dispozitive complexe(compuse). Există două tipuri de
dispozitive – cele care au alimentare proprie sau cele care sunt alimentate de magistrala
USB. Un dispozitiv care isi ia energie de la magistrala USB se numeste ‘bus powered’ iar
un dispozitiv care isi asigura singur energia este ‘self powered’. Aşa cum am mai
precizat, avem de-a face cu trei tipuri de dispozitive :
- cele care operează la 400Mbps(Hi-speed) USB 2.0
- cele care operează la 12Mbps(Full-speed) USB 1.1
- cele care operează la 1.5Mbps(Low-speed) USB 1.0
USB foloseşte mai multe tipuri de conectori:
(a) (b)
Conector de tip A (conectat la calculator) si conector de tip B (conectat la dispozitivul periferic).
Un periferic USB precum mouse-ul sau tastatura are nevoie de numai 1.5Mbps
pentru a funcţiona. Vitezele mai mari sunt necesare pentru transferul de informaţii cu
unităţile de stocare a datelor: HDD, memory card, camere video USB, etc.
Comunicarea logică intre softul client pe gazda si funcţia dispozitivului se face prin
‘conducte’ (pipe). Un pipe este o asociere intre un anumit endpoint al dispozitivului si
softul adecvat de pe gazda.
Endpoint-ul este sursa sau destinaţia datelor transmise prin canalul USB. O interfaţa
este compusa din endpoint-uri grupate intr-un set bine determinat. Softul client doreşte sa
transmită datele intre buffer-ii din gazda si endpoint-urile din dispozitive si astfel se
realizează respectiva interfaţa (care este asociata anumitor endpoint-uri).
Fluxul informaţional pe magistrala poate fi realizat in doua direcţii :
- OUT (afara) - datele sunt transferate dinspre gazda spre dispozitiv
- IN (înăuntru) - datele sunt transferate de la dispozitiv către gazda
I. NIVELUL FIZIC
Semnalizarea pe magistrala
Nivelul fizic este o interfaţa fizică pentru cablul USB. Principala sarcina a nivelului
fizic este aceea de a transmite si recepţiona 0 si 1 logic drept nivele de tensiune
corespunzătoare.
Cablul USB este format din 4 fire, iar semnalizarea pe bus este pe doua fire
(pereche diferenţială). Exista un fir D+ si un fir D-, astfel încât daca vrem sa transmitem
‘0’ de pe bus vom menţine D+ jos si D- sus si invers daca vrem sa transmitem ‘1’.
Celelalte doua cabluri sunt Vbus(+5V) si GND(-5V) care asigură curent dispozitivului.
Biţii sunt transmişi pe magistrala începând cu LSB.
Exista câteva tipuri unice de semnalizare pe magistrala:
Reset signaling : gazda poate reseta dispozitivul. Acest lucru este posibil prin
trimiterea SE0 (single ended zero - adică liniile D+ si D sunt tinute in starea low) mai
mult de 2.5µsec. Când dispozitivul recunoaşte asemenea semnătura pe portul superior al
magistralei, îl tratează ca pe un semnal RESET.
Suspend signaling : gazda poate introduce dispozitivul intr-un modul de
suspendare, astfel încât dispozitivul nu va răspunde la traficul USB. Un dispozitiv va
începe tranziţia către modul ‘suspend’ oricând va sesiza o stare de inactivitate pe
magistrala mai mare de 3ms, dispozitivul va fi suspendat, dar nu pentru mai mult de
10ms de inactivitate pe magistrală. Recunoaşterea semnalului pe porturile superioare va
scoate dispozitivul din starea de suspendare.
Resume signaling : un dispozitiv care in modul ‘suspendat’ isi va relua
operaţiunile oricând va recunoaşte un semnal K pe magistrală (‘0’ diferenţial pentru
dispozitivele de mare viteza si ‘1’ pentru dispozitivele de mică viteză). De fiecare data
când gazda vrea sa ‘trezească’ dispozitivul trimite semnalul RESUME pentru cel puţin
20ms. Un dispozitiv poate sa se „trezească” singur - numim aceasta caracteristică ‘remote
wakeup capability’. Aceasta permite dispozitivului aflat in modul ‘suspended’ sa înceapă
transmiterea semnalului K pe magistrala si sa-si reia activitatea proprie.
Semnalizarea EOP : EOP este transmis ca SE0 pe durata a 2 biti (definit diferit
pentru dispozitivele de joasa si de mare viteza). Semnalul e urmat de semnalizarea J (‘1’
diferenţial pentru dispozitive de viteza maxima si ‘0’ pentru viteze mici)un bit o data.
Codarea si decodarea se realizează prin metoda NRZI.
In codarea NRZI (Non-Return-to-Zero-Inverted Encoding) dacă vrem sa
transmitem ‘1’ nu schimbam nivelul semnalului (daca perechea diferenţiala reprezentarea
‘1’ logic, acesta va rămâne astfel si pentru ceasul următor). Pe de alta parte, dacă dorim
să transmitem ‘0’ vom inversa valoarea perechii diferenţiale (va exista o inversare de
nivel astfel încât daca valoarea curentă este ‘1’ următoarea valoare va fi ‘0’).
Unul din efectele codării descrise mai sus este transmiterea unui şir de ‘1’ ce va
genera un mod continuu de transmitere (linia transmiterii va fi statica - nu se va schimba
in acea perioadă). Pentru a preveni o asemenea stare continuă, se face o dopare a biţilor
înainte de decodarea NRZI. Acest lucru se realizează prin inserarea unui ‘0’ după un şir
de sase de ‘1’. Decodorul ignora zeroul pe care-l recunoaşte ca parte a dopării biţilor.
SISTEMUL USB SW
În afară de operaţiunile descrise mai sus, sistemul USB alocă lungimile de bandă şi
controlează alimentarea cu energie a „bus”-ului, permiţând astfel accesul dispozitivului la
magistrală. Sistemul USB SW este compus din software gazdă şi două interfeţe de soft
adiţionale:
Driver al controlerului gazdă (Host Controller Driver - HCD) este o interfata la
controlerul gazdă. Scopul acesteia este de a face transparent pentru software-ul de pe host
la care controller este dispozitivul conectat.
DRIVERE USB (USBD): softul client (adică nivelul superior al nivelului de
comunicare) solicită date de la USBD sub forma IRPs (I/O Request packets) care
presupune solicitarea de transmitere/primire a datelor printr-un anumit pipe. USBD-ul are
rolul de a tratsa aceste solicitări. Un alt rol important al USBD-ului este acela de a oferi
softului client o descriere generală a dispozitivului cu care softului este pe cale să
interacţioneze. USBD-ul trebuie să aibă grijă de procesul de enumerare (un proces care
este activat în momentul în care dispozitivul este ataşat magistralei, iar la sfarsitul
acestuia dispozitivul este configurat complet, dispozitivul este parte integrantă a
sistemului USB şi poate răspunde fluxului de pe magistrală), analizează diversele
configuraţii ale dispozitivului şi oferă aceste „cunoştinţe” softului client. Drept parte a
acestei sarcini, USBD-ul include pipe-ul implicit (cel corespunzător endpoint-ului 0) –
deoarece atunci când un dispozitiv este introdus in sistem, acesta reprezintă singurul mod
de a comunica cu dispozitivul.
Acesta apare ca soft client în gazdă şi ca funcţie în dispozitiv. Funcţia din dispozitiv
este compusă din mai multe interfeţe şi controlează funcţionarea dispozitivului. Softul
client orientează interfaţa nimerită prin transferul de date din bufferii proprii către
endpoint-urile asociate interfeţei corespunzătoare. Softul client lucrează cu o funcţie
specifică a dispozitivului independent de alte funcţii ale dispozitivului din sistem.
PROTOCOLUL USB
Gazda USB controlează majoritatea complexităţii protocolului USB, ceea ce duce la
costuri reduse şi o structura simpla pentru echipamentele periferice. Fluxul de date poate
fi direcţionat de la gazdă la dispozitiv şi invers. Transferurile USB se fac prin pachete.
Fiecare tranzacţie este compusă, de obicei, din 3 faze:
Câmpul PID este compus din 8 biţi după cum se va demonstra în diagrama
următoare.
Primii 4 biţi se folosesc pentru a notifica identitatea pachetului, iar ceilalţi 4 pentru
control (complementari primilor 4 biţi) şi depistarea erorilor.
Tipurile PID sunt împărţite în patru mari grupe:
- SIMBOLURI (semnale) – care pot fi OUT, IN, SOF şi SETUP:
o OUT – indică faptul că datele următoare vor fi transmise de la
gazdă la dispozitive;
o IN – datele vor fi transmise de la dispozitiv la gazdă;
o SOF – început frame (secvenţă)
o SETUP – pachetul va fi transmis de la gazdă la dispozitiv şi va
conţine comenzi de setare (folosite la configurare)
- DATE: PID-ul „data” apare în pachetele de date. Poate apărea fie sub
forma DATA 0, fie DATA 1, PID diferit fiind folosit pentru ghidarea sincronizării.
- HANDSHAKE – acest PID e folosit în pachetele handshake pentru a
semnala succesul sau eşecul transferului. Poate fi fie ACK, fie NAK sau STALL.
o ACK – receptorul primeşte pachetul fără erori
o NAK – receptorul nu poate primi datele (de exemplu, din cauza
unei probleme de suprasarcină) sau transmiţătorul nu poate trimite datele
(probleme de flux)
o STALL – endpoint specific care este izolat sau comanda specifică
SETUP nu poate fi menţinută.
DATA FIELD - câmpul datelor conţine date transmise în operaţiuni. Acest câmp
poate conţine până la 10223 bytes.
CRC FIELD – CRC (verificare ciclică redundantă) este folosit pentru protejarea
tuturor câmpurilor dintr-un pachet „token” (cu excepţia câmpului PID) şi protejează
datele din pachetele de date. Câmpul CRC într-un pachet „token” este compus din 5 biţi,
în timp ce un câmp de date este compus din 16 biţi.
BULK TRANSFER: acest tip de transfer se compune din una sau mai multe
operaţiuni. Fiecare operaţiune începe cu un semnal transmis de gazdă şi care indică
direcţia transferului de date în faza următoare. Aici, datele sunt transmise în funcţie de
direcţia indicată de semnal. Dacă nu au fost depistate erori în timpul recepţionării datelor,
ultima fază este „handshake”, în care un raport legat de succesul operaţiunii este
transmis. Dacă au fost depistate erori, nu este trimis nici un pachet de tip handshake.
Exemplu:
ISOCHRONOUS TRANSFER - compus din una sau două faze operaţionale. Aşa
cum am menţionat anterior, nu există faza handshake în transferurile sincron. Gazda
lansează fie un semnal IN pentru a primi date de la dispozitiv, fie OUT pentru a transmite
date. În faza următoare datele sunt transmise în sensul cerut de semnalul gazdei emis mai
înainte.
Exemplu:
Wireless USB
Tehnologia Wireless USB permite viteze de 480Mbps la distante de pana la 10m, si
promite ca reprezintă o arhitectura scalabila care sa suporte in scurt timp viteze de 1Gbps
si mai mari in continuare.
Motivaţia tehnologiei USB a pornit de la următoarele consideraţii:
- uşurinţa de folosire: lipsa flexibilităţii in reconfigurarea PC-urilor a fost
considerata punctul slab al acestora. Deşi s-au făcut eforturi pentru uşurarea
configurării, dispozitivelor, porturile serial/paralel nu aveau caracteristica de
plug-and-play
- extinderea porturilor: adăugarea de noi dispozitive periferice a fost pana nu de
mult problematica, datorita lipsei fizice a porturilor. In acelaşi timp porturile
erau optimizate pentru câteva tipuri de periferice, iar pentru noi dispozitive nu
exista o interfaţa alternativa bidirecţională, cu un cost scăzut, si viteza
acceptabila.
Succesul introducerii USB-ului a fost rapid, astfel in 2005 analiştii au estimat ca
exista peste 500 de milioane de produse folosind interfata USB.
In prezent, pe măsura ce tehnologia avansează si dispozitivele wireless devin mai
importante, este esenţial sa se dezvolte o soluţie de viteza mare si eficienta ca
implementare. Tehnologia radio UWB (Ultra-WideBand) are caracteristici similare
modelului USB clasic, de aceea ea a stat la baza implementării WUSB.
Conexiunile WUSB se bazează pe modelul ‘hub and spoke’: host-ul USB este un
hub in centrul reţelei, iar dispozitivele (in număr de maxim 127). Topologia este
ilustrata mai jos:
Dispozitiv
Wireless USB
Dispozitiv
Wireless USB Dispozitiv
Wireless USB
Wireless
USB
Dispozitiv Host
Wireless USB Dispozitiv
Wireless USB
Dispozitiv
Wireless USB
In orice sistem USB exista un singur host. Wireless USB nu are porturi fizice
definite, deoarece dispozitivul hub asigura extinderea porturilor.
Nivelul fizic al WUSB este descris de Multiband OFDM Alliance (MBOA),
specificaţia UWB PHY. Pentru dispozitivele WUSB, este obligatoriu suportul pentru
transmisia si recepţia datelor la viteze de 53.3, 106.7, si 200 Mb/s este obligatoriu.
Suportul pentru restul vitezelor, of 80, 160, 320, 400 si 480 Mb/s este opţional. Toate
implementările WUSB trebuie sa suporte canalele de transmisie PHY pe canalele 9 – 15
(grupul 1).
WUSB foloseşte UWB pentru transmisia datelor
Protocolul WUSB este bazat pe TDMA, in mod similar cu protocolul USB clasic.
Hostul este cel care iniţiaza transferurile de date. Ca si in USB, fiecare transfer consta in
trei pachete: token, data si handshake. Totuşi, pentru a creste eficienta nivelului fizic prin
eliminarea tranziţiilor costisitoare intre transmisie si recepţie, hostul combina informaţia
din tokenuri multiple intr-un singur pachet. In acesta hostul indica momentul de timp in
care dispozitivul trebuie sa asculte pentru u n pachet de date OUT sau sa transmită
pachetul de date IN (de tip date sau handshake) ca in figura de mai jos:
WUSB este un protocol dine definit si performant, lucru datorat câtorva factori:
- nivelul fizic este proiectat sa fie fiabil cu mecanisme de detecţie si corecţie a
erorilor
- sistemul de detecţie, deconectare si ataşare a dispozitivelor precum si
autoconfigurarea resurselor de sistem
- protocolul de recepţie a datelor folosind pauze pentru pachetele pierdute si
eronate.
- Controlul traficului de date asigura folosirea bufferilor hardware in mod eficient
Exemplu:
Caracteristicile returate de utilitarul USBView:
Iată informaţiile schimbate intre host si periferic la conectarea unui mouse USB la
calculator returnare de Snoopy Pro:
nr dir time function data result
1 in down 0.142 GET_DESCRIPTOR_FROM_DEVICE
12 01 00 01
1 in up 0.148 CONTROL_TRANSFER 00 00 00 08 0x00000000
2 in down 0.148 GET_DESCRIPTOR_FROM_DEVICE
09 02 22 00
2 in up 0.153 CONTROL_TRANSFER 01 01 00 a0 0x00000000
3 in down 0.153 GET_DESCRIPTOR_FROM_DEVICE
09 02 22 00
3 in up 0.161 CONTROL_TRANSFER 01 01 00 a0 0x00000000
4 ??? down 0.161 SELECT_CONFIGURATION
4 ??? up 0.175 SELECT_CONFIGURATION 0x00000000
5 out down 0.175 CLASS_INTERFACE -
5 out up 0.177 CONTROL_TRANSFER - 0x00000000
6 in down 0.177 GET_DESCRIPTOR_FROM_INTERFACE
05 01 09 02
6 in up 0.189 CONTROL_TRANSFER a1 01 09 01 0x00000000
7 ??? down 0.191 BULK_OR_INTERRUPT_TRANSFER -
8 ??? down 0.191 BULK_OR_INTERRUPT_TRANSFER -
7 ??? up 0.193 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00 0x00000000
9 ??? down 0.193 BULK_OR_INTERRUPT_TRANSFER -
8 ??? up 0.769 BULK_OR_INTERRUPT_TRANSFER 00 00 00 00 0x00000000
10 ??? down 0.769 BULK_OR_INTERRUPT_TRANSFER -
Informaţii obţinute la conectarea unei tastaturi USB pe acelaşi port sunt prezentate in continuare:
Raport Snoopy pro simplu:
In detaliu informaţiile schimbate intre host si periferic la conectarea unui mouse USB la calculator
returnate de Snoopy Pro:
nr dir endpoint time function data
1 in down n/a 0.142 GET_DESCRIPTOR_FROM_DEVICE
URB Header (length: 80)
SequenceNumber: 1
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)
12 01 00 01
1 in up n/a 0.148 CONTROL_TRANSFER 00 00 00 08
URB Header (length: 80)
SequenceNumber: 1
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 82162898
SetupPacket:
0000: 80 06 00 01 00 00 12 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0001
DEVICE
SetupPacket:
0000: 80 06 00 02 00 00 22 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
CONFIGURATION
Number of interfaces: 1
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
4 ??? up n/a 0.175 SELECT_CONFIGURATION
URB Header (length: 60)
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 34 (0x0022)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0)
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 20 (0x14)
(in 2 mA units, therefore 40 mA power consumption)
Number of interfaces: 1
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x01
Protocol = 0x02
InterfaceHandle = 0xff2e2578
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0004
EndpointAddress = 0x81
Interval = 0x0a
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0xff2e2594
MaxTransferSize = 0x00001000
PipeFlags = 0x00
5 out down n/a 0.175 CLASS_INTERFACE -
URB Header (length: 80)
SequenceNumber: 5
Function: 001b (CLASS_INTERFACE)
PipeHandle: 00000000
SetupPacket:
0000: 22 0a 00 00 00 00 00 00
bmRequestType: 22
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Endpoint
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 21 0a 00 00 00 00 00 00
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Interface
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 81 06 00 22 00 00 7e 00
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0022
unknown
No TransferBuffer
No TransferBuffer
No TransferBuffer
No TransferBuffer
SetupPacket:
0000: 80 06 00 01 00 00 12 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0001
DEVICE
SetupPacket:
0000: 80 06 00 02 00 00 09 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
CONFIGURATION
SetupPacket:
0000: 80 06 00 02 00 00 3b 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0002
CONFIGURATION
Number of interfaces: 2
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Interface[1]:
Length: 0x0024
InterfaceNumber: 0x01
AlternateSetting: 0x00
Class = 0x00
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x00000000
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0000
EndpointAddress = 0x00
Interval = 0x00
PipeType = 0x00
UsbdPipeTypeControl
PipeHandle = 0x00000000
MaxTransferSize = 0x00001000
PipeFlags = 0x00
4 ??? up n/a 0.19 SELECT_CONFIGURATION
URB Header (length: 96)
SequenceNumber: 4
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 59 (0x003b)
bNumInterfaces: 2 (0x02)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 160 (0xa0)
0x80: Bus Powered
0x20: Remote Wakeup
MaxPower: 50 (0x32)
(in 2 mA units, therefore 100 mA power consumption)
Number of interfaces: 2
Interface[0]:
Length: 0x0024
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x01
Protocol = 0x01
InterfaceHandle = 0x821dc138
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0008
EndpointAddress = 0x81
Interval = 0x18
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0x821dc154
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Interface[1]:
Length: 0x0024
InterfaceNumber: 0x01
AlternateSetting: 0x00
Class = 0x03
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x81f6d108
NumberOfPipes = 0x00000001
Pipe[0]:
MaximumPacketSize = 0x0008
EndpointAddress = 0x82
Interval = 0x30
PipeType = 0x03
UsbdPipeTypeInterrupt
PipeHandle = 0x81f6d124
MaxTransferSize = 0x00001000
PipeFlags = 0x00
6 out down n/a 0.248 CLASS_INTERFACE -
URB Header (length: 80)
SequenceNumber: 6
Function: 001b (CLASS_INTERFACE)
PipeHandle: 00000000
SetupPacket:
0000: 22 0a 00 00 00 00 00 00
bmRequestType: 22
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Endpoint
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 21 0a 00 00 00 00 00 00
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Interface
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 81 06 00 22 00 00 81 00
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0022
unknown
SetupPacket:
0000: 22 0a 00 00 01 00 00 00
bmRequestType: 22
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Endpoint
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 21 0a 00 00 01 00 00 00
bmRequestType: 21
DIR: Host-To-Device
TYPE: Class
RECIPIENT: Interface
bRequest: 0a
No TransferBuffer
SetupPacket:
0000: 81 06 00 22 01 00 cb 00
bmRequestType: 81
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Interface
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0022
unknown
No TransferBuffer
No TransferBuffer
No TransferBuffer