NandFlash简明自学资料——助您理解datasheet要点内容清单:一技术常识部分1、逻辑组成2、常见参数3、地址结构二基本操作、时序图部分*通用引脚符号声明1、Read—读2、Program—写3、BlockErase—擦除4、其它*时序图要点讲解编写目的:从编程操作角度,简介一些有助于理解nandflashdatasheet(数据手册)上相关内容的要点。编写原因:各种nandflash英文datasheets上的内容虽详尽但繁杂,有些业内常识性的东西没交代清楚,给初学者造成困扰;不同的datasheets都有一些共通的要点(基本架构、指令和符号等),了解这些后再看datasheet的操作命令和时序图部分会省力很多。一技术常识部分1、逻辑组成(1)功能结构抽象图注:1)Cache有时也被称为Cacheregister.(严格来讲应称为缓冲区buffer);2)上述Data指的是输入/输出数据(即Input/OutputData,简称I/OData),因为从广义上讲所有能存取于硬件设备上的资料都可称为Data,包括图中的ECC码(ErrorCorrectingCode),所以Pageregister.也可被称为Dataregister.(数据寄存器);(2)闪存层次结构Page(页):对nandflash进行读写操作的逻辑单位,一般容量为几到十几KB;附有额外的小存储区域,这里存储ECC码等附加信息。Block(块):许多page构成一个block,是擦除的操作单位;一般产品出厂时都有invalid/badblock(坏块),已由厂家在对应block里作相应标示,操作时不能清除这些标注信息,每个flash的第一个block(编号00h)是在出厂时是好的,用于存储invalid/badblocktable(坏块表);使用过程中也会产生坏块,发生操作失败时(即使用ECC技术检测到有不可纠正错误时),要将相应的坏块标出,升级坏块表,改写逻辑地址与物理地址的映射。。1Plane(层):可将flash里众多的block分成不同的层,并使用多层操作指令以提高存取效率。此外,根据flash容量大小,还可定义更高一级的存储单位,如LUN(LogicUnitNumber);一个device可集成多个flashchip(闪存芯片),工作时可根据它们各自的运行状态为之安排执行任务,使它们同步运行。2、常见参数(注:不同厂商不同时期的不同型号产品参数会有差异,但在一定时期内,相同/近的技术支持使得大部分flash参数在数值或数量级上相同/近;下面以Samsung(三星)K9GAG08U0M的参数为例。)(1)Vcc(工作电压):3.3V(波动范围:2.7V—3.6V)(2)MemoryCell:2bit/MemoryCell[①上面表示每个cell存2bit数据,即所谓MLC(Multi-LevelCell,多层式储存单元)类型的flash,如果是1bit/Cell和3bit/Cell则分别称为SLC(SingleLevelCell)和TLC(Triple-LevelCell);②随着cell内数据容量增加,flash的存储量虽增加,造价也大幅降低了,但数据存取的出错率却增加,速度变慢,寿命也变短,目前,SLC类型flash适用于对稳定性要求高的小容量储存系统,而MLC则成为大容量储存领域的主流;③nandflash上可同时集成MLC、SLC和TLC区域,操作时必须切换到相应模式。](3)PageSize:(4K+128)Byte(4KB是I/O数据存储区的容量,而128Byte为附加存储区的大小)(4)DataRegisterSize:(4K+128)Byte(5)BlockSize:(512K+16K)Byte(=128×PageSize,即此型号1block含page)72(6)PageProgramTime:0.8mS(Typ,表示通常情况下页编程操作的平均时间)(7)BlockEraseTime:1.5mS(Typ)(8)SerialAcessTime:25nS(Min)[即Read/WriteCycleTime(Min),按顺序从I/O对Cache进行1次数据存取的昀小时间](9)ECCRequirement:8bit/KB(每KBI/O存储数据要求附带的存放在额外存储区的校验纠错码位数)3、地址结构(下面的15.0”表示向上取整,如“)由于一般nandflash传递地址等信息时是8bit/次,对应某些datasheet中的“×8(Bit)”,即以1Byte为不可拆分的传输单位,又因块、页和页内存储单位的地址编号一般是分开传输的(这样在操作处理时很方便,不用辨认再分),所以,若flash有个x个block,每个块有y个page,每个页的容量(不包括额外存储区)为zKB,则一般flash存储单位(1Byte/单位)完整地址中的昀低)22(1kkx2(1m)22(1nny)2mz8m个Byte用于存储ColumnAdress(列地址),更高些的8n个Byte用于存储page编2号,剩下8k个Byte的高位用于存储block编号,如是多层或多芯片等的,再在其中插入相应编号即可,列地址以外的部分称为RowAddress(行地址,即页内偏移地址)。二基本操作、时序图部分*通用引脚符号声明(1)CE#:芯片使能,表示flashchip是否被系统选中为当前操作芯片,低电平表示选中(2)I/O~I/O:这8个引脚用于输入command、address、data,以及从cache中读取data,当芯片没被选中或无法正常输出数据时,引脚会处于high-z(或Hi-Z)状态,即高阻态,相当于隔断状态(有的datasheet将这些引脚信号记为DQ或DQ[7:0])07X(3)DQS:反映toggle模式下I/O与flash间data的读写情况,在信号上/下沿表示进行一次读或写操作,即一次信号周期产生两次操作,比普通模式(1次操作/信号周期)的读写效率高,一种型号的nandflash能否用toggle模式工作其datasheet上有说明,一般可看有无此引脚信号(4)RE#:读取使能,低电平时从cache中读取data到I/O,一次高低信号周期完成一次数据读取操作,同时读取操作的内部columnaddresscounter(列地址计数器)加1(5)WE#:写入使能,低电平时从I/O中输入command、address、data,在上升沿处操作完成,toggle工作模式下不可用,被DQS的写控制输入信号代替(这是因为WE#也是从外部输入的写控制信号,不可共同起作用;而RE#虽也为控制输入信号,但读操作时DQS的读信号是作为状态信号输出,故它们同时有效)(6)CLE:指令锁存使能,辨别输入内容是否command,高电平时表示是,同时在对应的WE#低电平信号的上升沿处command被锁存至commandregister(7)ALE:地址锁存使能,辨别输入内容是否address,高电平时表示是,同时在对应的WE#低电平信号的上升沿处address被锁存至addressregister(8)R/B#:表示chip处于Ready还是Busy状态(即flash内部是否还在执行读写、擦除指令,此时外部不可对芯片进行操作),低电平表示Busy,当芯片未被选中或无法输出数据时不会处于high-z状态,仍可用于检测芯片的闲忙状态(9)WP#:写入保护,在电源转换过程中处于有效的低电平状态,保护flash里的内容不受改写3注:1)R/B#信号以及toggle模式下的对应读操作的DQS信号是外部从flash读出的,而其余引脚信号(包括toggle模式下的对应写操作的DQS信号)都是由flashdevice以外的模块产生、输入进而控制其状态的,即分别对应开篇“功能结构抽象图”里的状态信号和控制信号。2)以上带“#”的引脚,表示信号低电平时对应功能或状态有效,有的datasheet则用顶部一横杠标示,如:Note:1)下面十六进制数表示的指令命令中,标蓝色的表操作开始命令,标红色的表结束命令,接受到前者,将它锁存至commadregister后,将其随后的address和data都写入cache,接到后者则在将它锁存后开始执行相应操作,标绿色的表单命令指令,接收后锁存完立即执行,标褐色的表多命令指令的中间命令。(这里的指令定义为产生相应操作所需输入的命令、地址和数据的集合,不包括输出的数据)2)读写数据的过程其实就是数据的复制过程,无论是register还是cache,数据复制到它上面后,要对它进行覆盖重写,原先内容才会改变。3)几年前有的datasheet在介绍基本操作的底层实现过程时,没提到cache,只讲数据在dataregister与flashcell之间流动,也没相应的cacheread/program等指令,所以会与下面的介绍(针对较新的nandflash)有点差别。1、Read—读(1)PageRead功能:用于将目标page中从指定列地址到页末尾地址的内容顺序读出指令:00h+Column&RowAddresses+30h过程:先将选定的page所有内容拷贝到pageregister,再从pageregister复制到cache,昀后将cache中page的从columnaddress起到页尾的部分依次读出(2)CacheRead功能:用于将一个block中的多个page顺序读出(除首页可输出部分内容外,其它页都是整页被I/O读出)指令:00h+Column&RowAddresses(首页)+30h+31h+……+31h+3Fh过程:1)将首页的所有内容复制到register,完成时接到31h(CacheRead指令);2)把pageregister里的内容复制到cache;3)完毕时pageregister可用,立即开始将下一页拷贝到pageregister,同时,cache里的内容可被I/O读出;4)当pageregister的数据已加载好,且cache被读完时,若又收到31h,则返回2),否则接收的是准结束指令3Fh,转向5);5)将pageregister里昀后一页的内容复制到cache,然后被I/O读出,操作结束。(3)RandomDataOutput功能:当用Read指令把page内容读到cache后,从中读取指定列地址以后的内容指令:…05h+ColumnAddresses+E0h2、Program—写(1)PageProgram功能:用于将输入数据顺序写入目标page中从指定列地址开始的区域(通常写入的是一个page的内容,写入部分页的情况较少)指令:80h+Column&RowAddresses+InputData+10h4过程:数据传输过程与PageRead相反(2)CacheProgram功能:用于将多个page的内容顺序写到一个block中去指令:80h+Column&RowAddresses(起始页N)+InputData+15h+80h+Adressesofpage(N+1)+InputData+15h+……+80h+Adressesofpage(N+n-1)+InputData+15h+80h+Adressesofpage(N+n)(尾页)+InputData+10h过程:与CacheRead相反,注意前一命令将数据加载到pageregister完毕时,便开始下一命令,即在将pageregister里的内容拷贝至flash的同时往cache里写进输入数据,都完成时便将cache中的数据复制到pageregister。(3)Copy-BackProgram功能:用于将源地址指定的page的内容部分,拷到cache,再复制至目标地址指定的page的部分(两pages必须是同一plane里的)指令:00h+Column&RowAddresses(源地址)+35h+O