一. 本博客及动态出现的信息,均仅供参考。本人将尽力以求所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性。本人对有关资料所引致的错误、不确或遗漏,概不负任何法律责任(包括侵权责任、合同责任和其它责任)。
二. 任何透过本博客及动态的网页或链接及得到的资讯、产品及服务,本人概不负责,亦不负任何法律责任。
三. 本博客及动态使用的信息,网页或链接(图片)可能由于本人疏忽未标明作者和出处,如有侵权,请立即与本人取得联系。
四. 本博客及动态支持保护知识产权,任何单位或个人认为本博客及动态中的网页或链接内容可能涉嫌侵犯其知识产权,应该及时向本人提出,并提供侵权情况证明。本人会依法尽快删除相关内容或断开相关链接。
五. 本博客内容仅供学习交流,禁止商用。
六. 阅读并使用本博客及动态包括其提供的网页链接及资源时,即代表您已阅读并同意本免责声明的全部内容。如有异议,请立刻关闭本网页并屏蔽本人动态并停止使用
[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]
图1: 存储单元结构
图片来源: PCEVA
1) 对于闪存的写入,即控制栅极去充电,对栅极加压,使得浮置栅极存储的电荷越多,超过阈值,就表示0
2) 对于闪存的擦除,即对浮置栅极进行放电,低于阈值,就表示1
编程施加电压
编程是通过FowlerNordheim (FN)隧穿来实现的,给TOX(Tunnel Oxide,隧道氧化物)增加强电场时,电子可以通过TOX,进入浮栅。优点是电流小,可以多个Cells同时操作。
图2 编程过程中电压情况
如图2 (i) 中为需要编程的Cell,它所在的WL3增加编程电压Vpp=20V,通道为0V,此时有足够的强电场进行编程操作。因此位线BL2驱动为0V,同时BL2上其它Cells需要导通(增加栅压Vpass=10V 或 9V),从而使得达到编程的要求。
补充一张Program 施加电压图供参考
图片来源: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看起来如下:
图片来源: SSD fans
该String中,要program的那个存储单元,控制极电压是19V,衬底电压是0,就形成一个强电场,电子就被注入浮栅极。
图片来源: 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,也会形成一个电场,但该电场强度不足以让电子轻松注入到其浮栅极。
图片来源: SSD fans
但是不管怎样,这个电场还是有概率让电子进入到浮栅极,尤其是绝缘层隔绝性能比较差的时候(比如擦写次数过多)。Program Disturb没有累积效应,不像Read 可以读无数次,所以一定程度上没有Read Disturb影响恶劣。但不管怎样,Program操作也是导致数据出错的一个元凶。但单次Program Disturb影响程度比Read Disturb大,因为控制极上加的电压更大, 如果错误超过 ECC 纠错, 也会引起数据错误。
看完Progam的String,我们看无需Program的存储单元(1->1,我们称该存储单元为 Program Inhibit)所在的String:
对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 影响范围
图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.
Program Disturb 规避办法
Program Disturb 是 NAND 特性,发生的频率和严重程度, 取决于NAND 本身, 在使用上并无什么规避方法。
如果真发生了 Program Disturb, 一般来说 Program Disturb 的 Error bit, 是可以被ECC 纠正回来的, 关键时刻还是要靠 ECC 保命啊。
如果 Error bit 数目超过了预警值,可以尽早将数据搬移到新的闪存块, 把被影响的闪存块擦除即可。随着擦除的操作,Program Disturb 的影响就被重置消失。当然保不齐之后再program 还会发生Program Disturb.
参考
[2] Nand flash基本原理_nand flash工作原理_饭小粒的博客-CSDN博客
[3] Flash 101: Errors in NAND Flash - Embedded.com
免责声明:
本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。