NANDFLASH学习笔记之nandflash基础(一)【转】

NANDFLASH学习笔记之nandflash基础(⼀)【转】
我⼊职以来接触的第⼀个实践内容就是MTD下的NAND FLASH的驱动,下⾯我将从nand flash的基础和驱动程序两个⽅⾯来探讨该知识点,同时最后我会把⾃⼰的
动⼿实验也展⽰出来,我学习是基于jz4780grus开发板来学习的,使⽤的nandflash的型号是MT29F32G08CBACA,我的⼤致学习结构如⽬录所⽰:
⼀、NAND FLASH概述
⼆、NAND FLASH的参数及物理结构
三、NAND FLASH的地址访问⽅法
四、 NAND FLASH的操作⽅法
五、 NAND FLASH的其他⼀些补充
(⼀)Nand Flash的概述
1、Nand Flash的定义:
玻璃纸包装NAND Flash 在嵌⼊式系统中的地位与PC机上的硬盘是类似的。⽤于保存系统运⾏所必需的操作系统,应⽤程序,⽤户数据,运⾏过程中产⽣的各类数据,系统掉电后数据不会丢失。
广告宣传栏制作2、 Nand Flash的⼏个重要的基本特性:
a、NandFlash的IO接⼝
大数据恢复对于Norflash、dram 之类的存储设备,CPU 可以直接通过地址总线对其进⾏访问,⽽ Nand Flash 没有这类的总线,只有 IO 接⼝,只能通过复⽤的 IO接⼝发送命令和地址,从⽽实现对 Nand Flash 内部数据进⾏访问。(端⼝的复⽤)
b、 NandFlash的读、写、擦除操作:
读写是以页为单位的,擦除是以块为单位的。
对于Nand的写操作,只能由1变成0,⽽不能由0变成1。所以必须先对nand执⾏erase操作,即将0变成1,然后再写(使对应的1变成0)c、存储在Nand中的数据容易发⽣错误,所以采取⼀定的算法对数据进⾏编码和解码很有必要。在数据存储到nand flash之前进⾏编码,连同校验数据⼀同存储到nand之中;在数据从nand读出之后进⾏解码,以验证数据是否出错。(BCH)
3、与Nand Flash相关的名词术语:
1. ONFI标准
ONFI(Open NAND Flash Interface,开放式NAND闪存接⼝)规范是⼀种Flash闪存接⼝的标准,它是Intel为统⼀当初混乱的闪存接⼝所倡导的标准。因为在此之前,市场上销售的NAND闪存芯⽚在引脚定义上都不完全相同。这就使得为⼀家公司设计的控制器,很有可能⽆法⽤在另⼀家公司的产品上。⽐如为东芝芯⽚设计的控制器,就⽆法⽤在三星或海⼒⼠的产品上,这就给上游的主控设计商以及最终的产品设计⼈员带来了很⼤的困难。
为此,Intel联合多家NAND Flash⼚商制定了ONFI标准,统⼀NAND Flash芯⽚的引脚定义,并在此基础上采⽤新的技术以实现新的功能。
2. Block Management(坏)块管理
NandFlash 由于其物理特性,只有有限的擦写次数,超过那个次数,基本上就是坏了。在使⽤过程中,有些 Nand Flash 的 block 会出现被⽤坏了,当发现了,要及时将此 block 标注为坏块,不再使⽤。于此相关的管理⼯作,属于 Nand Flash 的坏块管理的⼀部分⼯作。
3. Wear-Leveling 负载平衡
NandFlash 的 block 的管理,还包括负载平衡。
正是由于 Nand Flash 的 block,都是有⼀定寿命限制的,所以如果你每次都往同⼀个 block擦除然后写⼊数据,那么那个 block 就很容易被⽤坏了,所以我们要去管理⼀下,将这么多次的对同⼀个 block 的操作,平均分布到其他⼀些 block 上⾯,使得在 block 的使⽤上,相对较平均,这样相对来说,可以更能充分利⽤ Nand Flash。
4. ECC 错误校验码
NandFlash 物理特性上使得其数据读写过程中会发⽣⼀定⼏率的错误,所以要有个对应的错误检测和纠正的机制,于是才有此 ECC,⽤于数据错误的检测与纠正。Nand Flash 的 ECC,常见的算法有海明码和BCH,这类算法的实现,可以是软件也可以是硬件。不同系统,根据⾃⼰的需求,采⽤对应的软件或者是硬件。
5.SLC 和MLC
人体检测
SLC(Single Level Cell)
单个存储单元,只存储⼀位数据,表⽰ 1 或 0。
对于数据的表⽰,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压 Vth相⽐,如果⼤于此 Vth 值,就是表⽰ 1,反之,⼩于 Vth,就表⽰0.
MLC(Multi Level Cell)
与 SLC 相对应的,就是单个存储单元,可以存储多个位,⽐如 2 位,4位等。其实现机制,说起来⽐较简单,
就是通过控制内部电荷的多少,分成多个阈值,通过控制⾥⾯的电荷多少,⽽达到我们所需要的存储成不同的数据。⽐如,假设输⼊电压是
Vin=4V(实际没有这样的电压,此处只是为了举例⽅便),那么,可以设计出 2 的 2 次⽅=4 个阈值, 1/4 的 Vin=1V,2/4 的 Vin=2V,3/4 的
Vin=3V,Vin=4V,分别表⽰ 2 位数据 00,01,10,11,对于写⼊数据,就是充电,通过控制内部的电荷的多少,对应表⽰不同的数据。
4、Nand Flash的数据存储:
NAND flash的数据是以bit的⽅式保存;对于SLC⽽⾔,⼀个cell只能存储⼀个bit,⽽对于MLC⽽⾔,⼀个cell可以存储2个bit;这些cell以8个或者16个为单位连成bit line,形成所谓的byte(x8)/word(x16),即我们所说的NAND device的位宽。
NAND flash以页(后⾯会介绍到)为单位读写数据,⽽以块为单位擦出数据。
(⼆)Nand Flash的参数及结构
1、MT29F32G08CBACA型号分析
2、MT29F32G08CBACA的封装及设备结构
3、MT29F32G08CBACA存储单元组织结构
Organization
– Page size : 4320bytes (4096 + 224 bytes)
– Block size: 256pages (1024K + 56K bytes)
– Plane size: 2 planesx 2048 blocks per plane
– Device size: 32Gb:4096 blocks
NANDFLASH存储器MT29F32G08CBACA的总容量为34560Mb(4G+224M),其中包括两个plane,每个plane由2048个block (块) ,每个block⼜由256 pages组成,⽽每个page包含了⼤⼩为4K字节的Data area(数据存储区域)和224字节的Spare area(备⽤区域)
OOB:每页还有⼀块区域,在Linux 系统中,称为OOB(Out Of Band),这个区域最初基于Nand Flash在读写数据时容易错误的特性,为了保证数据的正确性,采⽤相应的检测和纠错机制(EDC/ECC),⽽设计的⽤于放置数据的校验值的区域。
关于 oob具体⽤途,总结起来有:
1、标记是否是坏块
2、存储ECC数据
化妆笔3、存储⼀些和⽂件系统相关的数据。如jffs2就会⽤到这些空间存储⼀些特定信息,⽽yaffs2⽂件系统,会在oob中,存放很多和⾃⼰⽂件系统相关的信息。
4、MT29F32G08CBACA功能框图
扬声器结构

本文发布于:2024-09-23 00:34:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/270005.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   系统   错误   结构
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议