打印

郁闷,ISP1362搞不定...

[复制链接]
4182|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
computer00|  楼主 | 2007-8-22 01:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以收到out包,并且也正确,然后我返回设备描述符,但是似乎主机并未收到...

以前在2000操作系统上,在BUS HOUND中,没有设置地址也是可以看到数据传输的,现在到了xp,
似乎只有等到设置了地址之后,才能看到数据传输了,郁闷...又没有相关仪器,没办法跟踪啊...

哪位朋友做过ISP1362或者ISP1181的来说说,需要注意哪些地方啊?

相关帖子

沙发
computer00|  楼主 | 2007-8-22 08:51 | 只看该作者

晕...没人回,偶顶上去...

使用特权

评论回复
板凳
computer00|  楼主 | 2007-8-23 09:07 | 只看该作者

有点进展了...昨晚弄到4点多,但是还是没搞定,倒塌...

有点进展,发现原来自己把ack setup和clear buffer的顺序搞反了,因此一直不通.
但是现在还是不通,但至少已经知道以前不通是有原因的,继续再调调或许就可以了,

使用特权

评论回复
地板
computer00|  楼主 | 2007-8-23 16:42 | 只看该作者

还是没搞定...不过又有点进展了,

已经收到设置地址的包了,但是不知道哪搞错了,获取描述符和设置地址的包都变成不是setup包了,结果...还得继续调试,麻烦。

使用特权

评论回复
5
gooog| | 2007-8-23 17:27 | 只看该作者

向zlg借一个工具,呵呵

使用特权

评论回复
6
doob| | 2007-8-23 20:01 | 只看该作者

借个usb分析仪,呵呵

使用特权

评论回复
7
computer00|  楼主 | 2007-8-24 00:25 | 只看该作者

倒...哪有那么容易借到的呀,还是自己慢慢试吧...

使用特权

评论回复
8
古道热肠| | 2007-8-24 11:27 | 只看该作者

没有仪器用串口发监视信息呀

    过去搞D12时都用串口输出USB通讯的内容。好象PC也能蛮能忍受USB设备的等待的,往串口走趟,回头再来处理USB,它也照认。

使用特权

评论回复
9
computer00|  楼主 | 2007-8-24 16:14 | 只看该作者

哎……用串口看了,我将数据返回给主机,但是主机好象没

都不知道哪错了

使用特权

评论回复
10
computer00|  楼主 | 2007-8-25 01:22 | 只看该作者

终于取得了突破性进展...哈哈~~~庆祝一下~~~

我将设置地址和返回0长度的数据包搞反了...

本来,是要先用地址0返回一个0长度的状态包,然后设备才能使用新地址.
所以在我的程序中,我就先返回了0长度的状态包,再来写地址寄存器.
但是这个过程芯片已经做了...就是说,我要先将地址写到这个寄存器中,
然后再来返回0长度的状态包...芯片会等到ACK后,才启用刚刚写入的地址,
倒塌了...都怪我看数据手册不仔细,想当然了...值得检讨。

使用特权

评论回复
11
dadodo| | 2007-8-25 01:38 | 只看该作者

恭喜一下

使用特权

评论回复
12
computer00|  楼主 | 2007-8-25 02:35 | 只看该作者

呵呵,多谢,倒塌睡觉去~~~~~~~

使用特权

评论回复
13
平常人| | 2007-8-25 09:52 | 只看该作者

哈!看样子00不但看数据手册不仔细,而且没有好好研究USB的

这个问题在USB的标准文本中讲得很清楚。

请看USB的标准文本的9.2.6.3节和9.4.6节,9.4.6节讲了各个步骤要做什么。

使用特权

评论回复
14
computer00|  楼主 | 2007-8-25 10:03 | 只看该作者

不会吧...那请问平常人,正确的步骤是怎样呢?

难道不是先返回0长度的状态包,然后等到ACK之后,再来设置新地址吗???

使用特权

评论回复
15
平常人| | 2007-8-25 14:24 | 只看该作者

没错:SET ADDRESS的新地址是要在状态阶段成功完成后才能启用

注意:在收到status stage的ACK后,需要在2ms内启用新地址。请看下面抄录的USB文本中的9.2.6.3一节的第二段。

9.2.6.3 Set Address Processing
After the reset/resume recovery interval, if a device receives a SetAddress() request, the device must be able to complete processing of the request and be able to successfully complete the Status stage of the request within 50 ms. In the case of the SetAddress() request, the Status stage successfully completes when the device sends the zero-length Status packet or when the device sees the ACK in response to the Status stage data packet.

After successful completion of the Status stage, the device is allowed a SetAddress() recovery interval of 2 ms. At the end of this interval, the device must be able to accept Setup packets addressed to the new address. Also, at the end of the recovery interval, the device must not respond to tokens sent to the old address (unless, of course, the old and new address is the same).

00不要紧张,我在13楼说的是你在10楼发言之前忽略了资料上的说明。

使用特权

评论回复
16
doob| | 2007-8-25 15:54 | 只看该作者

呵呵

圈圈做什么东东啊?
要不我也搞一下isp1362,和
圈圈学习一下。。

使用特权

评论回复
17
computer00|  楼主 | 2007-8-25 16:12 | 只看该作者

在做USB MIDI吉他呀,麻烦着呢

恩,看来对协议理解还是没错的,就是先返回状态,然后等它完成再设置地址.

倒塌就倒塌在我就直接按照这个顺序去写程序了,这个芯片有个设置地址的指令,
指令背后跟的就是地址,我开始以为地址写进去就开始生效拉,没想到它倒考虑
得这么周全,要先写进去,然后芯片会等到ACK之后,再来生效...因此这里要把顺序
掉转过来,先设置地址,再来发0长度的状态包,之后等着数据传送完毕就行了。


我没仔细看这个指令,还另有一个原因,就是因为以前我用过philips的另一个USB
芯片,PDIUSBD12,我就是按照先返回状态包,再设置地址来搞的,结果正确了...
可能运气好吧,哎. 不过,前几天问题不在这里,那时还根本没到设置地址阶段呢,
只收到一个请求设备描述符的东东,后来我慢慢调,终于看到有设置地址的指令了,
我设置地址后,接下来就没有响应了,我就知道肯定是设置地址这个地方我搞错了,
再倒回去把数据手册中关于设置地址这个命令仔细的读了一遍,才发现原来是这么一回
事...

使用特权

评论回复
18
doob| | 2007-8-25 17:58 | 只看该作者

看oo的帖子就是学习,很好!

使用特权

评论回复
19
isbit| | 2007-8-25 18:19 | 只看该作者

ao,芯片的处理方法问题啊

使用特权

评论回复
20
qjy_dali| | 2007-8-27 10:57 | 只看该作者

建议研究USB的朋友用USB分析仪,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

246

主题

14693

帖子

210

粉丝