来自 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. Httpclient远程调用WebService示例(Eclipse+httpclient)

    package cn.com.taiji.pos.httpserver; import java.io.BufferedInputStream;import java.io.ByteArrayOutp ...

  2. 002Maven_第一个Maven演示

    第一步. 首先建立Hello项目同时建立Maven约定的目录结构 Hello     --src     -----main     ----------java     ----------reso ...

  3. 在Swing的组件中,基本上都是在AWT组件的名称前面加“J”

    在Swing的组件中,基本上都是在AWT组件的名称前面加“J”. 一般情况下,除了Choise等组件: import javax.swing.*;好要加上:import java.awt.*以及imp ...

  4. 让div也出现滑动框。

    <div id="box" style="height: 300px; width: 200px; border:1px solid #CCC; overflow: ...

  5. PHP cURL库函数抓取页面内容

    目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) ...

  6. [转] 关于EJB分析

    转自:http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问.什么是"服务集群"?什么是" ...

  7. iOS开发之--当遇到tableView整体上移时的解决方案

    方案一在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配 ...

  8. .net Session延长过期时间

    一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期. 二 ...

  9. codevs 5964 [SDOI2017]序列计数

     [题解] 官方题解就两句话. 写了三个版本的不同分值代码.看代码吧. 前导1 //f[i][j][1/0]表示长为i,sum mod p=j,是否已经选了质数的方案数 #include<cst ...

  10. Fragment,仿QQ空间

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451          在今天的这篇文章当中,我依然会以实战加理论结合 ...