当前位置:首页 > 单片机 > 单片机
[导读] NAND Flash的寻址方式和NAND Flash的memory组织方式紧密相关。NAND Flash的数据是以bit的方式保存在memory cell,一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bit line,形成所谓的

NAND Flash的寻址方式和NAND Flash的memory组织方式紧密相关。NAND Flash的数据是以bit的方式保存在memory cell,一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成Page,通常是528Byte/page或者264Word/page。然后,每32个page形成一个Block,Sizeof(block)=16kByte Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的,而编程/读取是按照page为单位完成的。所以,按照这样的组织方式可以形成所谓的三类地址:

-Block Address

-Page Address

-Column Address

首先,必须清楚一点,对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度可以是8位或者16位,但是,对于x16的NAND Device,I/O[15:8]只用于传递数据(此点不是很认同)。清楚了这一点,我们就可以开始分析NAND Flash的寻址方式了。

以528Byte/page 总容量512Mbit+512kbyte的NAND器件为例:因为1 block="16kbyte",512Mbit="64Mbyte",Numberof(block)=1024 1block="32page", 1page="528byte"=512byte(Main Area)+16byte(Spare Area) 用户数据保存在main area中。512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half和2nd half, 各自的访问由所谓的pointer operation命令来选择,也就是选择了bit8的高低。因此A8就是halfpage pointer(这是我给出的一个名字),A[7:0]就是所谓的column address。32个page需要5bit来表示,占用A[13:9],即该page在块内的相对地址Block的地址是由A14以上的bit来表示,例如512Mb的NAND,共4096block,因此,需要12个bit 来表示,即A[25:14],如果是1Gbit的528byte/page的NAND Flash,则block address用A[26:14]表示。而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的使用方式完全相同。

1.1Nandflash芯片工作原理

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

1.1.1芯片内部存储布局及存储操作特点

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

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

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

1页(Page)=528字节(Bytes)=数据块大小(512Bytes分为前半页和和后半页)+OOB块大小(16Bytes)

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

存储操作特点:

1.擦除操作的最小单位是块。

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

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

4.除OOB第六字节外,通常至少把OOB的前3个字节存放NandFlash硬件ECC码(关于硬件ECC码请参看Nandflash控制器一节).

1.1.2重要芯片引脚功能

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

CLE(CommandLatchEnable):命令锁存允许

ALE(AddressLactchEnable):地址锁存允许

CE:芯片选择

RE:读允许

WE:写允许

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

R/B:读/忙输出

1.1.3寻址方式

SamsungK9F1208U0BNandFlash片内寻址采用26位地址形式。从第0位开始分四次通过I/O0-I/O7进行

传送,并进行片内寻址。具体含义如下:

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

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

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

9-13位:对页进行寻址

14-25位:对块进行寻址

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

1.1.4Nandflash主要内设命令详细介绍

NandFlash命令执行是通过将命令字送到NandFlash控制器的命令寄存器来执行。

NandFlash的命令是分周期执行的,每条命令都有一个或多个执行周期,每个执行周期都有相映代码表示该周期将要执行的动作。

主要命令有:Read1、Read2、ReadID、Reset、PageProgram、BlockErase、ReadStatus。

详细介绍如下:

1.Read1:

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

命令代码:00h

2.Read2:

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

命令代码:01h

3.ReadID:

功能:读取Nandflash芯片的ID号

命令代码:90h

4.Reset:

功能:重启芯片。

命令代码:FFh

5.PageProgram:

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

命令代码:首先写入00h(A区)/01h(B区)/05h(C区),表示写入那个区;再写入80h开始编程模式(写入模式),接

下来写入地址和数据;最后写入10h表示编程结束.

6.BlockErase

功能:块擦除命令。

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

7.ReadStatus

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

命令代码:70h

2NandFlash控制器工作原理

对NandFlash存储芯片进行操作,必须通过NandFlash控制器的专用寄存器才能完成。所以,不能对NandFlash进行总线操作。而NandFlash的写操作也必须块方式进行。对NandFlash的读操作可以按字节读取。

2.1NandFlash控制器特性

1.支持对NandFlash芯片的读、检验、编程控制

2.如果支持从NandFlash启动,在每次重启后自动将前NandFlash的前4KB数据搬运到ARM的内部RAM中

3.支持ECC校验

2.2NandFlash控制器工作原理

NandFlash控制器在其专用寄存器区(SFR)地址空间中映射有属于自己的特殊功能寄存器,就是通过将NandFlash芯片的内设命令写到其特殊功能寄存器中,从而实现对Nandflash芯片读、检验和编程控制的。特殊功能寄存器有:NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT、NFECC。寄存详细说明见下一节。

1.配置寄存器(NFCONF):用于对NandFlash控制器的配置状态进行控制。

2.命令寄存器(NFCMD):用于存放Nandflash芯片内设的操作命令。

3.地址寄存器(NFADDR):用于存放用于对Nandflash芯片存储单元寻址的地址值。

4.数据寄存器(NFDATA):Nandflash芯片所有内设命令执行后都会将其值放到该寄存器中。同时,读出、写入Nandflash存储空间的值也是放到该寄存器。

5.状态寄存器(NFSTAT):用于检测Nandflash芯片上次对其存储空间的操作是否完成。

6.ECC校验寄存器(NFECC):ECC校验寄存器。

3:实验代码:

3.1:NandFlash的初始化

voidinit_nand()

{

//时间参数设为:TACLS=0TWRPH0=3TWRPH1=0

NFCONF=0x300;

/*使能NANDFlash控制器,初始化ECC,禁止片选*/

NFCONT=(1<<4)|(1<<1)|(1<<0);

/*复位NANDFlash*/

NFCONT&=~(1<<1);//发出片选信号

NFCMMD=0xFF;//复位命令

wait_idle();//循环查询NFSTAT位0,直到它等于1

NFCONT|=0x2;//取消片选信号

}

3.2:NandFlash的读操作

汇编代码:

ldr r0, =0

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭