阅读:1811回复:13
大侠,请教host读写u盘枚举过程中的超时问题
我发送的第一个setup包就会超时,包的内容是80,06,0001,0000,1200,其中的1200是经过字节交换的。进入usbXfer经转换后成为0012,然后发送给u盘,返回的结果是每次都是超时。都快把人磨死了,
我用的是12m的有源晶振,没有办法啊,我没有48m的有源晶振,用的方法是把7脚(我的sl811是plcc封装28脚)置1,这样内部就会倍频,成为48mhz,请问超时会是这个原因吗?请指教啊。 如果是的话我就去换有源的48兆晶振。 等候回音 |
|
|
沙发#
发布于:2004-09-25 11:58
怎么在总线上看命令有没有发出去?
不是写ep0control这个寄存器就可以了吗?我写入的是27,就是发送数据了。 我没有现成的host啊 |
|
|
板凳#
发布于:2004-09-25 09:11
你在总线上看命令是否发过去了,如果发过去了,那你的电路一般就没
问题. 你的设备应该是好的设备吧,用他到现成的HOST上试一下,并记下响应 的数据,再到你的HOST上试一下,记下响应数据,比较一下有什么不同. 最好发上来,看一下. |
|
|
地板#
发布于:2004-09-24 17:57
这个问题应该不存在的,我可以顺利检测到u盘是全速设备。晶振起振是没有任何问题的,而且我已经在3.3v和地之间连接了两个0.1u的电容滤波,也在5v和地之间连了4个0.1u的电容滤波了啊,原理图做的时候没有画上去( :P)我再加一个滤波电容好了。
你的QQ不可以说吗? |
|
|
地下室#
发布于:2004-09-24 16:56
你的原理图中,USB插座部分的连线与说明有点矛盾。正确的接法是:
+5V,DATA-,DATA+,地。 如果DATA-和DATA+接反的话,检测设备的速率可能是反的,因为全速设备接上时DATA-变高,而低速设备接上时DATA+变高。 你的晶振若能起振,则说明接线没有错误。 另外,你的SL811的三个3.3V电源端可以加三个104的电容(0.1u)试试。 |
|
5楼#
发布于:2004-09-24 11:34
我用的是无源的12M晶体,一样可以。 你也是把sl811的CM引脚置高电平,使得时钟倍频达到48mhz的吗? 我的电路图如下,这样有问题吗? |
|
|
6楼#
发布于:2004-09-24 11:13
是一样的吧,反正都是发这几个数据过去的,
设置寄存器SL811Write(EP0Status,((endpoint&0x0F)|pid)); SL811Write(EP0Counter,usbaddr); SL811Write(EP0Address,data0); SL811Write(EP0XferLen,xferLen); SL11Write(IntStatus,INT_CLEAR); 然后 SL811Write(EP0Control,cmd);就发出去了吗? 我的QQ是170153870,我可以看看你的资料吗? |
|
|
7楼#
发布于:2004-09-24 11:06
我没有用它的ep0xfer,而是直接将数据包(0x80,6,0,1,0,0,0x12,0)写入一缓冲区,然后调用usbxfer。通讯一直是好的。
|
|
8楼#
发布于:2004-09-24 10:56
你的SETUP包是错的,发到usbXfer中不应是0012,而应是1200,低位字了为0x12,应先发。 我试过了,不行啊,还是一样超时。 |
|
|
9楼#
发布于:2004-09-24 10:49
不是吧,在ep0Xfer()中特地执行了unsigned int wLen = WordSwap(setup->wLength);将它转换过来的,难道反而错了?
谢谢指点,我立刻运行试试 |
|
|
10楼#
发布于:2004-09-24 10:40
我用的是无源的12M晶体,一样可以。
你的SETUP包是错的,发到usbXfer中不应是0012,而应是1200,低位字了为0x12,应先发。 |
|
11楼#
发布于:2004-09-24 10:30
手册上说12m可以,但是是有源晶振,但是我使用无缘的一样可以起振
|
|
|
12楼#
发布于:2004-09-24 09:41
按手册上说12MHZ应该可以.
|
|
|
13楼#
发布于:2004-09-24 09:31
你发IN令牌没?芯片手册上要求是多少的晶振,你最好按他要求的.
[编辑 - 9/24/04 by metalwing] |
|
|