阅读:2711回复:19
cy7c68013数据丢失问题
我作了一个数据采集系统,用的是CY的通用驱动程序。在主机应用程序里,我将每次读取的数据设置成32k,采出来的数据发现每块内(32k)的数据是完整的,可是块与块之间的数据发生了丢失的情况。这到底是什么原因了,请老大们体体意见!!!!
|
|
最新喜欢:farorl... |
沙发#
发布于:2004-11-21 20:54
你使用什么方式? iso方式也丢?
|
|
|
板凳#
发布于:2004-11-22 10:54
我的项目中也有此问题,应该是同步IO的问题。
请问你采集的是实时数据吗? |
|
地板#
发布于:2004-11-22 13:41
我采的是实时数据,用的是bulk方式。楼上的能不能说详细点同步IO是怎么回事!!
|
|
地下室#
发布于:2004-11-22 19:25
bulk包可以这么大吗?
|
|
|
5楼#
发布于:2004-11-22 19:27
还有你是用的
手动还是AUTOIN |
|
|
6楼#
发布于:2004-11-23 15:32
bulk包当然没有这么大,32k是主机每此读取的数据量,我用的是手动
|
|
7楼#
发布于:2004-11-23 16:49
bulk包当然没有这么大,32k是主机每此读取的数据量,我用的是手动 可能是单片机没反应过来,或者FIFO满。 |
|
|
8楼#
发布于:2004-11-24 08:02
cy的缓存有这么大吗,你取32k,如果端口缓存只有4k或更少,你让他怎么反应呢?不知有理否
|
|
|
9楼#
发布于:2004-11-24 09:02
哦 你时手动的 应该分块了。
我用的autoin 后块把前块给覆盖掉了 取不出来。 |
|
|
10楼#
发布于:2004-11-24 12:06
因为你设备端写数据的速率太快了,应该至少大于1MB/s,你可以尝试把速率降到1MB/s以下,这样用就不会丢失数据了,或者将双缓冲改成四缓冲,这样也许能好一点。
根本原因:主机每次发送一个URB需要0.2ms左右的时间,也就是说两个URB之间会有一个0.1ms以上的时间间隙,如果在这个时间内设备端把端点(通常是双缓冲,也就是1024字节)填满了,那么接下下来的数据就会丢失了。当你设备方的传输速率大于1MB/s时,在这个间隙内两个端点都会被填满! 解决办法: 1,降低设备端写数据的速率,也就是降低实时性 2,改驱动,把驱动改成异步IO模式的,通常是用ReadFile/WriteFile来读写数据,这样就不会有丢失数据的现象了。 怎么样?我说明白了吗? |
|
11楼#
发布于:2004-11-24 12:37
多谢jinghuiren。我的采样率只有40k,没有你说的那么快。我觉的根本原因就象你说的那样,但不知道怎么把驱动改成异步io模式。
|
|
12楼#
发布于:2004-11-24 14:29
因为你设备端写数据的速率太快了,应该至少大于1MB/s,你可以尝试把速率降到1MB/s以下,这样用就不会丢失数据了,或者将双缓冲改成四缓冲,这样也许能好一点。 老大,1MB/s太夸张了吧?? 据说cy7c68013可以到20多M字节,最近做的一个数字电视的驱动项目也有10M字节/S的bulk传输不丢数据,肯定是你的驱动有问题。 |
|
|
13楼#
发布于:2004-11-24 14:45
我用的是CY的通用驱动程序哑,难道这也有问题。
|
|
14楼#
发布于:2004-11-24 14:50
10M/s ,不用外加RAM能实现吗?
|
|
|
15楼#
发布于:2004-11-24 14:57
我用的是CY的通用驱动程序哑,难道这也有问题。 YES |
|
|
16楼#
发布于:2004-11-24 15:08
10M/s ,不用外加RAM能实现吗? fimeware不是我做的,我只做了驱动,所以不知道他们加了内存没有,不过他告诉我有最大4k的buffer,但以前他使用时在两个包之间有丢数据,使用我的驱动后就OK了 |
|
|
17楼#
发布于:2004-11-24 16:33
AllenZh能提点建议吗
|
|
18楼#
发布于:2004-11-28 22:55
我没有直接使用通用驱动
|
|
|
19楼#
发布于:2004-11-30 09:35
那应该不会出现你说的问题,我当初做的时候1M的实时传输都不会出现问题的,是不是你用得是1.1模式?如果是2.0是不会出现的
告诉你一个简单的方法,降低你的采样率,这样就知道是不是主机方接受速度不够造成的数据丢失了 |
|