阅读:1983回复:14
我的枚举中为什么没有80 06 00 02 00 00 09 00?
一般的枚举应该是:
(1)80 06 00 01 00 00 40 00 GET DESCR (2)00 05 02 00 00 00 00 00 SET ADDRESS (3)80 06 00 01 00 00 12 00 GET DESCR (4)80 06 00 02 00 00 09 00 GET DESCR(CONFIG) (5)80 06 00 02 00 00 FF 00 GET DESCR(CONFIG) 然后是提示载入驱动硬件驱动。 可是我的为什么在第(3)步80 06 00 01 00 00 12 00之后就直接来了第(5)步80 06 00 02 00 00 ff 00,为什么没有(4)呢? 而且我返回全部的配置描述符后,会有发现新硬件,提示载入驱动的提示!有那位大侠遇到过这种情况,这种情况是否正常呢? |
|
最新喜欢:![]() |
沙发#
发布于:2003-02-16 20:39
没有问题!在USB1。1调试时,我就跟踪发现(4)是可以没有的!只要你的描述符都正确地给回主机了,它就会给你提示加载新硬件的驱动程序!
|
|
|
板凳#
发布于:2003-02-16 21:39
没错,(5)发过去之后就提示我载入新硬件的驱动,那这样的话就是说第(4)步没有也行,呵呵,那我下面就要搞上层的驱动了,多谢多谢,送50分! :)
|
|
地板#
发布于:2003-02-17 13:29
jinnghuiren
你好,我也在搞usb开发,68013,想向你请教问题,可以吗? 我的qq 107947912 |
|
地下室#
发布于:2003-02-18 17:24
调2.0的时候没有出现09 00这个命令,但是调1.1的时候出现了,我的描述符如下:
0x09, // 配置描述表长度 0x02, // 配置描述表类型 0x20,0x00, // 配置描述表及附带表长度 0x01, // 接口配置数 0x01, // 配置描述表标识 0x00, // 配置描述表字符串描述表索引 0xc0, // 自供电 0x32 // 总线供电最大值(*2mA) 可是总是不能通过,不知道是那里出了问题? |
|
5楼#
发布于:2003-02-18 17:36
你的东西很深奥,我不懂,但我有麻烦你的问题 :D
枚举的顺序为什么是那样的? 是在上层驱动中规定的吗? 还是协议规定的,总之应该是在哪儿规定的吧! 请指教! 麻烦了又! |
|
6楼#
发布于:2003-02-18 17:39
我感觉仍是你的配置描述符出了问题,你把你所有配置描述符表贴出来看看
|
|
7楼#
发布于:2003-02-18 17:53
主机并没有让我返回全部的描述符呀,我用的是16位的mcu,所以一次可以写2个字节。用的是2.0的控制器,所以端点0是64个字节的。下面是全部的配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR { unsigned char bLength; unsigned char bDescriptorType; unsigned short wTotalLength; unsigned char bNumInterfaces; unsigned char bConfigurationValue; unsigned char iConfiguration; unsigned char bmAttributes; unsigned char MaxPower; } USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; typedef struct _USB_INTERFACE_DESCRIPTOR { unsigned char bLength; unsigned char bDescriptorType; unsigned char bInterfaceNumber; unsigned char bAlternateSetting; unsigned char bNumEndpoints; unsigned char bInterfaceClass; unsigned char bInterfaceSubClass; unsigned char bInterfaceProtocol; unsigned char iInterface; } USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; typedef struct _USB_ENDPOINT_DESCRIPTOR { unsigned char bLength; unsigned char bDescriptorType; unsigned char bEndpointAddress; unsigned char bmAttributes; unsigned short wMaxPacketSize; unsigned char bInterval; } USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; typedef struct _USB_ALL_CONFIGURATION_DESCRIPTOR { USB_CONFIGURATION_DESCRIPTOR Config_Descr; USB_INTERFACE_DESCRIPTOR Interface_Descr; USB_ENDPOINT_DESCRIPTOR Ep_Descr1; USB_ENDPOINT_DESCRIPTOR Ep_Descr2; } USB_CONFIGURATION_DESCRIPTOR_ALL, *PUSB_CONFIGURATION_DESCRIPTOR_ALL; USB_CONFIGURATION_DESCRIPTOR_ALL ConfigDescr_All = { { 0x09, /*Length of the configuration Descriptor*/ 0x02, /*Configuration Descriptor */ 0x2000, /*Total length of the configurations,interface and class/endpoint*/ 0x01, /*No. of interface supported */ 0x01, /*Configuration Value */ 0x00, /*Index of string descriptor */ 0xC0, /*Configurations Characteristic */ 0x32 /*Maximun Power */ }, { 0x09, /*Length of standard interface descriptor */ 0x04, /*Standard Interface Type */ 0x00, /*No of Interface */ 0x00, /*Alternate Setting Selector */ 0x02, /*No of Endpoints */ 0x00, /*Interface Class */ 0x00, /*ATAPI Interface Sub Class */ 0x00, /*Bulk Only Interface Protocol */ 0x00 /*Index of interface string desriptor */ }, { 0x07, /*Length of Standard Endpoint Descriptor*/ 0x05, /*Standard Endpoint Type */ 0x81, /*Set Bulk endpoint to 1 for ATAPI mode */ 0x02, /*Endpoint Characteristic */ 0x0040, /*Endpoint Max Packet Size */ 0x00 /*Interval for Polling Endpoint for data transfer */ }, { 0x07, /*Length of Standard Endpoint Descriptor*/ 0x05, /*Standard Endpoint Type */ 0x01, /*Set Bulk endpoint to 1 for ATAPI mode */ 0x02, /*Endpoint Characteristic */ 0x0040, /*Endpoint Max Packet Size */ 0x00 /*Interval for Polling Endpoint for data transfer */ } }; |
|
8楼#
发布于:2003-02-18 18:05
你的接口描述符有点问题,接口类(mass storage是80h),子类(SCSI sub class是06h),协议类型(bulk only是50h)
|
|
9楼#
发布于:2003-02-18 20:10
改了之后还是不行,收到80 06 00 02 00 00 09 00后我发送09 02 20 00 01 01 00 c0 32(我的设备是自供电),就停止了,我觉得这个配置描述符没什么问题呀。
|
|
10楼#
发布于:2003-02-19 08:37
此描述符是没什么问题,那会不会是出在操作系统上呢?你还是用的WIN98?主板带USB2.0接口?还是转换卡?你换W2K试试呢?
|
|
11楼#
发布于:2003-02-19 10:07
我用的是win98,但是是用的2。0的转换卡,说不定是操作系统的问题,这几天老是死机,我想老板申请一台新机器试试。先谢谢你了,等问题解决了另开贴送分给你 :)
|
|
12楼#
发布于:2003-02-24 20:44
我也是在收到80 06 00 02 00 00 09 00后返回配置描述符就停止了,,我觉得是最后两个c0,32有问题,不知道你是如何确定的?
|
|
13楼#
发布于:2003-02-25 11:42
根据协议规定,c0那个字节的b7位必须为1;b6位如果是自供电则为1,如果是总线供电则为0,我的是自供电,所以设为1;b5位表示设备是否支持远程唤醒,我的虽然支持但是我不准备使用,所以设为0,这样这个字节就是c0。
32那个字节的值乘于2表示电流的大小,我设置的是100mA,应该没有错吧。 |
|
14楼#
发布于:2003-07-30 22:43
总结一下:之所以我没有收到标题中的那个命令,可能是应为操作系统的原因,我在2k下收到了这个命令,但是由于我的微处理器是16位的,因此我每次发给主机的其实是10个字节,而不是9个字节,因此会出错,后来我通过设置datacount只发给主机9个字节数据,枚举就通过了。
|
|