njwxkun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-23
  • 最后登录2007-02-14
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1249回复:2

请教:关于u盘中写flash问题

楼主#
更多 发布于:2004-03-17 09:59
我们用的是amd 29dl640e flash block大小是64k.由于usb对时间要求比较高,所以我们在驱动中采用的是根据主机传过来的扇区号计算出对应flash中间的块号,然后把该块的内容拷贝到内存中间的缓冲区中,然后把主机传过来的数据覆盖缓冲区的内容,在写回flash.
现在我们遇到一个问题,对于比较小的文件,也就是处理的数据都是在同一个快中间的,工作正常,对于文件比较大的,处理的数据涉及到不同快的时候,写入超时。请问有什么解决办法(在不更换flash类型)。可以发邮件给我 xiaokun.wang@sw-linux.com 谢谢
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-17 10:48
我想你应该做一下缓冲,将所有的写请求排队,快满的时候一次性写入,如对于一个BLOCK写的比较频繁,就没有必要发一个请求写一次,可以等若干个请求以后再写。
我来自中国 抵制日货
njwxkun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-23
  • 最后登录2007-02-14
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-17 11:05
是啊。我现在就是做了一个队列。比如要写20个扇区,但是这20个都是在同一个flash快中间的。那就等着20个写完之后再把内容写入flash.缓冲区我现在开了64k,等于一个flash block。比如拷贝一个大文件他的操作涉及2个block。假如第一个block写10个扇区,第二个block写2个扇区。现在的做法是,等接收到写第二个block的命令后首先把现在缓冲区的内容写入flash中间。我怀疑是不是因为这种型号的flash block太大,flash擦写的时间太长,不适合作为u盘用的flash.
游客

返回顶部