(1)首先需要了解NAND FLASH的结构。如图:

以镁光MT29F4G08BxB Nand Flash为例,这款Flash(如上图)以4个扇区(sector)组成1个页(page),64个页(page)组成1个块(block),4096个块(block)构成整个Flash存储器;由于每个扇区的容量是512 字节(bytes),整个Flash容量为4224M Bit(相当于528M字节),去掉备用区域用于存放ECC数据校验16M(虚线部分),就是这个片子的容量512M字节。其他型号的Flash也是同样由扇区组成页、由页组成块、块组成整个存储设备,只是扇区、页、块的数量多少有区别而已。

在Flash的生产制造过程中,由于生产工艺的缺陷,很容易在Flash中产生不能使用的坏区域,如果在U盘中要使用这样的Flash,就必须使用所谓的“量产工具”;U盘量产工具其实就是一种集坏区域扫描和Flash管理系统装载于一身的工具。常规U盘主控的扫描是以块为单位,扫描即往每一个块里写入数据,然后将读出的数据与写入的数据比较,如果数据有误则把该块标为“坏块”。扫描完成后就是将Flash管理系统装载到Flash里面,Flash管理系统就会利用扫描产生的坏块表对整个Flash进行读写管理,这样就完成了整个量产动作,U盘也就可以正常使用了。所以U盘显示的容量与实际所用的Flash容量差异来源于不能存储信息的坏块和Flash管理系统的占用块。坏块越多,做出的U盘容量越低;而Flash管理系统占用的块是没有办法避免,就像我们的电脑安装操作系统要占用硬盘空间一样。

当然这里还涉及到一个ECC纠错能力的问题,假设对这个Flash进行扫描的定义的ECC纠错能力为1bit,只有数据出现超过1bit错误的块才会被标记为坏块。这个时候需要区分块纠错和扇区纠错的差别,假设任何一个块里有任何一个扇区(512bytes)存在超出1bit的错误,常规主控在扫描的时候就会判断整个块为坏区域,这样将损失整个块128Kbytes的容量;但是当使用扇区纠错的主控时,同样1bit ECC纠错,他会直接去判断这个块里哪些是超出1bit错误的扇区,从而将其剔除,损失的只是每个真正有错误扇区的512bytes容量,从而保留了其余没有错误的扇区,这样Flash的利用率可以得到极大的提高。

(2) 初始化用的命令序列

(3)NAND的驱动程序

所谓Nand flash的驱动也就是对Nand flash controller编程(发送命令/写寄存器都是同样的意思)。驱动程序的结构大同小异,区别在于每家芯片的Nand flash controller的设计不同,所以对controller的编程的部分是不同的。对于硬件ecc来说,基本的驱动包括下述功能:擦除block、读写page、ecc判断、坏块标识、读取Nand状态、等待Nand、复位Nand、初始化等;初始化中要开辟驱动程序需要的memory,设置工作模式(page大小、block大小、时钟频率、ecc模式等),和对函数指针赋值。

驱动是分层的,以上是最底层的chip的驱动,是为了上层MTD服务的。以读page为例:

chip->cmdfunc(MTD, NAND_CMD_READ0, 0x00, page);//先发读命令,由controller将读命令发给nand flash

chip->ecc.read_page(MTD, chip, buf);//然后读取数据

nand flash 扇区的管理以及初始化的更多相关文章

  1. nand flash坏块管理OOB,BBT,ECC

    转:http://www.cnblogs.com/elect-fans/archive/2012/05/14/2500643.html 0.NAND的操作管理方式 NAND FLASH的管理方式:以三 ...

  2. 【转】nand flash坏块管理OOB,BBT,ECC

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

  3. Nand Flash基础知识与坏块管理机制的研究

    概述 Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次 ...

  4. nand flash详解及驱动编写

    https://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_ ...

  5. 如何编写linux下nand flash驱动-4

    2.       软件方面 如果想要在Linux下编写Nand Flash驱动,那么就先要搞清楚Linux下,关于此部分的整个框架.弄明白,系统是如何管理你的nand flash的,以及,系统都帮你做 ...

  6. 说说NAND FLASH以及相关ECC校验方法

    Flash名称的由来,Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将 ...

  7. 如何编写linux下nand flash驱动-2

    [Nand Flash引脚(Pin)的说明] 图3.Nand Flash引脚功能说明 上图是常见的Nand Flash所拥有的引脚(Pin)所对应的功能,简单翻译如下: 1.       I/O0 ~ ...

  8. Linux 下 Nand Flash 驱动说明

    注册 driver_register 通过 module_init(s3c2410_nand_init);注册 Nand Flash 驱动. 在 s3c2410_nand_init ()中通过 dri ...

  9. nand flash 的oob 及坏块管理

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

随机推荐

  1. vs2010旗舰版后,运行调试一个项目时调试不了,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40.exe(PID:2260”

    具体问题描述: vs2010旗舰版后,运行调试一个项目时调试不了,能编译,按ctrl+f5 可以运行,但是就是调试就不行,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40 ...

  2. 关于sql语句in的使用注意规则

    想必大家都用过sql中的in语句吧,我这里描述下我遇到的一种in语句问题,并总结一些给大家分享下,不对的地方还希望大虾指点下. 问题描述:IN子查询时,子查询中字段在表中不存在时语句却不报错 平常工作 ...

  3. php的public、protected、private三种访问控制模式的区别

    public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法 在实例中可以能过$obj->var 来调用 public类型的方 ...

  4. SQL Server 数据库最小宕机迁移方案

    一.目的 在做SQL Server数据库维护的时候,当上司要求我们把几十G的数据文件搬动到其它服务器,并且要求最小宕机时间的时候,我们有没什么方案可以做到这些要求呢? 在这里我们假设这两台机器并不是在 ...

  5. 百度快收录吧!!!a39fe054b88866bc737dd5fb02f39e41

    百度快收录吧!!!a39fe054b88866bc737dd5fb02f39e41  }416oTemocleW{yek

  6. LA 4384

    扩展欧几里得 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  7. java split函数 对空的处理

    String str = "5,6,55,66,,,,@"; String[] chk_deep = str.split("@"); System.out.pr ...

  8. Chp5: Bit Manipulation

    Bits Facts and Tricks x ^ 0s =  x x & 0s =  0 x | 0s = x x ^ 1s = ~x x & 1s = x x | 1s = 1s ...

  9. hdu 3790 最短路径问题(最短路,Dijsktra)

    题目 Dijsktra基础题,只是多了一个花费,稍稍变动处理就好 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include&l ...

  10. hibernate的简单学习(第一天)

    sql脚本: -- Create table drop table T_PERSON; create table T_PERSON ( id ) PRIMARY KEY, name ), passwo ...