来自 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》总结的更多相关文章

  1. 《FLASH PROGRAMMING 那些事》总结

    注明来自 http://www.ssdfans.com/?p=5589 以MLC为例: 对FGF(Floating Gate Flash)技术的,MLC programming一般分两步走:先prog ...

  2. 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 ...

  3. [原创] Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的算法解决办法

    MDK开发环境从V4升级到V5后,支持包不再是集成到开发环境当中,而是封装在PACK中,需要自行安装,比较麻烦. 搭建MDK开发环境以及破解的方法,在前面的文章中有详细说明,这里不再赘述,有兴趣的可以 ...

  4. 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 ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  6. 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 ...

  7. Error:Flash Download Failed-"Cortex-M3"

    Error:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/H ...

  8. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  9. Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

  10. Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...

随机推荐

  1. Streams:深入剖析Redis5.0全新数据结构

    Streams:深入剖析Redis5.0全新数据结构   原创: 阿飞的博客   Redis 5.0 全新的数据类型:streams,官方把它定义为:以更抽象的方式建模日志的数据结构.Redis的st ...

  2. 判断gridView是否有数据

    我这里的gridView是采用空模板数据来显示的 当gridView的数据源为空的时候它们就会显示标题 有数据的显示它们就会显示下面的这种 你仔细观察会发现,当有数据的时候空标题的table没有了,解 ...

  3. Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行

    例:public void print() throws Exception. 对于方法a,如果它定义了throws Exception.那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异 ...

  4. 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...

  5. 小结:trie

    复杂度: 查找O(n),维护O(n),空间O(sum(len[i])) 概要: 就是每个节点对应一个字母,然后儿子有26个,查找和维护时进入对应儿子即可. 应用:在字符串匹配中多模匹配做基础结构:可以 ...

  6. LoadRunner检查点实战之运行查看器

    一.为什么要使用检查点 为什么要使用检查点,那就要说明一下LR如何判断脚本是否执行成功.LR判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTTP状态为 200 OK ,那么Vu ...

  7. [转]C# 超高速高性能写日志 代码开源

      1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的 ...

  8. Sql创建约束

    add constraint pk_studentno primary key(StudentNo) //主键 add constraint fk_student_grade_gradeid fore ...

  9. JavaScript作用域原理——作用域根据函数划分

    一.一个for实例 <p id="scope3" style="color:red"></p> var pscope3 = docume ...

  10. $(document).scrollTop()与$(window).scrollTop()

    $(document).scrollTop() 获取垂直滚动的距离 即当前滚动的地方的窗口顶端到整个页面顶端的距离 要获取顶端 只需要获取到scrollTop()==0的时候 就是顶端了 要获取底端 ...