(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. linux nand 坏块_Linux内核中NAND Flash坏块管理

    由于NAND Flash的现有工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此在NAND芯片出厂的时候,厂家只能保证block 0不是坏块,对于其它block,则均有可 ...

  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. STM32F407 FSMC驱动MT29F4G08A NAND FLASH源代码分享

    一.MT29F4G08A概述 MT29F4G08是一颗 512MB 的 NAND FLASH 芯片相对于 SPI FLASH( W25Q256)和 SD 卡等存储设备,NAND FLASH 采用 8 ...

  5. NAND FLASH 内存详解与读写寻址方式

    目录: 第一章 绪论 1.1 课题来源 1.2 研究背景与意义     1.2.1 Flash介绍     1.2.2 NAND Flash介绍     1.2.3 NAND Flash与NOR Fl ...

  6. NAND FLASH 读写操作 简介

    NAND FLASH 内存详解与读写寻址方式 一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设 ...

  7. nand flash 个人觉得写得比较好的文章

    [详解]如何编写Linux下Nand Flash驱动 版本:v2.2.1 Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flas ...

  8. nand flash 经典 全面 ------如何编写Linux下Nand Flash驱动

    Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flash的常见的物理特性,且深入介绍了Nand Flash的一些高级功能,然后开 ...

  9. Nand flash(一)硬件实现机制

    Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device). ...

最新文章

  1. 中台之上(十一):企业级业务架构设计的“五难”
  2. tomcat的server.xml详解
  3. 【NLP】从0梳理1场NLP赛事!
  4. 超3000岗位!腾讯产业互联网新年大扩招!
  5. 浏览器怎么清理缓存_Mac系统浏览器缓存清理工具
  6. 1.7 什么时候该改变开发_测试集和指标
  7. js判断html存不存在某个属性,javascript如何判断对象是否存在某属性?
  8. Spring在多线程中bean的注入问题
  9. 一文详解深度相机之TOF成像
  10. 微型计算机工作最小时间单位,2010~2011学年第1学期微机原理2试卷A(答案)
  11. linux驱动开发(一):一个最简单的内核驱动程序
  12. Java常见笔试题(99.9%必问)
  13. 得到app产品体验报告
  14. 开场PPT动画怎么做炫酷
  15. 【​观察】一部《天龙八部》,缘起“六脉神剑”
  16. 万万没想到,“红孩儿” 竟然做了程序员,还是 CTO!
  17. 荧光量子产率计算机模拟,如何提高荧光染料的量子产率,或许可以从这里找到答案...
  18. TCP协议中的Ack和Seq号
  19. Linux的bind服务
  20. 计算机用户没有权限怎么办,电脑软件没权限怎么办

热门文章

  1. python 三引号_Python 字符串
  2. pcss评分_GTA5画质设置 N卡画质选项设置指南
  3. html 中如何写js代码提示错误,javascript怎么进行错误处理?
  4. Photoshop CS6软件安装教程
  5. ftp 服务器的目录文件是否存在,ftp服务器的目录文件是否存在
  6. java线程中notify_Java多线程中关于notify和wait
  7. 丰田pcwin是什么软件_丰田工机PCWin软件通讯设置及联机操作重点提示 - 图文 -...
  8. 华为云计算之存储的分类
  9. Zookeeper分布式一致性原理(四):Zookeeper简介
  10. 进程间通信的方式(三):消息队列