flash简单总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flash简单总结相关的知识,希望对你有一定的参考价值。

参考技术A 按内部存储介质来分,可以将flash分成nor flash和nand flash。
按访问方式来分,可以将flash分成串行(serial)flash和并行(parallel)flash。
有一些特性是对所有类型的flash都有效的,比如,都有擦除(erase)和写入(program)步骤。擦除操作可以让bit由0变成1,而写操作只能让bit由1变成0。即,想写数据到flash,一般都要先擦除再写入。
另外,flash一般都有page,block(sector)这样的层次结构。

最先出现的是nor flash,它是并行的。它有大量的地址线和数据线,可以像ddr那样直接挂在总线上被cpu访问,设备上电时,可以直接在flash上执行程序。由于这种flash信号线较多,各个厂家的产品不兼容,因此制定了CFI接口来进行统一。
并行nor flash一般可以随机读取(random read)。
并行nor flash一般可以按字节写入。
并行nor flash一般可以按block擦除。

随后出现了串行nor flash,一般是spi接口的,因此也叫spi nor flash。它对外提供的就是标准spi的那些di,do信号了,并不能直接挂在总线上被cpu访问。但这种flash一般也会提供一个xip(execute in place)功能。想要用这个功能,cpu也要有相应的适配(比如有一个额外的模块,将spi信号和AHB总线信号进行相互转化)。
串行nor flash一般可以按字节读取。
串行nor flash一般是按page写入(注意partial page program)。
串行nor flash一般可以按block擦除。

另外一大类是nand flash。
常规的nand flash是并行的(比如由IO0~7用于地址和数据的输入和输出)。串行的nand flash一般也是用spi接口,即spi nand flash(应该是在flash芯片内部做了串并转换?)。
nand flash(包括spi nand flash)一般都是按页读写,按block擦除。

注意点1,并行nor flash一般可以按字节写入,一般理解,按字节写入和随机写入应该也没有什么差别了。但由于flash写(program)操作只能让bit由1变成0,因此这样的随机写入并没有意义。

注意点2,串行nor flash(spi nor flash)一般是按page写入,但它一般也支持部分页写入(partial page program)。发送page写入命令时,指定的page地址可以不是page对齐的,而是指定到page内部,只要写入数据的长度不超过该page的末尾即可(当然写操作之前也要有擦除操作)。

《FLASH PROGRAMMING 那些事》总结

注明来自 http://www.ssdfans.com/?p=5589

以MLC为例:

对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先program Lower page,然后program Upper Page。

对某个Cell来说,当写入1时,无需Programming,阈值电压保持不变,还是处于E状态;当写入0时,必须进行Programming,使它的阈值电压落到D范围 ,即E->D。

技术分享

Programming某个page时,往其所在的WL控制极上施加高电平,衬底接地,对需要Programming的存储单元(如上图绿色圈起来的cell):1->0,其bitline接地;对不需要Programming的存储单元(如上图红色圈起来的cell):1->1,bitline拉高,就能抑制其Programming。

由于每个存储单元的体质不一样,有些cell很快就能让其阈值电压跳到D范围,而有些存储单元需要若干次Programming,才能使其到达D。flash采用Program + Verify的方式进行Programming,即开始在WL控制极上施加一个电压,如上图所示,假设Vpgm =19V,让这个电压持续一段时间,然后撤掉,对每个Programming的存储单元进行验证,看其阈值电压是否超过验证电压Vvfy,如果超过,说明达到D状态,这些存储单元的bitline从接地到拉高,让其不再继续Programming,而对那些没有达到D状态的存储单元,还需要继续Programming。Vpgm会加大,比如增加0.5V,Vpgm = 19.5V,继续Programming,verify,直到达到D状态。

技术分享

 

在Programming upper page之前,flash需要读取该Page,获取page中所有cell的当前状态,然后根据输入,Programming cell到相应的目标状态。

技术分享

如果当前cell状态处于E,如果写入1,无需Programming,E状态保持不变;如果写入0,则需要Programming该cell到状态D1;   如果当前cell状态处于D,如果写入1,program该cell到D2;如果写入0,则需要Programming该cell到状态D3;

比较一下lower page programming和upper page programming,有以下几个不同:

1.Program upper page时,需先知道当前cell的状态,在programming之前需要读所有的cells; Program lower page时候无需此操作,因为所有cell都处于擦除状态;

2.Program upper page时,需要verify好几个电平,而program lower page时,只需verify一个电平;

3.Program lower page时,E状态和D状态可以隔得比较远,因此program时候可以加更大的初始program电压和更大的步进(step)电压;而Program Upper page时,E,D1,D2,D3之间的间隔比较小,因此program需要更精细的控制电压,不然一下program过头了。比如本来期望从E状态跳跃到D1状态,不小心电压加大了,直接就跳到D2,那就麻烦了。

分两次写最大的问题是,如果在programming upper page时发生异常掉电,那么之前Lower page的数据也丢失。

 


以上是关于flash简单总结的主要内容,如果未能解决你的问题,请参考以下文章

总结调用Flash的几种方法

《FLASH PROGRAMMING 那些事》总结

js判断浏览器是否安装或启用了flash的方法总结

DA14531 学习笔记经验总结

Flash视频播放器开发经验总结

DA14531 学习笔记经验总结