Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420295
  • 博文数量: 117
  • 博客积分: 3003
  • 博客等级: 中校
  • 技术积分: 1221
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-16 14:11
文章分类

全部博文(117)

文章存档

2011年(7)

2010年(110)

我的朋友

分类: LINUX

2010-08-16 14:38:15

转载时请注明原文出处(http://blog.sina.com.cn/wyw1976)及作者邮箱()
 
 

      NAND从物理角度看,就是一个连续存储空间,它由一系列的块(block)组成,而每个块是由一系列的页(Page)组成。

不同的NAND其页的大小可能是不一样的,例如对于SLC NAND,每页的大小为1024字节;而对于MLC NAND,每页的大小为2048字节。(SLC : Single Level Cell 每个单元存储一位;MLC : Multi Level Cell, 每个单元存储多位,因此其容量一般很大)。

      每页的后面还有一段OOB(Out of Bound),OOB不存放实际的数据,也就是说,用户层看到的那些文件绝对不会存放在OOB中,只会存在OOB之前的空间中;OOB的作用有两个:

(1)       存放ECC。 读取NAND时,可能会发生位反转(bit flip),即1变为0或0变为1,尤其是MLC NAND,这种情况更明显。NAND在存放数据的同时会生成ECC代码,一方面可以检测到位反转的发生;另一方面,如果位反转的位数在一定范围内,可以纠正这种错误。

(2)       存放文件系统相关的标志。例如JFFS2系统在格式化时,需要写入将一些CLEAN-Maker 标志写入OOB。

   

 Nand结构及MTD操作

    一般对于NAND的读写操作都是基于MTD接口,基本操作有三种:

(1)       读, 对应的MTD的接口是mtd->read

(2)       写, 对应的MTD的接口是mtd->write

(3)       擦除,对应的MTD的接口是mtd->erase。擦除是NAND特有的操作,对于写操作,NAND只能将1变为0,而不能将0变为1,具体参考一片网上的文章:http://blog.163.com/qiu_zhi2008/blog/static/60140977200911374933539/

 

    在Linux kernel 中有一套基于MTD的测试程序,下载地址是, 存放的目录是drivers/mtd/tests/*, 从中可以看出基于mtd接口的使用方法。

阅读(1139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~