阅读:2024回复:12
关于用USB采集数据的问题求救!!
急!!!
我用USB开发一块8路数据同时采集的数据采集卡,用ISO方是向主机传送数据。驱动用Cypress的驱动,主机端采集数据首先用 ISO_START 启动ISO传输 然后不断调用ISO_READ取回数据, 最后用ISO_STOP。可以正确采集。 但是在采集是如果我启动其它程序或切换应用程序 就会出现采集数据错误的现象。 我不知道是由于什么原因引起的,这个问题直接影响我们产品的推出,请各位大侠帮忙。 先谢了。 |
|
最新喜欢:![]()
|
沙发#
发布于:2002-06-23 15:15
数据采集系统用iso传输好吗?还是用bulk
|
|
板凳#
发布于:2002-06-23 15:30
传输是用ISO方式传输,每毫秒传输一次,我自己还得进行速率匹配,本来我是用bulk方式传输的,EZ_USB可以用8个bulk传输每个bulk缓冲区是64字节,我用8KHz8路采样,每毫秒就采集一块bulk,这样留给host相应的时间就是8ms,这样不能抵抗系统调度的抖动。我看到用ISO方式传输时可以给驱动送一个较大的缓冲区,所以用ISO方式传输,但是还是不能经得起任务切换这样的系统调度,我很苦恼的。
|
|
|
地板#
发布于:2002-06-23 16:06
8路同时采样还是轮流采样?8位还是12位?
|
|
地下室#
发布于:2002-06-23 16:24
如果你的处理器资源补其它程序完全占用了,那么系统就没有时间来保存ISO的数据。如果ISO数据有一部分没有来得及读取,那到就会出来错误。
你可以试试这种方法。开一个进程专门来读取数据,然后把这个进程的优先级设高一点。 |
|
|
5楼#
发布于:2002-06-23 16:47
takaya兄说的方法我可以试试,但愿能成功。我先做一下。
|
|
|
6楼#
发布于:2002-06-23 17:01
是用线程时os给你的时间多呢还是你直接用一个死循环读数给的多呢?是否采用线程不是最关键的地方。如果硬件不加缓存,无论如何你都不能保证正确的读写时序。
|
|
7楼#
发布于:2002-06-23 17:16
另外我还建议你不要用ezusb控制采样,它只负责传输,那么另加一个mcu控制采样,数据先进入缓存,再由ezusb读出,你所说的8ms问题可完全得到解决
|
|
8楼#
发布于:2002-06-23 17:29
加硬件缓存很麻烦呀。
|
|
|
9楼#
发布于:2002-06-23 18:35
呵呵,不要只怕更麻烦
|
|
10楼#
发布于:2002-06-24 03:46
可能sunki兄说得对,我在硬件加点缓存我想用bulk方式可以解决,那吗下一个问题,用bulk方式我怎吗解决host和slave 同步问题,因为应用中发现,如果不同步会有1/2的概率传输是错误的,即host从那个bulk先读的问题,如果不解决也会有问题,这个问题该如何解决?
|
|
|
11楼#
发布于:2002-06-24 09:23
USB IN有一个缓存问题,即固件程序写入一个数据,应用程序需读两次,所以固件程序默认时写入0长度数据。
|
|
12楼#
发布于:2002-06-24 14:22
plasma兄:
“USB IN有一个缓存问题,即固件程序写入一个数据,应用程序需读两次,所以固件程序默认时写入0长度数据。” 我不太明白,请详细解释。 我想USB是个好东西,这些问题时我对其很泄气,但是我想一定有解决的方法,让我们大家想想。如果解决了这个问题,我会对它的兴趣大增。 我觉得ISO方式不会是因为外设慢的问题,定在驱动内部。 但是我不解,如果避开这种方式,我觉得也不好。 |
|
|