XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1022回复:6

各位高手 ,metalwing和jinghuiren 请进!关于D12 set config request failed !

楼主#
更多 发布于:2004-12-17 10:08
我参照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               // 批量传输时该设置无效
};

后进而勃发
Ivan78
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-09-27
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-17 12:42
兄台,你已经到这步了……我原来那个返回不了device descriptor的问题还未解决哦,你是怎么样解决的,能否告知?
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-17 13:52
我原先的device descriptor的返回问题是由于一些时序的问题!
如果你的代码没有什么问题的话,D12的读写也正常,那就看看时序是否有问题!
下面我已经将描述符贴出,您可以作为参考!
后进而勃发
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-17 15:08
这就有可能是你的不对了,主机已经发了SetConfig给你了(00 09 01 00),你应该给人家返回空包以示应答啊,是不是你忘记发一个空包了?
很可能是这个问题!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-17 15:10
还有,以后抓图抓成jpg的,俺的网本来就慢,你还贴个那么大的图片,还得俺等了半天才打开!
 :D
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-17 15:37
^_^!jinghuiren老大!
抓图就是我的不对了!下次我转换一下!

刚才您说的发空包应答,我已经发送了,可是当我单步调试的时候就出现了图中的信息,当我全速运行,在程序中没有设置断点的时候,主机处于类似死机状态(CPU占99%)。
根据一般的来看,我已经接收到主机的SetConfig,那么说明我的配置描述符,接口描述符,端点描述符都正确了,对吗?那为何我发送空包回主机的时候会出现死机状态。还有就是图中看到的情况是等到主机枚举时间结束之后,发送空包回主机的代码才可以继续运行下去,否则连右下脚的图标都没有出现就DOWN机了!
后进而勃发
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-20 09:28
自己顶一下!
后进而勃发
游客

返回顶部