分享

NAND Flash硬件读写原理

 dwlinux_gs 2014-09-20

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地址开始执行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多