guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2114回复:7

请教!CY7C68013的速率提不上去

楼主#
更多 发布于:2009-05-17 01:29
    目前我们有个项目预研,要用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间的较少,是否是我们什么配置有问题,我是做硬件的,对软件不怎么了解,临时来做这部分工作。请大家帮忙分析出现这种情况可能是哪些原因,或者提出一些分析试验方法也行,不胜感激!
lipengbo
驱动牛犊
驱动牛犊
  • 注册日期2009-05-02
  • 最后登录2010-03-08
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-05-17 10:01
您好,请问你是不是已经实现了数据测传输,我弄了好长时间都没有成功,不知道怎么调试,帮忙看看我的代码可以吗?谢谢了,我的qq号码是243310820,想和您探讨一下。
CPUCS = 0x08;        // CLKSPD[1:0]=01, for 24MHz operation

    IFCONFIG = 0x0B;     // 0000 1011    异步bit3
    SYNCDELAY;
    
    REVCTL = 0x01;           //注意,我设成自动arm 端点buffer模式
    SYNCDELAY;
    //IFCONFIG = 0XCB;
    //SYNCDELAY;
    EP1OUTCFG = 0x20;//禁止端点EP1输出
    EP1INCFG = 0x20;//禁止端点EP1输入
    
    
    EP2CFG = 0xA2; // 1010 0010 bit6=1表out
    SYNCDELAY;
    EP4CFG = 0x60; //not valid
    SYNCDELAY;
    EP6CFG = 0xE2; //1110 0010 bit6=1表in
    SYNCDELAY;
    EP8CFG = 0x60; //not valid
    SYNCDELAY;


    SYNCDELAY;
    FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions
    SYNCDELAY;                    // see TRM section 15.14
    FIFORESET = 0x02;             // reset, FIFO 2
    SYNCDELAY;                    //
    FIFORESET = 0x06;             // reset, FIFO 6
    SYNCDELAY;                    //
    FIFORESET = 0x00;             // deactivate NAK-ALL

    //空满标记都是默认低电平有效

    SYNCDELAY;
    PINFLAGSAB = 0xA4;            //1010 0100 ,FLAGA=EP2 full flag FLAGB=EP6 full flag
    SYNCDELAY;
    PINFLAGSCD = 0xC8;            //1101 1000 ,FLAGC=EP2 empty flag FLAGD=EP6 empty flag
    SYNCDELAY;
    
    //PINFLAGSAB = 0x00;     // defines FLAGA as prog-level flag, pointed to by FIFOADR[1:0] FLAGB as full flag,
    //SYNCDELAY;         // as pointed to by FIFOADR[1:0] FLAGC as empty flag,
    //PINFLAGSCD = 0x00;     // as pointed to by FIFOADR[1:0] won't generally need FLAGD
    
    PORTACFG |= 0x40;             // SLCS of PA6 pin
    SYNCDELAY;
    FIFOPINPOLAR = 0x00;          // SLOE  SLWR  SLRD   set all slave FIFO interface pins as active low
    SYNCDELAY;
    
    // out endpoints do not POR (power-on reset) armed since the defaults are double buffered we must
    // write dummy byte counts twice arm EP2OUT & EP4OUT by writing to the byte count w/skip.
    EP2BCL = 0x80;
    SYNCDELAY;
    EP2BCL = 0x80;
    SYNCDELAY;
    EP6BCL = 0x80;
    SYNCDELAY;
    EP6BCL = 0x80;
    SYNCDELAY;

    // handle the case where we were already in AUTO mode,WORDWIDE=1...
    EP2FIFOCFG = 0X01;//0000 0001 BIT 4=1 auto out   手动
    SYNCDELAY;
    EP6FIFOCFG = 0x0D;//0000 1101 BIT 3=1 auto in
    SYNCDELAY;
    
guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-05-17 11:49
       这样看代码我也看不出什么,不过有几点你可以注意下
    1、描述符文件需要修改的与固件配置一致,特别是缓冲区大小,我开始设置错误时也无法传输
    2、固件设计可以直接在CYPRESS的模版基础上修改,这样比较简单。
    3、不知你的外设是什么,第一步要先确认外设是否将数据写入了FIFO,这可以通过测量FIFO满空标志来验证
    4、调试可以分步进行,先直接用固件产生测试数据通过端点传送至上位机。CYPRESS有提供批量传输的例程,实现了PC将数据传送至一个端点,再通过另一个端点读回的功能,你可以参考下。
    
lipengbo
驱动牛犊
驱动牛犊
  • 注册日期2009-05-02
  • 最后登录2010-03-08
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-05-17 21:08
谢谢楼主,留个QQ吧,想和你请教请教!!
guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-05-18 01:06
        81346608   我上QQ比较少,不一定遇得到  你可以发邮件讨论 peitao123@163.com    
guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-05-18 10:28
我测试了下数据线,发现大部分时间都是空闲状态,PC每收两个包,等待很久,然后才再接收两个包  
在4M速率时两次接收间隔为250us ,请遇到过该问题的朋友指点下,谢谢
guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-05-18 10:35
      把波形发上来
guyappt
驱动牛犊
驱动牛犊
  • 注册日期2009-05-17
  • 最后登录2009-05-19
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望71点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-05-18 10:38
        请了解的朋友指点下,谢谢!
游客

返回顶部