阅读:5357回复:14
CY7C68013A做64M U盘速度慢得吓人
我用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++; } |
|
|
沙发#
发布于:2009-01-26 13:47
这么快都沉了呀,难道没有人用68013做U盘
|
|
|
板凳#
发布于:2009-02-08 21:51
再来顶一下,再等等看看有没有哪位大虾做过一样的东西
|
|
|
地板#
发布于:2009-02-16 00:51
2年前做过,速度太低,不能用,即使是用gpif做,也一样.
QQ:240692087 |
|
地下室#
发布于:2009-03-01 17:18
我最近被安排就负责这个,希望高手能够指点。谢谢
|
|
5楼#
发布于:2009-03-05 23:53
我也用这个
|
|
6楼#
发布于:2009-05-22 15:07
不会吧,我还指望它的速度能达到24M呢?看大家都说不行
|
|
7楼#
发布于:2009-05-30 23:38
你这样直接用68013a又进行通讯又进行控制FLASH芯片,再加上解析SISC协议,速度一定高不上去,且不说解析花的时间,就只算写FLASH和擦除FLASH花的时间也大大的超过了通讯所花的时间,特别是擦除FLASH,所以速度上不去的.
不过你比我作得好多了,我作那个最高才70k左右. |
|
8楼#
发布于:2009-06-26 11:11
在设计中遇到了问题:不知道FLASH的CLE ,ALE,CE#和R/B#引脚该怎么和CY7C68013-128接?
请求高手能够指点,谢谢! |
|
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 |
|
10楼#
发布于:2009-07-25 23:28
楼主能不能传一份你的68013的u盘固件
我做到解析scsi 命令的时候,主机复位后 主机没有再发scsi命令下来 不知道哪里错了 QQ:27906248 多交流啊 |
|
11楼#
发布于:2009-07-28 15:07
呵呵,我用它做的移动硬盘,速度钢钢的,很快。
|
|
|
12楼#
发布于:2009-07-28 15:10
|
|
|
13楼#
发布于:2009-09-27 13:33
楼上的,你的实际读写速度是多少呢?可以指点一下我用flash做存储,如何提高传输速度呢?
|
|
|
14楼#
发布于:2009-10-08 10:00
楼主你好,我也在用68013做U盘,不过才刚刚开始,只是按要求对inquiry、readformatcapacity、readcapacity几个命令作了回复,之后进入read命令,下面的都还没有做,正在理头绪。不知道方不方便传一份你的U盘固件,帮一帮小弟,感激不尽!邮箱:jinpaiyuangui@126.com,谢谢!!
|
|