阅读:1425回复:7
枚举问题,给分拉
14.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 724.1.0
14.0 DI 12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 ........q....... 14.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 731.1.0 14.0 DI 12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 00 01 ........q....... 731.2.0 14.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 732.1.0 14.0 DI 09 02 2e 00 01 01 00 60 96 .......`. CLEAR FEATURE 743.1.0 14.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 744.1.0 14.0 DI 12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 ........q....... 744.2.0 14.0 CTL 00 05 02 00 00 00 00 00 SET ADDRESS 750.1.0 14.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 751.1.0 14.0 DI 12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 00 01 ........q....... 751.2.0 14.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 752.1.0 14.0 DI 09 02 2e 00 01 01 00 60 96 .......`. 752.2.0 14.0 CTL 23 01 01 00 01 00 00 00 CLEAR FEATURE 753.1.0 14.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 754.1.0 14.0 DI 00 01 00 00 .... 754.2.0 14.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 755.1.0 14.0 DI 01 01 00 00 .... 755.2.0 14.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 756.1.0 14.0 DI 00 01 00 00 下面是描述符集合了,可是没有包在来了而是重复上面的请求?怎么回事? |
|
沙发#
发布于:2005-02-28 11:09
我想,看不到描述符集合的原因是因为回复的描述符是错误的,
09 02 2e 00 01 01 00 60 96 00 00 f0 ff ff 80 f0 ff ff 00 00 01 02 01 00 00 00 98 1f 00 02 00 00 后面从接口描述符就错误了,但前面的回复都很正确 80 06 00 01 00 00 40 00 。。。。12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 00 05 02 00 00 00 00 00 80 06 00 01 00 00 12 00 。。。12 01 10 01 00 00 00 10 71 04 01 18 00 01 00 00 00 01 ........q. . 。。。。 80 06 00 02 00 00 09 00 09 02 2e 00 01 01 00 60 96 那后面的接口描述符错误的原因是什么呢? else if (bDescriptor == 0x02) //USB_CONFIGURATION_DESCRIPTOR_TYPE) { code_transmit((unsigned char *)&ConfigDescr,ControlData.DeviceRequest.wLength); } :( :( [编辑 - 2/28/05 by dxyldl] |
|
板凳#
发布于:2005-02-28 11:29
那个描述符集合是这句话执行的
else if (bDescriptor == 0x02) //USB_CONFIGURATION_DESCRIPTOR_TYPE) { code_transmit((unsigned char *)&ConfigDescr,ControlData.DeviceRequest.wLength); } 可是指针的地址是 &ConfigDescr 读出配置描述符可以理解,那怎么会将&InterfaceDescr的数据读出呢?还有后面的端点配置,就是这个描述符集合 USB_INTERFACE_DESCRIPTOR InterfaceDescr= { 0x09, 0x04, 0, 0, 0x04, 0x08, 0x01, 0, 0 }; |
|
地板#
发布于:2005-03-01 08:25
如果我把接口描述符加到配置描述符后面 typedef struct _USB_CONFIGURATION_DESCRIPTOR { // USHORT bLength; UCHAR bLength; UCHAR bDescriptorType; USHORT wTotalLength; UCHAR bNumInterfaces; UCHAR bConfigurationValue; UCHAR iConfiguration; UCHAR bmAttributes; UCHAR MaxPower; UCHAR ibLength; UCHAR ibDescriptorType; UCHAR ibInterfaceNumber; UCHAR ibAlternateSetting; UCHAR ibNumEndpoints; UCHAR ibInterfaceClass; UCHAR ibInterfaceSubClass; UCHAR ibInterfaceProtocol; UCHAR iiInterface;} USB_CONFIGURATION_DESCRIPTOR ConfigDescr= { 0x09, USB_CONFIGURATION_DESCRIPTOR_TYPE, //bDescriptorType =02H 0x2E, //wTotalLength =2EH 1, //bNumInterfaces 1, //bConfigurationValue 0, //iConfiguratuion 0xa0, //bmAttributes自供电,支持远程唤醒 0x96, //MaxPower 0x09, //bLength =09h 0x04, //bDescriptorType =04h 0, //bInterfaceNumber 接口编号,只有一个 0, //bAlternativeSetting 0x04,// bNumEndpoints 除端点0的端点索引数目,=04H 0x08, //bInterfaceClass =0dch 0x01, //bInterfaceSubClass =0A0H子类代码 0, //bInterfaceProtocol =0B0H协议代码 0 } 就可以收到回复的数据是 80 06 00 02 00 00 ff 00 GET DESCRIPTOR 09 02 2e 00 01 01 00 a0 96 09 04 00 00 04 08 01。 00 00 00 f0 ff ff 80 f0 ff ff 00 00 01 02 02 00 。 00 00 30 5d 00 02 00 00 fd ff 00 c0 fc ff 收到46个字节,可是后面的端点描述符是错误的,不过这个时候,电脑可以找到新硬件,提示装驱动程序,我装了一个驱动程序(ZLG的)在设备管理器中可以看到Philips PDIUSBD12 SMART Evaluation Board,但设备有惊叹号,错误提示(10),我是XP,用ARM,ADS调试,这么长时间,也没人回帖???~~~~~~愚昧中, |
|
地下室#
发布于:2005-03-01 08:26
如果我把接口描述符加到配置描述符后面 typedef struct _USB_CONFIGURATION_DESCRIPTOR { // USHORT bLength; UCHAR bLength; UCHAR bDescriptorType; USHORT wTotalLength; UCHAR bNumInterfaces; UCHAR bConfigurationValue; UCHAR iConfiguration; UCHAR bmAttributes; UCHAR MaxPower; UCHAR ibLength; UCHAR ibDescriptorType; UCHAR ibInterfaceNumber; UCHAR ibAlternateSetting; UCHAR ibNumEndpoints; UCHAR ibInterfaceClass; UCHAR ibInterfaceSubClass; UCHAR ibInterfaceProtocol; UCHAR iiInterface;} USB_CONFIGURATION_DESCRIPTOR ConfigDescr= { 0x09, USB_CONFIGURATION_DESCRIPTOR_TYPE, //bDescriptorType =02H 0x2E, //wTotalLength =2EH 1, //bNumInterfaces 1, //bConfigurationValue 0, //iConfiguratuion 0xa0, //bmAttributes自供电,支持远程唤醒 0x96, //MaxPower 0x09, //bLength =09h 0x04, //bDescriptorType =04h 0, //bInterfaceNumber 接口编号,只有一个 0, //bAlternativeSetting 0x04,// bNumEndpoints 除端点0的端点索引数目,=04H 0x08, //bInterfaceClass =0dch 0x01, //bInterfaceSubClass =0A0H子类代码 0, //bInterfaceProtocol =0B0H协议代码 0 } 就可以收到回复的数据是 80 06 00 02 00 00 ff 00 GET DESCRIPTOR 09 02 2e 00 01 01 00 a0 96 09 04 00 00 04 08 01。 00 00 00 f0 ff ff 80 f0 ff ff 00 00 01 02 02 00 。 00 00 30 5d 00 02 00 00 fd ff 00 c0 fc ff 收到46个字节,可是后面的端点描述符是错误的,不过这个时候,电脑可以找到新硬件,提示装驱动程序,我装了一个驱动程序(ZLG的)在设备管理器中可以看到Philips PDIUSBD12 SMART Evaluation Board,但设备有惊叹号,错误提示(10),我是XP,用ARM,ADS调试,这么长时间,也没人回帖???~~~~~~郁闷中, |
|
5楼#
发布于:2005-03-03 08:29
有人与我一起讨论吗? :(
|
|
6楼#
发布于:2005-03-03 10:15
我想是由于你的端点描述符是错误的,可能和你装到pc上的驱动的某些设置不符合,从而导致了设备管理器中的错误提示。
嘿嘿,我也不是很明白,只是想到了这一点,希望能给你个小小的提示啦。 |
|
7楼#
发布于:2005-03-04 14:13
大哥,现在不是驱动的问题,问题是在描述符集合的时候出错,就是说只可以返回配置描述符,我想原因是
else if (bDescriptor == 0x02) //USB_CONFIGURATION_DESCRIPTOR_TYPE) { code_transmit((unsigned char *)&ConfigDescr,ControlData.DeviceRequest.wLength); } 后面的接口和端点描述符读不出,还有就是很不稳定,就是枚举的步骤经常进行不下去就没反映了,有时候2步有时候3步,有时候4步 |
|