阅读:2704回复:8
急!!!关于USB采集时数据丢失问题
本单位开发了多路语音信号采集系统,用AN2131作client端主控,通过一个2KB的双口RAM与采集芯片ADuc8XXX连接,向主机通过一个帧长为0x110的ISO口传送,其中256个有效数据,其他用于速率匹配,一般情况下采集帧长,但是当采集时进行其他操作就会严重丢失数据,
host端用一个线程读取数据,用cypress提供的驱动程序,用启动ISO传输;读取ISO不buffer 关闭ISO传输的方式取数。 这个问题快使我失业了,也是我对USB丧失了信心,各位救我。 |
|
最新喜欢:![]()
|
沙发#
发布于:2002-11-14 09:39
ISO方式本来就不保证数据的可靠传输,另外请注意USB传输与采集的时间冲突关系。
|
|
|
板凳#
发布于:2002-11-14 10:23
Hi老兄:
你何苦要用ISO传输呢,不妨采用Bluk传输试一试,速度定能跟得上。 |
|
地板#
发布于:2002-11-14 12:09
我们测试表明,从C51发送的每个包都是正确的,给人的感觉是由于双口RAM数据被冲掉引起的,好像主机不能按时每1ms访问一次引起的,看其资料应该驱动程序在底层维持一个双缓冲,我不知道是不是真的有,如果有底层应该能保证1ms的访问时间。改成bulk好像也有类似现象。很是郁闷。
|
|
|
地下室#
发布于:2002-11-14 17:10
可能是你的应用程序有点问题,你可以试试多线程看看
|
|
5楼#
发布于:2002-11-14 17:37
通常ISO的正确性还是很高的,问题是你的数据量和你的程序的问题。
|
|
|
6楼#
发布于:2002-11-14 17:44
ISO只保证时间,数据量恒定倒是需要采用ISO,若有突发则不行。 一次ISO通信收到的数据量可有可无,要看程序怎么匹配啦! [编辑 - 11/14/02 by xjLegend] |
|
|
7楼#
发布于:2002-11-15 12:10
我开发的是多线程的,给我的感觉是主机不是每ms访问一次,有很长时间不访问的现象,我觉得我有问题,但我不知道问题在那儿。
|
|
|
8楼#
发布于:2002-11-15 14:22
哎,怎么PM发不出来,直接说算了 :D
应该是你的程序问题,一般来说,上面的线程开多了是有一定的问题,但是这也跟你分配的缓冲区有关系。你可以看看开发包下面的ISOSTREAM例子!相信会有帮助! :D |
|
|