1Flash介绍2SLC(单层单元闪存)NANDMLC(多层单元存储技术)Flash分类nor(intel开发)AG_AND(瑞萨)3Flash存储的基本原理4FLASH为双栅极结构,在栅极与硅衬底之间增加了一个浮置栅极,浮置栅极是由氮化物夹在两层二氧化硅材料之间构成的,中间的氮化物就是可以存储电荷的电荷势阱。向数据单元内写入数据的过程就是向电荷势阱注入电荷的过程.向浮栅中注入电荷表示写入了'0',没有注入电荷表示'1',所以对FLASH清除数据是写1的,这与硬盘正好相反.5Nandflash&Norflash6Nand与Nor的主要区别1,NAND型FLASH各存储单元之间是串联的,而NOR型FLASH各单元之间是并联的2,NOR型与NAND型闪存的区别很大,打个比方说,NOR型闪存更像内存,有独立的地址线和数据线,但价格比较贵,容量比较小;而NAND型更像硬盘,地址线和数据线是共用的I/O线,成本要低一些,而容量大得多.3,Nand的写入和擦除速度比Nor快,而Nor的随机读取速度比Nand快。4,Nand主要用于高数据存储密度的理想解决方案,Nor主要用于存储代码。7Nand的分类SCL&MLC8SCL工作原理简单来说,是在源极和漏极之间电流单向传导的半导体上形成贮存电子的浮动栅(FloatingGate,闪存存储单元中存放电荷的部分),数据是0或1取决于浮动栅中是否有电荷。有电荷为0,无电荷为1。写入时只有数据为0时才进行写入,写入方式是向栅电极和漏极施加高电压,增加在源极和漏极之间传导的电荷能量。电荷突破氧化膜绝缘体,进入浮动栅。读取数据时,向栅电极施加一定的电压,电流大为1,电流小则定为0。MLC其原理是将2个或2个以上bit以上的信息写入一个浮动栅,然后利用不同电位的电荷,透过内存储存格的电压控制精准读写。9SLC与MLC的区别SLC优点:擦写次数达10万次,寿命长功耗低,省电写入速度快SLC缺点:单位容量造价成本比较高MLC优点:单位容量造价成本低MLC缺点:编程速度慢,擦写次数少10怎么样区分flash是MLC还是SLC?1.通过各个公司的flash命名规则去判别.2.如果不知道命名规则,对于一个新的flash,它的datasheet里面会有描述表明它是MLC还是SLC.一般要去通过它的ID号来判断它是SLC还是MLC.11这里标明了flash的类型:MLC或SLC12SLC的一个cell只有两个level,MLC的一个cell有多个Level13AG-Andflash比传统flash拥有更小面积,更快速度.AG-And之所以能缩短写入时间,主要是写入时施加在源极电极上的电压由原来的0v变成了-0.7v的负电压,漏极的电压和过去的一样仍为+5v.由此,源漏之间的电压差增大,更容易产生热电子,更容易将产生的热电子注入到浮栅中去.利用这种效果,增加了单位时间注入浮游栅的电荷量,由此缩短了写入时间.第一部分结束14Flash的基本结构和基本操作15基本结构16I/O输入输出,命令和数据都要从这里过控制什么时候I/O口进出的是命令还是数据具体怎么做,由我来负责东西都存这里17管脚说明:CE#Chip_enable片选信号CLE命令输入控制信号ALE地址输入控制信号WE#写使能信号,低电平有效RE#读使能信号,低电平有效WP#硬件写保护,低电平有效R/B#Ready_busy信号,低电平表示忙(busy),说明flash正在program,erase或是read.IO0~~IO7数据输入输出口18为了方便管理和记忆,flash以page为单位,进行存储体的划分这里2k表示一个page实际能存储的数据大小,而64bytes(sparespace)是用来存储用户数据的,现在flash的page大小一般有512b,2k,4k不同flash的page的大小不一样,小的就是1page512byte,大的就是1page2048byte.Flash用行列地址(columnAddress和rowAdress)来对它的blcok结构和存储单元进行映射,用行列地址的组合来将一个存储单元定位于一个具体block的下的某个page中的一个字节.Columnaddress用来寻址一个page中的数据,示一个page的大小来决定要多少位columnaddress:例如上图一个page有2k,那么211=2048,需要A0~A10来寻址,最后一位A11(及A0~A5)用来寻址sparespace.Rowaddress用来寻址page.64(pages)*8192(blocks)=26*213=219,需要19位来寻址,从A12~A30.Columnaddress用来寻址一个page里的数据Rowaddress用来寻址page所在block中的位置19Columnaddress用来寻址一个page里的数据Rowaddress用来寻址page所在block中的位置20具体的数值就是根据page大小和flash的容量来定用行列地址的组合来将一个存储单元定位于一个具体block的下的某个page中的一个字节.Columnaddress用来寻址一个page中的数据,示一个page的大小来决定要多少位columnaddress:例如上图一个page有2k,那么211=2048,需要A0~A10来寻址,最后一位A11(及A0~A5)用来寻址sparespace.Rowaddress用来寻址page.64(pages)*8192(blocks)=26*213=219,需要19位来寻址,从A12~A30.这就决定了rowcycle和columncycle的数值.21基本操作221--(Commandinput)命令输入CLE高电平表示I/O端口现在的输入数据会作为命令处理CE低电平表示现在flash被选中进行操作WE低电平表示允许I/O口输入数据,由低变高表示将数据锁存所有灰色区域表示当前是任何值对操作都没有影响23命令输入时先要选中要进行对其下命令的flash,将它的CE置低电平,表示选中该flash进行操作.同时CE置低电平,CLE置高,WE置低.ALE置低表示接下来输入I/O口的数据将作为命令.WE置低表示从现在起I/O口输入的数据将会被作为命令,WE上升沿的时候,把I/O口的数据锁存到缓存器,然后交给flash的控制处理单元处理.242――(Addressinput)地址输入Addressinput和commandinput类似,只是现在变成CLE变低而ALE变高.其他的信号变化一样,注意WE低电平的时候I/O口的数据才是有效地址,WE由低变高的时候会被保存下来,其他时候I/O口的任何变化都对操作没有影响253――数据输入(Datainput):如果CLE和ALE都为低,那么I/O口的现在数据就是一般的普通数据,不会被送到控制处理单元那里去,而是会暂存到缓存器中,然后按地址存到flash的存储单元去264――状态读取(Statusread):先发送命令70表示现在去读flash的状态,写完命令后等待twhr(从WE跳变到RE跳变的最少时间),然后置RE为低,使读有效,将flash状态数据读出.275――读取页数据(pageread):写pageread(读整页数据)命令00将地址输入,通过地址定位要具体将那个页读出放到缓存器.输入30h命令表示要将数据从缓存器送到I/O口,完成输出.小blcok在此不需要30h28296――写页存储单元(PageProgram):先输入命令80h表示要往某个Pgae写数据输入地址表明要具体操作的是那个页,写入的数据要放到那个页将要写入page的数据先从I/O口送到缓存区通过命令10h,让flash执行内部操作,把数据从缓存器送到指定的页3031先给flash命令60h表示要对flash进行擦除操作,随后给出页地址(blcok中任意一个页),只要该页是这个blcok中的任意一个页都可以,然后下命令D0h,flash开始执行擦除给出的页所在的block.通过探测R/b的变化或I/O6(状态寄存器第6位)的数值来判断擦除是否完成,如果I/O6=1(或R/B=1),再去判断I/O0的数值,I/O=0表示擦除成功,否则表示擦除失败.erase32337――随机数据输入(Randomdatainputinapage):所谓随机数据输入(Randomdatainputinapage),就是在进行PageProgram操作时,先将数据从I/O口读到页缓存区,然后调用85h(Randomdatainputcommand)从指定columnaddress开始,每个写周期修改一个数同时columnaddress随周期不断增加,改写完成后调用10h命令将整个页缓存中的数据Program到80h指定的地址所对应的页存储单元中去。34数据输入到页缓存区从指定columnaddress开始,每个写周期修改一个数同时columnaddress不断增加.将缓存区中的数据写到flash存储页35寻址页内数据368――随机数据输出(Randomdataoutputinapage):类似随机数据输入,随机数据输出是先按指定页地址将指定页的数据读到页缓存区,从指定的页内地址(columnaddress)开始,每个读周期输出一个数同时页内地址不断递增.37将数据读到页缓存区指定页内开始地址,每个读周期输出一个数同时将地址递增389――CopyBackProgram:所谓CopyBackProgram就是先输入命令和地址,将一个指定的源地址页的数据读到页缓存区,然后进入ready状态,接着调用85h(CopybackProgram)输入目的页地址,将页缓存区数据program到目的页。39将源地址数据读到缓存区输入目的页地址执行写program操作,让flash把缓存区数据写到指定页存储区4010――CacheprogramCahceprogram是对有Cacheregister的flash而言所具有的特别功能,它是通过Cacheregiste和内部的dataregister进行流水线操作,提高吞吐性能。先把外部数据通过I/O口读到Cacheregister,然后调用命令将Cacheregister中的数据转到dataregister中去.这个时候Cacheregister已经清空,可以继续接受外部数据.在flash将dataregister中的数据program到了存储单元中的同时,cache_register也在接受数据,这两个动作可以同时进行,从而提高吞吐性能。41接受数据到cache_register将数据从cache_register搬到data_regisrter在将数据program到存储单元的同时cache_register从外部接受数据,从而提高了吞吐量4211———Cacheread和那个Cacheprogram类似,只不过是先把数据从flash读到DATA_register,再将data——register中的数据写到cache——register,当data_register被清空后,可以继续从flash中接受数据,同时Cache—register中数据会被输出到I/O口。data_register从flash中接受数据和Cache—register中数据被输出到I/O口能够同时进行,提高效率。如果调用此命令后没有cache—read-exit命令的话,此命令会连续读从指定页地址读去随后的所有页数据,直到flash的最后存储页。4312――ReadID读ID命令90h默认的00地址就是存储ID号的,各个厂家都一样4445通过ID号对应的描述表就可以计算出每个blcok包含的page数.当然,一般datasheet的前面的描述里已经能够确认该flash的block,page的关系.对照这里可以识别该flash是MLC还是SLC判断大小block的依据小block只有一个sector大