Nand Flash 通过调整阈值的Retry方法简单描述

最近想到了一个如何更加简单的理解Nand Flash做Retry原理的方法,在这里记录分享一下

这里为了表述简单,假设一个Nand Flash,它非常非常的小,小到只有8个SLC Cell,本身Retry原理跟Block、Page、WL关系不是很大,所以就假设他们都不存在好了。这个Flash他就只有8个SLC Cell,所以他可以存储的数据量为8 bit

Nand Flash 通过调整阈值的Retry方法简单描述

这个Cell也比较特别,在打入电子的时候,我们不用准确的电压值来做记录,而是用一个V1,V2来代表该Cell的电压。

Nand Flash 通过调整阈值的Retry方法简单描述

如上图所示,该Flash的每个Cell只能存在V0到V7共8种电压状态,当读取数据时,根据该Cell的电压在P值的左边还是右边,判定读出的值分别为1和0。

下面开始模拟编程过程,设定我们要写入的原始数据为0x55,他的二进制是0101 0101 b,首先写入bit 0  数据为1,那么这时候Nand Flash 把Cell 0猛地打入电子,同时使其电压尽可能处于P值的左边,最后Cell0的电压落在了V1。

Nand Flash 通过调整阈值的Retry方法简单描述

上图表示这时候落在V1的Cell 数量有1个,用对应的颜色在图上表示对应Cell的电压值,个数的意思是这个Flash当中,处于对应电压的Cell有多少个。

后面7个Cell就不一一展示了,假设他们在写完之后呈现出这样的一个状态

Nand Flash 通过调整阈值的Retry方法简单描述

大概解释一下就是处于V2电压的Cell有bit 2和bit 1,处于V6电压的Cell有bit 3和bit 5.

这时候,我们通过P阈值来读取数据,就能正确的读出原本写入的0x55,通常情况下这个图会被画成折线图我们现在把他连起来,得到下面这个样子

Nand Flash 通过调整阈值的Retry方法简单描述

这个图就是阈值分布图,可以看到在阈值P的地方两个波交叉较少,在正常的Flash当中这时候用ECC就能纠错,不过在这个特殊的Flash当中还没有数据出错。

存好数据之后,这个特殊的Flash可能会被高温,低温,ReadDisturb等等等等各种环境摧残,最终他的有一个Cell的电压发生变化了。变成了下图这种状态

Nand Flash 通过调整阈值的Retry方法简单描述

如上图所示,bit 6的电压从V3跳到了V4,这时候我们再继续用阈值P来读数据,实际上读出来的是0001 0101b,即0x15,画出阈值分布曲线之后是这个形态

Nand Flash 通过调整阈值的Retry方法简单描述

可以看到两个波峰交叉的地方升高了。所以这时候如果想要数据能够正确的读取出来,要将阈值P进行偏移

Nand Flash 通过调整阈值的Retry方法简单描述

将阈值偏移到P0进行数据读取时,bit 6又可以读出数据是1,变回正确数据,这就是Retry时做阈值偏移的基本原理。上面画的阈值分布图实际上是针对不知道原始数据的时候画出来的,所以看不出真实的Cell变化。不过此时我们是知道原始数据为0x55的,所以知道是哪一个bit发生的变化,因此可以画出更详细的阈值分布图:

Nand Flash 通过调整阈值的Retry方法简单描述

上图红线表示原始数据为1的Cell,绿色为原始数据为0的Cell。

以上就是Retry基本原理以及阈值分布图的画法解析。