打印

请教!CY7C68013的速率提不上去

[复制链接]
10504|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guyappt|  楼主 | 2009-5-17 01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    目前我们有个项目预研,要用USB2.0进行数据上传(由FPGA传至PC机),要求速率在16M bytes/s 以上。但目前速率最高仅8M ,现在已做了如下测试工作,初步判定速率瓶颈在CY7C68013与PC机之间。

    测试系统结构:CPLD =>  CY7C68013  =>  PC
    1、CPLD以8M/s连续产生16位并行测试数据至CY7C68013,即16M bytes/s
    2、CY7C68013配置为SLAVE FIFO工作模式,单端点。
    3、PC机对接收数据计数算出速率

    测试过程及问题:
    1、在不同配置的PC上进行测试:单核PC上测试最高速率为4M左右;双核PC为8M;但四核PC又仅5M。这些PC主板等配置也不同。
    请教:USB的传输速率是否与主板、内存或CPU等硬件相关,该如何分析

    2、将CY7C68013的端点缓冲区分别配置为双缓冲和四缓冲,或者将缓冲区大小分别配置为512和1024字节,速率均无明显变化。用示波器测CY7C68013的FIFO满信号有大约一半时间有效,空信号始终无效,故判断是PC未将数据及时读出。
       为进一步验证,将FIFO设定为8位数据宽度,则CPLD的数据仅低8位有效,CPLD写入数据实际速率为8M bytes/s。此时在单核PC上测得速率为4M,测FIFO满标志大约有一半时间有效;在双核PC上测得速率为8M,测FIFO满标志极少有效,即数据被及时读出,故测试速率与CPLD写入速率一致。
      再将FIFO设定为16位数据宽度,则CPLD的写入速率为16M bytes/s。此时在双核PC上测得速率为8M,FIFO满标志大约有一半时间有效,与8M/16M的比值一致。
    以上试验基本验证是PC未及时从FIFO中读取数据,但PC应用层只是执行了接收数据操作,不知是否低层驱动的问题。
    请教:我在网上搜索时很多案例速率瓶颈都是在USB芯片和外设之间,像我们这种USB芯片与PC间的较少,是否是我们什么配置有问题,我是做硬件的,对软件不怎么了解,临时来做这部分工作。请大家帮忙分析出现这种情况可能是哪些原因,或者提出一些分析试验方法也行,不胜感激!

相关帖子

沙发
guyappt|  楼主 | 2009-5-18 01:06 | 只看该作者

自己顶下,请高手指点

    自己顶下,请高手指点

使用特权

评论回复
板凳
computer00| | 2009-5-18 01:42 | 只看该作者

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

例如一次就读几百K,不要一次读那么几十字节,太可怜了。

使用特权

评论回复
地板
guyappt|  楼主 | 2009-5-18 10:49 | 只看该作者

re computer00

    我设定的是每次读512字节,已经比较大了.也试过1024字节,但速率完全没有改善.
    今天测了下数据线的波形,发现PC是每隔1段时间取两包数据,每包512字节,大部分时间都在空闲状态,这与测得的速率一致.波形图如下

使用特权

评论回复
5
guyappt|  楼主 | 2009-5-18 10:50 | 只看该作者

再发张拉开了的

再发张拉开了的

使用特权

评论回复
6
computer00| | 2009-5-18 10:57 | 只看该作者

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

不是几百字节,差了1000倍。

使用特权

评论回复
7
guyappt|  楼主 | 2009-5-18 14:02 | 只看该作者

对,我以为是固件的


    看错了!谢谢
    PC端驱动是其他人负责,我去找他们帮忙查下
    提交请求的大小是在底层驱动里面吧?

使用特权

评论回复
8
computer00| | 2009-5-18 15:48 | 只看该作者

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

同时你的功能驱动不要拆包,直接将其传递给下层的总线驱动即可,总线驱动会负责帮你拆包的。
应该使用批量传输类型。

使用特权

评论回复
9
guyappt|  楼主 | 2009-5-18 16:23 | 只看该作者

改对了,谢谢!


    改对了,现在速率有15.4M,谢谢啦!

    我们用的是最大值,再大就报错了.15.4M基本满足要求了,但我们希望留一些余量.还有其他办法可以提高速率么?
    我将固件中缓冲区大小由512改为了1024,速率变化很小,仅15.8M
    现在数据线上每个包请求之间已经没什么空闲了,但每小包(1024字节)之间还有空闲,能否应用上?有个朋友说用多端点来回切换,不知能行不

使用特权

评论回复
10
computer00| | 2009-5-18 21:21 | 只看该作者

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

所以增加端点并没有意义。不知道你的设备是否有返回ANK?如果有的话,就说明是设备跟不上了。

使用特权

评论回复
11
McuPlayer| | 2009-5-18 22:37 | 只看该作者

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

让WDM帮你去分块切割,它会以每次都是最大包去分配带宽

使用特权

评论回复
12
古道热肠| | 2009-5-19 11:40 | 只看该作者

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

16M字节/s,很快.

使用特权

评论回复
13
guyappt|  楼主 | 2009-5-19 11:45 | 只看该作者

果然是高手!

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

使用特权

评论回复
14
computer00| | 2009-5-19 12:48 | 只看该作者

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

暂时不玩FPGA,以后玩了再跟你请教~~~~

回复古道:68013支持高速模式(480Mbps),除掉协议开销以及保留带宽,打个7折,还有42MB/s,当然快了。
楼主现在都弄到28MB/s了,比你刚刚看到的16MB/s更快了。

使用特权

评论回复
15
guyappt|  楼主 | 2009-5-19 21:31 | 只看该作者

我是用示波器看的

   我是用示波器看的  只能看到有多少个包 但看不到数据  频率太高了   能借助什么工具分析么  你调试时一般是怎么干的

使用特权

评论回复
16
computer00| | 2009-5-20 19:01 | 只看该作者

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

我调试时没看过总线上的数据...都是估摸着瞎试的

使用特权

评论回复
17
lwq030736| | 2011-5-31 10:39 | 只看该作者
我正在做一个FPGA用USB上传数据的项目~以后有什么问题希望两位高手能指点指点
小弟不胜感激啊

使用特权

评论回复
18
tancm| | 2011-6-26 20:33 | 只看该作者
我也遇到这个问题,在网上疯狂地寻找答案而最终基本得到解决,请教了若干Q友,在此表示感谢。
上位机采集68013时丢数的原因是上位机两次读间隙,68013FIFO满了,没能及时读出,导致FPGA没能将部分数据写入68013中,从而产生了丢数现象,增加上位机每次读的数据量可以明显减少这种丢数现象。
当速度设置为16MB/s时,上位机虽然有丢数,但是在一定的时间内采集的数据总量是没有减少的,从这点可以断定,上位机的采集速度是跟得上的。解决这种丢数现象的办法是在68013之前加入FIFO或其他类似功能的缓冲区。这时使用的USB驱动依然是官方的Cy驱动,使用CyAPI库编写上位机程序。
网上有许多牛人的观点说丢数是USB驱动的问题。当然可以改写驱动,减少每次读间隔,也可以解决丢数现象。但驱动不是一般人能够写的。

使用特权

评论回复
19
USB-DSN| | 2011-9-25 17:00 | 只看该作者
15# guyappt
你是用多大频率的示波器看的啊?我也很想看看的我数据情况。

使用特权

评论回复
20
lizardno1| | 2011-11-3 23:10 | 只看该作者
顶一下!看来能把68013用好了也不是那么简单的啊:P

使用特权

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

本版积分规则

7

主题

17

帖子

1

粉丝