阅读:1614回复:11
不是FX2的问题,都是是驱动或者应用程序的错
---------------------------------------------------------
各位仁兄: 480M的传输速度应该够快的了,可我从一个5M的CCD读取数据,还会出现ENDPOINT FULL标志,同时丢失相当一部分数据。这会是谁的错?HOST,FX2, OR MASTER? 请指教! --------------------------------------------------------- 托大家福,原因找到了! 就是应用程序和驱动的问题。应用程序中inPacketSize越大,数据丢失越少。当inPacketSize = 1024*60 时,数据还能正常传输。但是当inPacketSize = 1024*64 时,出现in buffer failed。 我想如果不丢失数据, inPacketSize 就应该足够大,大概是1024*2048,这是一帧图象的大小。现在的问题是在驱动程序中修改哪些值,才能使inPacketsize > = 1024*64. |
|
沙发#
发布于:2002-07-03 15:53
估计你用的是ezusb.sys这个文件,最大一次数据为64K.如果你想做得更大,就必须修改源文件了。开发工具提供了源程序的。
|
|
|
板凳#
发布于:2002-07-03 18:31
对呀,我怎么没有想到?高
|
|
地板#
发布于:2002-07-03 20:25
这样做有个问题,程序在读数据时会跟死机一样。
|
|
|
地下室#
发布于:2002-07-03 20:54
原代码我已经看了,但具体修改哪些参数,还是不知道。
Ezusb.c中有 interfaceObject->pipes[j].MaximumTransferSize = 64*1024-1; 和 interfaceinformation->pipes[j].MaximumTransferSize = 64*1024 -1; 我把这两个MaximumTransferSize都设为了64*2048-1。然后重新生成ezusb.sys。但无济于事,还是一样in buffer failed. 大概是修改什么别的参数。 敬请告知!多谢! |
|
5楼#
发布于:2002-07-03 22:31
对不起,刚才的帖子写错了.MaximumTransferSize我设成了1024 * 2048 - 1.试了不行,可能仅仅修改这两处还不行.
|
|
7楼#
发布于:2002-07-04 16:02
如果64K还不够大的话,问题应该出在PC机这方面了.
64K完全够用了. |
|
|
8楼#
发布于:2002-07-05 08:33
如果我在应用程序中进行多次(循环)读操作的话,每次操作之间就会丢失数据。所以我才想用一次操作把数据都接受过来。可64K的限制很难逾越。
一位朋友给我出了个好注意,就是把多次的读操作放到底层去做。我试了,效果很不错,几乎不再丢失数据。 |
|
9楼#
发布于:2002-07-05 10:45
在应用程序中用一个线程专门做读操作,每次要求读取64k,可行不可行?64k限制问题我问过cypress的支持,他说是windows的原因,也不知道说的对不对.
|
|
10楼#
发布于:2002-07-05 11:23
感觉每次可以传输64*1024-1,我试过64*1024,不行。
|
|
11楼#
发布于:2002-07-05 11:26
是的,最多就是65535,多一个就不行了
|
|