USB協(xié)議深入分析 配置
80 06 00 01 00 00 12 00
然后USB設(shè)備也再次回應(yīng)它,但這次發(fā)送的長度是0x0012了,不再是第一次64個(gè)字節(jié)長度了。
接著USB設(shè)備就返回下面的描述符給主控器,也就是第一次已經(jīng)發(fā)送的設(shè)備描述符,如下:
12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01
這樣分配地址之后,再次獲取設(shè)備描述符成功了,接著下來就是主控器獲取配置描述符。下面就是收到的配置描述符數(shù)據(jù):
80 06 00 02 00 00 09 00
分析上面的數(shù)據(jù)如下:
bmRequestType是80,表示方向USB設(shè)備發(fā)送給主控器,接收設(shè)備是USB設(shè)備。
bRequest是06,表示這是獲取描述符。GET_DESCRIPTOR 6
wValue是00 02。低字節(jié)表示偏移地址00,高字節(jié)表示描述符的類型。如下:
CONFIGURATION 2
所以這里的返回的設(shè)備描述符是配置描述符。
wIndex是00 00。
wLength是09 00。它表示返回描述符的長度。這里是9個(gè)字節(jié)。
接著下來,就是設(shè)備返回配置描述符給主控器,發(fā)送的數(shù)據(jù)如下:
09 02 22 00 01 01 00 01 32
發(fā)送的數(shù)據(jù)是按下面的結(jié)構(gòu)來定義,這也是在USB協(xié)議里定義的格式。如下:
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
} USB_CONFIGURATION_DESCRIPTOR;
bLength是配置的長度,也就是配置結(jié)構(gòu)的整個(gè)長度。在這里9個(gè)字節(jié)。
bDescriptorType是描述符的類型,這里配置描述符,所以設(shè)置為02。
wTotalLength是所有配置設(shè)置的結(jié)構(gòu)長度。包括配置描述符、接口描述符、HID或者其它描述符和端點(diǎn)描述符的長度。這里是22 00,也就是0x0022個(gè)字節(jié)。
bNumInterfaces是接口個(gè)數(shù),這里一個(gè)。
bConfigurationValue是配置的個(gè)數(shù),當(dāng)設(shè)置配置時(shí)發(fā)送的值。這時(shí)設(shè)置為1個(gè)配置。
iConfiguration是說明配置的字符的偏移值。這里是0。
bmAttributes是配置特性,D7位保留。D6位是說明是否自供電。D5位是否支持遠(yuǎn)程喚醒。D4—D0是保留,設(shè)置為0。
MaxPower是使用的功率,它采用電流來表示。每2mA為單位,比如它的值是50時(shí)就表示是100mA的電流消耗。
通過這樣說明,主控器就知道這個(gè)設(shè)備是什么樣的設(shè)備,有多少功能。
評(píng)論