打印

【高人指点】68013采集FPGA数据问题

[复制链接]
6053|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lidongsia|  楼主 | 2010-10-14 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一个刚刚接触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)

相关帖子

沙发
lidongsia|  楼主 | 2010-10-14 10:37 | 只看该作者
对啦,高人们能否留下QQ等联系方式,让小弟有更多请教的机会~谢谢~

使用特权

评论回复
板凳
钻研的鱼| | 2010-10-14 16:09 | 只看该作者
不是完全懂。
几点问题:FPGA内也有4M×16bit(8Mbyte)的BUF,这个除非你用高端的fpga,否则不可能有这么大的buf。另外USB内相当于有2M的BUF,这个不明白。
  你可以尝试fpga发送慢一点,windows读取快一点,验证是否会丢数据,然后慢慢提速

使用特权

评论回复
地板
lidongsia|  楼主 | 2010-10-14 17:26 | 只看该作者
3# 钻研的鱼
FPGA确实有4M×16bit的buf,而且最大可以到128M×16bit,我试着调小了FPGA的BUF为2M×16bit,就变成从第13次开始丢大块数据了。USB的端点重数为4好像就是有4×512byte的BUF

我试着降低FPGA发送数据的速度,最低为9600bps,上位机接受用定时器的话,最快是1000×512×8,大概是3.9Mbps,但是VC的定时器达不到极值,我将FPGA的发数速度降到3Mbps时USB还是会丢失大块数据就说明了这一点,但是当降到9600bps时,好像不会再丢失大块数据了

现在的问题是:

1. 从第六次采集开始,每次开头都会丢失16bit的数据,我不清楚原因在哪儿,这个应该是代码本身的问题,肯定不是上位机读和FPGA发送速度不协调的问题
2. 固件程序中我对端点的配置是否正确,与之对应的上位机程序对CYAPI.lib中功能的调用是否合理,这些会不会成为出现“16bit丢失”的原因所在
3. 上位机使用定时器是行不通了,只能尝试线程,我正在尝试
4. 如果使用线程能解放上位机读数的速度,那么当FPGA处在较慢的发数速率时,会不会出现采集空FIFO的现象,这样会不会导致上位机的内存出错?

使用特权

评论回复
5
钻研的鱼| | 2010-10-15 09:40 | 只看该作者
如果你的fpga外部带sdram,sdram可能有4M×16bit,但fpga内部几乎没有这么大容量。
fpga模拟产生数据,假设fpga和usb的通信速率很低,fpga数据产生速率和通信速率匹配吗?如果
数据产生速率高,而通信速率低,fpga没有任何控制机制,这个数据肯定会丢

使用特权

评论回复
6
lidongsia|  楼主 | 2010-10-15 10:27 | 只看该作者
5# 钻研的鱼
FPGA不存在什么问题,它的唯一作用是协助测试USB的上位机程序,它在向USB德FIFO发数据
它可以控制数据的产生快慢,控制快慢都是为了测试上位机程序,现在的问题都是在上位机,和FPGA本身的关系不大啊

使用特权

评论回复
7
dqyubsh| | 2010-11-10 00:16 | 只看该作者
用windows下定时器来定时是指定不行的,这不是实时场合用的,不靠谱。

数据收发总该有握手,确保每次传输都正确。不正确就要停或者丢弃,不应该出现某个包里丢若干字节而程序毫不知觉和干预。

使用特权

评论回复
8
ygrssm| | 2011-10-21 10:23 | 只看该作者
本人也在做这方面的工作,希望能共同讨论,QQ:253386816

使用特权

评论回复
9
woshidashitou| | 2011-10-22 23:18 | 只看该作者
我现在也在做关于这方面的工作,到时候可以相互讨论,QQ注明身份认证否则不予同意(1183155975)

使用特权

评论回复
10
fshuangy| | 2011-10-26 09:39 | 只看该作者
在搞68013+FPGA数据采集方面的工作,可以一起交流一下。QQ:5952821。请注明身份。:handshake

使用特权

评论回复
11
isophie| | 2011-12-13 13:18 | 只看该作者
楼主lidongsia,能不能留下你的qq联系方式呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝