我是一个刚刚接触USB的菜鸟,现在学习写通过68013采集FPGA发来的数据的上位机程序,感觉对底层的东西都不太了解。
环境:CY7C68013-56Pin的USB芯片、FPGA模拟产生数据发送至USB的FIFO、上位机层面是VC6+CY提供的CYAPI.lib
大致原理:
1. FPGA产生规律的数据(固定帧长38个byte)发送到USB的FIFO,端点重数为4重,FIFO大小512byte,FPGA发送数据速率从9600bps到12Mbps
2. 固件程序在CY给出的固件构架上,进行了端点配置,具体见附件的“固件程序”
3. 驱动程序使用CY提供的通用驱动
4. 上位机程序利用了CYAPI.lib,设计思想是利用“win32定时器+块传输采集FIFO数据”,win32定时器好像最快1ms采集数据一次,这样上位机就是1ms采集FIFO中的512个byte的数据,核心的代码见附件的“上位机程序”
问题:每次采集上来512个byte的数据。从第6次的开始,和上次的512个byte的内容对比,中间有2个byte的数据丢失(数据不连续);而从第21次开始,512个byte中,第482个byte前面和后面的内容出现数据丢失(即数据不连续,且不是2个byte的数据不连续,是剧烈的不连续)。
由于使用win32定时器定时读FIFO,而且最快是1ms读512byte,我感觉和FPGA最快12Mbps的发送速度是有差距的,肯定会有数据的丢失,我上面的测试结果就是在12Mbps的传输速率情况下得到的。由于是4重的FI8FO,我感觉USB内相当于有2M的BUF,而在FPGA内也有4M×16bit(8Mbyte)的BUF,这样总共就是10M(20×512byte),所以从第21次出现大块的数据丢失我感觉可以有此解释。我的主要问题有2个如下:
1. 为什么在第6次开始就会在开头丢失2个byte的数据,这也是由于上位机采集数据和FPGA发送数据的速率差异引起的吗,如果不是,又是什么原因,是因为我的上位机程序在采集完数据后要进行显示数据等处理吗?请高手过目下附件的“上位机程序”指点指点我。
2. 在21次后出现大块数据丢失,这应该和上位机采用win32定时器采集FIFO数据速度过慢有关,那么我上位机应该采用一种什么机制更为合理?请高手过目附件,给出一个“固件程序”中的端点配置和“上位机程序”应该采取什么机制,我看书上有讲过“上位机程序”采用线程,这可取吗?
在此先谢谢各位了!紧急求救~
附件.rar
(13.21 KB)
|