阅读:1022回复:6
各位高手 ,metalwing和jinghuiren 请进!关于D12 set config request failed !
我参照USB网站上提供的USB PRINT1.1说明更改了描述符,可是情况有所改变,主机进行两次set config之后无响应。如下图:
我将描述符设置贴出来(针对usbprint):请各位指出那里不正确。多谢! //设备描述符 USB_DEVICE_DESCRIPTOR DeviceDescr = { sizeof(USB_DEVICE_DESCRIPTOR), // 设备描述符长度, =0x12 USB_DEVICE_DESCRIPTOR_TYPE, // 设备描述符类型, =0x01 0x0110, // 协议版本, =1.10 0x0, 0x07 // 设备类型 0x0, // 设备子类 0x0, // 设备协议 EP0_PACKET_SIZE, // 端点0最大数据包大小, =0x10 0x0471, // PHILIPS公司的设备ID 0x0111, // 设备制造商定的产品ID 0x0100, // 设备系列号 0, // iManufacturer 0, // iProduct 0, // iSerialNumber 5 // 可能配置数 }; //配置描述符 USB_CONFIGURATION_DESCRIPTOR ConfigDescr = { sizeof(USB_CONFIGURATION_DESCRIPTOR), // 配置描述符的长度, =0x09 USB_CONFIGURATION_DESCRIPTOR_TYPE, // 配置描述符的类型, =0x02 CONFIG_DESCRIPTOR_LENGTH, // 描述符总长度 =0x2e 1, // 只支持1个接口 1, // 配置值 0, // 字符串描述符指针(无) 0x40, // 自供电 0x32 // 最大功耗(100mA) }; //接口描述符 USB_INTERFACE_DESCRIPTOR InterfaceDescr = { sizeof(USB_INTERFACE_DESCRIPTOR), // 接口描述符长度, =0x09 USB_INTERFACE_DESCRIPTOR_TYPE, // 接口描述符类型, =0x04 0, // 接口数,只有1个 0, // 可选配置,只有1个 0x02, // 除端点0的端点索引数目 =0x04 USB_DEVICE_CLASS_PRINTER, // 设备类型 打印机类 1, // 子类代码 0x01, // 协议代码 0 // 字符串描述符指针(无) }; //端点1发送描述符 USB_ENDPOINT_DESCRIPTOR EP1_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x81, // 端点1IN USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03 EP1_PACKET_SIZE, // 端点最大包的大小, =0x10 10 // 传输间隔时间, =10ms }; //端点1接收描述符 USB_ENDPOINT_DESCRIPTOR EP1_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x01, // 端点1OUT USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03 EP1_PACKET_SIZE, // 端点最大包的大小, =0x10 10 // 传输间隔时间, =10ms }; //端点2发送描述符 USB_ENDPOINT_DESCRIPTOR EP2_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x82, // 端点2IN USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02 EP2_PACKET_SIZE, // 端点最大包的大小, =0x40 0 // 批量传输时该设置无效 }; //端点2接收描述符 USB_ENDPOINT_DESCRIPTOR EP2_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x02, // 端点2OUT USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02 EP2_PACKET_SIZE, // 端点最大包的大小, =0x40 0 // 批量传输时该设置无效 }; USB_TOTAL_DESCRIPTOR TotalDescriptor= { sizeof(USB_CONFIGURATION_DESCRIPTOR), // 配置描述符的长度, =0x09 USB_CONFIGURATION_DESCRIPTOR_TYPE, // 配置描述符的类型, =0x02 CONFIG_DESCRIPTOR_LENGTH, // 描述符总长度 =0x2e 1, // 只支持1个接口 1, // 配置值 0, // 字符串描述符指针(无) 0x40, // 自供电 0x32, // 最大功耗(100mA) sizeof(USB_INTERFACE_DESCRIPTOR), // 接口描述符长度, =0x09 USB_INTERFACE_DESCRIPTOR_TYPE, // 接口描述符类型, =0x04 0, // 接口数,只有1个 0, // 可选配置,只有1个 0x02, // 除端点0的端点索引数目 =0x04 0x07,//USB_DEVICE_CLASS_PRINTER, // 设备类型 打印机类 0x01, // 子类代码 应该为printer 0x01, // 协议代码 0, // 字符串描述符指针(无) sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x81, // 端点1IN USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03 EP1_PACKET_SIZE, // 端点最大包的大小, =0x10 10, // 传输间隔时间, sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x01, // 端点1OUT USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03 EP1_PACKET_SIZE, // 端点最大包的大小, =0x10 10, // 传输间隔时间, sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x82, // 端点2IN USB_ENDPOINT_TYPE_BULK, //批量传输, =0x03 EP2_PACKET_SIZE, // 端点最大包的大小, =0x40 0, // 批量传输时该设置无效 sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07 USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05 0x02, // 端点2OUT USB_ENDPOINT_TYPE_BULK, //批量传输, =0x03 EP2_PACKET_SIZE, // 端点最大包的大小, =0x40 0 // 批量传输时该设置无效 }; |
|
|
沙发#
发布于:2004-12-17 12:42
兄台,你已经到这步了……我原来那个返回不了device descriptor的问题还未解决哦,你是怎么样解决的,能否告知?
|
|
板凳#
发布于:2004-12-17 13:52
我原先的device descriptor的返回问题是由于一些时序的问题!
如果你的代码没有什么问题的话,D12的读写也正常,那就看看时序是否有问题! 下面我已经将描述符贴出,您可以作为参考! |
|
|
地板#
发布于:2004-12-17 15:08
这就有可能是你的不对了,主机已经发了SetConfig给你了(00 09 01 00),你应该给人家返回空包以示应答啊,是不是你忘记发一个空包了?
很可能是这个问题! |
|
地下室#
发布于:2004-12-17 15:10
还有,以后抓图抓成jpg的,俺的网本来就慢,你还贴个那么大的图片,还得俺等了半天才打开!
:D |
|
5楼#
发布于:2004-12-17 15:37
^_^!jinghuiren老大!
抓图就是我的不对了!下次我转换一下! 刚才您说的发空包应答,我已经发送了,可是当我单步调试的时候就出现了图中的信息,当我全速运行,在程序中没有设置断点的时候,主机处于类似死机状态(CPU占99%)。 根据一般的来看,我已经接收到主机的SetConfig,那么说明我的配置描述符,接口描述符,端点描述符都正确了,对吗?那为何我发送空包回主机的时候会出现死机状态。还有就是图中看到的情况是等到主机枚举时间结束之后,发送空包回主机的代码才可以继续运行下去,否则连右下脚的图标都没有出现就DOWN机了! |
|
|
6楼#
发布于:2004-12-20 09:28
自己顶一下!
|
|
|