wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:5123回复:15

USB的枚举问题,老是不通,急呀。

楼主#
更多 发布于:2004-02-11 09:46
SL811做Host端,插入U盘后,slave_detect()检测到全速设备,进入
EnumUsbDev(0),执行到GetDesc(uAddr,DEVICE,0,18,DBUF)<uAddr=0>,
VendorCmd(BYTE usbaddr,BYTE bReq,BYTE bCmd,WORD wValue,WORD wIndex,WORD wLen,BYTE *pData)函数中对setup进行赋值,
setup.bmRequest  = 0x80;
 setup.bRequest   = 0x06;
 setup.wValue     = 0x0001;
 setup.wIndex     = 0x0000;
 setup.wLength    = 0x1200;
可是在发送时,当第一次发送SETUP包(usbXfer(usbaddr, ep0, PID_SETUP, 0, payload, 8, (BYTE*)setup) )就返回超时。
请教:上面的setup数据是否正确?
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-11 10:24
另外再请教一下在发送SETUP包前,各控制寄存器的值。
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-11 11:26
1。我也在怀疑setup.wLength = 0x1200,但是Cypress给的程序也是这样的。
2。枚举还没有执行,这是第一次向设备发送数据前的setup包呀。

PC的数据:
12.0  CTL    80 06 00 01 - 00 00 12 00                              GET DESCRIPTOR    6.4ms        19.1.0        
  12.0  DI     12 01 10 01 - 00 00 00 08 - d8 0d 03 10 - 00 02 01 02  ................  5.2ms        19.2.0        
               00 01                                                  ..                             19.2.16      
  12.0  CTL    80 06 00 02 - 00 00 09 02                              GET DESCRIPTOR     71us        20.1.0        
  12.0  DI     09 02 20 00 - 01 01 00 80 - 32 09 04 00 - 00 02 08 06  .. .....2.......  7.9ms        20.2.0        
               50 04 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00  P.....@......@..               20.2.16      
  12.0  CTL    00 09 01 00 - 00 00 00 00                              SET CONFIG         31us        21.1.0        
  12.0  CTL    80 06 02 03 - 09 04 1e 00                              GET DESCRIPTOR    3.2ms        22.1.0        
请注意12。0,也是12 00的呀!
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-11 17:05
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-12 09:42
感谢各位的提点,特别是hdj0569,我现在能收到数据了。因为不能给很多分,只能意思一下!
原因就是0x0001和0x1200反了!
游客

返回顶部