阅读:5085回复:15
USB的枚举问题,老是不通,急呀。
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数据是否正确? |
|
沙发#
发布于:2004-02-11 10:24
另外再请教一下在发送SETUP包前,各控制寄存器的值。
|
|
板凳#
发布于:2004-02-11 10:59
setup.wLength = 0x1200?
|
|
|
地板#
发布于:2004-02-11 11:08
如果枚举第一步通过了,那么这个问题应该是描述符问题,比如说描述符错误,字节颠倒,描述符发送长度不对(不是定义的长度不对)等。
如果第一步都不正确,存在的问题就还可能是寄存器设置不对,硬件原因等 |
|
|
地下室#
发布于: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的呀! |
|
5楼#
发布于:2004-02-11 11:31
setup.wLength应该是0x0012,device程序要swap一下的。
|
|
6楼#
发布于:2004-02-11 11:54
你应该把写入寄存器的数据都检查一遍。
|
|
|
7楼#
发布于:2004-02-11 12:08
如果是写不成功应该是硬件问题!
如果是返回不成功!如果你不是用的51,则应DEVICE<<8。 |
|
8楼#
发布于:2004-02-11 17:05
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?
|
|
9楼#
发布于:2004-02-11 17:34
兄弟,你不用仿真机的吗?
|
|
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 |
|
11楼#
发布于:2004-02-11 19:52
wqs_79
老兄能否帮你的思路给我讲一下,我正在做文件部分的实现 让我们相互交流zhanghuanlin@freemail.soim.com |
|
12楼#
发布于:2004-02-12 08:40
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看? 设备返回的数据,在芯片的BUFFER里能看到啊 |
|
|
13楼#
发布于:2004-02-12 09:42
感谢各位的提点,特别是hdj0569,我现在能收到数据了。因为不能给很多分,只能意思一下!
原因就是0x0001和0x1200反了! |
|
14楼#
发布于:2004-02-12 09:46
恭喜,能谈谈你现在的心情吗?
|
|
|
15楼#
发布于:2004-03-15 17:14
请问wqs_79 ,我也遇到了和你同样的问题,而且我也发现cypress给的代码中,把setup包给搞错了,可是我纠正后,现在还是超时,请问你是怎么解决这个问题的?
|
|