来自 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. Desugar Scala(15) -- unapply和unapplySeq方法

    欢迎关注我的新博客地址:http://cuipengfei.me/ 实在想不到什么动词可以当做脱衣服来讲了,所以从现在开始这系列博文就叫做Desugar Scala了.除非哪天才思泉涌,又想到了新词: ...

  2. 点击edittext并显示其内容

    package com.example.sum;//sum import com.example.sum.R;//sum import android.app.Activity; import and ...

  3. java---servlet与filter的联系与区别

    filter是一个可以复用的代码片段,可以用来转换HTTP请求.响应和头信息.Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应. 最近使用插 ...

  4. java-----四种引用

    java的四种引用,强弱软虚,用到的场景 标签: java的引用 强弱软虚 2016-05-11 22:59 1237人阅读 评论(0) 收藏 举报 1.强引用(StrongReference) 强引 ...

  5. Linux Shell Vim 经常使用命令、使用技巧总结

    前言 本文总结了自己实际开发中的经常使用命令,不定时更新,方便自己和其它人查阅. 如有其它提高效率的使用技巧.欢迎留言. 本文地址 http://blog.csdn.net/never_cxb/art ...

  6. Python 资料性网站。

    伯乐在线:http://blog.jobbole.com/category/python/ http://blog.chinaunix.net/uid/22334392/cid-24327-list- ...

  7. python pycurl属性

    pycurl.Curl() #创建一个pycurl对象的方法 pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL pycurl.C ...

  8. Android 防破解技术简介

    Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是随之而来的问题也越来越多,这其中比较令人头疼的问题就是:有些不法分子利用反编译技术破解 App,修改 ...

  9. win7显示方向旋转快捷键禁用及图形属性打开方法

    方法/步骤   1 首先在桌面右键→打开[图形属性],如果没有,请看步骤2.如果有,直接进入步骤3 步骤阅读 2 为了美化桌面右键,往往会把桌面右键中的图形选项隐藏掉,此时,我们可以通过[控制面板]打 ...

  10. layerui如何设置显示的位置?

    转自:http://www.layui.com/doc/modules/layer.html#offset layer.open({ type: 1,//默认:0 (0表示信息框,1表示页面层,2表示 ...