1、数据丢失原因:
(1)主要原因是Windows不是实时系统,不能保证每次都是准时地完成BULK IN操作,特别是有其他进程运行时(如:笔记本的电源管理、实时杀毒等)。此外如果机器上有其他USB设备,也会造成USB带宽受限引起BULK 传输的实时性不能保证,造成数据丢失。
(2)BULK传输要进行CRC校验,一旦发现有错,数据作废,需要重传,但这是实时系统不允许的,当然也就造成数据丢失。
(3)Device的数据缓冲区容量不够大,以至于HOST稍有停顿,缓冲区就会溢出,造成数据丢失。
(4) 如CY7C68013A数据手册46页图21所示, 在Slave FIFO Asynchronous Write模式, SLWR周期必须 >=120ns,即SLWR频率<=8.3MHz,否则会导致端点FIFO中的数据丢失。
2、解决办法:
(1)卸载主机中所有影响USB带宽和实时性的软件模块,特别是笔记本的电源管理和杀毒软件,拔掉(卸载)其它USB Devices。
(2)加大Device的发送Buffer(例如在数据源于端点之间加个大容量的FIFO,如:IDT72V2103等)和Host的接收Buffer容量, 加大HOST每次BULK传输的总字节数(可减少“微帧”间隔时间)。
(3)如果对个别数据出错(是出错,不是丢失!)的要求不是很严格(如用于观测的图像数据,个别数据出错看不出来,但丢失数据就有可能错行,彩色图像还会错色),可改用ISO方式(注意ISO每帧必须是1024字节),即使传输出错(可能是个别数据出错,对视频图像影响不大!)也保留数据,不需重传,尽量保证传输的实时性,减少数据丢失。
用户1406868 2013-10-22 21:17