加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

uboot——MTD——nandflash

发布时间:2020-12-15 17:32:24 所属栏目:百科 来源:网络整理
导读:写这篇文章为了记录学习MTD驱动架构,但是涉及到底层nandflash的驱动。nandflash的硬件编程也很久没回顾,很多东西都忘了,所以先看一下mini2440的nandflash的工作原理和裸机编程。 基础知识: 这部分网上很多,我复制了其他大神的。 http://blog.chinaunix.

写这篇文章为了记录学习MTD驱动架构,但是涉及到底层nandflash的驱动。nandflash的硬件编程也很久没回顾,很多东西都忘了,所以先看一下mini2440的nandflash的工作原理和裸机编程。


基础知识:

这部分网上很多,我复制了其他大神的。

http://blog.chinaunix.net/uid-28236237-id-3985873.html

 Nand?Flash结构:  一、Nand?Flash是又一种叫块的结构堆叠而成,块一般写作block,块是Nand?Flash中最小的擦除单位,如果需要擦除Flash,那么最小必须擦除一个Flash?Block 二、Nand?Flash?中所有存储颗粒,也就是软件上对应的每一个bit,只能从1反转到0,而不能从0写为1,只有擦除操作可以将存储颗粒从0反转到1,这个特性就要求对Flash进行写操作的时候需要先对相应的区域进行擦除操作。  三、一个Flash的块是由若干个Page组成,Page是读写Nand?Flash的最小单位。一般Page有两中规格,一种是512B+16B的小页形式,一种是2048B+64B的大页形式。  四、Nand?Flash中可能存在坏块,坏块产生的原因有可能是出厂的时候就产生了,还有可能是在使用过程中多次擦除操作会产生坏块。  五、那么如何辨别出厂的坏块呢,有一种方法是:一般芯片原厂都会在出厂时都会将每个坏块第一个pagespare?area的第6byte标记为不等于0xff的?值 六、坏块的管理,关于Nand?Flash坏块的管理,这里必须指出两个知识点,一个是BBT,即bad?block?table?专门用nand做存储的,会把bbt放到block0,因为第0块一定是好?的块。但是如果nand本身被用来boot,那么第0块就要存放程序,不能放bbt了。?有的把bbt放到最后一块,当然,这一块坚决不能为坏块。?bbt的大小跟nand大小有关,nand越大, 需要的bbt也就越大 七、另外还有一种校验机制叫做ECC?NAND?Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出?错。一般使用一种比较专用的校验——ECCECC能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,2比特以上的?错误不保证能检测。  八、ECC一般每256字节原始数据生成3字节ECC校验数据,这三字节共24比特分成两部分:6比特的列校验和16比特的行校验,多余的两个比特置1。(512生成两组ECC,共6字节)?当往NAND?Flashpage中写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到PAGEOOB?out-?of-band)数据区中。其位置就是eccpo 校验的时候,根据上述ECC生成原理不难推断:将从OOB区中读出的原ECC校验和新ECC校验?和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误);若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠?正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错;其他情况均表示出现了无法 纠正的错误。?

http://wenku.baidu.com/view/4d14c7292af90242a895e51a.html

1. Flash用途和分类:?
? ? 在嵌入式系统开发设计中,存储模块是不可缺少的重要部分,而 Flash是目前市场上主要的非易失闪存技术,他主要分为:Nor Flash和Nand Flash两种。那么他们有什么区别呢?简单的讲:Nor Flash容量小,价格高,写速度慢但随机读速度快,所以较适合存储少量的程序代码,比如u-boot启动代码;而Nand Flash则容量大,价格低,写速度快但 读速度慢,所以他相当于PC上的硬盘用于存储大量的数据。Nor Flash与Nand Flash更详细区别如下表:

2. Flash在硬件设计中的应用:

以Mini2440开发板为例:该开发板上带有一块2M的Nor Flash和一块64M的Nand?Flash。下面先看看他们是怎样被应用于嵌入式Linux的。Nor Flash和Nand Flash电路原理图分别如下:(由mini2440提供)

从 原理图上可以看到,Nor Flash内部提供的是有类似于DRam之类的地址总线,可以直接与CPU相连,CPU可以直接通过地址总线对Nor Flash进行访问;而Nand Flash没有这类的总线,其内部只提供IO接口,因此只能通过IO接口发送命令和地址,对Nand Flash内部数据进行访问。这可以说是二者最大的区别了,也说明了二者读写速度不同的所 在。因此,各有各的优点,Nor Flash访问快,Nand Flash简化了电路。注意:电路原理图中字母上面有一横杠的表示该引脚是低电平有效,没有的是默认的高电平。

我的nandflash型号是K9F2G08U0B,它的主要参数:

Memory Cell Array : (256M + 8M) x 8bit

Page Program :?(2K + 64)ByteBlock?

Erase : (128K + 4K)Byte

?


裸机编程

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读