jojopeli
驱动牛犊
驱动牛犊
  • 注册日期2008-06-15
  • 最后登录2008-06-29
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1393回复:3

请教大家关于linux+arm的U盘存储控制问题

楼主#
更多 发布于:2008-06-15 15:21
我在做U盘存储控制器的开发,采用的arm9+linux开发Usb主控器,
在应用程序层面,我将数据使用write+fsync写入U盘(sandisk),
但是经过测试发现,一般来说每次存200字节的数据只需几ms,但是有时会出现将近200ms的问题,
检测USB总线的信号 发现主要是由于这段时间,U盘没有准备好接受(发送)数据因此一直回nak,而我这边的hc在一直重发所致。
 因此,我判断是当每次写入200字节并且是强制写入U盘的时候,U盘写入速度不稳定(测试:每次存200字节共存储1亿字节会出现300多次超过150ms的现象),
 但是当我以每次写入1024字节时,U盘写入速度会相对稳定许多(测试:每次存1024字节共存储1亿字节会出现2-3次超过150ms的现象)。
 后发现凡是不是以1024倍数写入的话都会有此问题。请问这是为什么,nandflsh会出现写入速度不稳定的情况吗,那近200ms的时间究竟是怎么出现的呢,
 请大家不吝赐教。
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-16 02:23
文件系统对U盘的读写应该以扇区为单位.
www.dragon-2008.com 欢迎交流
jojopeli
驱动牛犊
驱动牛犊
  • 注册日期2008-06-15
  • 最后登录2008-06-29
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-17 16:27
可是我现在想的是每次串口收到数据,哪怕是一个字节也存U盘
而我通过fsync函数也确实做到了,它强行存盘
现在的问题是:除非以1024字节写,否则的话写入速度不稳定
jojopeli
驱动牛犊
驱动牛犊
  • 注册日期2008-06-15
  • 最后登录2008-06-29
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望8点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-06-18 21:09
我之所以每收到一组数据就存储一次是为了在断电时丢失最少的数据,因为应用环境不容许我缓冲一整页的数据然后再存储。可是我如果不以1024字节存储的话,会出现写入速度不稳定的情况,有时存储几百字节需要最长200ms(大部分时候还正常,几ms),由于我的存储控制器采用的是串行的方式(收数->存数)这样的话若串口以115200bps收数的话仍有可能丢2k的数。

另外,我仅仅是U盘存数据,不存文件。

我现在有三个具体问题请您帮着分析

1 您认为近200ms的时间是怎么产生的,有何种可能,是不是问题不仅仅是flash读写的问题,和U盘上的软件或者控制芯片有关吗

2为什么我以1024的倍数就稳定了许多,我查的资料发现nandflash的页大小一般两种,512字节和2k字节,我为什么是1024字节没事儿呢,(sandisk U盘)

3我我仅仅是往U盘屋里空间存数据,不存文件,也需要经过U盘的文件系统吗

请您帮着分析一下,不胜感激
游客

返回顶部