阅读:5123回复: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 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的呀! |
|
地板#
发布于:2004-02-11 17:05
现在能够返回ACK了,是因为我的程序RAM不够,造成变量出现错误。但是设备返回的数据在哪里看?
|
|
地下室#
发布于:2004-02-12 09:42
感谢各位的提点,特别是hdj0569,我现在能收到数据了。因为不能给很多分,只能意思一下!
原因就是0x0001和0x1200反了! |
|