whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:994回复:0

flash的读写问题的讨论。

楼主#
更多 发布于:2004-09-01 09:51
各位大哥,小弟现在用51+d12+flash做u盘,由于mcu的内部aux ram只有1024byte,所以在写flash时遇到了一个问题,现在请大家帮忙看看,给我们做u盘的小弟们一个提示什么的,谢谢了。
问题是这样的,由于NAND型的Flash有个特点,不可随机存取,擦除操作一次对16K的内容进行。所以,在U盘响应过程中,不可避免要对数据进行缓存。如果你的U盘方案中有较宽裕的RAM(超过16K),这个问题变得简单,只需要开一个16K的数组,把数据存到这16K中,最后再写入Flash即可。否则,在缓冲上面是要花一些功夫的。最基本的思路是用Flash的另外一个Block做缓冲空间。
   首先我采用了后一种方法,将接收到的数据写入flash的缓冲区,然后在把要写入的block中剩余的页写入缓冲区,然后擦除要写入的block,然后再将缓冲区的页写入目标快中,然后擦除缓冲区。这样有一个问题,就是数据在flash中搬来搬去,使得flash的写入速度很慢,主机一次发送最大页就是80(16进制),往往在你写flash时,主机认为你没有反映,就停止发送数据,然后发送reset包,写入工作也失败了。
    后来用了第二种方法,在51外部扩展了16k的sram,要写入的数据先写入sram,然后再从目标块中读出不写的页到sram,然后再擦除block,把sram中的内容写入b'lo'c'k,这样u盘可以正常读写了,但是速度很慢,只有2k。
    想问一问各位大哥,有没有什么办法,能提高一下速度呢?难道51+d12做u盘的速度真的这么慢?

    但是我看到了dp9801和ic1114,他们是u盘专用的mcu,他们里面的ram也只有4k左右,那么在做u盘时,怎么去处理flash的写入呢??

游客

返回顶部