*以下是个人对相关基础知识的梳理和总结,对于高度专业性的知识个人理解可能会有出入,如果有误,希望各位大佬不吝指教;
1.SLC 颗粒 (Single-Level Cell)
SLC颗粒每个储存单元只存储一个信息位(即“0”或“1”),因此其存储容量相对较小,单位存储成本相对较高;但也正是由于SLC颗粒的单一信息位存储方式,其读写速度非常快,且寿命相对较长。它们通常被用于对可靠性和性能有高要求的专业领域固态硬盘中,这些领域对数据的安全性要求较高,需要保存更长时间。
【前面的博文都是以SLC 颗粒举例讲解】
那么在不改变硬件size的前提下,有没有办法增加存储容量呢?
可以,工程师们开始在栅极电压的大小上做文章,于是MLC等应运而生;
前面提到过,对cell 进行program实际上是写0,如果没有program默认数据就是1,所以program只需要一个合理的电压值即可
存的bit数增加之后,每个信息的电压范围就变窄了;变窄了之后对program、read的要求变高了;数据的稳定性就差了;
2.MLC颗粒 (Multi-Level Cell)
MLC颗粒则可以在每个储存单元内储存2bits 信息,从而提高了存储容量,降低了单位存储容量成本。
2bit就可以代表4种数据,11,10,01,00,
下面开始思考program MLC的flow:比如把11 的Vprog = 0V,10 的Vprog = 1V,01 的Vprog = 2V,00 的Vprog = 3V,
对于单个cell来说,只需要prog一次就ok了
对于整个WL(假设一个WL有100个cell)来说,则需要program3次才能完成整个wl的写动作,第一次Vprog = 1V,第二次Vprog = 2V,第三次Vprog = 3V
但是真正在program并不是按照这个电压排序
在这里引出格雷码的概念:
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)
因为后面需要用格雷码来保证相邻状态的编码之间只有一位不同,所以就变成了下面这样:
11 的Vprog = 0V,10 的Vprog = 1V,00 的Vprog = 2V,01 的Vprog = 3V
那为什么需要这么做呢?就和read 有关系了
下面开始思考read MLC的flow:
继续把上述的四组数据分类:11, 10,00, 01,高bit称为高页,低bit称为低页
先看高页1 1 | 0 0 ,那我们在中间读一次就可以知道高页是1还是0
再看低页1 | 0 0 | 1,那我们读两次就可以知道低页是1还是0
通过三次read,就可以知道所有Cell中的info了
可以考虑下一开始举的例子,如果按照这种方式prog,11,10,01,00,需要读几次?
3.SLC颗粒 (Trinary-Level Cell) (目前常用)
TLC颗粒每个存储单元可以存储3bit信息
3bit就可以代表8种数据,111,110,101,100,011,010,001,000
要根据不同类型的sensing,有1-2-4,2-3-2,1-3-3类型
下面以1-3-3举例
根据这个图就可以知道电压的分布,自己可以仿照MLC来分析;
4.QLC颗粒 (Quad-Level Cell)
QLC颗粒则可以存储4bit信息
4bit就可以代表16种数据,1111,1110,1101,1100,1011,1010,1001,1000,0111,0110,0101,0100,0011,0010,0001,0000
作为SSD 固件开发工程师,目前还没有接触过QLC颗粒o(╥﹏╥)o
等后续接触到了,再来update。。。
标签:MLC,00,Vprog,TLC,program,颗粒,SLC From: https://blog.csdn.net/qq_36677517/article/details/136718087