《闪存问题之PROGRAM DISTURB》总结
来自 http://www.ssdfans.com/?p=1814
SSD之所以需要BCH或LDPC等ECC纠错算法,是因为闪存中的数据会在神不知鬼不觉的情况下发生比特翻转。
导致比特翻转的原因很多,比如之前提到的data retention 问题, PE问题,read disturb问题,还有其他一些问题。Program Disturb也是其中原因之一,今天就介绍一下什么是Program Disturb,它是如何导致数据出错的。
要对闪存Block进行擦除操作,擦除是把浮栅极里面的电子赶出来。它的实现是在衬底加一个高电压,控制极接地,之间建立一个强大的电场,浮栅极里面的电子在隧道效应作用下,被强制驱赶出来。
Program操作是在Block擦除的基础上,通过往浮栅极注入电子,实现1变为0。往浮栅极注入电子,做法与擦除操作相反,它是在控制极加个高电压,衬底接地,建立一个与擦除相反的强电场,外面的电子在隧道效应作用下,进入浮栅极。
Program是按Page为单位进行的,每个Page由很多bitline组成,我们往Page上写数据时,里面数据有0也有1:如果往某个存储单元写入1,我们认为这个比特可以不做Program操作,因为擦除后的存储单元,里面数据本来就是1;如果我们写入的是0,则真正需要做Program操作,即把之前的1改写为0。
上图中,黄色圈起来的是我们要写的Wordline (WL,某个具体的page),这里只画出该WL上的两个比特,其中一个比特我们需要写0 (绿色圈起来),即进行真正的Program操作,而另外一个比特(红色圈起来的),我们要写入1,对该比特来说,我们不需要program (称之为Program Inhibit)。
我们一次只能Program一个page。对该page,我们在该WL上所有的存储单元控制极加一个19V的高电压;而对其他未被写的WL,我们在他们所有存储单元的控制极上加一个较小的电压,例子中是9V。
对于要做真正Program操作(1->0)的那个存储单元所在的bitline (BL),我们让其接地,于是,左边的String看起来如下:
该String中,要program的那个存储单元,控制极电压是19V,衬底电压是0,就形成一个强电场,电子就被注入浮栅极。
对该String中其它存储单元(属于其它没有被Program的page or WL):
它们控制极电压是9V,衬底电压是0,也会形成一个电场,但该电场强度不足以让电子轻松注入到其浮栅极。
但是不管怎样,这个电场还是有概率让电子进入到浮栅极,尤其是绝缘层隔绝性能比较差的时候(比如擦写次数过多)。因此,被Program的存储单元所在String上其它存储单元会一定程度上受该次Program影响,我们称之为Pass Disturb。该影响类似前面提到的Read Disturb,但由于一个Block擦除一次能写的次数有限(一个Block的page数),不像Read操作可以反复读取,所以,Pass Disturb对数据影响没有Read Disturb严重。
看完左边的String,我们看右边的String,也就是那个无需Program的存储单元(1->1,我们称该存储单元为 Program Inhibit)所在的String:
对Program Inhibit存储单元,我们在其所在String的Bitline上加了个2V电压,最终会在衬底产生一个7V的Vboost电压。
对于Program Inhibit,控制极电压是19V,减去7V的Vboost电压,12V电势差,该电势差产生的电场不足以让电子轻松流入浮栅极,因此,存储单元基本还是保持擦除后的状态,即1还是1。
但是,这个12V电势差产生的电场,还是能让电子有概率进入到浮栅极,尤其是绝缘层隔绝性能比较差的时候。最坏的情况,可能我们不期望Program的存储单元,最后却做了真正的Program操作,即1->0,这是我们不期望的。我们称这种让Program Inhibit存储单元做了Program的现象,叫做Program Disturb。
最后,总结一下,Program操作存在下面两个Disturb:
1.同一个Wordline (同一个Page),存在Program Disturb。我们在写一个Page的时候,本来某些bit我们想写入1,但最后却写成0。
2.Program的比特所在的那列String的其它存储单元,存在Pass Disturb。
无论是Program Disturb还是Pass Disturb,其作用会导致浮栅极进入不期望的电子,这点和Read Disturb的影响是一样的。但是,由于每个Page在一次擦除后Program只能进行一次,不像Read Disturb一样,可以读很多次,Program Disturb没有累积效应(但单次影响程度比Read Disturb大,因为控制极上加的电压更大),所以一定程度上没有Read Disturb影响恶劣。但不管怎样,Program操作也是导致数据出错的一个元凶。
《闪存问题之PROGRAM DISTURB》总结的更多相关文章
- 《FLASH PROGRAMMING 那些事》总结
注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...
- 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 ...
随机推荐
- C++ const关键字修饰引用
//const修饰引用的两种用法 #include<iostream> using namespace std; struct Teacher{ ]; int age; }; void S ...
- hive组件和执行过程
转自http://blog.csdn.net/lifuxiangcaohui/article/details/40262021 对Hive的基本组成进行了总结: 1.组件: 元存储(Metastore ...
- Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function问题解决
selenium 目录下的lib文件夹下的所有包都加到类库里
- notepad++程序员开发插件
1. sftp 2. explore 3. XBrackets 括号自动补全(引号,方括号)
- 详谈JavaScript 匿名函数及闭包
1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这 ...
- Redis分布式锁,基于StringRedisTemplate和基于Lettuce实现setNx
使用redis分布式锁,来确保多个服务对共享数据操作的唯一性一般来说有StringRedisTemplate和RedisTemplate两种redis操作模板. 根据key-value的类型决定使用哪 ...
- 【BZOJ3238】[Ahoi2013]差异 后缀数组+单调栈
[BZOJ3238][Ahoi2013]差异 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sample Ou ...
- Fragment,仿QQ空间
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451 在今天的这篇文章当中,我依然会以实战加理论结合 ...
- quartz启动Quartz : org.quartz.SchedulerConfigException: Thread count must be > 0
检查quartz.properties数据源配置是否正常
- SaltStack概述及安装
配置管理工具 查看文档 https://docs.saltstack.com/en/latest/ 其他工具 puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统 ...