/ 中存储网

NAND Flash硬件读写原理

2017-02-09 13:11:19 来源:中存储

1.nand接口

s3c2440板的Nand Flash模块由两部分组成:Nand Flash控制器(集成在s3c2440)和Nand Flash存储芯片(K9F1208U0B)两大部分组成。当要访问Nand Flash中的数据时,必须通过Nand Flash控制器发送命令序列才能完成。所以, Nand Flash相当于s3c2440的一个外设,而不位于它的内存地址区.。

Samsung的 K9F1208U0B,数据存储容量为64MB ,采用块页式存储管理。8 个I/O引脚充当数据、地址、命令的复用端口。

2. 重要芯片引脚功能  

I/O0-7:复用引脚。可以通过它向nand flash 芯片输入数据、地址、nand flash 命令以及输出数据和操作状态信息。  

CLE(Command Latch Enable):  命令锁存允许  

ALE(Address Lactch Enable): 地址锁存允许  

-CE: 芯片选择      

-RE: 读允许  

-WE: 写允许  

-WP: 在写或擦除期间,提供写保护  

R/-B: 读/忙输出  

3.芯片内部存储布局

一片Nand flash 为一个设备(device), 其数据存储分层为:  

1设备(Device) = 4096 块(Blocks)  

1块(Block) = 32 页/ (Pages/rows) ;页与行是相同的意思,叫法不一样  

1页(Page) = 528 字节(Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes)  

在每一页中,最后16 个字节 (又称OOB)用于Nand Flash 命令执行完后设置状态用,剩余512 个字节又分为前半部分和后半部分。可以通过Nand Flash 命令00h/01h/50h 分别对前半部、后半部、OOB 进行定位通过Nand Flash 内置的指针指向各自的首地址。 

4.寻址方式  

Samsung K9F1208U0B Nand Flash 片内寻址采用26 位地址形式。从第0 位开始分四次通过I/O0 -I/O7 进传送,并进行片内寻址。具体含义如下:  

0-7 位:字节在上半部、下半部及OOB 内的偏移地址  

8 位:值为0 代表对一页内前256 个字节进行寻址  

值为1 代表对一页内后256 个字节进行寻址  

9-13位:对页进行寻址  

14-25 位:对块进行寻址  

当传送地址时,从位0 开始 

5.存储操作特点: 

①擦除操作的最小单位是块,读写的最小的单位是页 

②Nand Flash 芯片每一位(bit)只能从1 变为0 ,而不能从0 变为 1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即是将相应块得位全部变为 1).  

③OOB部分的第六字节(即517 字节)标志是否是坏块,如果不是该值为FF ,否则为坏块。  

④除OOB 第六字节外,通常至少把OOB 的前3 个字节存放Nand Flash 硬件ECC 码

6. Nand flash工作原理及主要命令

Nand Flash 控制器通过将Nand Flash 芯片的内设命令写到其特殊功能寄存器中,从而实现对Nand flash 芯片读、检验和编程控制的。特殊功能寄存器有:NFCONF 、NFCMD 、NFADDR 、NFDATA 、NFSTAT 、NFECC 。

主要命令如下

①.Read 1:  

功能:表示将要读取Nand flash 存储空间中一个页的前半部分,并且将内置指针定位到前半部分的第一个字节。  

命令代码:00h  

②.Read 1:  

功能:表示将要读取Nand flash 存储空间中一个页的后半部分,并且将内置指针定位到后半部分的第一个字节。  

命令代码:01h  

③.Read ID:  

功能:读取Nand flash 芯片的ID 号  

命令代码:90h  

④.Reset:  

功能:重启芯片。  

命令代码:FFh  

⑤.Page Program:  

功能:对页进行编程命令, 用于写操作。  

命令代码:首先写入00h(A 区)/01h(B 区)/05h(C 区), 表示写入那个区; 再写入80h 开始编程模式(写入模式) ,接下来写入地址和数据; 最后写入 10h 表示编程结束.  

⑥.Block Erase  

功能:块擦除命令。  

命令代码:首先写入60h 进入擦写模式,然后输入块地址; 接下来写入D0h, 表示擦写结束.  

⑦.Read Status  

功能:读取内部状态寄存器值命令。  

命令代码:70h  

7.Nand Flash 控制器中的硬件 ECC 介绍 

①ECC产生方法  

ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件ECC 和软件ECC 算法两种,在S3C2410 的Nand Flash 控制器中实现了由硬件电路 (ECC 生成器)实现的硬件ECC 。  

②ECC生成器工作过程  

当写入数据到Nand flash 存储空间时, ECC 生成器会在写入数据完毕后自动生成ECC 码,将其放入到ECC0 -ECC2 。当读出数据时Nand Flash 同样会在读数据完毕后,自动生成ECC 码将其放到ECC0 -ECC2 当中。  

③ECC 的运用  

当写入数据时,可以在每页写完数据后将产生的ECC 码放入到OOB 指定的位置(Byte 6)去,这样就完成了ECC 码的存储。这样当读出该页数据时,将所需数据以及整个OOB 读出,然后将指定位置的ECC 码与读出数据后在ECC0 -ECC1 的实际产生的ECC 码进  对比,如果相等则读出正确,若不相等则读取错误需要进行重读。 

8.NAND Flash的读写操作:

①设置NFCONF,NFCONT寄存器,配置NANDFLASH。

NFCONF中的TACLS,TWRPH0,TWRPH1字段与Flash访问时序有关。

②选择芯片,NAND片选

③向NFCMD写入命令

④向NFADDR写入地址 

⑤等待数据就绪,

⑥读/写数据,通过寄存器NFSTAT检测NAND Flash的状态,检测R/nB信号以确认操作是否完成。

⑦取消片选

9.NAND启动

当CPU启动方式设置为NAND启动时,上电开机,S3C2440的内部boot code执行,自动把nand flash的最开始4K数据拷贝到s3c2440内部RAM,并且从这部分代码偏移0处开始执行。s3c2440内部RAM映射地址为0,所以u-boot可以认为是是从内存的0地址开始执行。