Nand Flash数据存储规则与数据读写方法

Nand Flash数据存储规则与数据读写方法
Nand Flash数据存储规则与数据读写方法

谈到Nand Flash的数据存储方式,关于NAND Flash的数据读写方法方面的文章不多,这篇文章详细讲述了Nand Flash数据存储方式和数据读写方法,并用具体的芯片为例作了详细的解释。

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),每页528Byte,每32 个page 形成一个Block,Sizeof(block)=16kByte 。1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=4096 1block=32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area)

Nand flash 以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址:--Block Address -- Page Address --Column Address 。

对于NAND Flash 来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。

512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half和2nd half,各自的访问由地址指针命令来选择,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:24]表示。而page address就是blcok address|page address in block 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 右移9 位,将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 的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 = 32page

1page = 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其实也就是指定此页的读写起始地址。

Page Address:页地址。由于页地址总是以512Bytes对齐的,所以它的低9位总是0。确定读写操作是在Flash上的哪个页进行的。

Read1命令

当我们得到一个Nand Flash地址src_addr时我们可以这样分解出Column Address和Page Address :

column_addr=src_addr%512; // column address

page_address=(src_addr>>9); // page address

也可以这么认为,一个Nand Flash地址的A0~A7是它的column_addr,A9~A25是它的Page Address。(注意地址位A8并没有出现,也就是A8被忽略,在下面你将了解到这是什么原因)

Read1 命令的操作分为4个Cycle,发送完读命令00h或01h(00h与01h的区别请见下文描述)之后将分4个Cycle发送参数,1st.Cycle是发送Column Address。2nd.Cycle ,3rd.Cycle 和4th.Cycle则是指定Page Address(每次向地址寄存器发送的数据只能是8位,所以17位的Page Address必须分成3次进行发送。

Read1的命令里面出现了两个命令选项,分别是00h和01h。这里出现了两个读命是否令你意识到什么呢?是的,00h是用于读写1st half的命令,而01h是用于读取2nd half的命令。现在我可以结合上图给你说明为什么K9F1208U0B的DataField被分为2个half了。

如上文我所提及的,Read1的1st.Cycle是发送Column Address,假设我现在指定的Column Address是0,那么读操作将从此页的第0号Byte开始一直读取到此页的最后一个Byte(包括Spare Field),如果我指定的Column Address是127,情况也与前面一样,但不知道你发现没有,用于传递Column Address的数据线有8条(I/O0~I/O7,对应A0~A7,这也是A8为什么不出现在我们传递的地址位中),也就是说我们能够指定的Column Address范围为0~255,但不要忘了,1个Page的DataField是由512个Byte组成的,假设现在我要指定读命令从第256个字节处开始读取此页,那将会发生什么情景?我必须把Column Address设置为256,但Column Address最大只能是255,这就造成数据溢出。。。正是因为这个原因我们才把Data Field分为两个半区,当要读取的起始地址(Column Address)在0~255内时我们用00h命令,当读取的起始地址是在256~511时,则使用01h命令.假设现在我要指定从第256个byte开始读取此页,那么我将这样发送命令串:

column_addr=256;

从2nd NF_CMD=0x01; half开始读取

NF_ADDR=column_addr&0xff; 1st Cycle

NF_ADDR=page_address&0xff; 2nd.Cycle

NF_ADDR=(page_address>>8)&0xff; 3rd.Cycle

NF_ADDR=(page_address>>16)&0xff; 4th.Cycle

其中NF_CMD和NF_ADDR分别是NandFlash的命令寄存器和地址寄存器的地址解引用,

我一般这样定义它们:

#define rNFCMD (*(volatile unsigned char *)0x4e000004) //NADD Flash command

#define rNFADDR (*(volatile unsigned char *)0x4e000008) //NAND Flash address 事实上,当NF_CMD=0x01时,地址寄存器中的第8位(A8)将被设置为1(如上文分析,A8位不在我们传递的地址中,这个位其实就是硬件电路根据01h或是00h这两个命令来置高位或是置低位),这样我们传递column_addr的值256随然由于数据溢出变为1,但A8位已经由于NF_CMD =0x01的关系被置为1了,所以我们传到地址寄存器里的值变成了:

A0 A1 A2 A3 A4 A5 A6 A7 A8

1 0 0 0 0 0 0 0 1

这8个位所表示的正好是256,这样读操作将从此页的第256号byte(2nd half的第0号byte)开始读取数据。nand_flash.c中包含3个函数:

void nf_reset(void);

void nf_init(void);

void nf_read(unsigned int src_addr,unsigned char *desc_addr,int size);

nf_reset()将被nf_init()调用。nf_init()是nand_flash的初始化函数,在对nand flash进行任何操作之前,nf_init()必须被调用。

nf_read(unsigned int src_addr,unsigned char *desc_addr,int size);为读函数,src_addr是nand flash上的地址,desc_addr是内存地址,size是读取文件的长度。

在nf_reset和nf_read函数中存在两个宏:

NF_nFCE_L();

NF_nFCE_H();

你可以看到当每次对Nand Flash进行操作之前NF_nFCE_L()必定被调用,操作结束之时NF_nFCE_H()必定被调用。这两个宏用于启动和关闭Flash芯片的工作(片选/取消片选)。至于nf_reset()中的:

rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1< <0);

这一行代码是对NandFlash的控制寄存器进行初始化配置,rNFCONF是Nand Flash的配置寄存器,各个位的具体功能请参阅s3c2410数据手册。

现在举一个例子,假设我要从Nand Flash中的第5000字节处开始读取1024个字节到内存的0x30000000处,我们这样调用read函数:

nf_read(5000, 0x30000000,1024);

我们来分析5000这个src_addr.:

根据

column_addr=src_addr%512;

page_address=(src_addr>>9);

我们可得出:

column_addr=5000%512=392

page_address=(5000>>9)=9

于是我们可以知道5000这个地址是在第9页的第392个字节处,于是我们的nf_read函数将这样发送命令和参数:

column_addr=5000%512;

>page_address=(5000>>9);

NF_CMD=0x01; 从2nd half开始读取

NF_ADDR= column_addr &0xff; 1st Cycle

NF_ADDR=page_address&0xff; 2nd.Cycle

NF_ADDR=(page_address>>8)&0xff; 3rd.Cycle

NF_ADDR=(page_address>>16)&0xff; 4th.Cycle

向NandFlash的命令寄存器和地址寄存器发送完以上命令和参数之后,我们就可以从rNFDATA寄存器(NandFlash数据寄存器)读取数据了. 。

我用下面的代码进行数据的读取. :

for(i=column_addr;i<512;i++)

{

*buf++=NF_RDDATA();

}

每当读取完一个Page之后,数据指针会落在下一个Page的0号Column(0号Byte).

下面是源代码:

/*

本代码只属于交流学习,不得用于商业开发

*/

#include "s3c2410.h"

#include "nand_flash.h"

static unsigned char seBuf[16]={0xff};

//--------------------------------------------------------------------------------------

unsigned short nf_checkId(void)

{

int i;

unsigned short id;

NF_nFCE_L(); //chip enable

NF_CMD(0x90); //Read ID

NF_ADDR(0x0);

for(i=0;i<10;i++); //wait tWB(100ns)

id=NF_RDDATA()<<8; // Maker code(K9S1208V:0xec)

id|=NF_RDDATA(); // Devide code(K9S1208V:0x76)

NF_nFCE_H(); //chip enable

return id;

}

//--------------------------------------------------------------------------------------

static void nf_reset(void)

{

int i;

NF_nFCE_L(); //chip enable

NF_CMD(0xFF); //reset command

for(i=0;i<10;i++); //tWB = 100ns.

NF_WAITRB(); //wait 200~500us;

NF_nFCE_H(); //chip disable

}

//--------------------------------------------------------------------------------------

void nf_init(void)

{

rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1< <0);

// 1 1 1 1 1 xxx r xxx, r xxx

// En r r ECCR nFCE=H tACLS tWRPH0 tWRPH1

nf_reset();

}

//--------------------------------------------------------------------------------------

void nf_read(unsigned int src_addr,unsigned char *desc_addr,int size)

{

int i;

unsigned int column_addr = src_addr % 512; // column address

unsigned int page_address = (src_addr >> 9); // page addrress

unsigned char *buf = desc_addr;

while((unsigned int)buf < (unsigned int)(desc_addr) + size)

{

NF_nFCE_L(); // enable chip

/*NF_ADDR和NF_CMD为nand_flash的地址和命令寄存器的解引用*/

if(column_addr > 255) // 2end halft

NF_CMD(0x01); // Read2 command. cmd 0x01: Read command(start from 2end half page) else

NF_CMD(0x00); // 1st halft?

NF_ADDR(column_addr & 0xff); // Column Address

NF_ADDR(page_address & 0xff); // Page Address

NF_ADDR((page_address >> & 0xff); // ...

NF_ADDR((page_address >> 16) & 0xff); // ..

for(i = 0; i < 10; i++); // wait tWB(100ns)/////??????

NF_WAITRB(); // Wait tR(max 12us)

// Read from main area

for(i = column_addr; i < 512; i++)

{

*buf++= NF_RDDATA();

}

NF_nFCE_H(); // disable chip

column_addr = 0;

page_address++;

}

return ;

}

系统定制教学文案

ARM系统定制 以下是个人理解,经过看PPT,查课本,pdf,还有上网查阅总结得来,仅作参考。 简述: 系统定制的本质就是为新开发的硬件(开发板)定制软件系统。共分两大部分: 一:系统裁剪 二:系统移植 1、先说系统裁剪,首先ARM开发板本身的体系结构决定了,不同系列不同版本的ARM 可以共用(兼容)大部分的boot和内核代码,所以只需要在最相近的版本的软件系统稍作修改并测试成功就可以直接移植了,当然,如果整个软件系统打算亲手写的话,那就可以无视系统裁剪这个环节了(老师说这个基本上没有人写得出来)。具体的裁剪过程稍后讲述。 2、系统移植,就是把裁剪后可以运行在开发板上的软件系统烧写到板子中。这就需要了解arm中的存储体系,arm的总线结构,arm的串口等等。具体烧写过程稍后讲述。 第一章:系统裁剪 1、系统裁剪之前,我们需要知道要裁剪哪些东西。这就需要了解ARM的整个软件系统,开发板从上电启动到最后进入操作系统界面之间的流程依次是:boot (uboot),kernel (内核),fs(文件系统,也在内核中),驱动程序(动态加载到内核,部分也已在内核中编译好)。 一、首先是uBoot流程分两个阶段(uboot 的源码在解压后的uboot-2010.02-me下,其中第一阶段在/cpu/arm920t的start.s 和board/smdk2440 的lowlevel_init.s中,第二阶段在lib_arm/board.c 的start_armboot函数中,有兴趣的可以去看一看) 第一阶段:为自身准备(配置)硬件环境。主要操作有:(代码在/cpu/arm920t的start.s) 1、关闭看门狗(W ATCHDOG),就是把WTCON寄存器写0。 (ldr r0, =pWTCON,mov r1, #0x0,str r1, [r0])。 2、关中断,配置各个中断控制寄存器的值。设置CPU为特权模式svc ,通过cpsr寄存器设置。(代码不列出来了,后面的代码都可以在starts.s文件中去看) 3、设置CPU的时钟频率(时钟分频),配置FCLK(cpu的频率),HCLK(内部AHB 总线频率),PCLK(外围APB总线频率), 比例为1:4:8。 4、配置SDRAM,为本身准备内存空间。配置内存空间(页表),设置堆栈。(通过调用)(通过调用lowlevel_init 函数,函数实现在board/smdk2440的lowlevel_init.s中) 5、配置NAND/NOR flash驱动,主要是nand_read ,nand_write的实现。 第二阶段:为内核准备(配置)环境。(代码lib_arm/board.c 的start_armboot函数中) 1、初始化本阶段的硬件设备:关闭MMU和数据CACHE。设置CPU寄存器。R0 =0 R1 = 机器ID。R2 = 启动参数表在RAM中的起始地址。

NAND Flash中文版资料

NAND Flash 存储器 和 使用ELNEC编程器烧录NAND Flash 技术应用文档 Summer 翻译整理 深圳市浦洛电子科技有限公司 August 2006

目录 一. 简介 ----------------------------------------------------------------------------------- 1 二. NAND Flash与NOR Flash的区别 -------------------------------------------- 1 三. NAND Flash存储器结构描叙 --------------------------------------------------- 4 四. 备用单元结构描叙 ---------------------------------------------------------------- 6 五. Skip Block method(跳过坏块方式) ------------------------------------------ 8 六. Reserved Block Area method(保留块区域方式)----------------------------- 9 七. Error Checking and Correction(错误检测和纠正)-------------------------- 10 八. 文件系统 ------------------------------------------------------------------------------10 九. 使用ELNEC系列编程器烧录NAND Flash -------------------------------- 10 十. Invalid Block Management drop-down menu -------------------------------- 12 十一. User Area Settings3 -------------------------------------------------------- 13 十二. Solid Area Settings --------------------------------------------------------- 15 十三. Quick Program Check-box ---------------------------------------------- 16 十四. Reserved Block Area Options --------------------------------------------17 十五. Spare Area Usage drop-down menu ------------------------------------18

nandflash命名规则大全(三星,海力士,美光)

NAND Flash Code Information(1/3)
Last Updated : August 2009
K9XXXXXXXX - XXXXXXX
1
1. Memory (K) 2. NAND Flash : 9 3. Small Classification (SLC : Single Level Cell, MLC : Multi Level Cell, SM : SmartMedia, S/B : Small Block) 1 : SLC 1 Chip XD Card 2 : SLC 2 Chip XD Card 3 : 4bit MLC Mono 4 : SLC 4 Chip XD Card 5 : MLC 1 Chip XD Card 6 : MLC 2 Chip XD Card 7 : SLC moviNAND 8 : MLC moviNAND 9 : 4bit MLC ODP A : 3bit MLC MONO B : 3bit MLC DDP C : 3bit MLC QDP F : SLC Normal G : MLC Normal H : MLC QDP K : SLC Die Stack L : MLC DDP M : MLC DSP N : SLC DSP O : 3bit MLC ODP P : MLC ODP Q : SLC ODP R : MLC 12-die stack S : MLC 6 Die Stack T : SLC SINGLE (S/B) U : MLC 16 Die Stack W : SLC 4 Die Stack 4~5. Density 12 : 512M 32 : 32M 64 : 64M 2G : 2G AG : 16G DG : 128G GG : 384G NG : 96G
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18
6. Technology 0 : Normal (x8) C : Catridge SIP M : moviNAND P : moviMCP Z : SSD 7. Organization 0 : NONE 6 : x16
1 : Normal (x16) D : DDR N : moviNAND FAB T : Premium eSSD
8 : x8
8. Vcc A : 1.65V~3.6V B : 2.7V (2.5V~2.9V) C : 5.0V (4.5V~5.5V) D : 2.65V (2.4V ~ 2.9V) E : 2.3V~3.6V R : 1.8V (1.65V~1.95V) Q : 1.8V (1.7V ~ 1.95V) T : 2.4V~3.0V S : 3.3V (3V~3.6V/ VccQ1.8V (1.65V~1.95V) U : 2.7V~3.6V V : 3.3V (3.0V~3.6V) W : 2.7V~5.5V, 3.0V~5.5V 0 : NONE 9. Mode 0 : Normal 1 : Dual nCE & Dual R/nB 3 : Tri /CE & Tri R/B 4 : Quad nCE & Single R/nB 5 : Quad nCE & Quad R/nB 6 : 6 nCE & 2 RnB 7 : 8 nCE & 4 RnB 8 : 8 nCE & 2 RnB 9 : 1st block OTP A : Mask Option 1 L : Low grade 10. Generation M : 1st Generation A : 2nd Generation B : 3rd Generation C : 4th Generation D : 5th Generation E : 6th Generation Y : 25th Generation Z : 26th Generation
16 : 16M 40 : 4M 80 : 8M 4G : 4G BG : 32G EG : 256G HG : 512G ZG : 48G
28 : 128M 56 : 256M 1G : 1G 8G : 8G CG : 64G FG : 256G LG : 24G 00 : NONE
-1-
Part Number Decoder

最新三星FLASH命名规则

三星F L A S H命名规则

Samsung nand flash ID spec 三星在nand flash存储方面也是投入了很多精力,对于pure nand flash、OneNAND(带controller的nand flash模块)以及nand的驱动都有很深层的开发。后面说的nand都会基于Samsung的产品,包括驱动。三星的pure nand flash(就是不带其他模块只是nand flash存储芯片)的命名规则如下: 1. Memory (K) 2. NAND Flash : 9 3. Small Classification (SLC : Single Level Cell, MLC : Multi Level Cell, SM : SmartMedia, S/B : Small Block) 1 : SLC 1 Chip XD Card 2 : SLC 2 Chip XD Card 4 : SLC 4 Chip XD Card A : SLC + Muxed I/ F Chip B : Muxed I/ F Chip D : SLC Dual SM E : SLC DUAL (S/ B) F : SLC Normal G : MLC Normal H : MLC QDP J : Non-Muxed One Nand K : SLC Die Stack L : MLC DDP M : MLC DSP N : SLC DSP Q : 4CHIP SM R : SLC 4DIE STACK (S/ B) S : SLC Single SM T : SLC SINGLE (S/ B) U : 2 STACK MSP V : 4 STACK MSP W : SLC 4 Die Stack 4~5. Density 12 : 512M 16 : 16M 28 : 128M 32 : 32M 40 : 4M 56 : 256M 64 : 64M 80 : 8M 1G : 1G 2G : 2G 4G : 4G 8G : 8G AG : 16G BG : 32G CG : 64G DG : 128G 00 : NONE 6~7. organization 00 : NONE 08 : x8

NOR-FLASH驱动文档(SST39VF1601)

NOR-FLASH驱动文档(SST39VF1601)2012-03-30 00:57:33 NOR-FLASH是最早出现的Flash Memory,目前仍是多数供应商支持的技术架 构.NOR-FLASH在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,但是由于NOR-FLASH只支持块擦除,其擦除和编程速度较慢,而块尺寸又较大,导致擦除和编程操作所花费的时间很长,所以在纯数据存储和文件存储的应用中显得力不从心. NOR-FLASH的特点是: 1. 程序和数据可存放在同一芯片上,FLASH芯片拥有独立的数据总线和地址总线,能快速随 机读取,并且允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行; 2. 可以单字节或单字读取,但不能单字节擦除,必须以部分或块为单位或对整片执行擦除操 作,在执行写操作之前,必需先根据需要对部分,块或整片进行擦除,然后才能写入数据。 以SST系列NOR-FLASH芯片为例介绍FLASH的使用方法及驱动. 首先,在驱动的头文件中,要根据芯片的具体情况和项目的要求作如下定义: 1. 定义操作的单位,如 typedef unsigned char BYTE; // BYTE is 8-bit in length typedef unsigned short int WORD; // WORD is 16-bit in length typedef unsigned long int Uint32; // Uint32 is 32-bit in length 在这里地址多是32位的,芯片写操作的最小数据单位为WORD,定义为16位,芯片读操作的最小数据单位是BYTE,定义为8位. 2. 因为芯片分为16位和32位的,所以对芯片的命令操作也分为16位操作和32位操作(命令 操作在介绍具体的读写过程中将详细介绍). #ifdef GE01 /*宏NorFlash_32Bit,若定义了为32位NorFlash,否则为16位NorFlash*/ #define NorFlash_32Bit #endif 3. 根据芯片的情况,定义部分(段)和块的大小. #define SECTOR_SIZE 2048 // Must be 2048 words for 39VF160X #define BLOCK_SIZE 32768 // Must be 32K words for 39VF160X

Flash快闪记忆体分类介绍

Flash快閃記憶體分類介紹:SLC/MLC/黑片 1 Flash快閃記憶體是非易失性記憶體,這是相對於SDRAM等記憶體所說的。即記憶體斷電後,內部的資料仍然可以保存。Flash根據技術方式分為Nand 、Nor Flash和AG-AND Flash,而U盤和MP3中最常用的記憶體就是Nand Flash。 NOR和NAND是現在市場上兩種主要的非易失快閃記憶體技術。Intel于1988年首先開發出NOR flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每比特的成本,更高的性能,並且象磁片一樣可以通過介面輕鬆升級。但是經過了十多年之後,仍然有相當多的硬體工程師分不清NOR 和NAND快閃記憶體。大多數情況下快閃記憶體只是用來存儲少量的代碼,這時NOR快閃記憶體更適合一些。而NAND則是高資料存儲密度的理想解決方案。 Nand Flash也有幾種,根據技術方式,分為SLC、MCL、MirrorBit等三種。SLC 是Single level cell的縮寫,意為每個存儲單元中只有1bit資料。而MLC就是Multi-Level-Cell,意為該技術允許2 bit的資料存儲在一個存儲單元當中。而MirrorBit則是每個存儲單元中只有4bit資料。 SLC的技術存儲比較穩定,SLC的技術也最為成熟。然而MLC可以在一個單元中有2bit資料,這樣同樣大小的晶圓就可以存放更多的資料,也就是成本相同的情況下,容量可以做的更大,這也是同樣容量,MLC價格比SLC低很多的原因。通常情況下相同容量的MLC和SLC,MLC的價格比SLC低30%~40%,有些甚至更低。 區分SLC(停產)和MLC(現在主流,分新老制程,60NM 和56/50NM ) 1、看Flash的型號:根據Flash的命名規則,進行區分。 2、測試讀寫速度:SLC的非常快,MLC的很慢。 : 目前市場上還流行黑片、白片的說法,這些都是Downgrade Flash的類型,由於Flash制程和容量的提升,內部的構成越來越複雜。而新的制程推出時,產品良率並不一定理想,那些不良的Flash有些是容量不足,有些是壽命不能達到要求,有些是測試不能通過,這些不能達到出廠要求的Flash都被稱為Downgrade Flash。Downgrade Flash有些由廠家推向市場,比如Spectech等就是鎂光(Micron)的Downgrade Flash。而另外一部分作為廢品淘汰掉,但是利潤驅使,這些廢品也會低價被收購流入市場。一些廠家以各種方案的掃描工具(Soting Board)來檢驗出來哪些能夠使用。這些廠家收購Flash按斤回收,通過少則數十台Soting

浅谈NorFlash的原理及其应用

浅谈NorFlash的原理及其应用 NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一。Intel 于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Erasable Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理需要特殊的系统接口。性能比较 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash 器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。 l 、NOR的读速度比NAND稍快一些。 2、NAND的写入速度比NOR快很多。 3 、NAND的4ms擦除速度远比NOR的5s快。 4 、大多数写入操作需要先进行擦除操作。 5 、NAND的擦除单元更小,相应的擦除电路更少。此外,NAND 的实际应用方式要比NOR复杂的多。NOR可以直接使用,并可在上面直接运行代码;而NAND需要I/O接口,因此使用时需要驱动程序。不过当今流行的操作系统对NAND结构的Flash都有支持。此外,Linux内核也提供了对NAND结构的Flash的支持。详解 NOR

三星的nand flash的命名规则

三星的pure nand flash的命名规则如下: K 9 ×××××××× - ×××× ××× 1 2 3 4~5 6~7 8 9 10 11 12 13 14 15 16 1. Memory (K) 2. NAND Flash : 9 3. Small Classification (SLC : Single Level Cell, MLC : Multi Level Cell, SM : SmartMedia, S/B : Small Block) 1 : SLC 1 Chip XD Card 2 : SLC 2 Chip XD Card 4 : SLC 4 Chip XD Card A : SLC + Muxed I/ F Chip B : Muxed I/ F Chip D : SLC Dual SM E : SLC DUAL (S/ B) F : SLC Normal G : MLC Normal H : MLC QDP J : Non-Muxed OneNand K : SLC Die Stack L : MLC DDP M : MLC DSP N : SLC DSP Q : 4CHIP SM R : SLC 4DIE STACK (S/ B) S : SLC Single SM T : SLC SINGLE (S/ B) U : 2 STACK MSP V : 4 STACK MSP W : SLC 4 Die Stack 4~5. Density 12 : 512M 16 : 16M 28 : 128M 32 : 32M 40 : 4M 56 : 256M 64 : 64M 80 : 8M

总结NAND FLASH控制器的操作

NAND FLASH相对于NOR FLASH而言,其容量大,价格低廉,读写速度都比较快,因而得到广泛应用。NOR FLASH的特点是XIP,可直接执行应用程序, 1~4MB时应用具有很高的成本效益。但是其写入和擦除的速度很低直接影响了其性能。 NAND FLASH不能直接执行程序,用于存储数据。在嵌入式ARM应用中,存储在其中的数据通常是读取到SDROM中执行。因为NAND FLASH主要接口包括 几个I/O口,对其中的数据都是串行访问,无法实现随机访问,故而没有执行程序。 NAND FLASH接口电路是通过NAND FLAH控制器与ARM处理器相接的,许多ARM处理器都提供NAND FLASH控制器,为使用NAND FLASH带来巨大方便。 K9F2G08U0B是三星公司的一款NAND FLASH产品。 K9F2G08U0B包含8个I/O,Vss、Vcc、以及控制端口(CLE、ALE、CE、RE、WE、WP、R/B)。其存储结构分块。 共2K 块 每块大小16 页 每页大小2K + 64BYTE 即容量=块数×页数×每页大小=2K×16×(2K + 64BYTE)=256M BYTE + 8M BYTE NAND FLASH控制器提供了OM[1:0]、NCON、GPG13、GPG14、GPG15共5个信号来选择NAND FLASH启动。 OM[1:0]=0b00时,选择从NAND FLASH启动。 NCON:NAND FLASH类型选择信号。 GPG13:NAND FLASH页容量选择信号。 GPG14:NAND FLASH地址周期选择信号。 GPG15:NAND FLASH接口线宽选择。0:8bit总线宽度;1:16bit总线宽度。 访问NAND FLASH 1)发生命令:读、写、还是擦除 2)发生地址:选择哪一页进行上述操作 3)发生数据:需要检测NAND FLASH内部忙状态 NAND FLASH支持的命令: #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

STM32使用FSMC控制NAND flash 例程概要

本文原创于观海听涛,原作者版权所有,转载请注明出处。 近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B,我要用到的FLASH为1G bit的大页(2K,多走了两天弯路。以下笔记将说明如何将默认固件库修改为大页模式以驱动大容量NAND,并作驱动。 本文硬件:控制器:STM32F103ZET6,存储器:HY27UF081G2A 首先说一下NOR与NAND存储器的区别,此类区别网上有很多,在此仅大致说明: 1、Nor读取速度比NAND稍快 2、Nand写入速度比Nor快很多 3、NAND擦除速度(4ms远快于Nor(5s 4、Nor 带有SRAM接口,有足够的地址引脚来寻址,可以很轻松的挂接到CPU 地址和数据总线上,对CPU要求低 5、NAND用八个(或十六个引脚串行读取数据,数据总线地址总线复用,通常需要CPU支持驱动,且较为复杂 6、Nor主要占据1-16M容量市场,并且可以片内执行,适合代码存储 7、NAND占据8-128M及以上市场,通常用来作数据存储 8、NAND便宜一些 9、NAND寿命比Nor长 10、NAND会产生坏块,需要做坏块处理和ECC 更详细区别请继续百度,以上内容部分摘自神舟三号开发板手册

下面是NAND的存储结构: 由此图可看出NAND存储结构为立体式 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同。 需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash 的擦写,而擦写则是以一个block为单位的。 我们这次使用的HY27UF081G2A其PDF介绍: Memory Cell Array = (2K+64 Bytes x 64 Pages x 1,024 Blocks 由此可见,该NAND每页2K,共64页,1024块。其中:每页中的2K为主容量Data Field, 64bit为额外容量Spare Field。Spare Field用于存贮检验码和其他信息用的,并不能存放实际的数据。由此可算出系统总容量为2K*64*1024=134217728个byte,即1Gbit。NAND闪存颗粒硬件接口: 由此图可见,此颗粒为八位总线,地址数据复用,芯片为SOP48封装。 软件驱动:(此部分写的是伪码,仅用于解释含义,可用代码参见附件 主程序: 1. #define BUFFER_SIZE 0x2000 //此部分定义缓冲区大小,即一次写入的数据 2. #define NAND_HY_MakerID 0xAD //NAND厂商号 3. #define NAND_HY_DeviceID 0xF1 //NAND器件号 4. /*配置与SRAM连接的FSMC BANK2 NAND*/

三星NAND FLASH命名规则

三星的pure nand flash(就是不带其他模块只是nand flash存储芯片)的命名规则如下:第1位. Memory (K) 第2位. NAND Flash : 9 第3位. Small Classification(SLC : Single Level Cell, MLC : Multi Level Cell,SM : SmartMedia, S/B : Small Bl ock) 1 : SLC 1 Chip XD Card 2 : SLC 2 Chip XD Card 4 : SLC 4 Chip XD Card A : SLC + Muxed I/ F Chip B : Muxed I/ F Chip D : SLC Dual SM E : SLC DUAL (S/ B) F : SLC Normal G : MLC Normal H : MLC QDP J : Non-Muxed OneNand K : SLC Die Stack L : MLC DDP M : MLC DSP N : SLC DSP Q : 4CHIP SM R : SLC 4DIE STACK (S/ B) S : SLC Single SM T : SLC SINGLE (S/ B) U : 2 STACK MSP V : 4 STACK MSP W : SLC 4 Die Stack 第4~5位. Density(注:实际单位应该是bit,而不是Byte) 12 : 512M 16 : 16M 28 : 128M 32 : 32M 40 : 4M 56 : 256M 64 : 64M 80 : 8M 1G : 1G 2G : 2G 4G : 4G 8G : 8G AG : 16G BG : 32G CG : 64G

NAND FLASH在储存测试中的应用

NAND FLASH在储存测试系统中的应用(3) 2009-11-09 22:35:43 来源:王文杰马游春李锦明 关键字:NAND FLASH 储存测试K9K8G08UOM 2 NAND FLASkI Memory的硬件部分 本设计当中,FLASH的数据输入输出口、控制端口通过调理电路与FPGA的端口相连,图4所示是其硬件连接电路。 从图4中可知,FLASH的数据输入输出端口I/00~7、控制端口/CE、是通过芯片SN54LV245与FPGA相连;FLASH的控制端口cLE、ALE、/WE、/RE通过芯片SN54LV245和芯片74HCl4与ITGA相连。其中F-CLE、F-ALE、F—WE、F-RE、F—CE、F- R/Bur是FPGA的I/O口,是FPGA逻辑的输入输出口。CLE、ALE信号是FLASH存储器命令、地址锁存使能信号,/WE是保证命令、地址、数据能否及时正确的写入FLASH 的信号,/RE信号控制着数据的读取,这些信号的精确度关系着FLASH存储、读数功能的实现。所以,这些信号的好坏直接关系着FLASH的正常工作。经实践的电路调试,这些信号在传输过程中受到了其它因素的干扰,信号明显失真,在电路中加入74HCl4(非门)以后,信号会变得光滑,准确。 芯片SN54LV245是八进制三态总线收发器,DIR=1时,总线传输方向从A→B;DIR=0时,总线传输方向从B→A。/OE是片选信号。/0E,DIR信号是由FPGA内部编程逻辑控制的。 FL,ASH接口中,为了保证/wE、/RE、/CE、R/B控制信号初始状态无效,由硬件电路实现端口值拉高。本设计中不使用写保护功能,所以/WP端口也接上了上拉电阻。 3 结束语 基于闪存技术的固态存储器存储密度大,功耗小,可靠性高,体积小重量轻且成本也在不断降f氐,在航空应用中有良好的应用前景。在设计储存测试系统时选用大容量的NAIXD FLASH存储器大大提高了储存、读取速度,并且设计电路结构简单,易于修改。 (本文转自电子工程世界:http://www.eewo

OK335x产品规格书-2013-09-12

OK335x产品规格书

目录 第一章产品说明 (3) 1.1产品总述 (3) 1.2应用领域 (4) 第二章OK335xD产品 (5) 2.1产品概述 (5) 2.1.1FET335xD概述 (5) 2.1.2OK335xD概述 (7) 2.2产品参数 (8) 2.2.1FET335xD硬件参数 (8) 2.2.2FET335xD软件参数 (8) 2.2.3OK335xD接口说明 (10) 2.3FET335xD尺寸说明 (11) 第三章OK335xS产品 (12) 3.1产品概述 (12) 3.1.1FET335xS概述 (12) 3.1.2OK335xS概述 (13) 3.2产品参数 (14) 3.2.1FET335xS硬件参数 (14) 3.2.2FET335xS软件参数 (14) 3.2.3OK335xS接口说明 (16) 第四章附加说明 (17)

第一章产品说明 1.1产品总述 OK335x开发板是一款由飞凌自主设计、生产和发行销售的高性能开发平台。本开发板采用了TI公司的AM335X Cortex-A8处理器,运行主频高达1GHz,AM335X处理器集成了两个1000M网卡,集成了Can总线控制器,IIC控制器,LCD控制器,集成了PowerVR SGX530图形处理器,非常适合工业控制,多媒体终端等应用领域。 OK335X开发平台采用“核心板+底板”结构,这种分离设计是一种高效率,低成本的设计方式,核心板采用6层或者8层PCB,底板采用2层PCB,客户可以从我公司购买核心板,设计自己的底板,这样可以加速产品上市的时间,降低客户研发风险,为客户节约产品成本。 针对AM335X CPU的特性,飞凌公司开发了两款基于AM335X的开发平台,OK335xD和OK335xS,这两款产品的主要差别是核心板和底板的连接方式,OK335xD的核心板和底板采用200Pin的双排针插座,方便核心板与底板插拔,OK335xS核心板和底板采用136Pin的邮票孔连接方式,这种连接方式使核心板和底板连接更稳定,适用于对产品高度有要求的应用环境,除此外OK335xS有两个1000M网口,而Ok335xD有一个1000M网口,更详细的差别请看后面章节的详细介绍。 OK335xD和OK335xS开发板默认使用TI AM3354处理器,运行主频800MHz/720MHz,运行温度为-40℃~+90℃.,下面是两款产品的详细参数。

nandflash用法

6 NAND FLASH CONTORLLER OVERVIEW In recent times, NOR flash memory gets high in price while an SDRAM and a NAND flash memory is comparatively economical , motivating some users to execute the boot code on a NAND flash and execute the main code on an SDRAM. S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4K Bytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone will be executed. Generally, the boot code will copy NAND flash content to SDRAM. Using hardware ECC, the NAND flash data validity will be checked. Upon the completion of the copy, the main program will be executed on the SDRAM. comparatively 比较地、相当地 motivating v. 激励;刺激;调动…的积极性(motivate的ing形式) execute vt. 实行;执行;处死 internal n. 内脏;本质adj. 内部的;里面的;体内的;(机构)内部的 Steppingstone n. 踏脚石;进身之阶;达到目的的手段 validity n. [计] 有效性;正确;正确性 content n. 内容,目录;满足;容量adj. 满意的;vt. 使满足 FEATURES 1. Auto boot: The boot code is transferred into 4-kbytes Steppingstone during reset. After the transfer, the boot code will be executed on the Steppingstone. 2. NAND Flash memory I/F: Support 256Words, 512Bytes, 1KWords and 2KBytes Page. 3. Software mode: User can directly access NAND flash memory, for example this feature can be used in read/erase/program NAND flash memory. 4. Interface: 8 / 16-bit NAND flash memory interface bus. 5. Hardware ECC generation, detection and indication (Software correction). 6. SFR I/F: Support Little Endian Mode, Byte/half word/word access to Data and ECC Data register, and Word access to other registers 7. SteppingStone I/F: Support Little/Big Endian, Byte/half word/word access. 8. The Steppingstone 4-KB internal SRAM buffer can be used for another purpose after NAND flash booting. 特性 1。自动引导:在复位时,引导代码写入4-k字节的中转区,在转移后启动 代码将在中转区上执行。 2。NAND闪存接口:支持256字,512字节,1k字和2KB字节页。 3。软件模式:用户可以直接访问NAND闪存,例如这个特性可以用于 读/写/擦除NAND闪存。

SLC和MLC闪存nand flash的区别和历史

SLC和MLC闪存nand flsah的区别和历史 飞凌OK6410开发板全新升级,标配1G超大容量NandFlash,让您的使用更加游刃有余。 市面上绝大多数6410开发板仍然只是支持SLC类型的NAND。我们经过努力,实现了MLC NAND的完美支 持。成为同价位开发板中唯一标配1GFlash的产品。包括wince系统在内的驱动软件经过改写,并严格测 试。使用MLC的NAND可大幅提高容量和产品性价比。 备注:强大的S3C6410处理器支持MLC NANDFLASH,而这个功能在S3C2440上是不支持的。MLC NAND已经得 到广泛应用,是未来的发展方向。 ------------------------------------------------------------------------------------------ 以前只是知道FLASH分为NOR和NAND,没有注意过NAND还分很多种。今天看到飞凌的升级信息,就在 网上查了一下。评论不一,就拿出来和大家讨论一下,互相学习了。 Flash闪存是非易失性存储器,这是相对于SDRAM等存储器所说的。即存储器断电后,内部的数据仍 然可以保存。Flash根据技术方式分为Nand 、Nor Flash和AG-AND Flash,而U盘和MP3中最常用的内存就 是Nand Flash。 Nand Flash也有几种,根据技术方式,分为SLC、MCL、MirrorBit等三种。SLC是Single level cell 的缩写,意为每个存储单元中只有1bit数据。而MLC就是Multi-Level-Cell,意为该技术允许2 bit的数 据存储在一个存储单元当中。而MirrorBit则是每个存储单元中只有4bit数据。 SLC的技术存储比较稳定,SLC的技术也最为成熟。然而MLC可以在一个单元中有2bit 数据,这样同样大小 的晶圆就可以存放更多的数据,也就是成本相同的情况下,容量可以做的更大,这也是同样容量,MLC价 格比SLC低很多的原因。通常情况下相同容量的MLC和SLC,MLC的价格比SLC低30%~40%,有些甚至更低。 区分SLC(停产)和MLC(现在主流,分新老制程,60NM 和56/50NM ) 1、看Flash的型号:根据Flash的命名规则,进行区分。 2、测试读写速度:SLC的非常快,MLC的很慢。 SLC闪存:即单层式储存(Single Level Cell;SLC),包括三星电子、Hynix、美光(Micron)以及 东芝都是此技术使用者 MLC闪存:多层式储存(Multi Level Cell;MLC),目前有东芝、Renesas、三星使用,英飞凌 (Infineon)与Saifun Semiconductors合资利用NROM技术所共同开发的多位储存(Multi Bit Cell; MBC)。 除了三星,Hynix等其他存储器制造商也在向MLC闪存迈进。虽然东芝凭借多年的技术

NAND Flash原理和使用

目录 1.概述 (2) 2.功能框图 (3) 3.管脚 (3) 4.寻址 (4) 5.总线操作 (5) 6.命令表 (6) 7.PAGE READ,0x00-0x30 (7) 8.RANDOM DATA READ,0x05-0xE0 (7) 9.PAGE READ CACHE MODE START,0x31;PAGE READ CACHE MODE START LAST,0x3F (8) 10.READ ID,0x90 (8) 11.READ STATUS,0x70 (9) 12.编程操作 (9) 13.内部数据搬移 (11) 14.块擦除操作,0x60-0xD0 (12) 15.复位操作,0xFF (13) 16.写保护操作 (13) 17.错误管理 (14)

以Micron公司的MT29F2G08为例介绍NAND Flash原理和使用。 1.概述 MT29F2G08使用一个高度复用的8-bit总线(I/O[7:0])来传输数据、地址、指令。5个命令脚(CLE、ALE、CE#、WE#)实现NAND命令总线接口规程。3个附加的脚用作: 控制硬件写保护(WP#)、监视芯片状态(R/B#),和发起上电自动读特征(PRE-仅3V芯片支持)。注意, PRE功能不支持宽温芯片。 MT29F2G08内部有2048个可擦除的块,每个块分为64个可编程的页,每个页包含2112字节(2048个字节作为数据存储区,64个备用字节一般作为错误管理使用)。 每个2112个字节的页可以在300us内编程,每个块(64x2112=132K)可以在2ms内被擦除。片上控制逻辑自动进行PROGRAM和ERASE操作。 NAND的内部存储阵列是以页为基本单位进行存取的。读的时候,一页数据从内部存储阵列copy到数据寄存器,之后从数据寄存器按字节依次输出。写(编程)的时候,也是以页为基本单位的:起始地址装载到内部地址寄存器之后,数据被依次写入到内部数据寄存器,在页数据写入之后,阵列编程过程启动。 为了增加编程的速度,芯片有一个CACHE寄存器。在CACHE编程模式,数据先写入到CACHE寄存器,然后再写入到数据寄存器,一旦数据copy进数据寄存器后,编程就开始。在数据寄存器被装载及编程开始之后,CACHE寄存器变为空,可以继续装载下一个数据,这样内部的编程和数据的装载并行进行,提高了编程速度。 内部数据搬移命令(INTERNAL DATA MOVE)也使用内部CAHCE寄存器,通常搬移数据需要很长时间,通过使用内部CACHE寄存器和数据寄存器,数据的搬移速度大大增加,且不需要使用外部内存。

相关文档
最新文档