打印

SET CONFIG 与GET DESCRIPTOR的几个小问题,请高手指点

[复制链接]
7658|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icecut|  楼主 | 2007-10-4 13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用at97sam7s64的USB口:
Hlr Ept0 Stp NewReq Std gDesc Cfg 
-------1024-------.//这是配置请求包的wLength的大小
Write0(67) -9--2--67--0--2--1--0--224-//这是回发的数据的10进制共67个
 Hlr Ept0 Wr 8 -50--9--4--0--0--1--2--2-
 Hlr Ept0 Wr 8 -1--0--5--36--0--16--1--5-
 Hlr Ept0 Wr 8 -36--1--1--1--4--36--2--7-
 Hlr Ept0 Wr 8 -5--36--6--0--1--7--5--131-
 Hlr Ept0 Wr 8 -3--64--0--16--9--4--1--0-
 Hlr Ept0 Wr 8 -2--10--0--0--0--7--5--1-
 Hlr Ept0 Wr 8 -2--64--0--0--7--5--130--2-
 Hlr Ept0 Wr 8 -64--0--0-
 Hlr Ept0 Wr 3 EoT 
 Hlr Ept0 Rd Ack 
 Hlr Ept0 Stp NewReq Std sCfg Write0(0) 
 Hlr Ept0 Wr 0 EoT SetCfg() CfgEpt1 CfgEpt2 CfgEpt3 
  24.0  CTL   80 06 00 02  00 00 00 04  GET DESCRIPTOR  1.1.0        
  24.0  DI    09 02 43 00  02 01 00 e0  ..C.....   2.2.0        
              32 09 04 00  00 01 02 02  2.......   2.2.8       
              01 00 05 24  00 10 01 05  ...$....   2.2.16      
              24 01 01 01  04 24 02 07  $....$..   2.2.24      
              05 24 06 00  01 07 05 83  .$......   2.2.32      
              03 40 00 10  09 04 01 00  .@......   2.2.40      
              02 0a 00 00  00 07 05 01  ........   2.2.48      
              02 40 00 00  07 05 82 02  .@......   2.2.56      
  24.0  CTL    00 09 01 00  00 00 00 00  SET CONFIG 3.1.0        
  24.0  USTS   00 0f 00 c0            bad config desc 3.2.0        
  24.0  CTL    00 09 00 00  00 00 00 00  SET CONFIG    4.1.0   
//问题是BUSBOUND收到了64个字符,与发送的相同。最后三个丢失了?哪里去了?
在SET_CONFIG这一项,出现的四个字符我不知道哪里来到。到现在没找到。SET_CONFIG这里第三个配置值是01和00,是什么意思,DDK上我没找到,书上也没发现。
配置没有成功,从DEBUG信息上看,最后一个SET_CONFIG没有响应。是吗?     


相关帖子

沙发
icecut|  楼主 | 2007-10-4 13:37 | 只看该作者

附加

typedef struct {


    unsigned char   bmRequestType;//:8;    //!< Characteristics of the request
    unsigned char   bRequest;//:8;         //!< Particular request
    unsigned short  wValue;//:16;          //!< Request-specific parameter
    unsigned short  wIndex;//:16;          //!< Request-specific parameter
    unsigned short  wLength;//:16;         //!< Length of data for the data phase

} S_usb_request;
这里我注释过了位数,是不是ADS1.2的数据长度我没搞明白?谢谢指点

使用特权

评论回复
板凳
devusb| | 2007-10-4 20:18 | 只看该作者

SET_CONFIG之后没有出现bus reset,time out之类的说明正常

SET_CONFIG是一个没有数据传输的,SETUP命令包里已经有一些参数了。
所以如果这条命令正确应答,就是DEVICE回一个空包就表示命令应答正常,BUSHOUND只会抓到如你所抓的信息。
ADS1.2也有结构体的字对齐问题的话,可能默认的结构体的任何变量都是占2个/4个字节的,不管你申明成什么类型。

使用特权

评论回复
地板
computer00| | 2007-10-4 21:21 | 只看该作者

bushound没有看到后面的部分,也许是你bushound设置了只显示64

使用特权

评论回复
5
icecut|  楼主 | 2007-10-4 21:52 | 只看该作者

没有找到结果。

我把BUSBOUND修改了,显示正确67个字符了。
用一个好用的固件,改成我驱动的PID,同样的不正确,问题定位在驱动方面。

135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp++.  IRP 856C8790
135.250      Default            Usb_6125: IRP: Major=IRP_MJ_PNP Minor=<unknown minor function> (0x18) Flags=0x0
135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp--.  IRP 856C8790, STATUS c00000bb
135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp++.  IRP 856C8790
135.250      Default            Usb_6125: IRP: Major=IRP_MJ_PNP Minor=IRP_MN_QUERY_RESOURCE_REQUIREMENTS (0xb) Flags=0x0
135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp--.  IRP 856C8790, STATUS 0
135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp++.  IRP 856C8790
135.250      Default            Usb_6125: IRP: Major=IRP_MJ_PNP Minor=IRP_MN_FILTER_RESOURCE_REQUIREMENTS (0xd) Flags=0x0
135.250      Default            Usb_6125: Usb_6125Device::DefaultPnp--.  IRP 856C8790, STATUS c00000bb
135.266      Default            Usb_6125: Usb_6125Device::SystemControl++.  IRP 856C2008
135.266      Default            Usb_6125: IRP: Major=IRP_MJ_SYSTEM_CONTROL Minor=IRP_MN_REGINFO_EX (0xb) Flags=0x0
135.266      Default            Usb_6125: Usb_6125Device::SystemControl--.  IRP 856C2008, STATUS 0
135.266      Default            Usb_6125: Usb_6125Device::OnStartDevice++.  IRP 856C8790
135.313      Default            Usb_6125: ActivateConfiguration Error: H/W did not accept configuration URB
135.313      Default            Usb_6125: Usb_6125Device::OnStartDevice--.  IRP 856C8790, STATUS c0000001
这是MONITER监视到的结果,说明我自己生成的驱动可能有问题。出问题的地方都是我没处理的默认DS3.2生成的。这些输出也是它自动生成的。你们有没有见过此类问题啊?谢谢版主和圈圈

使用特权

评论回复
6
icecut|  楼主 | 2007-10-5 16:06 | 只看该作者

疯了……

现在采用串口监视程序运行状态,busbound监视USB状态,USB通过虚拟机驱动到虚拟机xp,然后在虚拟机上开busbound和驱动MONITor,结果是:外部机器成功枚举,虚拟机机器出错。并且最后一个
24.0  CTL    00 09 00 00  00 00 00 00  SET CONFIG    4.1.0   
虚拟机没有发到外部环境中,就是说通过外部busbound可以与硬件通信。而虚拟机上的不能。我的softic还不能用,一用就死机。

使用特权

评论回复
7
computer00| | 2007-10-6 08:28 | 只看该作者

也许虚拟机的bug吧,着可难说了...

使用特权

评论回复
8
icecut|  楼主 | 2007-10-6 12:22 | 只看该作者

唉,ds3.2不可信啊

确切说就是ds3.2的配置函数有误。我现在用DDK提供的源代码,改了一下PID和VID,就能枚举成功,也不蓝屏了。然后改改端点设置,试试有没有其他问题。微软的东西,还要靠微软的提过的例程啊。

使用特权

评论回复
9
computer00| | 2007-10-7 10:01 | 只看该作者

呵呵,DS生成的代码的确会有点小问题,刚开始还会编译不过

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1120

主题

15358

帖子

585

粉丝