阅读:1722回复:8
怎样从USB接受数据而不丢失字节?
请各位高手帮帮忙,我现在用ezusb,编一个收发数据的接口,可是不管是用IOCTL_EZUSB_ISO_READ 还是用 IOCTL_EZUSB_START_ISO_STREAM + IOCTL_EZUSB_ READ_ISO_BUFFER
两次读操作之间都会丢失数据。用前一种每次读都要重起管道,每两次读之间都丢失68个字节。用第二种,每两次丢失的数据在几字节到40多字节不等。不知道这样才能消除这种丢数现象? |
|
最新喜欢:![]() |
沙发#
发布于:2002-10-21 15:35
没有这样邪门吧,你的应用的数据传输量多大?
|
|
|
板凳#
发布于:2002-10-21 15:52
我现在是用低速模式,usb不间断的返回从00到ff的数据,我用R_BufferCount=2;R_FramesPerBuffer=8,每次读64个包,每个包的大小用160字节,或70个字节。因为好象驱动每个包只添满65个字节就转下一个包了。
|
|
地板#
发布于:2002-10-21 16:16
低速模式我没有用过,但是全速模式不可能是这样。ISOSTREAM的测试例子正确性很高。
|
|
|
地下室#
发布于:2002-10-21 16:44
那用ISO_STREAM在用read-iso-buffer读数据是,两次读之间该不该加sleep(packetcount)延时呢? 我在低速模式下,不管加不加延时都会丢数。我现在在全速模式下还没有编让USB不断返回数据的固件,只能在低速模式下测试。
|
|
5楼#
发布于:2002-10-21 16:55
不需要加延时,READ完成之后就返回了。你可以直接使用ISOSTREAM的例子固件产生测试数据。
|
|
|
6楼#
发布于:2002-10-21 17:24
我的意思是,在用流,用IOCTL_EZUSB_READ_ISO_BUFFER读,两次读之间需不需要加眼延时,我试过不加延时的话,开辟的内存根本读不满的。USB协议说是1ms传送一个包,但实际情况好象总有出入
|
|
7楼#
发布于:2002-10-21 19:12
我想这和USB系统有关系,不知道老兄用何种传输方式?
|
|
8楼#
发布于:2002-10-21 20:25
不需要延时,读不满没有关系。根据USBD_ISO_PACKET_DESCRIPTOR结构的Length来处理数据。1ms一包,但不是每一包都有数据,没有数据的那包USBD_ISO_PACKET_DESCRIPTOR结构的Length = 0。
|
|
|