前面现已介绍设置USB的设备地址,接着下来是做什么呢?其实有了设备地址后,主控器还会再次发送获取上面现已读取的设备描述符下来,如下:
80 06 00 01 00 00 12 00
然后USB设备也再次回应它,但这次发送的长度是0x0012了,不再是第一次64个字节长度了。
接着USB设备就回来下面的描述符给主控器,也便是第一次现已发送的设备描述符,如下:
12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01
这样分配地址之后,再次获取设备描述符成功了,接着下来便是主控器获取装备描述符。下面便是收到的装备描述符数据:
80 06 00 02 00 00 09 00
剖析上面的数据如下:
bmRequestType是80,表明方向USB设备发送给主控器,接纳设备是USB设备。
bRequest是06,表明这是获取描述符。GET_DESCRIPTOR 6
wValue是00 02。低字节表明偏移地址00,高字节表明描述符的类型。如下:
CONFIGURATION 2
所以这儿的回来的设备描述符是装备描述符。
wIndex是00 00。
wLength是09 00。它表明回来描述符的长度。这儿是9个字节。
接着下来,便是设备回来装备描述符给主控器,发送的数据如下:
09 02 22 00 01 01 00 01 32
发送的数据是按下面的结构来界说,这也是在USB协议里界说的格局。如下:
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
} USB_CONFIGURATION_DESCRIPTOR;
bLength是装备的长度,也便是装备结构的整个长度。在这儿9个字节。
bDescriptorType是描述符的类型,这儿装备描述符,所以设置为02。
wTotalLength是一切装备设置的结构长度。包含装备描述符、接口描述符、HID或许其它描述符和端点描述符的长度。这儿是22 00,也便是0x0022个字节。
bNumInterfaces是接口个数,这儿一个。
bConfigurationValue是装备的个数,当设置装备时发送的值。这时设置为1个装备。
iConfiguration是阐明装备的字符的偏移值。这儿是0。
bmAttributes是装备特性,D7位保存。D6位是阐明是否自供电。D5位是否支撑长途唤醒。D4—D0是保存,设置为0。
MaxPower是运用的功率,它选用电流来表明。每2mA为单位,比方它的值是50时就表明是100mA的电流耗费。
经过这样阐明,主控器就知道这个设备是什么样的设备,有多少功用。