Nand Flash介绍

Nand Flash介绍Nand Flash控制器使用 一、Flash介绍     常用的flash类型有NOR FlashNand Flash 两种;     (1)Nor Flash     1、Nor Flash的接口和RAM完全相同,可以随机访问任意地址的数据,在其上进行读操作的效率非常高,但是擦除和写操作的效率很低,另外,Nor Flash的容量一般比较小,通常,Nor Flash用于存储程序;     2、Nor Flash的块 阅读详情
    2410开发板支持nand flash和nor flash启动,但是u-boot没有支持nand flash,只能自己修改代码。vivi bootload支持nand flash启动。
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czhw%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czhw%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">我先摘录一段对NorNand flash区别的几条总结:

    NOR flash采用位读写,因为它具有sram的接口,有足够的引脚来寻址,可以很容易的存取其内部的每一个字节
    NAND flash使用复杂的I/O口来串行地存取数据。8个引脚用来传送控制、地址和数据信息(复用)。NAND读和写单位为512Byte的页,擦写单位为32页的块
    ● NOR的读速度比NAND稍快一些。
    ● NAND的写入速度比NOR快很多。 
    ● NAND4ms擦除速度远比NOR5s快。
    ● 大多数写入操作需要先进行擦除操作。
    ● NAND的擦除单元更小,相应的擦除电路更少。
    NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD)NANDNOR器件在进行写入和擦除操作时都需要MTD


再来看看Nand flash自身的特点
    Nand Flash
的数据是以bit的方式保存在memory cell中,一般来说,一个cell 中只能存储一个bit。这些cell 8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16)这就是NAND Device的位宽
   
多个line(多个位宽大小的数据)会再组成Page。我使用的Nand flash是三星的K9F1208U0M,从datesheet上得知,此flash每页528Bytes512byteMain Area + 16byteSpare Area),每32page形成一个Block(32*528B)。具体一片flash上有多少个Block视需要所定。我所使用的k9f1208U0M具有4096block,故总容量为4096*32*528B=66MB,但是其中的2MBSpaer Area)是用来保存ECC校验码等额外数据的,故实际中可使用的为64MB
    Nand flash
以页(512Byte)为单位读写数据,而以块(16KB)为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址: 
    ● Column Address
:列地址,地址的低8
    ● Page Address 
:页地址
    ● Block Address 
:块地址
   
对于NAND Flash来讲,地址命令只能在I/O[7:0]上传递,数据宽度也是8,这导致在读写指定地址的数据时,地址是分4次传递的(3次右移),见后文。
    s3c2410
这个处理器之所以可以直接从Nand flash启动,是因为CPU内置了4KB的片内SRAM,手册上称作Steppingstone。板子上电复位之后,CPU会自动将Nand flash的前4KB代码拷贝到片内SRAM中去执行(此过程是靠硬件实现的,见datasheetFigure 6-1. NAND Flash Controller Block Diagram),这也是导致从NorNand启动后的内存映射不同的原因。所以,vivistage1代码head.S必须要小于4KB,其中实现基本的CPU初始化等工作,并且要实现把自身拷贝到SDRAM中,之后的stage2就实现复杂功能。

下面具体看一下如何读写这块Nand flash
   
s3c2410datasheet上得知,Nand flash的操作通过NFCONFNFCMDNFADDRNFDATANFSTATNFECC这六个寄存器来完成,并且列出操作Nand flash4个步骤:

NAND FLASH MODE CONFIGURATION
1
. Set NAND flash configuration by NFCONF register.
2
. Write NAND flash command onto NFCMD register.
3
. Write NAND flash address onto NFADDR register.
4
. Read/Write data while checking NAND flash status by NFSTAT register. R/nB signal should be checked before read operation or after program operation.

  

-------------------------------------------------------------------------------------------

NFCONF

地址:0x4E000000


NFCMD

地址:0x4E000004

[15:8]:resevered

[7:0] :nand flash memory command value

nand flash的所有命令

rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czhw%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

Function

1st. Cycle

2nd. Cycle

3rd. Cycle

Acceptable Command

during Busy

Read 1

00h/01h(1)

-

-

 

Read 2

50h

-

-

 

Read ID

90h

-

-

 

Reset

FFh

-

-

O

Page Program (True)(2)

80h

10h

-

 

Page Program (Dummy)(2)

80h

11h

-

 

Copy-Back Program(True)(2)

00h

8Ah

10h

 

Copy-Back Program(Dummy)(2)

03h

8Ah

11h

 

Block Erase

60h

D0h

-

 

Multi-Plane Block Erase

60h----60h

D0h

-

 

Read Status

70h

-

-

O

Read Multi-Plane Status

71h(3)

-

-

O

rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czhw%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

NOTE : 1. The 00h command defines starting address of the 1st half of registers.

The 01h command defines starting address of the 2nd half of registers.

After data access on the 2nd half of register by the 01h command, the status pointer is automatically moved to the 1st half register(00h) on the next cycle.

2. Page Program(True) and Copy-Back Program(True) are available on 1 plane operation.

Page Program(Dummy) and Copy-Back Program(Dummy) are available on the 2nd,3rd,4th plane of multi plane operation. 3. The 71h command should be used for read status of Multi Plane operation.

 

Caution : Any undefined command inputs are prohibited except for above command set of Table 1.

NFADDR

地址:0x4E000008

[15:8]:resevered

[7:0] :nand flash memory command value


NFDATA

地址:0x4E00000C

[15:8]:resevered

[7:0] :nand flash memory date value


NFSTAT

地址:0x4E000010

[16:1]:resevered

[0]:RnB read/busy status

0:busy

1:ready for operation 


NFECC

地址:0x4E000014

-------------------------------------------------------------------------------------------


下面结合vivi源码来详细的分析具体如何操作这6个寄存器来完成以上4个步骤来完成读过程:
先要初始化
Nand flash,紧接着复位一下:

void reset_nand()
{
    
int i=0;
    NFCONF
&= ~0x800;    /* 现在真正使用Nand flashbit[11]要置0,与初始化时相反 */
        
for(; i<10; i++);
    NFCMD
= 0xff;    //reset command

/* 复位命令。NFCMD寄存器只用到低8位(bit[7:0])。
K9F1208U0M
手册中列出了针对此块flash的各种命令,见Table 1. Command Setsvivi/include/mtd/nand.h更直观的列出了各种命令 */
    wait_idle
();
}

/* 初始化NAND Flash */
/* NFCONF设定为0xf830,作用是使能Nand flash控制器、初始化ECCNand flash片选信号nFCE=1(inactive,真正使用时再让它等于0)、设置TACLSTWRPH0TWRPH1
TACLS
TWRPH0TWRPH1这三个参数是控制Nand flash信号线CLE/ALE和写控制信号nWE的时序关系的,要参照具体的flash芯片手册来设置。我这个是K9F1208U0M ,在表“AC Timing Characteristics for Command / Address / Data Input”中可以看到:
CLE setup Time = 0 ns
CLE Hold Time = 10 ns
ALE setup Time = 0 ns
ALE Hold Time = 10 ns
WE Pulse Width = 25 ns
可 以计算,即使在HCLK=100MHz的情况下,TACLS+TWRPH0+TWRPH1=6/100 uS=60 ns,也是可以满足NAND Flash K9F1208U0M的时序要求的。*/
void init_nand()
{
    NFCONF
= 0xf830;//自己对照手册
    reset_nand
();
}

   

    初始化Nand flash之后,就可以把stage2main函数代码拷贝到SDRAM中去执行,当然之前已经配置好了SDRAM。以上工作都是在stage1阶段(片内SRAM中)完成的,之后就可以读写Nand flash了。
   
下面分析读操作的实现,贴上
vivi/s3c2410/nand_read.c源码:

#include <config.h>

#define __REGb(x)    (*(volatile unsigned char *)(x))
#define __REGi(x)    (*(volatile unsigned int *)(x))
#define NF_BASE        0x4e000000
#define NFCONF        __REGi(NF_BASE + 0x0)
#define NFCMD        __REGb(NF_BASE + 0x4)
#define NFADDR        __REGb(NF_BASE + 0x8)
#define NFDATA        __REGb(NF_BASE + 0xc)
#define NFSTAT        __REGb(NF_BASE + 0x10)

#define BUSY 1
inline void wait_idle(void) {
    
int i;

/* NFSTAT:只用到位00-busy1-ready */
    
while(!(NFSTAT & BUSY))
      
for(i=0; i<10; i++);
}

#define NAND_SECTOR_SIZE    512      /* Nand flash是以512Byte为单位来读写的 */
#define NAND_BLOCK_MASK     (NAND_SECTOR_SIZE - 1)

/* low level nand read function */
/* 下面的读过程严格按照2410手册上的顺序 */
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
    
int i, j;

    
if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
        
return -1;    /* invalid alignment */
    
}

/* chip Enable */
/* 对应第一条:1. Set NAND flash configuration by NFCONF register. */
    NFCONF
&= ~0x800;
    
for(i=0; i<10; i++);

    
for(i=start_addr; i < (start_addr + size);) {
      
/* READ0 */
/* 对应第二条:2. Write NAND flash command onto NFCMD register. */
      NFCMD
= 0;

      
/* Write Address */
/* 对应第三条:3. Write NAND flash address onto NFADDR register.
*NFADDR
寄存器也只用到低八位来传输,所以需要分4次来写入一个完整的32位地址,需要注意后3次的移位操作
*/

      NFADDR
= i & 0xff;
      NFADDR
= (i >> 9) & 0xff;
      NFADDR
= (i >> 17) & 0xff;
      NFADDR
= (i >> 25) & 0xff;

/* 对应第四条:4. Read/Write data while checking NAND flash status by NFSTAT register.
一个地址对应512个字节数据。所以,由于8bit位宽的限制,每次读取8位(1个字节),共读512次得到1512Byte数据
*/

      wait_idle
();
      
for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
        
*buf = (NFDATA & 0xff);
        buf
++;
      
}
    
}

/* chip Disable */
/* 读写完毕需要禁止Nand flash ,与开始相对应*/
    NFCONF
|= 0x800;    /* chip disable */

    
return 0;
}


   
以上是对Nand flash读操作的分析。总体来看,关键在于根据CPUFlashdatasheet配置各寄存器和按照规定顺序进行操作。具体的配置过程是比较繁杂的,可参照u-bootvivi中对各种硬件支持的源码来配置,可省不少事。

Flash闪存”基础 及 “SD NAND Flash”产品的测试介绍 FLASH闪存是属于内存器件的一种,“Flash”。闪存则是一种非易失性( Non-Volatile )内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。各类 DDR 、 SDRAM 或者 RDRAM 都属于挥发性内存,只要停止电流供应内存中的数据便无法保持,因此每次电脑开机都需要把数据重新载入内存。 阅读详情

相关推荐

【电子元器件】Nand Flash基础介绍

Flash主要分两种,Nand Flash和Nor flash。Nor的成本相对高,容量相对小,比如常见的只有128KB,256KB,1MB,2MB等等,优点是读写数据时候,不容易出错。所以在应用领域方面,Nor Flash比较适合应用于存储少量的代码。Nand flash成本相对低,缺点是使用中数据读写容易出错,所以一般都需要有对应的软件或者硬件的数据校验算法,统称为ECC。

cgk123的博客 2614

Nandflash

一、Nandflash原理介绍 Nandflash的内部结构 (1)Nandflash由2048Block组成,每个Block包含64个Page,每个Page大小为2KB+64B; (2)Page是由2KB的存储区域+64Byte的oob区域组成,oob区的作用是存储ECC校验码,不存储数据,CPU会自动忽略掉oob区的存在。 (3)ECC校验是升级版的奇偶校验,8bit数据需要5bit...

weixin_45093118的博客 2593

NAND FLASH 和 DDR 芯片内部框架介绍以及如何和soc连接

NAND FLASH 和 DDR 芯片内部框架介绍以及如何和soc连接

a2591748032的博客 1979

协议类基础——NAND Flash

本篇参考K9F2G08U0M的芯片手册 假定jz2440连接NAND芯片 本文所说的读写操作都是对于2440来说的,请注意分别 NADA FLASH电路图引脚如何分别IO0~IO7传输的时数据、命令还是地址数据从2440到NAND还是NAND到2440时序图发命令发地址写数据读数据信号间的时序关系时序要求NAND FLASH控制器配置寄存器TWRPH0TACLSTWRPH1总结 电路图 描述如下 IO0——IO7 对于NAND芯片,IO0到IO7可以用做输入指令、地址和数据,也可以发送给2440数据。

路人coder 3995

Nand Flash

Nand Flash 是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,电荷被存储在浮栅中,他们在无电源供应的情况下仍然可以保持。数据在 Flash 内存单元中是以电荷的形式存储的,存储电荷的多少取决于浮栅的外部门所被施加的电压,其控制了是向存储单元中充入电荷还是释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值 Vth 来表示。

世事易变,匪石弗转。 3988

NandFlash基础知识

NandFlash的基础知识

weixin_43819842的博客 1万+

【重要】NAND Flash基础知识简介

NAND Flash是一种非易失存储介质(掉电后数据不会丢失),常见的U盘、TF卡/SD卡,以及大部分SSD(固态硬盘)都是由它组成的。本文主要介绍其组成及工作原理。为了表述方便,后面所说的Flash仅指NAND Flash

lyd0813的博客 8352

NAND FLASH一文详细介绍

NAND Flash是一种非易失性存储设备,具有容量大、体积小、功耗低等优点,自 1989 年东芝公司首次提出以后,被广泛地应用于各种存储卡、电子设备、固态硬盘(SSD)之中。在便携式设备存储容量不断增加的推动下,NAND Flash 的市场需求也越来越强劲。NAND Flash单元NAND Flash单元采用浮栅晶体管,其基本示意图如图所示,与普通的CMOS晶体管不同,浮栅晶体管...

鹰飞天下 3425

NAND FLash基础概念介绍

@TOC一、引脚介绍   引脚名称 引脚功能 CLE 命令锁存功能 ALE 地址锁存功能 /CE 芯片使能 /RE 读使能 /WE 写使能 /WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N.C 不接 IO0~IO7 传输数据、命令、地址 1. 命令、地址、数据都通过8个I/O口传输     2. 写命令、地址、数据时,都需要将WE、CE信号同时拉低     3. 数据在WE信号的上升沿被NAND Flash锁存   &

weixin_42444434的博客 3155

Flash闪存”介绍 及 “SD NAND Flash”产品的测试含例程

Flash是近些年应用最广、速度最快的只读存储器,原理是从 EEPROM 基础上改进发展来的,特点是擦除和编程速度快,因此得名为闪速(或闪烁)存储器,简称闪存。NOR FlashNAND Flash 是现在市场上两种主要的闪存技术。Intel于1988年首先开发出 NOR Flash 技术,彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面。

AI+全栈,AI+应用,实操落地,前沿技术 2391

GD32450Z NAND FLASH介绍及初始化设置——超详细教程教会调试NAND FLASH

介绍了GD32F4开发板NAND FLASH的初始化配置过程,使用GD32450Z芯片对NAND FLASH(HY27US08281A)进行配置,实现读写操作

weixin_48501028的博客 4193

【保姆级教程】“Flash闪存”介绍 及 “SD NAND Flash”产品的测试含例程

Flash是近些年应用最广、速度最快的只读存储器,原理是从 EEPROM 基础上改进发展来的,特点是擦除和编程速度快,因此得名为闪速(或闪烁)存储器,简称闪存。NOR FlashNAND Flash 是现在市场上两种主要的闪存技术。Intel于1988年首先开发出 NOR Flash 技术,彻底改变了原先由 EPROM 和 EEPROM 一统天下的局面。

知道的越多,不知道的越多。 2804

NAND Flash 和 NOR Flash的名字来历、实现原理、概要介绍和应用上的区别

NAND Flash和NOR Flash是两种主要的非易失性闪存技术,它们各自有不同的架构、性能特点以及适用场景。1. 存储架构NAND Flash数据以块为单位存储,块内包含多个页(通常是 512B、2KB、4KB 或更多)。优化为高密度存储,适合连续读取和写入。通过串行接口访问,存储密度高,成本较低。NOR Flash采用随机存取架构,可以按字节(Byte)或字(Word)访问数据。优化为快速随机读取,适合存储固件和代码。通过并行接口访问,存储密度低,成本较高。2. 性能比较。

昊虹AI笔记 1201

NAND Flash传输速度--基于Micron的NAND Flash介绍

为什么Micron的NAND Flash能达到200MB/s的读取速度      今天看到新闻Intel, Micron claim world’s fastest NAND flash,就直接到Micron的网站上浏览了一下。Micron的新产品分类为High Speed NAND Flash Products,用“High Speed”与原有NAND产品系列区分(估计ONFI 3.0兼容的产品

ywxiao66的专栏 5300

镁光256Gb NAND Flash芯片介绍

总体概述该芯片是一款典型的大容量NAND Flash存储颗粒,支持Open NAND Flash Interface (ONFI) 2.1的接口标准,采用ONFI NANDFlash的操作协议。该芯片采用Multiple-level Cell (MLC)技术,根据不同的容量,一个芯片内部封装了多个DIE(LUN),每个DIE由两个Plane构成,一个Plane可以分成2048...

weixin_34234823的博客 3215

NAND Flash和Nor Flash介绍

1. NAND Flash NAND Flash技术因其高存储密度、快速写入速度、较低的成本以及良好的擦写耐用性,非常适合大量数据的存储。目前,NOR Flash也在探索3D技术的应用,尽管仍处于起步阶段,但旺宏(Macronix)和华邦电(Winbond)等头部厂商正在大力投入研发。随着技术的不断进步,我们可以预见,NAND Flash和NOR Flash都将在各自的领域内继续发挥重要作用,并为未来的存储解决方案提供更多可能性。随着技术的发展,这两种技术也在不断进步。

H18025856950的博客 697

linux nand flash 驱动简单介绍

linux中为nand flash驱动提供了很多操作接口,开发只需要填充相应的接口即可。

yiheng528的专栏 5067
上一篇: 嵌入式系统 BootLoader 技术内幕
下一篇: nand flash启动
martree
博客等级 码龄19年 15粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值