Nand Flash介绍和Nand Flash控制器使用

本文详细介绍了NOR Flash和Nand Flash的区别,着重讲解了Nand Flash的物理结构、访问方法以及如何使用Nand Flash控制器进行初始化、读写、擦除等操作。内容包括Nand Flash的容量、块大小、操作速度等特性,并提供了具体的操作代码示例,如初始化、读写页、编程、复制、擦除和坏块管理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Flash介绍

    常用的flash类型有NOR Flash 和Nand Flash 两种;

    (1)Nor Flash

    1、Nor Flash的接口和RAM完全相同,可以随机访问任意地址的数据,在其上进行读操作的效率非常高,但是擦除和写操作的效率很低,另外,Nor Flash的容量一般比较小,通常,Nor Flash用于存储程序
    2、Nor Flash的块大小范围为64KB—128KB;
    3、擦写一个Nor Flash块需要4s,
    4、市场上Nor Flash 的容量通常为1MB—4MB

    (2)Nand Flash
    1、Nand Flash的接口仅仅包含几个I/O引脚,需要串行地访问,Nand Flash进行擦除和写操作的效率很高,容量较大,

通常Nand Flash用于存储数据
    2、Nand Flash的块大小范围为8KB—64KB;
    3、擦写一个Nand Flash块需要2ms;
    4、Nand Flash 一般以512字节为单位进行读写
    5、 市场上 Nand Flash 的容量一般为 8M—512M

 

二、Nand  Flash的物理结构

    以三星公司生产的 K9F1208U0M  为例:

    1、容量:64MB,

                      一共4个层

                      每层1024个块(block);

                      1块包含32页

                      1页包含 512 + 16  = 528个字节

 

 

    2、外部接口:8个I/O口,5个使能信号(ALE、CLE、nWE、nRE、nCE),1个状态引脚(RDY/B),1个写保护引脚(nWE);            

    3、命令、地址、数据都通过8个I/O口输入输出;

    4、写入命令、地址、数据时,都需要将nWE、nCE信号同时拉低;数据在WE上升沿被锁存;

    5、CLE、ALE用来区分I/O引脚上传输的是数据还是地址;

    6、64MB的空间需要26位地址,因此以字节为单位访问Flash时需要4个地址序列

    7、读/写页在发出命令后,需要4个地址序列,而擦除块在发出擦除命令后仅需要3个地址序列

 

三、Nand Flash访问方法

 1 特殊功能寄存器定义 


#define rNFCONF  (*(volatile unsigned int *)0x4e000000) 
#define rNFCMD   (*(volatile unsigned char *)0x4e000004) 
#define rNFADDR  (*(volatile unsigned char *)0x4e000008) 


#define rNFDATA  (*(volatile unsigned char *)0x4e00000c) 
#define rNFSTAT  (*(volatile unsigned int *)0x4e000010) 
#define rNFECC   (*(volatile unsigned int *)0x4e000014) 
#define rNFECC0 (*(volatile unsigned char  *)0x4e000014) 
#define rNFECC 1 (*(volatile unsigned char *)0x4e000015) 
#define rNFECC2 (*(volatile unsigned char *)0x4e000016) 

2 操作的函数实现 


1. 发送命令 
#define NF_CMD(cmd)    {rNFCMD=cmd; } 

2. 写入地址 
#define NF_ADDR(addr)  {rNFADDR=addr;} 

3. Nand Flash 芯片选中 
#define NF_nFCE_L()    {rNFCONF&=~(1<<11);} 

4. Nand Flash 芯片不选中 
#define NF_nFCE_H()    {rNFCONF|=(1<<11);} 

5. 初始化 ECC 
#define NF_RSTECC()    {rNFCONF|=(1<<12);}
 
6. 读数据 

#define NF_RDDATA()         (rNFDATA) 

7. 写数据 
#define NF_WRDATA(data) {rNFDATA=data;} 

8. 获取Nand Flash 芯片状态 
#define NF_WAITRB()         {while(!(rNFSTAT&(1<<0)));} 
0/假: 表示Nand Flash 芯片忙状态 
1/真:表示Nand Flash 已经准备好 

3.NandFlash读写擦具体实现。

移动电话的功能日益丰富,其对系统中数据存储容量的需求正在快速增长。 NAND Flash具有速度快、密度大、成本低等特点,在各种数码产品中得到了广泛 应用,在各种片上系统芯片中(SOC)集成NAND Flash控制器正成为一种趋势。 本文讨论了Flash Memory的两种主流实现技术即NAND FlashNOR Flash 的特点区别,分析了市场上存在的NAND Flash的典型规格及其存储结构特点, 阐述了不同NAND Flash器件一些通用的存取操作方式,近一步分析了进行这些 存取操作所必须满足的时序规范,在此基础上,结合某公司手机SOC芯片的设计 需求,提出了一种基于AMBA总线的NAND Flash控制器实现方案,对该实现方 案进行了充分的验证工作。 本文所提出的控制器的实现方式,可以支持市场上存在的两种典型规格的 NAND Flash器件,可同时外接1至4个Flash芯片,通过可配置的控制方式可灵 活的对不同存取速度的器件予以支持,具备良好的可扩展性。在控制器的主控逻 辑设计中,采取了“块读’’“块写”方式实现对大页器件的读页写页操作, 这种方式有效减小了控制器中用做数据缓存的buffer大小,降低了芯片面积。针 对NAND Flash使用过程中可能出现的位反转现象,在控制器的设计中加入了错 误检测纠错功能。论文深入分析了ECC(Error Checking and Correcting)算法,讨 论了ECC算法的硬件实现优化方法。在不影响对存储器读写效率的前提下,实 现对数据的存取进行实时的高速检错纠错,为提高NAND Flash的可靠性提供了 硬件上的支持。 对控制器的验证采用了模拟验证FPGA验证两种方式。在模拟验证阶段对 控制器的所有功能点进行全面验证,结果正确后,在Xilinx公司的Vertex4开发板 上对控制器进行了FPGA验证。结果表明控制器能正确控制对于NAND Flash的各 种存取操作,工作完全正常。 本文设计验证的NAND Flash控制器即将应用于某公司的SOC手机芯片,提 出的控制器实现方案对NAND Flash控制系统的设计优化具有普遍适用性,论文研 究的工程实用价值大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值