[底层驱动 8.5] 写个数据还能误伤已有资料?

NAND闪存失效:编程干扰Program Disturb解析
35 篇文章 ¥399.90 ¥499.90
本文详细介绍了NAND闪存中Program Disturb现象的形成原因、影响范围以及规避方法。编程干扰是由于在NAND闪存单元编程时,施加的电压导致相邻单元受到干扰,可能会改变其存储状态。尽管ECC可以纠正部分错误,但过多的干扰可能导致数据错误。文章还讨论了Pass Disturb和Program Disturb的区别,并提出了ECC纠错和数据迁移作为应对策略。

传送门  >>>  总目录

 

一. 本博客及动态出现的信息,均仅供参考。本人将尽力以求所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性。本人对有关资料所引致的错误、不确或遗漏,概不负任何法律责任(包括侵权责任、合同责任和其它责任)。

二. 任何透过本博客及动态的网页或链接及得到的资讯、产品及服务,本人概不负责,亦不负任何法律责任。

三. 本博客及动态使用的信息,网页或链接(图片)可能由于本人疏忽未标明作者和出处,如有侵权,请立即与本人取得联系。

四. 本博客及动态支持保护知识产权,任何单位或个人认为本博客及动态中的网页或链接内容可能涉嫌侵犯其知识产权,应该及时向本人提出,并提供侵权情况证明。本人会依法尽快删除相关内容或断开相关链接。

五. 本博客内容仅供学习交流,禁止商用。

六. 阅读并使用本博客及动态包括其提供的网页链接及资源时,即代表您已阅读并同意本免责声明的全部内容。如有异议,请立刻关闭本网页并屏蔽本人动态并停止使用

 

[SSD NAND 8.5] NAND Flash 失效之 Program Disturb | 闪存写入(编程)干扰 | 写个数据还能误伤已有资料?

 

1. Program Disturb 形成原因

    NAND Program 原理 

    编程施加电压

2. 写干扰的产生

    Program Disturb 

    Pass Disturb

3. Program Disturb 影响范围

4. Program Disturb 规避办法


 

Program Disturb 形成原因

NAND Program 原理

 

数据在Flash闪存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于图中的控制门(Control gate)所被施加的电,以所存储的电荷的电压是否超过一个特定的阈值Vth 来表示0 or 1. 参考[1]

 

ad27431dcbf54d9bcd306a6aeb44c0f3.png

图1: 存储单元结构

图片来源: PCEVA

 

1) 对于闪存的写入,即控制栅极去充电,对栅极加压,使得浮置栅极存储的电荷越多,超过阈值,就表示0

2) 对于闪存的擦除,即对浮置栅极进行放电,低于阈值,就表示1

 

编程施加电压

 编程是通过FowlerNordheim (FN)隧穿来实现的,给TOX(Tunnel Oxide,隧道氧化物)增加强电场时,电子可以通过TOX,进入浮栅。优点是电流小,可以多个Cells同时操作。

70bb8a8c8fbc8c5489e4772856f3bbca.png
图2 编程过程中电压情况

        如图2 (i) 中为需要编程的Cell,它所在的WL3增加编程电压Vpp=20V,通道为0V,此时有足够的强电场进行编程操作。因此位线BL2驱动为0V,同时BL2上其它Cells需要导通(增加栅压Vpass=10V 或 9V),从而使得达到编程的要求。

 

补充一张Program 施加电压图供参考

e1e3111cee84c6b887b2f1551fe0e19b.png

 图片来源:Github [https://cushychicken.github.io/assets/cooke_inconvenient_truths.pdf]

图中:

一行是一个 Page or Wordline, 早期NAND 一个WL 就一个 Page, 现在是多个page.

一列是一个 BitLine,一般一个Page 18KB 有 18432 * 8 bit, 就需要这么多 BitLine.


 

一次只能Program一个page。对该page,我们在该WL上所有的存储单元控制极加一个19V的高电压;而对其他未被写的WL,我们在他们所有存储单元的控制极上加一个较小的电压VPass,例子中是9V。

 

对于要做真正Program操作(1->0)的那个存储单元所在的bitline (BL),我们让其接地,于是,左边的String看起来如下:

0b5c3e8c99a8b7ffc1b5507cc352e26d.png

图片来源: SSD fans

 

该String中,要program的那个存储单元,控制极电压是19V,衬底电压是0,就形成一个强电场,电子就被注入浮栅极。

eeaf903ffe3f7ce89ad9c1176c196ddd.png

图片来源: SSD fans

 

写干扰的产生

Program Disturb

WL3上同时存在不需要编程的Cell,比如说(BL1、WL3) 的Cell,被称为program-inhibit cell(编程抑制单元,翻译水平不高~)。老做法是,BL1电压驱动足够高,使得TOX不足以产生电子隧穿。缺点是实现起来复杂,而且需要增加电压泵,占用空间。沟道电势为6-8V的时候,才能有效抑制编程。

 

现在使用一种叫做“Self-Boosted Program Inhibt”(SBPI)的方法,来提高通道的电势。大致是原理是通过栅压和电容耦合来提高通道的电势。具体图2 (ii),通道电势可以达到6V,此时TOX电场强度达不到编程的要求。对该String中其它存储单元(属于其它没有被Program的page or WL):

 

对该String中其它存储单元(属于其它没有被Program的page or WL), 它们控制极电压是9V,衬底电压是0,也会形成一个电场,但该电场强度不足以让电子轻松注入到其浮栅极。

fca324206b1179b612e39f4e0c708eaf.jpeg

图片来源: SSD fans 

但是不管怎样,这个电场还是有概率让电子进入到浮栅极,尤其是绝缘层隔绝性能比较差的时候(比如擦写次数过多)。Program Disturb没有累积效应,不像Read 可以读无数次,所以一定程度上没有Read Disturb影响恶劣。但不管怎样,Program操作也是导致数据出错的一个元凶。但单次Program Disturb影响程度比Read Disturb大,因为控制极上加的电压更大, 如果错误超过 ECC 纠错, 也会引起数据错误。

 

看完Progam的String,我们看无需Program的存储单元(1->1,我们称该存储单元为 Program Inhibit)所在的String:

 

6c192623e38dbe2f8e0687ab9027c34e.png

对Program Inhibit存储单元,我们在其所在String的Bitline上加了个 2V (有的加 3V) 电压,最终会在衬底产生一个 7V 的Vboost电压。

 

对于Program Inhibit,控制极电压是19V,减去7V的Vboost电压,12V电势差,该电势差产生的电场不足以让电子轻松流入浮栅极,因此,存储单元基本还是保持擦除后的状态,即1还是1。

 

但是,这个12V电势差产生的电场,还是能让电子有概率进入到浮栅极,尤其是绝缘层隔绝性能比较差的时候。最坏的情况,可能我们不期望Program的存储单元,最后却做了真正的Program操作,即1->0,这是我们不期望的。

此节转载自:  [http://www.ssdfans.com]  闪存问题之Program Disturb


Program Disturb定义

单元间的Program干扰错误是NAND闪存中的可纠正错误(当然要求错误数在ECC 纠错范围内)。在存储单元上施加高电压以进行程序和擦除操作,由于寄生电容耦合,同一个Wordline 上其他String 的存储单元也会受到升高的电压应力,从而改变这些相邻细胞的阈值水平。这种由于 Program 或 Erase 操作而引起的电压阈值分别的移动称为Program 干扰错误。[3] 


Pass Disturb

和编程Cell处于同一条Blt Line 线上的其他Cells,也就是Prigram 所在Wordline 的相邻WordLine, 由于也加了电压Vpass=10V,如图2-iii,所以这些Cells也相当于接受了轻微的编程。所以会影响到其他相邻 WordLine.
 

  • Vpass太低,Program Disturb的Cell编程抑制效果不好
  • Vpass太高,Pass Disturb的Cell干扰增加,所以Vpass的值需要选择在特定的范围内,两者均衡。

被Pogram 的 WL N相邻的WordLine 被影响, 因为NAND Program 顺序是要求从小到大的。分别看下对前后的影响。

 

前面的WL N-1 里, 可能已经写的数据是 1010b, 被WL N program disturb 影响数据可能编程 0010b, 无端被篡改了。

如果你银行存折里的数字, 少个 1, 1111 万变成 0111万。 你可能想把行长拉出来示众了~

后面的WL N+1,还没有program, 预期应该是 Erase 状况,但很可能因为 Program Disturb,WL N+1 里面有些 Bit 被 program 了。

一块白菜地,自家还没吃上一口, 被猪拱了。

 

此节转载自:

版权声明:本文为CSDN博主「忠s」的原创文章,遵循CC 4.0 BY-SA版权协议
原文链接:https://blog.csdn.net/ibanezjem/article/details/78237428


 


Program Disturb 影响范围

c01f5c1c04a9545cb4fdc4ec8141ffcd.png3844b10ad3b9c1dc79a427cc03032fad.png

 图2: Program 干扰错误 影响范围。

图片来源 文献[3], Embedded.com

 

Program操作存在下面两个Disturb:

Program Disturb

     1. 同一个Wordline (同一个Page),此Bitline 对其他 BitLine 上Cell 存在Program Disturb。也称为 WordLine Program Disturb.

写一个Page的时候,有些bit我们想写1(erase 态),但最后却写成0(编程态)。

比如 1010b 可能写成了 1000b。只会造成NAND 中 1 -> 0 变化, 不会出现 1 -> 0 变化

PASS Disturb     

2. 同一个 Bit Line 上, Program的 WordLine 会影响相邻Wordline 的 Cell, 也称为 BitLine Program Disturb.

 

 

c01f5c1c04a9545cb4fdc4ec8141ffcd.pngProgram Disturb 规避办法

 Program Disturb 是 NAND 特性,发生的频率和严重程度, 取决于NAND 本身, 在使用上并无什么规避方法。

 

如果真发生了 Program Disturb, 一般来说 Program Disturb 的 Error bit, 是可以被ECC 纠正回来的, 关键时刻还是要靠 ECC 保命啊。

 

如果 Error bit 数目超过了预警值,可以尽早将数据搬移到新的闪存块, 把被影响的闪存块擦除即可。随着擦除的操作,Program Disturb 的影响就被重置消失。当然保不齐之后再program 还会发生Program Disturb.

 


参考

[1] Nand flash基本原理 - 知乎

[2] Nand flash基本原理_nand flash工作原理_饭小粒的博客-CSDN博客

[3] Flash 101: Errors in NAND Flash - Embedded.com

[4] 闪存问题之Program Disturb

[5] nand闪存写入编程干扰分析 - 道客巴巴

 

6c9ab26f7d311b440ca7825e06107543.png

 

免责声明

本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值