NAND的资料整理(通俗易懂)
- 格式:docx
- 大小:349.09 KB
- 文档页数:10
nand单元化学成分
NAND单元是一种非易失性存储器单元,通常用于闪存存储器和固态硬盘中。
它由一对交叉连接的MOSFET(金属氧化物半导体场效应晶体管)组成,其中一个是N型(负载)MOSFET,另一个是P型(控制)MOSFET。
这两个MOSFET的交叉点形成了NAND门电路,因此得名。
从化学成分的角度来看,NAND单元的主要构成是硅。
硅是一种广泛应用于半导体制造的材料,它具有良好的半导体特性和稳定的化学性质,因此非常适合用于制造存储器元件。
除了硅外,NAND单元的制造过程还涉及到其他材料,比如金属导线、绝缘层材料等。
这些材料在制造过程中会被精确地组合和处理,以形成稳定可靠的存储单元结构。
此外,NAND单元中还会使用一些掺杂剂来调节硅材料的电子特性,以实现存储器单元的功能。
这些掺杂剂通常是磷、硼等元素,它们能够改变硅材料的导电性和电子载流子的浓度,从而影响存储器单元的工作状态和性能。
总的来说,NAND单元的化学成分主要是硅及其相关的材料,通
过精密的制造工艺和掺杂技术,形成了可靠的存储器单元结构,为现代电子设备的高效存储提供了重要支持。
Nand Flash简明自学资料——助您理解datasheet要点内容清单:一技术常识部分1、逻辑组成2、常见参数3、地址结构二基本操作、时序图部分*通用引脚符号声明1、Read—读2、Program—写3、Block Erase—擦除4、其它*时序图要点讲解编写目的:从编程操作角度,简介一些有助于理解nand flash datasheet(数据手册)上相关内容的要点。
编写原因:●各种nand flash英文datasheets上的内容虽详尽但繁杂,有些业内常识性的东西没交代清楚,给初学者造成困扰;●不同的datasheets都有一些共通的要点(基本架构、指令和符号等),了解这些后再看datasheet的操作命令和时序图部分会省力很多。
一技术常识部分1、逻辑组成(1)功能结构抽象图注:1)Cache有时也被称为Cache register.(严格来讲应称为缓冲区buffer);2)上述Data指的是输入/输出数据(即Input/Output Data,简称I/O Data),因为从广义上讲所有能存取于硬件设备上的资料都可称为Data,包括图中的ECC码(Error Correcting Code),所以Page register.也可被称为Data register.(数据寄存器);(2)闪存层次结构Page(页):对nand flash进行读写操作的逻辑单位,一般容量为几到十几KB;附有额外的小存储区域,这里存储ECC码等附加信息。
Block(块):许多page构成一个block,是擦除的操作单位;一般产品出厂时都有invalid /bad block(坏块),已由厂家在对应block里作相应标示,操作时不能清除这些标注信息,每个flash的第一个block(编号00h)是在出厂时是好的,用于存储invalid / bad block table(坏块表);使用过程中也会产生坏块,发生操作失败时(即使用ECC技术检测到有不可纠正错误时),要将相应的坏块标出,升级坏块表,改写逻辑地址与物理地址的映射。
NAND flash和NOR flash的区别详解[导读]我们使用的智能手机除了有一个可用的空间(如苹果8G、16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的这二种存储.关键词:NOR flashNand flashFlaSh我们使用的智能手机除了有一个可用的空间(如苹果8G、16G等),还有一个RAM容量,很多人都不是很清楚,为什么需要二个这样的芯片做存储呢,这就是我们下面要讲到的。
这二种存储设备我们都统称为“FLASH”,FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通地过程序可以修改数据,即平时所说的“闪存”。
Flash又分为NAND flash和NOR flash二种。
U盘和MP3里用的就是这种存储器。
相“flash存储器”经常可以与相“NOR存储器”互换使用。
许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。
而NAND则是高数据存储密度的理想解决方案。
NOR Flash 的读取和我们常见的 SDRAM 的读取是一样,用户可以直接运行装载在 NOR FLASH 里面的代码,这样可以减少 SRAM 的容量从而节约了成本。
NAND Flash 没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512 个字节,采用这种技术的 Flash 比较廉价。
用户不能直接运行 NAND Flash 上的代码,因此好多使用 NAND Flash 的开发板除了使用 NAND Flah 以外,还作上了一块小的 NOR Flash 来运行启动代码。
NOR flash是intel公司1988年开发出了NOR flash技术。
NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash 闪存内运行,不必再把代码读到系统RAM中。
【编写驱动之前要了解的知识】Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB。
,全部擦除为11. 硬件特性:【Flash的硬件实现机制】Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。
关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。
Flash的内部存储是MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。
在Flash之前,紫外线可擦除(uv-erasable)的EPROM,就已经采用用Floating Gate存储数据这一技术了。
图1.典型的Flash内存单元的物理结构数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。
存储电荷的多少,取决于图中的外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。
而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。
【SLC和MLC的实现机制】Nand Flash按照内部存储数据单元的电压的不同层次,也就是单个内存单元中,是存储1位数据,还是多位数据,可以分为SLC和MLC:1.SLC,Single Level Cell:单个存储单元,只存储一位数据,表示成1或0.就是上面介绍的,对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0.对于nand Flash的数据的写入1,就是控制External Gate去充电,使得存储的电荷够多,超过阈值Vth,就表示1了。
一文知道NAND闪存的类型由于闪存的成本取决于其裸片面积,如果可以在同样的面积上存储更多数据,闪存将更具成本效益。
NAND闪存有三种主要类型:单层单元(SLC)、多层单元(MLC)和三层单元(TLC)。
顾名思义,在相同的单位面积上,TLC闪存比MLC存储的数据更多,而MLC又比SLC存储的数据多。
另一种新型的NAND闪存称为3DNAND或V-NAND(垂直NAND)。
通过在同一晶圆上垂直堆叠多层存储单元,这种类型的闪存可以获得更大的密度。
浮栅晶体管闪存将信息存储在由浮栅晶体管组成的存储单元中。
为了更好地理解不同类型的NAND闪存,让我们来看看浮栅晶体管的结构、工作原理及其局限。
浮栅晶体管或浮栅MOSFET(FGMOS)跟常规MOSFET非常类似,有一点不同的是它在栅极和沟道之间添加了额外的电绝缘浮栅。
图1:浮栅MOSFET(FGMOS)与常规MOSFET对比。
由于浮栅是电隔离的,所以即使在去除电压之后,到达栅极的任何电子也会被捕获。
这使得存储器具有非易失性。
与具有固定阈值电压的常规MOSFET不同,FGMOS的阈值电压取决于存储在浮栅中的电荷量。
电荷越多,阈值电压越高。
与常规MOSFET类似,当施加到控制栅极的电压高于阈值电压时,FGMOS将开始导通。
因此,通过测量其阈值电压并与固定电压电平进行比较,就可以识别存储在FGMOS中的信息。
这称为闪存的读操作。
可以使用两种方法将电子放置在浮栅中:Fowler-Nordheim隧穿或热载流子注入。
对于Fowler-Nordheim隧穿,在带负电的源极和带正电的控制栅极之间施加强电场。
这使得来自源极的电子隧穿穿过薄氧化层并到达浮栅。
隧穿所需的电压取决于隧道氧化层的厚度。
对于热载流子注入方法,高电流通过沟道,为电子提供足够的能量以穿过氧化物层并到达浮栅。
通过在控制栅极上施加强负电压,并在源极和漏极端子上施加强正电压,使用Fowler-Nordheim隧穿可以从浮栅移除电子。
nand工作原理NAND是一种非易失性存储设备,它可以在掉电或关机后仍然保存数据。
NAND是“非随机存取存储器”的缩写,它是现代电子产品中常见的存储设备之一。
NAND存储器未来将取代传统机械硬盘,成为主要的存储设备。
NAND存储器是通过一系列的晶体管和电容器来存储数据的。
这些晶体管被排列在网格中,每个晶体管被称为一个单元。
每个单元包括一个选择器晶体管和一个储存晶体管。
选择器晶体管控制着数据传输,储存晶体管负责储存数据。
当需要读取数据时,选择器晶体管会从储存晶体管中读取数据并通过数据总线传输到主处理器。
这个过程需要一定的时间和能量。
当需要写入数据时,选择器晶体管会将数据写入储存晶体管中,这也需要一定的时间和能量。
NAND存储器的工作原理可以用“擦除-编程-读取”来描述。
擦除是指将存储器中的所有数据都清空,使存储器可以重新写入数据。
编程是指将数据写入存储器中。
读取是从存储器中读取数据。
NAND存储器的写入速度比读取速度要慢,因为写入数据需要先将原有数据擦除再写入新的数据。
因此,当需要频繁写入数据时,NAND存储器的性能将降低。
NAND存储器在现代电子设备中使用广泛,包括手机、平板电脑和电脑。
因为NAND存储器具有高速读取和低功耗的特点,所以可以提供更好的性能和更长的电池寿命。
总之,NAND存储器是一种高效、可靠且广泛应用的存储设备。
它的工作原理基于晶体管和电容器,能够在掉电或关机后仍然保存数据。
它将成为未来电子产品中的主流存储设备之一。
NAND的资料整理(通俗易懂)K9F2G08U0A的一页为(2K+64)字节(加号前面的2K表示的是main区容量,加号后面的64表示的是spare区容量),它的一块为64页,而整个设备包括了2048个块。
这样算下来一共有2112M位容量,如果只算main区容量则有256M字节(即256M×8位)。
要实现用8个IO口来要访问这么大的容量,K9F2G08U0A规定了用5个周期来实现。
第一个周期访问的地址为A0~A7;第二个周期访问的地址为A8~A11,它作用在IO0~IO3上,而此时IO4~IO7必须为低电平;第三个周期访问的地址为A12~A19;第四个周期访问的地址为A20~A27;第五个周期访问的地址为A28,它作用在IO0上,而此时IO1~IO7必须为低电平。
前两个周期传输的是列地址,后三个周期传输的是行地址。
通过分析可知,列地址是用于寻址页内空间,行地址用于寻址页,如果要直接访问块,则需要从地址A18开始。
(2的12次方是4096,并不是2048,这是为什么?个人理解:为了兼容以后更大的NAND,NAND的地址序列可以把“列地址的长度”预留出来,虽说送的是A0-A7,A8-A11,实际取得是A0-A7,A8-A10;(页内地址空间))··········一共是2048*64=131072页,2的17次方由于所有的命令、地址和数据全部从8位IO口传输,所以nandflash定义了一个命令集来完成各种操作。
有的操作只需要一个命令(即一个周期)即可,而有的操作则需要两个命令(即两个周期)来实现。
下面的宏定义为K9F2G08U0A的常用命令:#define CMD_READ1 0x00 //页读命令周期1#define CMD_READ2 0x30 //页读命令周期2#define CMD_READID 0x90 //读ID命令#define CMD_WRITE1 0x80 //页写命令周期1#define CMD_WRITE2 0x10 //页写命令周期2#define CMD_ERASE1 0x60 //块擦除命令周期1#define CMD_ERASE2 0xd0 //块擦除命令周期2#define CMD_STATUS 0x70 //读状态命令#define CMD_RESET 0xff //复位#define CMD_RANDOMREAD1 0x05 //随意读命令周期1#define CMD_RANDOMREAD2 0xE0 //随意读命令周期2#define CMD_RANDOMWRITE 0x85 //随意写命令在这里,随意读命令和随意写命令可以实现在一页内任意地址地读写。
NAND的资料整理(通俗易懂)K9F2G08U0A的一页为(2K+64)字节(加号前面的2K表示的是main区容量,加号后面的64表示的是spare区容量),它的一块为64页,而整个设备包括了2048个块。
这样算下来一共有2112M位容量,如果只算main区容量则有256M字节(即256M×8位)。
要实现用8个IO口来要访问这么大的容量,K9F2G08U0A规定了用5个周期来实现。
第一个周期访问的地址为A0~A7;第二个周期访问的地址为A8~A11,它作用在IO0~IO3上,而此时IO4~IO7必须为低电平;第三个周期访问的地址为A12~A19;第四个周期访问的地址为A20~A27;第五个周期访问的地址为A28,它作用在IO0上,而此时IO1~IO7必须为低电平。
前两个周期传输的是列地址,后三个周期传输的是行地址。
通过分析可知,列地址是用于寻址页内空间,行地址用于寻址页,如果要直接访问块,则需要从地址A18开始。
(2的12次方是4096,并不是2048,这是为什么?个人理解:为了兼容以后更大的NAND,NAND的地址序列可以把“列地址的长度”预留出来,虽说送的是A0-A7,A8-A11,实际取得是A0-A7,A8-A10;(页内地址空间))··········一共是2048*64=131072页,2的17次方由于所有的命令、地址和数据全部从8位IO口传输,所以nandflash定义了一个命令集来完成各种操作。
有的操作只需要一个命令(即一个周期)即可,而有的操作则需要两个命令(即两个周期)来实现。
下面的宏定义为K9F2G08U0A的常用命令:#define CMD_READ1 0x00 //页读命令周期1#define CMD_READ2 0x30 //页读命令周期2#define CMD_READID 0x90 //读ID命令#define CMD_WRITE1 0x80 //页写命令周期1#define CMD_WRITE2 0x10 //页写命令周期2#define CMD_ERASE1 0x60 //块擦除命令周期1#define CMD_ERASE2 0xd0 //块擦除命令周期2#define CMD_STATUS 0x70 //读状态命令#define CMD_RESET 0xff //复位#define CMD_RANDOMREAD1 0x05 //随意读命令周期1#define CMD_RANDOMREAD2 0xE0 //随意读命令周期2#define CMD_RANDOMWRITE 0x85 //随意写命令在这里,随意读命令和随意写命令可以实现在一页内任意地址地读写。
读状态命令可以实现读取设备内的状态寄存器,通过该命令可以获知写操作或擦除操作是否完成(判断第6位),以及是否成功完成(判断第0位)。
在网上找了一些资料,又结合自己的经历谈一下我对NAND Flash 的了解。
S3C2440 板的Nand Flash 支持由两部分组成:Nand Flash 控制器(集成在S3C2440 CPU)和Nand Flash 存储芯片(K9F1208U0B)两大部分组成。
当要访问Nand Flash中的数据时,必须通过Nand Flash控制器发送命令才能完成。
所以, Nand Flash相当于S3C2440的一个外设,而不位于它的内存地址区.NAND Flash 的数据是以bit 的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。
这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。
这些Line 会再组成Page.Nand Flash 有多种结构,我使用的Nand Flash 是K9F1208,下面内容针对三星的K9F1208U0M,数据存储容量为64MB ,采用块页式存储管理。
一共有4096个block(块),每个block有32个page(页),每个page有 528Byte。
1block = 32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area)Nand flash 以页为单位读写数据,而以块为单位擦除数据。
按照这样的组织方式可以形成所谓的三类地址:--Block Address -- Page Address --Column Address对于NAND Flash 来讲,8 个I/O 引脚充当数据、地址、命令的复用端口。
地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。
512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成 1st half 和 2nd half ,最后16 个字节(又称OOB)用于Nand Flash 命令执行完后设置状态用,各自的访问由地址指针命令来选择,A[7:0]就是所谓的column address。
32 个page 需要5bit 来表示,占用A[13:9],即该page 在块内的相对地址。
Block的地址是由A14 以上的bit 来表示,例如512Mb 的NAND,共4096block,因此,需要12 个bit 来表示,即A[25:14],如果是1Gbit 的528byte/page的NAND Flash,则block address用A[26:14]表示。
NAND Flash 的地址表示为:Block Address|Page Address in block|halfpage pointer|Column Address地址传送顺序是Column Address,Page Address,Block Address。
由于地址只能在I/O[7:0]上传递,因此,必须传递多次。
例如,对于512Mbit x8 的NAND flash,地址范围是0-0x3FF FFFF,只要是这个范围内的数值表示的地址都是有效的。
以NAND_ADDR 为例:第1 步是传递column address,就是NAND_ADDR[7:0]给相应的寄存器,即可传递到I/O[7:0]上,而halfpage pointer 即bit8 是由操作指令决定的,即指令决定在哪个halfpage 上进行读写。
而真正的bit8 的值是don't care 的。
第2 步就是将NAND_ADDR[16:9]传到I/O[7:0]上。
第3步将NAND_ADDR[24:17]放到I/O 上。
第4步需要将NAND_ADDR[25]放到I/O 上因此,整个地址传递过程需要4 步才能完成,即4-step addressing。
如果NAND Flash 的容量是256Mbit 以下,那么,block adress 最高位只到bit24,因此寻址只需要3 步。
下面,就x16 (16位)的NAND flash 器件稍微进行一下说明。
由于一个page 的main area 的容量为256word,仍相当于512byte。
但是,这个时候没有所谓的1st halfpage 和2nd halfpage 之分了,所以,bit8就变得没有意义了,也就是这个时候 bit8 完全不用管,地址传递仍然和x8 器件相同。
除了,这一点之外,x16 的NAND使用方法和 x8 的使用方法完全相同。
正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。
一般而言,block、page之间的关系随着芯片的不同而不同,典型的分配是这样的:1block = 32page1page = 512bytes(datafield) + 16bytes(oob)需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash的擦写,而擦写则是以一个block为单位的。
同时必须提醒的是,512bytes理论上被分为1st half 和2sd half,每个half各占256个字节。
我们讨论的K9F1208U0B总共有4096 个Blocks,故我们可以知道这块flash的容量为4096 *(32 *528)= 69206016 Bytes = 66 MB 。
但事实上每个Page上的最后16Bytes是用于存贮检验码和其他信息用的,并不能存放实际的数据,所以实际上我们可以操作的芯片容量为4096 *(32 *512) = 67108864 Bytes = 64 MB。
由上图所示,1个Page总共由528 Bytes组成,这528个字节按顺序由上而下以列为单位进行排列(1列代表一个Byte。
第0行为第0 Byte ,第1行为第1 Byte,以此类推,每个行又由8个位组成,每个位表示1个Byte 里面的1bit)。
这528Bytes按功能分为两大部分,分别是Data Field和Spare Field,其中Spare Field占528Bytes 里的16Bytes,这16Bytes是用于在读写操作的时候存放校验码用的,一般不用做普通数据的存储区,除去这 16Bytes,剩下的512Bytes便是我们用于存放数据用的Data Field,所以一个Page上虽然有528个Bytes,但我们只按512Bytes进行容量的计算。
读命令有两个,分别是 Read1,Read2其中Read1用于读取Data Field的数据,而Read2则是用于读取Spare Field的数据。
对于Nand Flash来说,读操作的最小操作单位为Page,也就是说当我们给定了读取的起始位置后,读操作将从该位置开始,连续读取到本Page的最后一个 Byte为止(可以包括Spare Field)Nand Flash的寻址Nand Flash的地址寄存器把一个完整的Nand Flash地址分解成Column Address与Page Address.进行寻址。
Column Address: 列地址。
Column Address其实就是指定Page上的某个Byte,指定这个Byte其实也就是指定此页的读写起始地址。
Paage Address:页地址。
由于页地址总是以512Bytes对齐的,所以它的低9位总是0。
确定读写操作是在Flash 上的哪个页进行的。
Read1命令当我们得到一个Nand Flash地址addr时我们可以这样分解出Column Address和Page Addresscolumn_addr=src_addrQ2; // column addresspage_address=(src_addr>>9); // page address也可以这么认为,一个Nand Flash地址的src_addr[7,0]是它的column_addr,addr[25,9]是它的Page Address。