wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:5085回复: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包前,各控制寄存器的值。
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-11 10:59
setup.wLength = 0x1200?
我来自中国 抵制日货
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-11 11:08
如果枚举第一步通过了,那么这个问题应该是描述符问题,比如说描述符错误,字节颠倒,描述符发送长度不对(不是定义的长度不对)等。
如果第一步都不正确,存在的问题就还可能是寄存器设置不对,硬件原因等
www.dragon-2008.com 欢迎交流
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的呀!
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-11 11:31
setup.wLength应该是0x0012,device程序要swap一下的。
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-11 11:54
你应该把写入寄存器的数据都检查一遍。
我来自中国 抵制日货
wenxinglu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-06
  • 最后登录2008-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-11 12:08
如果是写不成功应该是硬件问题!

如果是返回不成功!如果你不是用的51,则应DEVICE<<8。
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-11 17:05
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?
wenxinglu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-06
  • 最后登录2008-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-02-11 17:34
兄弟,你不用仿真机的吗?
hdj0569
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2004-02-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-02-11 19:13
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?


你的数据错了
setup.bmRequest = 0x80;
setup.bRequest = 0x06;
setup.wValue = 0x0001;
               ~~~0x0100
setup.wIndex = 0x0000;
setup.wLength = 0x1200;
                ~~~0x0012
zhanghb
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2009-10-11
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望78点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-02-11 19:52
wqs_79
老兄能否帮你的思路给我讲一下,我正在做文件部分的实现
让我们相互交流zhanghuanlin@freemail.soim.com
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-02-12 08:40
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?


设备返回的数据,在芯片的BUFFER里能看到啊
我来自中国 抵制日货
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-02-12 09:42
感谢各位的提点,特别是hdj0569,我现在能收到数据了。因为不能给很多分,只能意思一下!
原因就是0x0001和0x1200反了!
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-02-12 09:46
恭喜,能谈谈你现在的心情吗?
我来自中国 抵制日货
hongboluo
驱动牛犊
驱动牛犊
  • 注册日期2004-03-01
  • 最后登录2004-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-03-15 17:14
请问wqs_79 ,我也遇到了和你同样的问题,而且我也发现cypress给的代码中,把setup包给搞错了,可是我纠正后,现在还是超时,请问你是怎么解决这个问题的?
游客

返回顶部