purple.sun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-17
  • 最后登录2013-08-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:4771回复:42

51控制811读写优盘如何提速

楼主#
更多 发布于:2004-04-05 15:19
在大家的帮助下终于可以写入文件了,但是现在速度好慢好慢。我用仿真器跑,写入一个166KB的文件,就需要160多秒。如果到时候用实际电路跑,岂不是更慢。

希望知道大家是怎么提高读写速度的?使用811的两套寄存器是否有效?另外大家如何处理延时的(在Bulk Only层上)

我使用的是Cypress的源代码,查询中断来进行usb传输,然后在Bulk Only层上每发送一个CBW、接收一个数据(主要在read10和write10中)就要延迟若干,而且不延迟就肯定出错。
caoyuan
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2004-09-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-26 14:52
我现在知道的CYPRESS的SL811HS的源代码有一套是SL811HS的demo code,另一套是在appnote中写出了一部分源代码,二者不尽相同,不知大家所说或所用的到底是哪一套,或者还有其它可以参考的代码吗?
guli_1982
驱动牛犊
驱动牛犊
  • 注册日期2004-04-26
  • 最后登录2004-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-26 14:28
楼主是不是有sl811的源代码呀?能不能拜托给我一份,我急需呀!
不胜感激!
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-13 15:56
我用三星四位机,汇编做,写入速度是7K/S,
实测:1073K的文件,用130秒。
liuzq
驱动小牛
驱动小牛
  • 注册日期2003-05-25
  • 最后登录2004-06-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-13 13:01
sunshangxin_1 :

  我也想做51+811hs读U盘,大虾我给看个源理图(51+sl811hs)是否可行了,好吗?多谢
sunshangxin_1
驱动牛犊
驱动牛犊
  • 注册日期2004-04-12
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-13 12:46
哈哈高定了没哦
这么个小东西
不要说还没搞定哦
liuzq
驱动小牛
驱动小牛
  • 注册日期2003-05-25
  • 最后登录2004-06-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-13 12:43
purple.sun,我给你看的原理图怎样呵?
purple.sun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-17
  • 最后登录2013-08-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-13 12:28
read10和write10的延迟主要来自于单片机读写USB芯片的buffer,USB芯片与U盘的传输速度还是很快的。所以提速的要点是减少对USB芯片buffer的访问次数。


可是811提供的仅仅240Byte的数据,BulkOnly协议里面的端口一次也只能传输64字节的数据。因此我在811芯片的Buffer设置的是64KB,是不是可以改动呢?
wangzzdd
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-12 13:53
CYPRESS给的源代码有问题的。
hustdj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-06
  • 最后登录2008-07-02
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-12 10:23
我使用的是Cypress的源代码,查询中断来进行usb传输,然后在Bulk Only层上每发送一个CBW、接收一个数据(主要在read10和write10中)就要延迟若干,而且不延迟就肯定出错。
*********************************************************


read10和write10的延迟主要来自于单片机读写USB芯片的buffer,USB芯片与U盘的传输速度还是很快的。所以提速的要点是减少对USB芯片buffer的访问次数。
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-12 10:06
兄弟 高定了吗
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
purple.sun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-17
  • 最后登录2013-08-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-11 10:25
目前我把缓冲区加大到了4KB,速度可以达到5KB/sec,就是除去创建文件单纯向里面添数据的速度吧。

我用的是Cypress的代码,他是用的查询中断的方式做的,因此加入双缓冲似乎比较麻烦。郁闷呀

呵呵,问个问题,C里面嵌入汇编是把汇编单独作为一个文件写么?还是放在C语言文件里面。我真的很菜的,没有用过嵌入汇编的C
purple.sun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-17
  • 最后登录2013-08-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-11 10:19
89c51 ram rom 空间不够吧,得扩展


目前code差不多要20多K,RAM我猜应该是多多益善。呵呵
偶很菜
jinqiu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-05
  • 最后登录2008-05-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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
zf_98412
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-09 08:48
兄弟 去掉你个同步就可以了 呵呵 同步只能到64k 呵呵 你做的不错了 用汇编改过了 是吗?
哈哈
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
roycelou
驱动牛犊
驱动牛犊
  • 注册日期2003-12-29
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-08 23:32
may up to 200kB/s
jinqiu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-05
  • 最后登录2008-05-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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.....
ww7002
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-04-08 19:43
89c51 ram rom 空间不够吧,得扩展
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-04-08 16:44
只能到300k一般u盘问题
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
上一页
游客

返回顶部