【TLC闪存为什么不耐用?】
三星并未公布TLC闪存的确切读取、编程和擦写时间指标,只说比MLC闪存低大约50%,所以这三项都是猜测的,但是编程/擦写次数确定是1000,MLC的三分之一,SLC的百分之一。为什么会这么低?(这也是用户最为关注的焦点)
下图是一个MOSFET(金属氧化物半导体场效应晶体管)。在对一个闪存单元编程的时候,电压加到控制栅极(control gate)上,形成一个电场,让电子穿过硅氧化物栅栏,达到浮动栅极(floating gate)。穿越过程完成后,控制栅极上的电压会立刻降回零,硅氧化物就扮演了一个绝缘层的角色。单元的擦除过程类似,只不过电压加在硅基底(P-well)上。
SLC、MLC、TLC三种闪存的MOSFET是完全一样的,区别在于如何对单元进行编程。SLC要么编程,要么不编程,状态只能是0、1。MLC每个单元存储俩比特,状态就有四种00、01、10、11,电压状态对应也有四种。TLC每个单元三个比特,状态就有八种了(000、001、010、100、011、101、110、111)。
说这些和耐用性有什么关系呢?问题在于,闪存单元每次编程或擦除的电子穿越过程都会导致硅氧化物的损耗。这东西本来就只有区区10纳米的厚度,每进行一次电子穿越就会变薄一些。也正因为如此,随着半导体工艺的进步,硅氧化物越来越薄,耐用性自然就更差了。
硅氧化物损耗得差不多之后,原子键就会断裂,部分电子可能会在穿越过程中被困在氧化物中,导致负电荷积累,使得闪存单元再次编程的时候抵消控制栅极的部分电压。擦写时间也会因此延长,因为在达到何时的电压之前需要更长时间、更高的加压。
记住,主控制器是无法改变编程和擦写电压的(部分可以后文再说)。如果原本设计的电压值工作异常,主控就会尝试不同的电压,这自然需要时间,也会给硅氧化物带来更多压力。
简单地说,SLC的电压状态最少,可以容忍电压的更大变化,MLC的四种状态也基本可以接受,TLC的八种就太多了,电压可变余地很小。在不清楚确切的所需电压之时,就不得不将同样的电压分成八份(SLC、MLC分别只要两份和四份)。在使用过程中,编程和擦写一个TLC闪存单元所需要的时间也越来越长,最终达到严重影响性能、无法接受的地步,闪存区块也就废了。
另外,随着闪存的磨损,所需要的ECC错误校验也越来越多,因为错误的发生几率更高了。这对于TLC又是一个麻烦,因为需要纠正的数据比特多达三个。虽然如今的ECC引擎都很强大了,但到使用后期,与其费劲纠正错误,还不如直接废了整个区块。