《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 PROGRAMMING 那些事》总结的更多相关文章
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
- [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法
MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...
- Turtelizer 2 provide JTAG Flash programming and debugging of ARM based boards via USB
http://www.ethernut.de/en/hardware/turtelizer/ Introducing Turtelizer 2 Overview Turtelizer 2 had be ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...
- Programming Internal Flash Over the Serial Wire Debug <SWD> Interface -- EFM32
1 Debug Interface Overview 1.1 Serial Wire Debug Serial Wire Debug (SWD) is a two-wire protocol for ...
- Error:Flash Download Failed-"Cortex-M3"
Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...
- STM32F4读写内部FLASH【使用库函数】
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...
- Flash Download Failed-"Cortex-M3"
rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...
- Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"
rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...
随机推荐
- java开发总体知识复习
上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大家. 对于这次跳槽找工作, 我准备了挺长的时间, 其中也收集了很多比较好的笔试面试题, 大都是一些常用的基础, 很多都是由于时间 ...
- 【BZOJ】1627: [Usaco2007 Dec]穿越泥地(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1627 裸bfs不解释.. #include <cstdio> #include < ...
- iframe超时处理。。。。
function iframeTimeOut(url, timeOut_callback, width, height) { /// <summary> /// iframe超时处理 // ...
- ThinkPHP项目笔记之控制器常用语法
如,有数据表:tmp,以下以此为例. $a = M('Tmp'); $a -> select(); $a -> where(condition)->select(); $a -> ...
- [转] 关于EJB分析
转自:http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问.什么是"服务集群"?什么是" ...
- freemarker2 指令
if,else,elseif 指令 <#if x==1> x is 1 </#if> <#if==1> x is 1 <#else> x is not ...
- 判断ActiveX控件是Desgin Mode还是Runtime Mode
对于MFC COleControl::AmbientUserMode Determines if the Container is in design mode or user mode. BOOL ...
- iOS开发之--调用打电话,发邮件,发短信的系统功能的代码
1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hz ...
- iOS 7 新特性:视图控制器切换API
本文转载至 http://blog.jobbole.com/51588/ 本文由 伯乐在线 - studentdeng 翻译自 Chris Eidhof.欢迎加入技术翻译小组.转载请参见文章末尾处的要 ...
- 《jquery权威指南2》学习笔记------基础函数
Math.floor(Math.random() * 7 + 1); Math.random() 生成0和1之间的随机小数Math.random() * 7 生成0和7之间的随机小数Math.rand ...