NandFlash管理系统

NandFlash管理系统
NandFlash管理系统

NandFlash管理系统

1.总则

本文件介绍了NANDFLASH管理系统的FLASH存储空间的划分,ECC数据纠错,坏块的处理,均匀存储算法,逻辑地址与物理地址转换实现的方案。文件的最后是代码的测试说明。

2.FLASH存储空间的划分

为实现FLASH坏块处理,把FLASH存储空间划分成两个区域,其中的FLASH空间的最前面的区称作保留区,另一个区称作数据区,位置位于保留区之后。其中,保留区的容量为FLASH 总容量的8%大小,比如说K9F1G08U0A总容量是128M,则保留区的容量为128M*8%= 10M(80个块),保留区的功能是存放地址映射表和保留存储块的目的以备用于坏块处理替换。因此,在用户看来,实际可以用于存储数据的容量为128*92%=1178M,从U盘看来,也就是用户在操作系统下看到的磁盘存储容量。

3.FLASH块状态表格

FLASH块状态表格16的版本存放在FLASH0块,从PAGE0开始存放。FLASH块状态表格存放着整块FLASH所有块状态,它是根据第一次使用FLASH根据其制造厂商保留的坏块标记来建立的;每一个块的状态表示占用均为2个字节,定义如下表1所示:

FLASH值状态

0x0Block_BAD

0xfffe Block_OK

0xFFFC Block_Allocated

其它Block_Remaped_to

表1

1)0x0Block_BAD—以此代码为标记的块为坏块,FLASH管理系统应避免使用

2)0xfffe Block_OK—以此代码为标记的块为正常块,FLASH管理系统正常使用

3)Block_Allocated—此代码用于标识保留区内的块已被分配于替换数据区内的坏块

4)Block_Remaped_to—代码用于标识数据区内的坏块,而坏块已经被保留区内的坏块替换,

其值即为Remapped_to的块号。

块状态存放以Block0开始顺序存放在FLASH块状态表,以K9F1G08U0A为例,MaxBlockSize为1024,其FLASH块状态表的大小为1024*2=2048个字节,占用不到一个页。

4.NandFlash管理系统块映射方法的定义

NandFlash管理系统收到一个对逻辑块0的处理请求,首先将它转换成物理块号,物理块号=逻辑块0+保留区块数。得到了物理块号后,可以开始在FLASH块状态表中查找FLASH块的状态,而物理块状态有以下几种情况(如表1),对于各个可能的块的状态的分别处理如下:

1)0xfffe Block_OK---说明块为正常块,NandFlash管理系统可以使用

2)0x0Block_BAD----说明块为坏块,不能使用;NandFlash管理系统需要采用坏块替换

处理;坏块替换具体处理步骤,包括在保留区内找一个状态为Block_OK,且写块计数

器(参考8.均匀存储算法)最小的块;将找到块状态在FLASH块状态表中标记为Block

Allocated;将找到块号写入作为数据区块状态;最后,根据需把原块内所有数据移去

新块,最后使用这个块以后即可进行读写操作。

3)Block_Remaped_to----说明数据区的块已替换;则NandFlash管理系统可直接对块号作

为Block_Remaped_to替换块直接进行读写操作。

5.ECC数据纠错

FNandFlash管理系统ECC数据纠错使用1bit yaffs_ecc algorithm,yaffs_ecc algorithm一次可对256字节进行一次ecc计算,得到3个字节ecc码;一个SECTOR需要2次ecc计算,共需要6个字节FLASH空间存放ecc码。

6.page空间划分

以K9F1G08U0A为例,其page大小为2112个字节,一个Page一共可以存放4个Sectors,每个Sectors占用52个字节。第一个Sector offset0开始存放,offset2048开始存放ecc码,总计6个字节,最后12个字节用来为将来扩充使用;第2个Sector从offset512开始存放,以此类推。

7.FLASH块状态表---0块状态特殊定义

FLASH0块为正常块,因此,FLASH块状态表0块的状态字段可以用于特殊用途;NandFlash 的特性在写之前,必须将整块擦除。所以,用户在写page时,需要把page之内所在块其内所有数据整块进行保存,NandFlash管理系统使用了NandFlash提供Copy Back功能,将整块移到一个temp_block,以用于暂时保存page所在块。FLASH块状态表0块状态字即用于保存这个temp_block的块号,temp_block与数据区块使用同样的坏块替换处理方法。

0块的擦除保存块记录在block0page0的偏移0-1。数据块的擦除保存块记录在block0page62的偏移0-1,以上为针对16位的坏块表,32位的版本的记录的位置另行考虑。

Block0page63是写有55,55标记,表示新nandflash已经建立过坏块表格,系统每次上电都会去检查这个标记,看看是否要执行新的建表任务。

8.均匀存储

NandFlash管理系统对保留区块内使用均匀存储,其实现如下:

在保留区块page63偏移2109开始4个字节存放块写计数器,计数据器初始为值0,FLASH块状态表建立时进行设置。以后每次对一个块进入写入操作,块写计数器加1。当块写计数器达到1024时,该块将设置为Block_OK重新返回NandFlash管理系统,后在保留区内找一个写块计数器最小的块,重新映射给当前写入数据的地址逻辑,继续写入操作,从而实现了对保留区内数据块均匀存储,增加FLASH使用时间。

9.Sector上层读写函数

NandFlash管理系统提供给上层一个读写接口,包括读写Sector函数,一共2个,其原型定义参考如下:

1)Unsigned char read_flash_sector(u8*buf,u32sector_address);

2)Unsigned char write_flash_sector(u8*buf,u32sector_address);

a)其中Sector读函数read_flash_sector(u8*buf,u32sector_address);是不会产生坏块的,其

处理相对来说要简单一些,其处理过程叙述如下:首先可以根据sector_address计算出逻辑块号,再将逻辑块号转换为实际块号,参见<4.NandFlash管理系统块映射处理方法一般定义>,再从sector_address计算出页号和页内offset,即可读取Sector,进行ecc计算,以纠正1位错误。

b)Sector写函数write_flash_sector(u8*buf,u32sector_address);其处理比Sector读相对要复

杂,叙述如下:首先可以根据sector_address计算出逻辑块号,将逻辑块号转换成实际块号,参见<4.NandFlash管理系统块映射处理方法一般定义>,再从sector_address计算出页号和页内offset,对Sector计算ecc码,6个字节,一起写入NandFlash内,写完之后,还需要再读出确认写入数据与原数据是否一致,如果一致,Sector写即完成。如果写入失败,则继续尝试写入共计4次,仍失败,则当前物理块已坏,则使用坏块替换方法,将其替换。

注意,坏块内原数据需要移去替换块内;另外写sector之前,需要将sector所在块擦除整块,在因此在擦除之前,必须将实际块移去temp_block保存。

10.Code测试说明

1)代码目录树如下,主要是实现了一个FAT文件系统用于测试虚拟NANDFLASH的

flash_management代码的功能。

2)打开fat_filesystem.dsw,可直接编译生成代码测试可执行文件fat_filesystem.exe

3)编译时如果出现如下错误,请选择“工具”—“选项”—“目录”,并把当前目录加入到目录中。

4)编译成功生成可执行文件fat_filesystem.exe,可直接点击运行。首先其会自动在当前目录生成一个nand.bin的文件,其为nandflash虚拟文件nand.bin。其上会安排一些坏块,用于测试

flash_managemen的坏块替换功能。Nand.bin生成完成后,flash_management会对其自动格式化成FAT32文件系统,并打印出文件系统的容量和剩余空间。如下图所示:

5)按任意键继续,fat_filesystem.exe会在nandflash上建立一些文件和目录,详见main.c中的代码。并打印出CREATE_FOLDER_TEST目录下建立的文件。如下图所示:

6)按任意键继续,返回到根目录,并打印根目录下的文件和目录

7)再按任意键,fat_filesystem.exe会将readed.rar写入到nandflash上,直接盘写满或写最多500

个文件。

8)文件readed.rar写完后,fat_filesystem.exe会将nandflash的所有文件分离到当前目录下:

9)至些文件分离结束。请到OK目录下检查rar文件是否可以打开和正常解压缩。

10)用winhex查看nand.bin的坏块表,明显可以看出一些坏块已经过了坏块替换,说明程序运行正常,是没有问题的。

NandFlash简介

NandFlash简介 分类:Linux2013-03-06 14:34 2945人阅读评论(0) 收藏举报 Flash Memory中文名字叫闪存,是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器。 从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。 FLASH的分类:功能特性分为两种:一种是NOR型闪存,以编码应用为主,其功能多与运算相关;另一种为NAND型闪存,主要功能是存储资料,如数码相机中所用的记忆卡。 NOR FLASH和NAND FLASH NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM 一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结结,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。 NOR的读速度比NAND稍快一些。 NAND的写入速度比NOR快很多。 NAND的4ms擦除速度远比NOR的5s快。 大多数写入操作需要先进行擦除操作。 NAND的擦除单元更小,相应的擦除电路更少 在NOR Flash中, 所有的存储区域都保证是完好的, 同时也拥有相同的耐久性。在硬模中专门制成了一个相当容量的扩展存储单元—他们被用来修补存储阵列中那些坏的部分,这也是为了保证生产出来的产品全部拥有完好的存储区域。为了增加产量和降低生产成本, NAND Flash 器件中存在一些随机bad block 。为了防止数据存储到这些坏的单元中, bad block 在IC烧录前必须先识别。在一些出版物中, 有人称bad block 为“bad block”, 也有人称bad block 为“invalid block”。其实他们拥有相同的含义, 指相同的东西。 从实际的应用上来说, NOR Flash与NAND Flash主要的区别在于接口。NOR Flash拥有完整的存取-映射访问接口, 它拥有专门的地址线和数据线, 类似与EPROM。然而在NAND Flash中没有专门的地址线。它发送指令,地址和数据都通过8/16位宽的总线(I/O接口)到内部的寄存器。 SLC/MLC基本原理

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选型

Q1’2011 DATABOOK Rev 0.1

NAND Flash –SLC / MLC / TLC AND Flash N NAND Flash SLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark HY27US08281A 90nm 128Mb 16KB Mono 3.3v/X8TSOP/USOP Now HY27US08561A 90nm 256Mb 16KB Mono 3.3v/X8TSOP/USOP/FBGA Now HY27US08121B 70nm 512Mb 16KB Mono 3.3v/X8TSOP/USOP/FBGA Now H27U518S2C 57nm 512Mb 16KB Mono 3.3v/X8TSOP Now HY27US081G1M 70nm 1Gb 16KB Mono 3.3v/X8USOP Now HY27UF081G2A 70nm 1Gb 128KB Mono 3.3v/X8TSOP/USOP/FBGA Now HY27US081G2A 70nm 1Gb 128KB Mono 1.8v/X8FBGA Now H27U1G8F2B 48nm 1Gb 128KB Mono 3.3v/X8TSOP,FBGA Now H27U1G8F2B 48nm 1Gb 128KB Mono 1.8v/X8FBGA Now H27U1G8F2CTR 32nm 1Gb 128KB Mono 1.8v/X8TSOP Q4 '11H27U1G8F2CFR 32nm 1Gb 128KB Mono 1.8v/X8FBGA Q4 '11HY27UF082G2B 57nm 2Gb 128KB Mono 3.3v/X8TSOP,FBGA, LGA Now H27U2G8F2C 41nm 2Gb 128KB Mono 3.3v/X8TSOP Now HY27UF084G2B 57nm 4Gb 128KB Mono 3.3v/X8TSOP Now H27U4G8F2D 41nm 4Gb 128KB Mono 3.3v/X8TSOP Now HY27UG088G5(D)B 57nm 8Gb 128KB DDP 3.3v/X8TSOP Now 2CE/Dual CH.H27U8G8G5D 41nm 8Gb 128KB Mono 3.3v/X8TSOP Now H27QBG8GDAIR-BCB 32nm 32Gb 512KB DDP 1.8v/x8VFBGA Now 2CE/Dual CH.H27QCG8HEAIR-BCB 32nm 64Gb 512KB QDP 1.8v/x8VFBGA Now 4CE/Dual CH.H27QDG8JEAJR-BCB 32nm 128Gb 512KB ODP 1.8v/x8 JFBGA Feb. '11 4CE/Dual CH.NAND Flash MLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark H27U8G8T2B 48nm 8Gb 512KB Mono 3.3v/X8TSOP Now H27UAG8T2M 48nm 16Gb 512KB(4KB Page)Mono 3.3v/X8TSOP/VLGA Now H27UAG8T2A 41nm 16Gb 512KB(4KB Page)Mono 3.3v/X8TSOP Now H27UBG8U5A 41nm 32Gb 512KB(4KB Page)DDP 3.3v/X8TSOP Now H27UBG8T2M 41nm 32Gb 512KB(4KB Page)Mono 3.3v/X8VLGA Now H27UBG8T2A 32nm 32Gb 2MB(8KB Page)SDP 3.3v/x8TSOP / VLGA Now H27UCG8VFA 41nm 64Gb 512KB(4KB Page)QDP 3.3v/X8TSOP Now H27UCG8UDM 41nm 64Gb 512KB(4KB Page)DDP 3.3v/X8VLGA Now Dual CH.H27UCG8U5(D)A 32nm 64Gb 2MB(8KB Page)DDP 3.3v/x8TSOP / VLGA Now Dual CH. LGA H27UCG8T2M 26nm 64Gb 2MB(8KB Page)SDP 3.3v/x8VLGA Now H27UDG8VEM 41nm 128Gb 512KB(4KB Page)QDP 3.3v/X8VLGA Now 4CE,Dual CH.H27UDG8V5(E)A 32nm 128Gb 2MB(8KB Page)QDP 3.3v/x8TSOP / VLGA Now 4CE,Dual CH.H27UEG8YEA 32nm 256Gb 2MB(8KB Page)ODP 3.3v/x8VLGA Now 4CE,Dual CH.H27UAG8T2B 32nm 16Gb 2MB(8KB Page)SDP 3.3v/x8TSOP Now H27UBG8T2B 26nm 32Gb 2MB(8KB Page)SDP 3.3v/x8TSOP Now Legacy H27UCG8U2B 26nm 64Gb 2MB(8KB Page)DDP 3.3v/x8TSOP Jan. '11Legacy H27UDG8V2B 26nm 128Gb 2MB(8KB Page)QDP 3.3v/x8FBGA-100Feb. '11HS(ONFi2.2)H27UEG8Y2B 26nm 256Gb 2MB(8KB Page) ODP 3.3v/x8 FBGA-100 Mar. '11 HS(ONFi2.2)NAND Flash TLC COMPONENT Product Tech Density Block Size Stack Vcc/Org Package Availability Remark H27UAG8M2M 41nm 16Gb 768KB (4KB page)SDP 3.3V/x8VLGA Now H27UBG8M2A 32nm 32Gb 1MB (4KB page) SDP 3.3V/x8 VLGA Now

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

NandFlash的基础知识

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 = 32 page = 32 * 528 byte Numberof(block)=64Mbyte/16kbyte=4096 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 来表示,例如512Mbit的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之间的关系随着芯片的不同而不同,典型的分配是这样的

浅谈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存储结构及控制方法

Nand Flash存储结构及控制方法(K9F1G08) 2011-02-26 15:05:59| 分类:默认分类 | 标签: mini2440nandflash k9f1g08 |字号订阅 一、NAND Flash介绍和NAND Flash控制器的使用 NAND Flash在嵌入式系统中的作用,相当于PC上的硬盘 常见的Flash有NOR Flash和NAND Flash,NOR Flash上进行读取的效率非常高,但是擦除和写操作的效率很低,容量一般比较小;NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般NOR Flash用于存储程序,NAND Flash 用于存储数据。 1)NAND Flash的物理结构 笔者用的开发板上NAND Flash型号是K9F1G08,大小为128M,下图为它的封装和外部引脚 I/O0-I/O7 数据输入/输出 CLE 命令锁存使能 ALE 地址锁存使能 CE 芯片使能 RE 读使能 WE 写使能 WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N.C 不接 K9F1G08功能结构图如下

K9F1G08内部结构有下面一些功能部件 ①X-Buffers Latches & Decoders:用于行地址 ②Y-Buffers Latches & Decoders:用于列地址 ③Command Register:用于命令字 ④Control Logic & High Voltage Generator:控制逻辑及产生Flash所需高压 ⑤Nand Flash Array:存储部件 ⑥Data Register & S/A:数据寄存器,读、写页时,数据存放此寄存器 ⑦Y-Gating ⑧I/O Buffers & Latches ⑨Global Buffers ⑩Output Driver

总结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

NANDFLASH 常见问题汇总

NAND flash常见问题汇总 掉程序(这里专指使用NAND flash的主板掉程序),这是一个让工程师浑身发毛的问题,特别是用着用着程序就没有了,往往这个时候很多工程师都无法下手,问题出现的时候你可能根本不在旁边,无法看到问题现象,而且通过测量信号也很难发现问题的原因,这个时候很多工程师可能会采用更换主板器件的方式,用排除法来定位问题,基本上换一个NAND flash就可以解决问题了。这个时候很多工程师可能就会表示NAND flash有问题,需要换厂商,换品牌。但其实还可以更加深入的去了解问题的原因,这里我总结一下我遇到过得NAND flash掉程序的情况及原因。 1.电源电压不稳导致的NAND flash程序错误 很多时候,产品在客户手中出现了问题,工程师把产品拿回来,重新烧录程序产品可以上电启动,反复测试并不会出现掉程序的情况。如果这种产品是带有电池的产品,就可以考虑一下是否在客户实际使用中是用电池的情况,当电池的电量比较低,或者在极端情况下,程序对于电池电量的检测阈值较低,这个时候主控就有可能刚刚可以启动,但是很快电量不够,NAND flash内的程序乱掉,从而无法正常启动。 解决方法可以在程序中加入或者提高电池电量检测的阈值,保证所有芯片在这个阈值上均可以正常工作。 2.DRAM工作状态不正常导致的NAND flash程序错误 主控, DRAM和NAND flash基本构成了一个产品的最小系统。当系统中的任何一环出现问题,整个系统就可能出现问题。但是当DRAM出现问题时,有可能反映出来的是NAND flash 出错,掉程序或者查明NAND flash坏块过多。对于这种情况,处理起来就会复杂一些。如果直接重新烧录程序,系统又能正常工作,则说明之前存储在NAND flash中的程序确实乱了,但是NAND flash的功能正常,特别是SLC规格的1bit ECC 的NAND flash,出错概率非常小。因为对于NAND flash来说,只有当写数据或者擦除数据时,数据可能产生坏块,当程序只是读取的状态时,由于不涉及电荷的改变,所以NAND flash一般不会出现问题。但从程序的调试端口读到NAND flash坏块很多时,看是否有更深入的调试工具,例如JTAG等调试工具,可以深入调试NAND flash的情况。有些时候,因为一些程序误操作,导致将原本good block的标志位标记成了bad block。用过JTAG调试工具可以修改标志位,并且重新打标,重新烧录一遍程序,有可能主板又能重新启动了。 3.坏块管理未做好 因为NAND flash都面临着可能出现坏块的问题,所以必须应该对于坏块进行管理,在规格书中可以看到,坏块产生的三种情况,在编程的时候,在擦出的时候,在读取的时候。对于这几种情况下,程序应该怎么操作,规格书中也有流程图来说明,在读取和擦除中,如果出现失败情况,就需要重新坏一个块进行目标块的转移,并且对于当前块进行标识,在坏块表中进行更新。通过对于坏块表的维护,达到程序避免写入坏块中的情况。在读取程序时,也需要对于ECC进行校验,保证读取的程度是真实可靠的。但是很多工程师可能由于对于坏块管理做的不够仔细,导致产品在实际使用中,会出现掉程序的问题。工程师也应该从程序方面着手,分析一下程序对于坏块部分管理是否完善。 从上面三种类型只是部分说明了关于掉程序这个问题的一些原因。特别是对于1bit ECC 的SLC NAND flash大部分适用,工程师们可以进行参考。

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*/

nandflash时序

三星系列的NAND FLASH芯片容量从8MB到256MB(最近听说有1G容量的了),对于需要大容量数据存储的嵌入式系统是一个很好的选择,尤其是其接近1MB/元的高性价比,更是普通nor flash 无法比拟的。本文以K9F2808U0C为例,采用AVR芯片连接,进行了初步的读写试验,完成了芯片的ID读出功能。 电路连接如下图: 左边是所使用的AVR芯片ATmega16L的局部电路,右边是K9F2808芯片的连接图,数据/地址总线使用ATmega16的PORTB端口连接,其它全部所需信号线使用IO连接,组成了IO模拟方式。 K9F2808芯片的全部命令字如下: 其中,Read1读取的是普通数据存储区域的数据,Read2读取的是每页存储器附加的16Bytes区域的数据;Page Program可以编程一页最大528Bytes的数据,Block Erase擦除指定页面数据,Read Status可以读取芯片状态。 芯片的整个读写时序可以分解为4个基本步骤,即1、命令写入,2、数据写入,3、数据读出,4、地址写入。 1、命令写入时序如下:

对应函数为: void WriteCmd(unsigned char cmd) { nandPortD = 0xFF; ClsLine(nandSPortO,nandALE); ClsLine(nandSPortO,nandnCE); SetLine(nandSPortO,nandCLE); ClsLine(nandSPortO,nandnWE); nandPortO = cmd; SetLine(nandSPortO,nandnWE); ClsLine(nandSPortO,nandCLE); SetLine(nandSPortO,nandALE); } 2、数据写入时序如下: 对应函数为:

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

Nand Flash的读写操作

NandFlash的读写操作 正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同,典型的分配是这样的: 1block = 32page 1 page = 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,

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闪存。

相关主题
相关文档
最新文档