wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:2706回复:12

68013:谁偷走了我的带宽?

楼主#
更多 发布于:2007-12-01 15:24
测板板子的USB速度,2.0下最高只有6.5MByte/s,1.1下最高只有240kByte/s,跟理论速度差太远了吧?2.0下应该可以到40M/s,1.1下应该可以到800k/s的。相同的USB端口用HDTone测移动硬盘可以到23M/s。问题会出在哪呢?

68013A工作于Slave FIFO模式,测试时用板上的CPLD检测FLAG,只要不是FULL就往里写。写入速度最大6.25M Word/s,也就是12.5M Byte/s。上位机用的是CyAPI开发包和CyUSB.sys的驱动,只管使劲地读:
    while (1){
        PacketLength=512;
        USBDevice->BulkInEndPt->XferData((unsigned char*)Buf,Dlg->PacketLength);
     }
就这样速度怎么也起不来,哪里出了问题呢?不会是CyUSB驱动吧?使用过的朋友指点一下
y_j_tang
驱动牛犊
驱动牛犊
  • 注册日期2007-09-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-01 16:31
看68013的datasheet 里面有slave fifo方式的时序图,从图上看出最大速度只能到8Mbyte/s
tomlih
驱动小牛
驱动小牛
  • 注册日期2003-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-01 17:38
我现在只能达到8Mbytes/s,
是不是只能这么快了.
还有办法吗?
wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-01 20:05
异步Slave FIFO write写周期是120ns,但是可以写16bit的数据啊,应该是8M Word/s,至少可以到16MByte/s了。我用12M/s的速度写入应该看不到Full Flag的,实际full Flag差不占了一半了。
wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-01 20:24
现在很怀疑是Cyusb驱的问题,但无法确认。。。
wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-01 23:50
终于2.0下做到11.2M/s了,接近于CPLD写FIFO的12.5M/s。应该可以达到这个速度的,提不上来了。IFCLK没接到CPLD上,没办法用同步slave fifo测更高的速度。

提高速度的办法很简单把下面的PacketLength换成比较大的值,如32768就好了。。。。
while (1){
        PacketLength=512;
        USBDevice->BulkInEndPt->XferData((unsigned char*)Buf,Dlg->PacketLength);
 }
看Full Flag的波形,还是时不时有一小段高,可能PC机做为多任务的不可能一直在接收。提高写FIFO的速度应该还可以提高速度。

但是在1.1下的速度还是惨不忍睹的240k/s。难道是68013对full speed支持得不好?看Full flag的波形,连续8段写入,然后一大段等待。为什么有8段连续写想不通。
tomlih
驱动小牛
驱动小牛
  • 注册日期2003-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-12-02 10:47
楼主可否将固件和cpld及应用程序共享一下

发给我也可以:tomlih@tom.com

谢谢
wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-12-02 14:27
固件用的是开发包自带的fw,把EP配好就行了。
CPLD是个测试程序,实际用DSP控制的。

assign      USB_D=16'h0;          
assign      USB_nRD=1'b1;
assign      USB_nOE=1'b1;    
assign      USB_A=2'b10;
assign      PKTEND=1'b0;            // USB packet end

reg [1:0] WE_Count;
reg WEEn;

always @(posedge CLK) //25MHz
    if (WE_Count[1:0]==2'b00)
        if (FLGB) WEEn<=1'b0;//Fifo full
        else WEEn<=1'b1;    //fifo not full

always @(posedge CLK)
    WE_Count<=WE_Count+1'b1;

assign      USB_nWE=~(WE_Count[1] & WEEn);
assign      nSLCS=1'b0;            // USB select
cyundong
驱动牛犊
驱动牛犊
  • 注册日期2007-09-13
  • 最后登录2007-12-08
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-12-03 23:15
你好,我想问一下,PC端编程时,如何用CY提供的库,除了几个头文件和.lib文件,是不是要先在PC机上安装一个开发包,我PC机用的是ezusb.h中的函数,但用CY的库时,总是提示找不到设备,不知道是怎么回事,多谢了
wowow
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望18点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-12-04 22:11
我用的是cyapi.h,用起来比ezusb.h简单的多
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
10楼#
发布于:2007-12-05 11:34
用户被禁言,该主题自动屏蔽!
duanmu012345
驱动牛犊
驱动牛犊
  • 注册日期2007-09-30
  • 最后登录2013-08-04
  • 粉丝2
  • 关注1
  • 积分32分
  • 威望244点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-12-05 13:20
我测试过cy的开发板子光数据传输能到42M/s.
hiberhe
驱动牛犊
驱动牛犊
  • 注册日期2004-06-30
  • 最后登录2010-04-10
  • 粉丝0
  • 关注0
  • 积分255分
  • 威望27点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-12-07 19:12
异步的SlaveFIFO方式速度是不高,使用同步SlaveFIFO方式,可以到5~48M的IFCLK,我测过,可以达30多M以上,但是FullFlag有时有问题,不知道是什么原因,有时整个FIFO就乱了,PC上收不到数据,需要用FIFORESET寄存器(大概是这个名字)进行复位又可以继续传输了。

快速的传输应该要使用同步在好,我现在是使用异步传输大概6M/s。
游客

返回顶部