阅读:4771回复:42
51控制811读写优盘如何提速
在大家的帮助下终于可以写入文件了,但是现在速度好慢好慢。我用仿真器跑,写入一个166KB的文件,就需要160多秒。如果到时候用实际电路跑,岂不是更慢。
希望知道大家是怎么提高读写速度的?使用811的两套寄存器是否有效?另外大家如何处理延时的(在Bulk Only层上) 我使用的是Cypress的源代码,查询中断来进行usb传输,然后在Bulk Only层上每发送一个CBW、接收一个数据(主要在read10和write10中)就要延迟若干,而且不延迟就肯定出错。 |
|
沙发#
发布于:2004-04-26 14:52
我现在知道的CYPRESS的SL811HS的源代码有一套是SL811HS的demo code,另一套是在appnote中写出了一部分源代码,二者不尽相同,不知大家所说或所用的到底是哪一套,或者还有其它可以参考的代码吗?
|
|
板凳#
发布于:2004-04-26 14:28
楼主是不是有sl811的源代码呀?能不能拜托给我一份,我急需呀!
不胜感激! |
|
地板#
发布于:2004-04-13 15:56
我用三星四位机,汇编做,写入速度是7K/S,
实测:1073K的文件,用130秒。 |
|
地下室#
发布于:2004-04-13 13:01
sunshangxin_1 :
我也想做51+811hs读U盘,大虾我给看个源理图(51+sl811hs)是否可行了,好吗?多谢 |
|
5楼#
发布于:2004-04-13 12:46
哈哈高定了没哦
这么个小东西 不要说还没搞定哦 |
|
6楼#
发布于:2004-04-13 12:43
purple.sun,我给你看的原理图怎样呵?
|
|
7楼#
发布于:2004-04-13 12:28
read10和write10的延迟主要来自于单片机读写USB芯片的buffer,USB芯片与U盘的传输速度还是很快的。所以提速的要点是减少对USB芯片buffer的访问次数。 可是811提供的仅仅240Byte的数据,BulkOnly协议里面的端口一次也只能传输64字节的数据。因此我在811芯片的Buffer设置的是64KB,是不是可以改动呢? |
|
8楼#
发布于:2004-04-12 13:53
CYPRESS给的源代码有问题的。
|
|
9楼#
发布于:2004-04-12 10:23
我使用的是Cypress的源代码,查询中断来进行usb传输,然后在Bulk Only层上每发送一个CBW、接收一个数据(主要在read10和write10中)就要延迟若干,而且不延迟就肯定出错。
********************************************************* read10和write10的延迟主要来自于单片机读写USB芯片的buffer,USB芯片与U盘的传输速度还是很快的。所以提速的要点是减少对USB芯片buffer的访问次数。 |
|
10楼#
发布于:2004-04-12 10:06
兄弟 高定了吗
|
|
|
11楼#
发布于:2004-04-11 10:25
目前我把缓冲区加大到了4KB,速度可以达到5KB/sec,就是除去创建文件单纯向里面添数据的速度吧。
我用的是Cypress的代码,他是用的查询中断的方式做的,因此加入双缓冲似乎比较麻烦。郁闷呀 呵呵,问个问题,C里面嵌入汇编是把汇编单独作为一个文件写么?还是放在C语言文件里面。我真的很菜的,没有用过嵌入汇编的C |
|
12楼#
发布于:2004-04-11 10:19
89c51 ram rom 空间不够吧,得扩展 目前code差不多要20多K,RAM我猜应该是多多益善。呵呵 偶很菜 |
|
13楼#
发布于:2004-04-09 21:07
现在我的板子的读取速度仍停留在50k/s。既:每读1byte需要20us.我已经把SL811的读函数用汇编优化,用了16个机器周期可以完成从811读1byte并写入存储器中。我用的w77e58在4分频24M,则我完成从811读1byte并写入存储器中用了顶多5us.所以有15us浪费在和Sl811通讯和等待中断上了。我没有仿真器,所以也不知道时间浪费在哪儿了。通过反复调试发现在批量读入数据的过程中间,突然会有一个较大的时间的越变。如果可以的话,那位请看看我和811通讯的函数,并指点一下么?QQ=320946.Mail:s9705040@sina.com
|
|
14楼#
发布于:2004-04-09 08:53
双缓冲那个其实很容易懂.
比如我现在读数据是这样的: 启动传输-等待中断-读数据-启动传输 而双缓冲则是: 启动传输-等待中断-启动下一次传输(当然是这一次成功的情况下)-读数据,即把传输与读数据并行. 因为这两次传输使用的SL811的内存范围不一样,所以不会有问题. 如:第一次读使用REG_USBA_BASEADDR=0x20,读回来的数据就是放在0x20开始的RAM中,在成功后,立即把REG_USBA_BASEADDR=0x60,再读第二次.这就不会影响0x20-0x5f中的数据,你就可以在USB传输的同时进行SL811读数据操作.速度当然会快一点. 可惜我不能那么做,因为我的速度要求不高,我现在的速度还嫌快.我老大还要我降到5K/s左右. 至于要优化的,我认为你最好把SL811的基本读写优化一下,用汇编写. [编辑 - 4/9/04 by zf_98412] |
|
15楼#
发布于:2004-04-09 08:48
兄弟 去掉你个同步就可以了 呵呵 同步只能到64k 呵呵 你做的不错了 用汇编改过了 是吗?
哈哈 |
|
|
16楼#
发布于:2004-04-08 23:32
may up to 200kB/s
|
|
17楼#
发布于:2004-04-08 19:59
55555555555,快挂了。我这边是51+SL8ll 读的速度恒定在50k/s,只需要高速读入到RAM中,速度达到350k+/s。单片机是W77e58,4分频。24M晶体。虽然可以用更强力的89c420(1分频),可是现在的底数就算换CPU也不可能达到350K/s。我哭啊,优化了3天了,读数部分用汇编重写。没有太大的飞跃。那位大侠帮忙看看时间浪费在哪儿啊?用的是 Cypress的部分源码,自己感觉Ping/pong 哪个部分应该是没用上,不知道怎么实现,哪儿高人能帮忙看看我的这部分代码。我不知道还有什么办法了。请留一下Email.....
|
|
18楼#
发布于:2004-04-08 19:43
89c51 ram rom 空间不够吧,得扩展
|
|
19楼#
发布于:2004-04-08 16:44
只能到300k一般u盘问题
|
|
|
上一页
下一页