20楼#
发布于:2004-06-21 10:18
谢谢lejianz。可能是firmware的问题吧,但我一直找不到原因。我做过测试发现,连续发送数据到PC端有时能发送几十M,但有时会莫名其妙的停止PIPE(这个现象很普遍)。显示错误为USB设备没有响应。我认为是上位机应用程序中的所要READ的字节超过了USB设备实际发送的字节。我这样试过:USB设备发送64个字节。PC应用程序一次读65个字节就会出现这个错误。至于为什么会出现这个问题,我一直没搞清楚(因为当要读的数据大于实际发送过来的数据量时Read应该返回实际所读到的字节数)。
而有时还会出现缓冲区溢出的错误。这个错误我是这么来测试的:USB设备发送64个字节。PC应用程序一次读63个字节就会出现这个错误。 但实际上我的USB DEVICE连续发送数据是这样处理的:每次只发送一个packet(64字节),PC应用端每次也只接收一个packet。那为什么会出现上面所说的错误呢?而且前一个错误是致命的,PIPE复位也不管用。而后一错误则可以通过复位重读来解决。 |
|
21楼#
发布于:2004-06-21 11:01
我认为你首先应确定哪一部分有问题:固件还是驱动。如果是D12或者1581,你可以用ZLG的调试助手1.2.总之,你先确定哪一方面出问题。根据你的描述,在IRP_MJ_READ的例程中,它会根据EP的最大长度分为(64+1)的IN PACKET。
|
|
|
22楼#
发布于:2004-06-21 11:29
谢谢lejianz.问题就是我怎么能确定到底是哪边的问题.我用的ARM+linux做USB DEVICE.PC端的驱动我用windriver和driverstudio做了两个版本的驱动(为了验证是否是驱动的问题),都有这个问题.所以我最怀疑的就是固件的问题.但我找了很长时间,怎么分析好象并不可能是固件的问题.所以我很郁闷.
|
|
23楼#
发布于:2004-06-21 11:39
你用哪一款USB IC。先找一下PC端DEMO的驱动(如BULKUSB)确定下来,再分析固件程序。正如我上面所说,如果数据长度大于64,在READ例程中要划分多个PACKET的。
|
|
|
24楼#
发布于:2004-06-21 12:52
没有PC端的DEMO驱动呀,所以只能自己调了。正如我前面所描述的。我并没有发送大于64字节的packet呀,我每次只发64字节,PC端每次也只收64字节的。
|
|
25楼#
发布于:2004-06-21 12:59
我建议你用ZLG的调试助手来调试。
|
|
|
26楼#
发布于:2004-06-21 13:04
ZLG?能给我传个么?多谢
|
|
27楼#
发布于:2004-06-21 13:06
我有1.1的,没问题吧
|
|
28楼#
发布于:2004-06-21 16:04
ding ! guan zhu zhong
|
|
29楼#
发布于:2004-06-22 08:31
看来这个问题很普遍呀,我在usb.org的bbs上也问过了,哪边的高手比较厉害,只是我的问题依然没有解决,呵呵
|
|
上一页
下一页