请教!CY7C68013的速率提不上去

[复制链接]
 楼主| guyappt 发表于 2009-5-17 01:19 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;目前我们有个项目预研,要用USB2.0进行数据上传(由FPGA传至PC机),要求速率在16M&nbsp;bytes/s&nbsp;以上。但目前速率最高仅8M&nbsp;,现在已做了如下测试工作,初步判定速率瓶颈在CY7C68013与PC机之间。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;测试系统结构:CPLD&nbsp;=&gt&nbsp;&nbsp;CY7C68013&nbsp;&nbsp;=&gt&nbsp;&nbsp;PC<br />&nbsp;&nbsp;&nbsp;&nbsp;1、CPLD以8M/s连续产生16位并行测试数据至CY7C68013,即16M&nbsp;bytes/s<br />&nbsp;&nbsp;&nbsp;&nbsp;2、CY7C68013配置为SLAVE&nbsp;FIFO工作模式,单端点。<br />&nbsp;&nbsp;&nbsp;&nbsp;3、PC机对接收数据计数算出速率<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;测试过程及问题:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、在不同配置的PC上进行测试:单核PC上测试最高速率为4M左右;双核PC为8M;但四核PC又仅5M。这些PC主板等配置也不同。<br />&nbsp;&nbsp;&nbsp;&nbsp;请教:USB的传输速率是否与主板、内存或CPU等硬件相关,该如何分析<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;2、将CY7C68013的端点缓冲区分别配置为双缓冲和四缓冲,或者将缓冲区大小分别配置为512和1024字节,速率均无明显变化。用示波器测CY7C68013的FIFO满信号有大约一半时间有效,空信号始终无效,故判断是PC未将数据及时读出。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为进一步验证,将FIFO设定为8位数据宽度,则CPLD的数据仅低8位有效,CPLD写入数据实际速率为8M&nbsp;bytes/s。此时在单核PC上测得速率为4M,测FIFO满标志大约有一半时间有效;在双核PC上测得速率为8M,测FIFO满标志极少有效,即数据被及时读出,故测试速率与CPLD写入速率一致。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再将FIFO设定为16位数据宽度,则CPLD的写入速率为16M&nbsp;bytes/s。此时在双核PC上测得速率为8M,FIFO满标志大约有一半时间有效,与8M/16M的比值一致。<br />&nbsp;&nbsp;&nbsp;&nbsp;以上试验基本验证是PC未及时从FIFO中读取数据,但PC应用层只是执行了接收数据操作,不知是否低层驱动的问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;请教:我在网上搜索时很多案例速率瓶颈都是在USB芯片和外设之间,像我们这种USB芯片与PC间的较少,是否是我们什么配置有问题,我是做硬件的,对软件不怎么了解,临时来做这部分工作。请大家帮忙分析出现这种情况可能是哪些原因,或者提出一些分析试验方法也行,不胜感激!
 楼主| guyappt 发表于 2009-5-18 01:06 | 显示全部楼层

自己顶下,请高手指点

&nbsp;&nbsp;&nbsp;&nbsp;自己顶下,请高手指点
computer00 发表于 2009-5-18 01:42 | 显示全部楼层

你用的是什么驱动?驱动在取数据时,最好一时提交很大一

例如一次就读几百K,不要一次读那么几十字节,太可怜了。
 楼主| guyappt 发表于 2009-5-18 10:49 | 显示全部楼层

re computer00

&nbsp;&nbsp;&nbsp;&nbsp;我设定的是每次读512字节,已经比较大了.也试过1024字节,但速率完全没有改善.<br />&nbsp;&nbsp;&nbsp;&nbsp;今天测了下数据线的波形,发现PC是每隔1段时间取两包数据,每包512字节,大部分时间都在空闲状态,这与测得的速率一致.波形图如下
 楼主| guyappt 发表于 2009-5-18 10:50 | 显示全部楼层

再发张拉开了的

再发张拉开了的
computer00 发表于 2009-5-18 10:57 | 显示全部楼层

你仔细看看我在3楼的回复。是PC端驱动,提交请求时,一次

不是几百字节,差了1000倍。
 楼主| guyappt 发表于 2009-5-18 14:02 | 显示全部楼层

对,我以为是固件的

<br />&nbsp;&nbsp;&nbsp;&nbsp;看错了!谢谢<br />&nbsp;&nbsp;&nbsp;&nbsp;PC端驱动是其他人负责,我去找他们帮忙查下<br />&nbsp;&nbsp;&nbsp;&nbsp;提交请求的大小是在底层驱动里面吧?
computer00 发表于 2009-5-18 15:48 | 显示全部楼层

由你的应用程序直接提交一个很大的包请求,

同时你的功能驱动不要拆包,直接将其传递给下层的总线驱动即可,总线驱动会负责帮你拆包的。<br />应该使用批量传输类型。
 楼主| guyappt 发表于 2009-5-18 16:23 | 显示全部楼层

改对了,谢谢!

<br />&nbsp;&nbsp;&nbsp;&nbsp;改对了,现在速率有15.4M,谢谢啦!<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;我们用的是最大值,再大就报错了.15.4M基本满足要求了,但我们希望留一些余量.还有其他办法可以提高速率么?<br />&nbsp;&nbsp;&nbsp;&nbsp;我将固件中缓冲区大小由512改为了1024,速率变化很小,仅15.8M<br />&nbsp;&nbsp;&nbsp;&nbsp;现在数据线上每个包请求之间已经没什么空闲了,但每小包(1024字节)之间还有空闲,能否应用上?有个朋友说用多端点来回切换,不知能行不
computer00 发表于 2009-5-18 21:21 | 显示全部楼层

双缓冲肯定是要的。对于批量端点,只要总线有空闲,就会

所以增加端点并没有意义。不知道你的设备是否有返回ANK?如果有的话,就说明是设备跟不上了。
McuPlayer 发表于 2009-5-18 22:37 | 显示全部楼层

AP可以把大数据包直接丢给DRV

让WDM帮你去分块切割,它会以每次都是最大包去分配带宽
古道热肠 发表于 2009-5-19 11:40 | 显示全部楼层

哈哈,这CY7C68013的确蛮高速的.

16M字节/s,很快.
 楼主| guyappt 发表于 2009-5-19 11:45 | 显示全部楼层

果然是高手!

&nbsp;&nbsp;&nbsp;&nbsp;果然是高手,每次都能直接找出问题!谢谢!.<br />&nbsp;&nbsp;&nbsp;&nbsp;是设备的速度没跟上,设备的写入速度只有16M&nbsp;BYTES/S,我把写入的速率提高到32M测得速率有28M了.我之前是通过测FIFO的空标志来判断设备速率能否跟上,现在发现只要设备在不停写,就算写入速率低于最大读出速率,FIFO也不会为空.可能是因为必须写满1级缓冲后PC才会读取.<br />&nbsp;&nbsp;&nbsp;&nbsp;你说的&quot;判断设备是否返回ANK&quot;,通过什么方法可以看到(还有其他的各种状态)?如果能有办法知道USB通讯正处于什么状态,那对调试帮助就太大了.<br />&nbsp;&nbsp;&nbsp;&nbsp;现在再整理下文档就可以交差了,真的很感谢computer00的帮助,要不我这个外行不晓得还要搞多久!无以为报,我只对FPGA还算熟悉,如果有这方面问题我一定尽力帮忙
computer00 发表于 2009-5-19 12:48 | 显示全部楼层

你不是都能看到总线上的数据了吗?设备返回的NAK,也是一

暂时不玩FPGA,以后玩了再跟你请教~~~~<br /><br />回复古道:68013支持高速模式(480Mbps),除掉协议开销以及保留带宽,打个7折,还有42MB/s,当然快了。<br />楼主现在都弄到28MB/s了,比你刚刚看到的16MB/s更快了。
 楼主| guyappt 发表于 2009-5-19 21:31 | 显示全部楼层

我是用示波器看的

&nbsp;&nbsp;&nbsp;我是用示波器看的&nbsp;&nbsp;只能看到有多少个包&nbsp;但看不到数据&nbsp;&nbsp;频率太高了&nbsp;&nbsp;&nbsp;能借助什么工具分析么&nbsp;&nbsp;你调试时一般是怎么干的
computer00 发表于 2009-5-20 19:01 | 显示全部楼层

用高频的示波器看了,高速的USB总线分析仪很贵吧

我调试时没看过总线上的数据...都是估摸着瞎试的
lwq030736 发表于 2011-5-31 10:39 | 显示全部楼层
我正在做一个FPGA用USB上传数据的项目~以后有什么问题希望两位高手能指点指点
小弟不胜感激啊
tancm 发表于 2011-6-26 20:33 | 显示全部楼层
我也遇到这个问题,在网上疯狂地寻找答案而最终基本得到解决,请教了若干Q友,在此表示感谢。
上位机采集68013时丢数的原因是上位机两次读间隙,68013FIFO满了,没能及时读出,导致FPGA没能将部分数据写入68013中,从而产生了丢数现象,增加上位机每次读的数据量可以明显减少这种丢数现象。
当速度设置为16MB/s时,上位机虽然有丢数,但是在一定的时间内采集的数据总量是没有减少的,从这点可以断定,上位机的采集速度是跟得上的。解决这种丢数现象的办法是在68013之前加入FIFO或其他类似功能的缓冲区。这时使用的USB驱动依然是官方的Cy驱动,使用CyAPI库编写上位机程序。
网上有许多牛人的观点说丢数是USB驱动的问题。当然可以改写驱动,减少每次读间隔,也可以解决丢数现象。但驱动不是一般人能够写的。
USB-DSN 发表于 2011-9-25 17:00 | 显示全部楼层
15# guyappt
你是用多大频率的示波器看的啊?我也很想看看的我数据情况。
lizardno1 发表于 2011-11-3 23:10 | 显示全部楼层
顶一下!看来能把68013用好了也不是那么简单的啊:P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

17

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部