guo_bin76
驱动牛犊
驱动牛犊
  • 注册日期2003-02-13
  • 最后登录2010-11-20
  • 粉丝0
  • 关注0
  • 积分129分
  • 威望74点
  • 贡献值1点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:5357回复:14

CY7C68013A做64M U盘速度慢得吓人

楼主#
更多 发布于:2009-01-23 00:14
我用CY7C68013A做64M U盘,实测从U盘中COPY 6M的文件到硬盘,full speed时为144KB/sec,high speed时为180KB/sec
为什么这么慢呢?还不如我以前用STC51+D12的速度,当时做的U盘读速度可以到400KB/sec,
分析了一下,应该是CPU写到FIFO比较耗时,哪位用68013做过U盘呀,你们的实际测试读速度是多少呢?我感觉我的代码已经没有优化压缩空间了,难道是写FIFO还不够好,造成了速度瓶颈。

下面是做read10的SCSI命令

while(length)
     {    
        if (SetReadCMDFlag)
            {
            SetReadCMDFlag = FALSE;
            FLASH_EN();            
            DATA_OUT();
            FLASH_CMD();
            FLASH_WRITE(0x00);            
            FLASH_ADD();
            FLASH_WRITE(0x00);        //A0-A7
            FLASH_WRITE(BLK.Addr[3]);    //A9-A16
            FLASH_WRITE(BLK.Addr[2]);    //A17-A24
            FLASH_WRITE(BLK.Addr[1]);    //A25
            FLASH_DAT();
            DATA_IN();
            }

    FLASH_WAITBUSY();            

    if (HighSpeedFlag)
        {
        while (!(EP2468STAT & bmEP6EMPTY));        //等待EP6为空        
        
        AUTOPTRH2 = MSB( &EP6FIFOBUF );
                                AUTOPTRL2 = LSB( &EP6FIFOBUF );

        for (USB20PacketDataIndex = 0; USB20PacketDataIndex < USB20_PACKETSIZE; USB20PacketDataIndex++)    
            FLASH_READ(EXTAUTODAT2);        //高速模式下可以一次传512bytes
        SYNCDELAY;        
        EP6BCH = MSB(USB20_PACKETSIZE);  
        SYNCDELAY;  
        EP6BCL = LSB(USB20_PACKETSIZE);        // arm EP6IN                
        }
    else
        {
        //在full speed 模式下一个扇区512bytes需要分成8次来传,每次为64bytes即一个包
        for (i = 0; i < 8; i++)    这个循环里面直接关系到读U盘速度    
            {
            while (!(EP2468STAT & bmEP6EMPTY));                
            
            AUTOPTRH2 = MSB( &EP6FIFOBUF );
                                    AUTOPTRL2 = LSB( &EP6FIFOBUF );

            for (USB11PacketDataIndex = 0; USB11PacketDataIndex < USB11_PACKETSIZE; USB11PacketDataIndex++)    
                FLASH_READ(EXTAUTODAT2);        
            SYNCDELAY;        
            EP6BCH = MSB(USB11_PACKETSIZE);  
            SYNCDELAY;  
            EP6BCL = LSB(USB11_PACKETSIZE);        // arm EP6IN        
            }    
       
                                           }    
    
    BlockPage++;
    if (BlockPage == BLOCK_MAXPAGE)
        {
        BlockPage = 0;
        SetReadCMDFlag = 1;
        FLASH_DIS();
        }
    else
        {
        //
        for (i = 0; i < 16; i++)    
            {
            FLASH_RE = 0;
            FLASH_RE = 1;
            }
        }
    
      length--;                                            
      BLK.Block++;                                        
     }


snow
guo_bin76
驱动牛犊
驱动牛犊
  • 注册日期2003-02-13
  • 最后登录2010-11-20
  • 粉丝0
  • 关注0
  • 积分129分
  • 威望74点
  • 贡献值1点
  • 好评度12点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-01-26 13:47
这么快都沉了呀,难道没有人用68013做U盘
snow
guo_bin76
驱动牛犊
驱动牛犊
  • 注册日期2003-02-13
  • 最后登录2010-11-20
  • 粉丝0
  • 关注0
  • 积分129分
  • 威望74点
  • 贡献值1点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-02-08 21:51
再来顶一下,再等等看看有没有哪位大虾做过一样的东西
snow
wsqss2004
驱动小牛
驱动小牛
  • 注册日期2004-06-11
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分994分
  • 威望202点
  • 贡献值2点
  • 好评度91点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-02-16 00:51
2年前做过,速度太低,不能用,即使是用gpif做,也一样.
QQ:240692087
lling
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2010-12-23
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望181点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-03-01 17:18
我最近被安排就负责这个,希望高手能够指点。谢谢
liangzhiyang
驱动牛犊
驱动牛犊
  • 注册日期2009-02-21
  • 最后登录2009-03-21
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-03-05 23:53
我也用这个
lufanshui
驱动牛犊
驱动牛犊
  • 注册日期2009-05-21
  • 最后登录2009-05-22
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-05-22 15:07
不会吧,我还指望它的速度能达到24M呢?看大家都说不行
fliky
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2011-02-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望46点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-05-30 23:38
        你这样直接用68013a又进行通讯又进行控制FLASH芯片,再加上解析SISC协议,速度一定高不上去,且不说解析花的时间,就只算写FLASH和擦除FLASH花的时间也大大的超过了通讯所花的时间,特别是擦除FLASH,所以速度上不去的.
        不过你比我作得好多了,我作那个最高才70k左右.
lling
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2010-12-23
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望181点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-06-26 11:11
在设计中遇到了问题:不知道FLASH的CLE ,ALE,CE#和R/B#引脚该怎么和CY7C68013-128接?

请求高手能够指点,谢谢!
fliky
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2011-02-22
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望46点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2009-07-03 23:53
    光用68013+flash芯片作U盘我个人认为速度是不可能作到多快的,因为要用68013里面的8051单片机作flash读写控制和SCSI命令解析,我们可以算算8051的数据吞吐量,最高工作主频48M,12个时钟周期一个机器周期,一个机器代码平均2个周期,就是48M/12/2=2M字节/秒,就算大概传输速度在这个值,解析SCSI命令的时间就忽略不算。再看控制flash芯片。拿k9f2808来说,擦除块时间2mS,写入一个页的时间200uS,读就不说了,写一个未擦除的页就是2.2mS.这2.2mS你的CPU是在等待的,而且PC机的写命令是没有优化过的。经常重复写相近的块里的页(FAT表特别是这样),再加上,写一个其它页已经有数据的块里的一页内容时,是先把这块的数据拷到另一个临时块中,再写回来,就是说,要擦除和写入各一次 更不要说从芯片上读写命令、数据等等的时间。flash操作时,你的cpu能作的就是忙的,也就是说这时是不能进行数据通迅的。pc机就在等待,时间就这样被浪费了。
    以上是用68013进行主控的情况,另一个方法是用68013的gpif,这种方法我认为可行性不大,必尽gpif就算可以控制flash芯片,但用什么来解析SCSI命令呢?还得用68013里的8051。这是条死路,走不通的。
    我想正在作这方面的东西。
    我现在打算用68013+fpga+flash来作,68013设置为slav fifo模式,数据由fpga来处理,flash读写控制和SCSI命令解析也用fpga来作作。正在学习中,欢迎大家指教。QQ:23488939.
        e-mail:fliky@163.com
judeemail
驱动牛犊
驱动牛犊
  • 注册日期2009-07-25
  • 最后登录2010-01-15
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-07-25 23:28
楼主能不能传一份你的68013的u盘固件
我做到解析scsi 命令的时候,主机复位后 主机没有再发scsi命令下来
不知道哪里错了
QQ:27906248 多交流啊
sealove518
驱动小牛
驱动小牛
  • 注册日期2007-09-08
  • 最后登录2012-07-01
  • 粉丝1
  • 关注0
  • 积分24分
  • 威望799点
  • 贡献值1点
  • 好评度41点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2009-07-28 15:07
呵呵,我用它做的移动硬盘,速度钢钢的,很快。
http://soez.taobao.com 淘宝网电子元件平价超市
sealove518
驱动小牛
驱动小牛
  • 注册日期2007-09-08
  • 最后登录2012-07-01
  • 粉丝1
  • 关注0
  • 积分24分
  • 威望799点
  • 贡献值1点
  • 好评度41点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2009-07-28 15:10
http://soez.taobao.com 淘宝网电子元件平价超市
guo_bin76
驱动牛犊
驱动牛犊
  • 注册日期2003-02-13
  • 最后登录2010-11-20
  • 粉丝0
  • 关注0
  • 积分129分
  • 威望74点
  • 贡献值1点
  • 好评度12点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2009-09-27 13:33
楼上的,你的实际读写速度是多少呢?可以指点一下我用flash做存储,如何提高传输速度呢?
snow
jinpaiyuangui
驱动牛犊
驱动牛犊
  • 注册日期2009-08-31
  • 最后登录2011-05-28
  • 粉丝0
  • 关注0
  • 积分78分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-10-08 10:00
楼主你好,我也在用68013做U盘,不过才刚刚开始,只是按要求对inquiry、readformatcapacity、readcapacity几个命令作了回复,之后进入read命令,下面的都还没有做,正在理头绪。不知道方不方便传一份你的U盘固件,帮一帮小弟,感激不尽!邮箱:jinpaiyuangui@126.com,谢谢!!
游客

返回顶部