这是少数派与国民好物 aigo 联合推出的信息储存设备的科普系列文章。作为国内早期的存储设备制造商及佼佼者,感谢 aigo 对本文提供的一系列支持,包括但不限于技术知识指导、市场难寻的老物件以及作者用于拆解介绍的最新产品等。

我们希望通过最简洁通俗的描述,带领大家了解信息储存设备的基本原理,知道那些复杂的参数,如何挑选购买适合自己的存储设备,又是如何更好地使用,更安全稳定地保存我们的数据,以及未来我们能够用上什么技术。 另本系列虽然与 aigo 联合发起,但所有内容不涉及任何品牌指导或要求的商业营销。


在上一章,我给大家介绍了机械硬盘的原理和参数,机械硬盘作为一种量大实惠的储存设备,已经为我们尽心尽力服务了几十年,为人类的发展做出了巨大贡献。在这几十年里,科学家们也没有停止对储存技术的探索,像是电影从胶片转向数字一般,偏向机械原理的机械硬盘已经不能满足越来越高的储存需求,新的储存技术不断出现。

转过头来看,其它技术有点像魔法

固态硬盘,或者说闪存技术就是在各种技术中脱颖而出的那个胜者,它不是效率最高的那个,但却是性价比比较高同时适用场景相对广泛的一个技术。

工厂里面的闪存颗粒,来源:Made-in-China.com

那这一章我们就来聊聊现在广泛使用的最新技术,也是购买储存设备的第一选择 —— 固态硬盘(SSD)。

说到固态硬盘,大家对于它的第一印象应该都差不多,那就是快和贵。固态硬盘贵自有贵的道理,它技术原理上保证了速度与容量上限会不断刷新,同时摆脱了机械结构,不会像机械硬盘那样晃一下数据爆炸,还能做进小型化和各种奇奇怪怪形态的设备上。

小小的内存卡和固态硬盘都是使用 NAND 闪存颗粒储存数据的

虽然比起机械硬盘,现在固态硬盘仍然比较贵。但随着固态硬盘价格不断走低,以后它始终会成为我们的主力储存设备,机械硬盘只能退而其次成为担任仓库盘的角色,甚至不会再出现在我们电脑里(现在很多人的笔记本已经是这样子了),就像现在磁带的现状(20 后或者 30 后的孩子们以后可能会奇怪地问我们,为什么以前的人们要把数据放在一个旋转的盘上)。

到了今年,也许我们闭着眼睛买固态硬盘,也不会有太差的体验,但固态硬盘作为一个新型储存设备,大多相关技术和参数对大众来讲比较高深和新颖,坑还是蛮多的。我们更要仔细了解一下固态硬盘的原理,工作方式,还有如何查看它的实际性能,帮助我们理解接下来实际去购买和使用的部分。

固态硬盘的历史

通常人们以储存读取部分有没有活动的机械部件,来区分固态硬盘和机械硬盘,下面出现的设备都满足这个条件。

如果我们自己买过 M.2 固态硬盘或者拆过固态硬盘外壳的话,就会发现里面有很多一个一个的颗粒,这些储存颗粒就是固态硬盘储存数据的地方。说起来有点神奇,而这些储存颗粒诞生的基础 —— 浮栅晶体管(MOSFET)和非易失性储存器(NVM,像是 EEPROM 这类的都是非易失性储存器)甚至比机械硬盘出现的更早,只不过机械硬盘的结构和原理注定了它开始阶段能发展得更快。

NVMe 上的储存颗粒

最早使用非易失性储存器储存数据的装置可以追溯到 1950 年,还记得机械硬盘历史上最著名的厂商 IBM 吗,这次首先应用这项技术的还是它(真的牛啤,我查了下 1950-1999 年 IBM 储存相关的专利,占了全球的 10% 以上)。那个时候甚至有两种技术同步发展:磁芯储存器和卡式只读储存器

这两种设备看起来完全不一样,图片来源:Dataram & computerhistory.org

磁芯储存器的原理简单粗暴,把磁性材料制作成的小圈通过电线串起来排成阵列,每个小圈都可以磁化或者去磁,代表了 0 和 1,计算机就可以通过读取导线电压或者给导线输送电压,改变某个特定小圈的磁性来实现储存读取数据。

磁芯储存器放大的图片,图片来源:Dataram & computerhistory.org

更绝的是它的组装真就是手工,由女性工人使用显微镜手动穿线(有我们这边穿珠子兼职那味了)。之前 NASA 登月 50 年的时候,国内疯狂报道阿波罗卫星软件编程真的是「编织」出来的,指的就是磁芯储存器(阿波罗上面的约 32KB)。

阿波罗卫星上的磁芯储存器,来源:NASA

至于,另外一个卡式只读储存器(CCROS,好像没有正式中文名)原理就更简单了,可以想象成是一堆打孔铁片叠在一起。

卡式只读储存器的储存卡片

用专门的机器把编好的程序等等按照特殊的编码方式在铁片上打孔,然后交给计算机就能读取,这里就可以看出来数据是没有办法修改的,想要改数据只能重新找个新的铁片去打孔。这两个技术原理和制造实在是不太适合发展,所以在我们第一章提到的磁鼓储存器出来之后就迅速被淘汰了。

他俩的淘汰其实跟真空管时代结束是一起的,之前计算机是用真空管 —— 把电路封装在玻璃管里形成二极管/三极管等等,然后用它们来实现计算机最基础的与(A 和 B)或(A 或 B)非(非 A 非 B)门,第一台电子计算机就是这样出现的。和真空管时代结束后就来到了我们现在很熟悉的半导体时代,半导体时代的计算设备干的还是真空管时代计算设备的那些判断,不过真空管变成了半导体制作的浮栅晶体管,由于半导体晶体管可以通过「生长」快速巨量制造出来,而且理论上可以做到非常小,比如现在我们所说的 5nm 纳米 CPU 工艺,就是可以把一个晶体管里的沟道长度做到 5 纳米大小,所以才会有我们现在的算力大爆炸(详细的原理我们下面原理部分会介绍)。

计算机门的前辈真空管计算机里面的真空管,和现代 CPU 显微镜下的晶体管对比
计算机门的前辈真空管计算机里面的真空管,和现代 CPU 显微镜下的晶体管对比,图片来源:IBM

现在还用真空管的,基本上就只剩下 HiFi 发烧友们玩的功放了(在广东真空管又叫做胆,胆机就是这样来的),而半导体和 1959 年在贝尔实验室发明的晶体管几乎是现在所有数码设备的基础,储存设备也不例外,接下来出现的技术和设备都是使用半导体的了。

固态硬盘的前身:Bulk Core

时间来到了 1976 年,一家名为 Dataram 的名字很直白的公司推出了 Bulk Core 这个很多人认为是第一个固态硬盘的设备,一个 41 厘米长床头柜那么大的箱子,号称比机械硬盘快 1 万倍,由 8 个 256KB 的单元组成 2MB 的容量,最重要的是这些单元使用了半导体来制作内存模块。

年代太久远,资料和图片都没几张,图片来源:dataram.com

其实在它出现之前也有电可变储存器和其他几种半导体储存技术出现,基本都是各家自己研制然后用到自己的超级计算机上。但这些都不属于可以量产的级别,而且价格贵到离谱。

即使放到 76 年后固态硬盘的价格也不是一般公司能够承受得起的,Bulk Core 价格查不到,但是同时期推出的给 IBM 大型机使用的 STC4305(它用来储存的技术和我们现在相机的成像原理很像),45MB 售价 40 万美元,相当于现在的 167 万美元(dollar times,2021),在那个年代买家公司给自己打工几十年都够了,大家自己仔细品品。

STC4305 外观,买固态送柜子

在 ROM 出来之前大部分固态都是使用 RAM(也就是我们今天运行内存那种)保存数据的,需要电池来维持数据,断电之后数据便会丢失

固态储存设备的基石:浮栅晶体管/(只读)储存器 ROM

半导体和晶体管可以说是现在整个电子世界的基石,而浮栅晶体管其实是 1967 年由亚洲人发明的,分别是韩裔美国工程师 Dawon Kahng(姜大元)与华裔美国工程师 Simon Min Sze(施敏)。

两位工程师的照片,左一为 Dawon Kahng,右一为 Simon Min Sze

关于浮栅晶体管的原理和结构我们会在下面介绍,浮栅晶体管也是半导体晶体管的一种,它之所以和现在 CPU 使用的晶体管区别开来,并且适用于储存设备,是因为它被高电阻材料包围的结构特性,可以让其中包含的电荷在很长一段时间内保持不变注意这个很长一段时间指的是以 10 年以上

浮栅晶体管的结构,图片来源:US Patent US7115939B2

姜大元和诗敏不仅发明了浮栅晶体管,而且提出了实际的应用场景 —— 利用浮栅组成的储存单元制作出只读储存器(EPROM)。

常见的 EPROM 封装形态

我们现在常见的 ROM 其实就是只读储存器(Read-Only-Memory)的缩写,EP 指的是可擦除(Erasable)可编程(Programmable)。也就是说它可以通过高电压的设备把数据放进浮栅晶体管储存单元里,之后就没办法修改了,所以说是只读。而可擦除则是利用强紫外线来直接把浮栅晶体管里面的电荷都放跑,这样就达到了擦除的效果,之所以只能用紫外线,是因为浮栅晶体管本身被高电阻材料包围,很难用电去「吸」出里面的电荷。

后来人们在这个基础上发明了 EEPROM,也就是我们接下来介绍的闪存 Flash 的前身。它多出来的这个代表电(Electric),指的是这个 ROM 可以被高电压擦除(电子隧穿效应,下面会详细介绍),然后重新写入数据,这个基本就是 1980 年代后的事情了。

说个我们小时候,现在年轻人可能碰不到的例子:游戏机的卡带,比如我小时候玩的任天堂 GBA 的卡带,拆开就会发现里面有一块黑黑的一坨东西,或者一大块黑黑的芯片,那个就是装着游戏本体的 EPROM,而另外小的一块用来写入存档的就是 EEPROM(有时候也会合并到那一大坨黑黑东西里面)。

赛尔达的卡带,电路板上其实已经标出了 EEPROM

以前我们老是觉得玩游戏存档速度要存到天荒地老,就是因为 以前 EEPROM 技术限制只能单字节擦除和写入,这个速度写个存档可以想象速度想快也快不起来。

同时因为 EEPROM 和 EPROM 其实都是同一种浮栅晶体管,受到强紫外线照射会把储存器清空,而阳光里面最不缺的就是紫外线,所以以前我们老是发现卡带放久了就会「掉档」(有过掉档重玩的痛苦记忆的同学可以留个评论哈哈),就是因为放存档的 EEPROM 里面电荷都被阳光(通常几个星期)或者室内的荧光灯(可能要几年)晒跑了。

看到空空如也的存档,整个人都哇塞了

这两项储存器先天结构就优于当时的机械硬盘,单从速度方面也比当时的机械硬盘快几十倍,所以当时一些固态储存公司开始发展起来,比如我们现在常见的闪迪就是这个时候进入市场的。英特尔也开始研发闪存,同时用固态给处理器加速(现在傲腾加速条系列也保留着那个时候的基因),很多人还开始给自己的个人电脑配上了固态(不是用来储存,太贵了,只用来加快电脑运行)。

这个时候的固态硬盘其实已经有进入民用的条件,1980 年 256KB 的固态储存才 1000 美元左右(折合现在 3000 美元),按照当时的电脑价格来讲并没有到离谱的程度。

用到现在的成熟技术:闪存 Flash

1980 年,在东芝工作的日本科学家 Fujio Masuoka(舛冈富士雄)在 EEPROM 基础上发明了闪存。这位科学家也是个牛人,EEPROM 的前身 SAMOS 储存器也是他发明的,闪存应用之后,他的团队还发明了第一个 3D 晶体管(GAAFET),优势是可以在 7 纳米以下的尺寸工作,直到现在 3 纳米 GAAFET 还是世界上最小的纳米电子器件,2021 年都还没有实现量产,这位牛人可谓是包圆了固态储存领域。

舛冈富士雄本人

实际上 NOR 和 NAND 闪存都是舛冈富士雄先后(1980,1986)发明出来的,但他的发明在东芝却不被重视,还要自己拿着样品去参加 IEEE 大会,引起了轰动后被英特尔注意到才大力研发,甚至发明 NAND 闪存后只有几百美元奖金和一个闲职,这也导致了后来富士雄 2006 年起诉东芝,获得百万美元赔偿的结果。

作为发明公司,东芝是第一个开始卖闪存固态的,1987 年推出了他们的第一款商用 NAND 闪存,1988 年英特尔推出了第一款商用的 NOR 闪存,但东芝不受重视的态度让它基本没有市场,英特尔则靠着相关技术霸占市场,获得了几十亿美元的利润。

舛冈富士雄起诉东芝的相关新闻

闪存分为两个类型,平时我们或许听过 NAND 和 NOR 闪存就是指这两个类型,从名字就可以看出它们是用原理对应的逻辑门来命名的,具体原理下面会讲。简单来讲就是之前那些 ROM 必须完全擦除才能重写,速度又慢又浪费寿命,而闪存可以做到按块/页进行擦除,写入和读取,而且可以做到很快速的擦除,闪存的名字是按照发明者同事的建议命名的,擦除过程就是像闪光灯一样迅速,所以叫做闪存。闪存就是为了「更快」而诞生的。

从结构上看,这两款闪存的区别是:

NAND 闪存单元体积比较小,所以密度更高,同样成本可以做到更大容量,同时按块方式让擦写读取速度都很快,擦写寿命也比较长;缺点是必须按照块来擦写,也没有真正的随机访问能力,也可靠性相对较低。

NAND 闪存颗粒,图片来源:三星 Samsung

NOR 闪存单元体积比较大,容量就很小,擦写速度非常慢,但读取速度很快。可以按字节为单位提供真正的随机访问能力,这意味着它可以就地执行代码(不用把代码搬到运行内存),可靠性也比较高,也因为如此擦写寿命比较短。

NOR 闪存颗粒,图片来源:镁光 Micron

从这两个闪存类型可以看出,NAND 容量大读写都快的特点适合做大容量储存,事实上我们现在的固态硬盘基本都是 3D NAND 闪存;而 NOR 可以就地执行代码和真正随机访问的能力,加上很快的读取速度就非常适合用来装程序文件,比如主板上的 BIOS 通常就是 NOR 闪存。这两个类型和它们的详细区别在下面都会详细介绍。

从这里开始就是我们熟悉的固态储存世界了,闪存单元能做到在微观尺寸正常工作,意味着只要工艺一直提升,(物理极限下)同体积容量就能够做到越来越大。1991 年闪迪为 IBM 研发了世界上第一个 2.5 寸闪存固态硬盘,20MB 容量只要 1000 美元;之后 10 年固态硬盘容量迅速突破 GB 级,1996 年 ATTO SiliconDisk II 就达到了 1.6GB,2000 年 E-Disk ATE35 3.5 寸固态硬盘就有 19GB 可选,2003 年就有 TB 级别的系统,接下来就是我们熟知的大公司入场,各种合并收购,形成现在的局面了。

虽然价格是一大阻碍,但相比脆弱的机械硬盘,可靠的固态硬盘在军用,商用和民用领域都发展非常迅速,价格也从之前的天价迅速降到现在 1G 不足 1 块钱。

写入 3GB/s 的爱国者 1TB 固态才约 0.7 元/GB

在 2009 年后固态硬盘甚至达到了当时 SATA 接口的极限,从而出现现在的 PCIE 和 NVMe 固态,容量方面也开始出现 SLC/MLC/TLC/QLC 等堆叠技术让容量不断提升(先不说缺点,至少容量上去了),现在的固态硬盘已经往 100TB 上面走,相信很快我们就能用得起,到时候机械硬盘的用处就更少了。

爱国者的 AIC 企业级 NVMe 固态,为了拍照移动了贴纸位置

 

**相关文献**

[1]. Dataram 官方对 Bulk Core 的[介绍](http://www.dataram.com/blog/)。

[2]. 想知道 NASA 在卫星的磁芯储存器上装了什么,可以看看开源的阿波罗 11 号制导计算机[指令模块,登月模块的源代码](https://github.com/chrislgarry/Apollo-11/blob/master/README.zh_cn.md)和完整的[制导计算机源码](https://github.com/virtualagc/virtualagc)(可以用来弄个模拟器什么的)。

[3]. 浮栅晶体管与浮栅储存单元详情可以查看姜大元和施敏发表的[原论文](https://onlinelibrary.wiley.com/doi/epdf/10.1002/j.1538-7305.1967.tb01738.x)。

[4]. 想要详细了解 NOR 闪存的结构可以查看对应的[专利](https://patents.google.com/patent/US9646991)。

[5]. 想要详细了解 NAND 闪存的结构可以查看对应的[专利](https://patents.google.com/patent/US9716092)。

[6]. 关于舛冈富士雄个人和东芝的故事可以看日本商业期刊的文章[「なぜ東芝は、利益の9割を稼ぐNANDメモリ開発者を辱めて追放したのか?」](https://biz-journal.jp/2017/12/post_21816.html),不懂日文或者想看故事的同学可以看看虎嗅的另一篇转载[「东芝沉浮启示录」](https://www.huxiu.com/article/247658.html)。

固态硬盘 SSD 的结构和原理

我在前面就给大家谈到,现在固态硬盘大部分都是用 3D NAND 闪存颗粒(我们常常听说的 SLC/MLC/TLC/QLC 什么的就是不同工作模式下的闪存颗粒),闪存颗粒其实就是很多很多浮栅晶体管制成的储存单元,所以在这个小节我们会从浮栅晶体管的原理讲起,带你从头到尾了解固态硬盘的工作原理,不过不同于机械硬盘拥有直观的机械结构,固态硬盘的工作基本上都发生于纳米级别的微观世界,甚至是基于量子力学的工作原理,会比机械硬盘难理解一点,想要了解的同学们一定要有耐心一点。

在进一步介绍固态硬盘的结构和原理之前,我们先来了解一下固态储存器的几个分类。

易失性和非易失性储存器

从名字应该就可以看到它俩的区别,虽然都是把比特信息储存在电容器和晶体管组成的储存单元里,都是用晶体管里面的电荷多少来代表 1 和 0,但是易失性储存器一旦断电储存单元上面的信息就会很快丢失,而非易失性储存器即使断电也能保存授权单元上面的数据,简单来讲就是断电丢不丢数据的区别。

因为易失性储存器的晶体管不像非易失性储存器那样,有高电阻材料去留住电荷,需要高电压还有量子隧穿效应来读写数据,所以它工作需要的电压更低(通常在 1-2V 左右)并且读写速度更高。我们常见的内存条 RAM 就是一种易失性储存器,如果我们对好的内存条跑分,就会发现它的读写时间是在纳秒级别,而且读写速度几十 GB/S 以上,比固态硬盘之类非易失性储存器的性能好上一个量级

运行内存和 CPU 缓存的跑分

这也解答了很多人为什么不用内存来做固态硬盘的疑问,因为不严格来讲正是因为「易失」所以才「快」。非易失性储存器我们上面也讲到了,浮栅晶体管的特性让它即使断电也能将数据保存 10 年以上,但多出来的一层高电阻材料让非易失性储存器读写速度和随机读写能力比起易失性储存器就要差上不少,这也是为啥现代计算机需要用运行内存作为储存器和 CPU 之间的「桥梁」,因为易失性储存器拥有纳秒级别的随机读写能力,让它更能跟上 CPU 思考的速度提供数据,免得 CPU 没有数据进行计算,只能干等。

有关于随机读写能力的重要性,还有内存条等易失性储存器等详细的结构工作原理,会在接下来其它储存设备的部分讲解。

固态硬盘的基础:NAND/NOR Flash 闪存

在机械硬盘部分,我们报废了一个机械硬盘才能看到它里面的结构,而固态硬盘就简单多了,特别是现在的 NVMe 固态硬盘,直接就能看到所有的硬件结构。

别看电路板什么的,看起来很复杂,但其实主要部件就两个 —— 用来放数据的储存颗粒和用来控制数据的主控芯片,有些固态可能还会有一个缓存 DRAM 颗粒。

固态硬盘储存颗粒和主控特写

先来说说放数据的储存颗粒,现在固态硬盘绝大部分都是 NAND 闪存,可以说现代设备能存点什么数据,那基本上离不开它。而 NAND 闪存的基本存储单元就是浮栅晶体管,我们常见的颗粒就是大量的它叠起来的。

闪存最基础的结构:浮栅晶体管

我们先来看一个最简单的平面浮栅晶体管截面结构图,浮栅晶体管还有其它几种类型,我会放在后面文章简单提及一下:

浮栅晶体管 FGMOS 的基本结构

为了方便大家理解,这里同时放上每个组成部分使用的材料,可以看到浮栅晶体管有一个硅底座(我们叫它 P- ),左右分别用铜制作的端点来向另一种硅材料制成的 N 级施加电压和检测电压,以读取中间储存结构的电荷量,所以我们叫它们 N+ 源(左边,加检测电压时电子从这边流入)和 N+ 漏(右边如果导通,电子从这边漏走到检测电路),由于它俩是对称的,所以源和漏极可以互换。

中间则是利用特殊工艺制作的储存结构,在硅底座上面「生长」出一块完全绝缘的二氧化硅,然后通过另一种特殊工艺在中间生成可以储存电荷的材料,比如多晶硅或者其它金属。然后在整个结构的顶上再加一层铜做的控制级(用来加写入电压)。

顶上这层就叫做控制栅,而储存电荷的材料就叫做浮栅。之所以叫浮栅,因为它是整个被二氧化硅包裹的,像是浮在水里面一样,如果有电子跑进了浮栅,在不施加高电压的情况下,由于周围都是绝缘材料,它是跑不了的,所以电子在里面能够保存数十年。顺便一讲运行内存 RAM 这些断电就没数据的颗粒,结构也和这个类似,就是少了中间的浮栅而已,至于为什么不弄我们放到其它储存设备那部分讲。

有了稳定持续的电子储存方法,我们就可以通过往某个浮栅里面写入一定量的电子来储存 0 和 1,通过检测浮栅里面的电子数量来读取 0 或 1通常我们设定浮栅里面电子少于一定数量或者没有电子就代表 1,浮栅里面电子多于一定数量就代表 0。

电子量和 bit 的关系

读取浮栅晶体管的数据:浮栅中的电子量非常难以直接测量,但我们不需要测量精确的电子数量,只需要知道它有没有达到我们规定的数量就可以

我们先假装没有浮栅这个结构,然后在最顶上那层控制栅和漏级都加上一个电压,这个时候底座里面的自由电子会被往控制栅方向吸引,但底座和控制栅之间有一层绝缘的二氧化硅,所以自由电子会累积在底座的顶部,也就是两个 N+ 中间,当电压达到一定程度,中间的自由电子累积到足够的数量,刚好会把两个 N+ 打通形成一条无形的通路,电流就能从漏极流向原极,这个打通的电压我们就叫它阈值电压

读取数据时施加的电压

这里有个需要说明的地方,我们从漏级加的电压,当两个 N+ 打通的时候电流是从漏级流向原级,但里面的电子是从源极流向漏极(至于为什么是相反的,就要回忆一下你学过的高中物理了,简单来讲就是电流和电子移动方向是相反的),所以我们的源和漏是以电子的流向来划分的

这里我们再把浮栅加进去,再施加同样的阈值电压,如果浮栅里面带大量的电子(也就是表示 0 的时候),浮栅里面的电子会抵消一部分控制栅对底座上自由电子的吸引力,这样两个 N+ 就没办法打通。

阈值电压就是固态出厂前在工厂里面测出来写到主控里面,想要读取某个晶体管数据的时候就往最顶上那层控制栅和漏级都加上阈值电压,如果漏极端检测电路能够检测到电子的流动,证明浮栅上面电子数量在规定值以下的,也就是 1;反之如果检测不到电子的流动,证明浮栅上面电子数量在规定值以上,那就是 0,整一个过程就是浮栅晶体管的读操作

往浮栅晶体管写入数据:但我们想要给浮栅晶体管写入 0 的时候,也就是往浮栅里面存入电子。我们可以通过给顶上的控制栅和漏极加一个比阈值电压高很多的电压,然后让控制栅的电压大于漏极电压

写入 0 时需要的电压

这个时候由于大电压两个 N+ 之间的电子流动会加快,同时控制栅有更大的电压,吸引力会大到让部分电子因为量子隧穿效应穿过绝缘的二氧化硅进入浮栅。从而完成充入电荷的操作,这部分电子相当于被二氧化硅组成的「陷阱」陷住了,过几十年都跑不掉,所以人们也把它叫做*电荷陷阱

而当我们想要给浮栅晶体管写入 1,也就是要放掉浮栅里面存的电子,我们就反过来给两个 N+ 加一个大电压。

写入 1 时需要的电压

这样子电子会因为量子隧穿效应被大电压从浮栅里面「吸」出来跑到 P- 底座里面。写 0 写 1 两个操作分别就是浮栅晶体管的编程/擦除操作。这两个操作会对隔离底座和浮栅的二氧化硅层产生破坏性的影响,写入多次后晶体管就会与底座接触,没办法储存电子,也就是坏掉了,所以固态会有擦写寿命这样一个参数,具体的我们在下面参数部分会讲到。

我们平时格式化固态硬盘,就是把 NAND 闪存所有浮栅晶体管都写成 1,也就是放掉了所有电子。要写入数据的时候只要把对应的 1 写成 0。

那一张照片需要多少个浮栅晶体管来储存?

通过前面的内容很容易可以看出来,一个平面浮栅晶体管可以储存一个 bit 的数据,那么要多少个它们才能放下一张我们平时拍的照片呢?

以 4K(3840*2160)照片为例,我们按下快门之后,总共有 3840*2460=829,4400 个像素,每个像素需要分别用红绿蓝三个子像素的数字表示,每个子像素(0-255)需要 8bit 数据,这样算下来我们的照片总共就有 1,9906,5600bit。

一张普通的照片和放大之后的像素

也就是说我们按下快门之后,1,9906,5600 个,也就是大约 2 亿个像上面那么复杂的浮栅晶体管就会勤勤恳恳地用电子把我们的照片数据存下来。而一张不压缩的 4K 照片 1,9906,5600bit 也不过 23.73MB,现代固态硬盘里面的固态颗粒一般都是 256G,可以装 11000+ 张 4K 照片,却只有那么小一颗,你可以想象里面有多少个晶体管。希望这个例子能让你直观地认识到,我们习以为常的科技产品背后到底蕴含着多么惊人的科学技术。

512G 的西数 SN550 固态颗粒与硬币的对比

我们现在的固态容量越来越大,就是因为我们可以把浮栅晶体管做得越来越小,但是这个小也有一定的限度,参考之前我们学到的结构就可以知道,如果两个 N+ 之间的距离小到一定程度也会发生量子隧穿效应,不需要添加电压电子就可以直接从源极跑到漏极,那么就没办法测量中间的电荷了,等到那个时候估计我们也会用上新原理的储存设备(又可以写一篇科普了,哈哈)。

另一种主力储存颗粒:NOR Flash 闪存

上面我们有提到这些闪存的名字,都是按照控制门来命名的,而上面原理部分也没有提到 NAND 闪存为啥叫这个名,这节我就来和 NOR 闪存一起来讲解。

NOR 闪存和 NAND 闪存用的都是同样的浮栅晶体管结构,只不过不同于 NAND 利用量子隧穿效应写入电子,NOR 闪存用的是热电子注入技术。

不过它俩主要的不同,不是在于单个单元上,而是在单元的排列上。

由于人们用 NAND 闪存来做大容量储存器,所以它的数据密度越来越大,浮栅晶体管和对应的电路做得越来越小,NAND 储存单元小到没办法给每个浮栅晶体管都单独接上寻找地址的地址线和传输数据的数据总线,每一纳米面积都要利用到极致,真的是寸土寸金。所以不仅 NAND 里面地址线和数据总线是共用的,而且只能以一页为单位把 10000-30000个浮栅晶体管串联起来,一页只有一条地址线和数据总线,所以 NAND 读写数据只能以页为单位,串联方式也成为它名字的由来

一页 NAND 闪存的排列方式

而 NOR 闪存每个浮栅晶体管都是有单独的地址线和数据总线,它们之间互相并联。这样子做极大增加了每个储存单元的面积和复杂程度,所以同样面积的 NOR 闪存比起 NAND 闪存容量少很多,同时造价非常昂贵。不过这样子的好处也很明显,每一个浮栅晶体管的数据都可以以 bit 为单位单独读写,读取速度非常非常快,这意味着它有真正的随机访问能力,快到像是我们上面提到的可以就地执行代码,CPU 可以直接从储存设备取指令不用把数据放到运行内存,特别适合做主板 BIOS 或者单片机里面的 ROM,并联方式也成为它名字的由来。

一页 NOR 闪存的排列方式

它俩的特性造成 NAND 闪存擦写起来很快(串联只需要发送一个电压就可以擦一整页),读起来很慢(因为一次要读一页);而 NOR 读很快,擦写起来很慢(要一个个浮栅晶体管擦除)。

现代固态的改良:3D(V-)NAND

上面我们了解的只是一个很简单的平面浮栅晶体管原理,而事实上现在厂家为了固态大容量已经开始让浮栅储存单元竖着叠起来,也就是现代固态基本都在用的 3D NAND(也叫 V-NAND,V 就是垂直 vertical 的意思)。

3D NAND 的结构,图片来源:Youtube@Branch Education
3D NAND 和白纸厚度的对比,图片来源:Youtube@Branch Education

原理和我们上面学到的平面浮栅晶体管差不多,看结构也能理解大半。由于这部分实在太复杂,接下来我会尽量简单讲解一下,大家如果对这个比较感兴趣,同时英文比较好的话,我全力推荐 YouTube 上凯侠(Kioxia,也就是之前的东芝储存,被东芝卖掉后改名)赞助 Branch Education 制作的一系列 SSD 原理科普视频,有 3D 动画比较直观,系列视频我会放到相关文献里面,这个系列也是本节主要图片和动图的来源,仅作教学用途之用,请勿随意保存转载。

总体而言 3D NAND 的目标是把每一个浮栅晶体管做得尽量小同时每一个浮栅晶体管能储存更多的数据。现在的 QLC 已经能够做到每个存储单元放 4bit 的数据(实际上 QLC = Quad Level Cells,就是 4 层储存单元的意思),以后会越来越多,这样子做的弊端我们放到以后再谈,先来说说现代闪存颗粒的结构和原理。

现代闪存颗粒的立体储存单元

我们先来看一下每个储存单元的结构:

排列图和单个储存单元,图片来源:Youtube@Branch Education

基本上就是我们前面学到的浮栅晶体管的原理,只不过把它竖起来并且串联起来,这也是为啥它也叫垂直 V-NAND。

只不过 3D NAND 工作流程稍不相同,左边的通道就相当于上面说的 P 和 N,当给控制栅打阈值电压时,如果中间的浮栅没有电子,产生的电场强度足以让左边通道的电子流动,这样在数据总线上就能检测出来,如果中间的浮栅有大量电子,那么产生的电场强度不足以让通道里的电子流动。

读取 0 和 1,图片来源:Youtube@Branch Education

单个单元存储多 bit 的数据

我们现在了解了单个储存单元的结构,那么像是 TLC 这类的技术是如何让单个存储单元储存多个 bit 的数据呢?

以 TLC 为例,一个储存单元可以装 3bit 的数据,也就是 000、001、010、011、100、101、110、111 七种状态。

我们先来说一说比较简单的读取过程

由于储存单元没有电子代表 1,我们把它倒回来,然后从低到高设置 7 个阈值电压。

TLC 颗粒读取存 3bit 的七个电压,图片来源:Youtube@Branch Education

由于 NAND 同一页的储存单元都是串联的,接下来我们:

  • 给同一页的所有储存单元给最低的阈值电压,然后从左到右一个个储存单元检测通道是否有流动。
  • 如果某个储存单元检测到通道接通,那么这个储存单元就只有最低的电荷,也就是 111。
  • 检查完所有储存单元状态后再给它们第 2 个高点的阈值电压,然后再从左到右一个个检测。
  • 如果某个组成单元检测到通道接通,那么这个单元储存的电荷量就在第二个区间,也就是 110。

......

TLC 读取过程,图片来源:Youtube@Branch Education

接下来重复这个步骤 7 次,就可以把每个单元的值都读出来了,虽然闪存颗粒里面的所有页都是可以同时读取的,但仍然比只需要检测一次 0 和 1 的 SLC 储存单元慢了不少。

接下来是比较保密的写入过程

现代固态颗粒的浮栅晶体管做的实在太小,要保证数据能够很好的保存数 10 年,我们需要保证包围着浮栅的绝缘层不能太薄,电子能够很好的隔离在浮栅里不会跑掉;也不能太厚,导致很难控制写入的电子数量。通过实验最终绝缘层保持在 75-100 个原子宽的最佳厚度。

实际的写入过程其实和我们上面学到的差不多,就是通过给控制栅电压,把左侧通道里面的特定数量电子通过量子遂穿效应「吸」到浮栅里面。

TLC 写入过程,图片来源:Youtube@Branch Education

不过以 TLC 为例,由于需要写入 7 种状态的电子量,需要精确调整控制栅的的电压和其他一些参数,这些电压和参数所有厂商都处于高级保密的状态,属于顶级的商业机密,基本上算是制作固态颗粒的看家本领了,如果有哪位同学知道的话可以任何联系方式私信我**

观察单个储存单元,我们会发现整个组成单元被厂商们做成圆柱形,里面的结构从中间的通道到外边的绝缘层像是树干一样一层包一层。这是因为圆柱形可以让浮栅有整整一圈的面积,就能放下更多的电子数量,从而能够把多个 bit 状态对应的电子数量区间弄大,让检测更不容易出错。

现在 PLC 都已经出来了,大小不变的每一个储存单元能放下足足 5bit 的数据。那么大家是不是可以无限细分储存状态呢?也不是的,举个例子,假设每个储存单元最多能储存 10000 个电子,那么 TLC 7 种状态,每个状态电子数量差能有 1000 多个,没有那么容易弄混;到了 PLC 32 种状态,每个状态电子数量差就只有 300 个了,写入的时候电子一不小心多了或少了就会变成另一种状态,读取的时候也容易读成另一种状态,这对制作工艺读写算法的要求越来越严苛,所以理论上除非我们能够精确控制每一个电子的流动,不然现在的工艺很快就会走到尽头。

至于细分下去会有什么坏处,为什么大家都在喷厂家 TLC,QLC 是偷工减料,这些我们放到下一章再仔细讲。

从微观到宏观:储存单元最后如何组成闪存颗粒

基本单位储存单元,我们已经了解得非常透彻了,这小节我们就来把它们组装起来。

  • 首先 NAND 里面几万个储存单元(Cell)会组成一页(Page)(通常有 4/8/16/32KB),这一页共享地址线和数据总线,所有的读写都必须按页为单位:
闪存颗粒的一页,图片来源:Youtube@Branch Education

另外我们看相关新闻的时候,常常会看见某某厂商又研发出了多少多少层的 3D NAND,这个层数指的就是储存单元,在垂直方向上叠了多少层,叠加层数越多容量自然越大,比如现在三星 NAND 颗粒就有 176 层,可以做到单个颗粒 1TB。

  • 然后 500~1200 页组成一个闪存颗粒的块(Block),每次擦除都必须以块为单位:
闪存颗粒的一块,图片来源:Youtube@Branch Education
  • 接着几千个块组成一个面(Plane),面上会有一个寄存器,存储这个面所有储存单元的地址、临时存放数据指令等:
闪存颗粒的一面,图片来源:Youtube@Branch Education

最后两个面组成一个片(Die),Die 就是直接从晶圆上取下来的裸片:

闪存颗粒的一片,图片来源:Youtube@Branch Education

几个 Die 最后就压成我们能够摸到看到的黑黑的闪存颗粒了:

爱国者固态上的闪存颗粒

一个固态上往往有很多个闪存颗粒,比如爱国者 NVMe 1TB 单面固态上就有 4 个 256G 的闪存颗粒,也就是有 1,0995,1162,7776 差不多 1 万亿个储存单元,这是何等的复杂和精妙啊,现代储存设备真的是人类顶尖智慧的结晶。

电子显微镜下的块,图片来源:TechInsights
英特尔的 3D XPoint 技术,图片来源:英特尔 Intel

虽然比较抽象复杂,但晶体管原理结构部分我还是建议大家弄懂,方便我们理解后面固态硬盘的一些特性。

固态硬盘的大脑:主控芯片

在上面我们了解到了闪存颗粒的基本结构,知道它有多么复杂,这么复杂的一个东西我们要给它快速存取数据,同时有数据平衡延长寿命,纠错和优化性能等功能,自然就需要一个控制器,在固态硬盘上面这个控制器就叫做主控,相当于一个小的处理器

固态硬盘上的主控

固态上的主控其实蛮好辨认的,储存颗粒都是统一的颜色大小,一般来讲画风不一样的就是主控(缓存通常和储存颗粒一样颜色,但是小一点)。

主控通过传输数据的通道直接连接着所有的储存颗粒,如果有 DRAM 缓存的话还直接连接着缓存,并维护一份所有储存单元的物理地址表。如果说储存颗粒是一个车站,里面停着很多等待装载乘客的客车,那么主控就是一个调度员,根据所有进入车站旅客的目的地来分配不同的客车,同时记录下每个乘客的出入记录和进去了哪个客车,为了保证一辆车不被挤爆,有时候还需要通过均衡调度来平衡每辆客车的乘客数量等等,总之主控就是个「全局指挥者」,哪里需要哪里搬。

主控连接和维护的地址表,图片来源:Youtube@Branch Education

地址表(FTL 映射表,将逻辑地址映射到物理地址)就是每个页的物理地址和对应的逻辑地址,像是 09:4:1:0351:045 就表示这个页位于第 9 个固态颗粒 -> 第 4 个片 -> 第 1 个面 -> 第 351 块 -> 第 45 页的物理地址,主控会给每个地址分配一个像是 105485652284 这样的区号作为逻辑地址,计算机文件系统给主控发送读取写入命令,主控返回数据的地址,主控给颗粒上的寄存器发命令的时候都是用逻辑地址表示的。

当电脑向固态硬盘发出读取某个数据的指令时,主控就会把目标页地址(上面说过 NAND 最小只能按页读取)通过储存通道发送到对应的固态颗粒上,然后页通过地址线和数据总线把储存单元的值都读出来,读一个就把结果暂存在面上的寄存器中,等读完这个页所有的储存单元,页面寄存器就会把数据通过储存通道返回到主控。

写入擦除数据也是一样,记住 NAND 写入之前必须先擦除对应的块(NAND 擦除最小单位是块),主控会根据地址表找出现在空闲的块,然后发送擦除指令到面,面会把块上所有储存单元的电子全部清空,也就是变成 1,111 等等最低状态。

接着主控会将要写入的页上每个储存单元地址和要写入的数据代表的阈值电压发送到面,面上的寄存器再一个个写入储存单元,如果是 1,111…… 这样就不用写,如果是 0,001…… 就根据不同的电压来写。
 

主控通过储存通道发送的不同类型数据

写入过程如果固态硬盘有 DRAM 缓存或者模拟 SLC 缓存的话,这个过程会先发生于缓存上(原理也差不多),然后在固态空闲时再写入到真正的储存颗粒里,提高实际的写入速度。

主控还负责另外一个很重要的功能,那就是均衡负载,延长 NAND 固态颗粒的寿命。在上面我们学到每次擦除时电子都会对储存单元的氧化层造成物理损伤,如果每次写入数据都逮着一个固态颗粒上的同一个块薅羊毛,那么很快这个块就死翘翘了。

所以主控通常还会记录每个块的擦除次数,把数据平均分配到不同的块中,让每个块儿的擦写次数都比较均匀,最大限度延长颗粒的寿命。当某个块的确挂掉的时候,主控还负责在地址表上把这个块屏蔽掉,不然再往这个块写入的数据就保存不了了。

通常主控还有很多额外的功能,比如预读取算法将高频率读取的文件放到缓存,以增加实际的读取速度;把某些空间模拟成 SLC 来当作缓存用;TRIM 算法减少实际擦除次数等等,这个我们后面几章会详细说。

部分固态硬盘会有的:DRAM 缓存

有些固态硬盘上还有一个和储存颗粒一样颜色,但是小一点的颗粒,这个一般就是固态硬盘的 DRAM 缓存。

西数 SN550 固态的 DRAM 缓存颗粒

DRAM 缓存原理和结构决定它比储存颗粒要快很多很多,所以写入数据时先将数据写入缓存,然后空闲时再写入储存颗粒,这样就让用户实际感受到的写入速度快很多。通常厂商都是按照 1GB:1MB 以上的比例来配置 DRAM 缓存,用户写大文件的时候缓存不够用就会暴露颗粒真实速度了。

现在的 NVMe 固态一般都没有 DRAM 缓存,转而用部分储存单元模拟 SLC 来做缓存,因为上面我们学到 SLC 储存单元无论是读取还是写入,只需要检测或者给一个阈值电压,比起 QLC 这种要检测几十次的简直不知道快到哪里去了。还有更快更贵的 SRAM 技术,虽然比起 DRAM 可能有其他好处 ,但是 DRAM 便宜啊,现在模拟 SLC 做缓存和 HMB 使用计算机运行内存做缓存等技术甚至连 DRAM 都不用了,厂商可以节省成本,消费者也能买得便宜一点(也许)。

所以普通的固态硬盘测试跑的一般就是缓存的速度,对于一般用户来讲的确日常也够用了,通常也不会有很多写入超过缓存大小文件的场景。不过如果是电影文件或者安装系统游戏的时候,还是有可能跑出真实速度,所以我们平时也是要测试固态的真实速度的,至于如何测试缓存外的速度,我们后面会讲。

看到这里你已经把机械硬盘,结构原理相关的内容都学得差不多了,实际上固态硬盘的结构原理部分涉及到的知识,甚至比我介绍要复杂得多,我这里已经努力筛选出普通人需要了解到的相关知识,并且尽量用通俗的方法来表示,希望大家都能看明白。
 

**相关文献**

[1]. 浮栅晶体管的结构可以参考[这份专利](https://patents.google.com/patent/US7115939B2/)。

[2]. 3D NAND 的结构可以参考闪迪 SanDisk 的[相关专利](https://patents.google.com/patent/US9443865B2/)。

[3]. 现代 SSD 读取数据的原理可以看下 Youtube@Branch Education 的 [「How does NAND Flash Work? Reading from TLC : Triple Level Cells || Exploring Solid State Drives」](https://www.youtube.com/watch?v=YtBysgPOKx4)。

[4]. 现代 SSD 写入数据的原理可以看下 Youtube@Branch Education 的 [「The Engineering Puzzle of Storing Trillions of Bits in your Smartphone / SSD using Quantum Mechanics」](https://www.youtube.com/watch?v=5f2xOxRGKqk)。

[5]. 现代 SSD 数据储存的结构可以看下 Youtube@Branch Education 的 [「How do SSDs Work? | How does your Smartphone store data? | Insanely Complex Nanoscopic Structures!」](https://www.youtube.com/watch?v=5Mh3o886qpg)。

[6]. 现代 SSD 主控如何管理数据可以看下 Youtube@Branch Education 的 [「How does this SSD store 8TB of Data? || Inside the Engineering of Solid-State Drive Architecture」](https://www.youtube.com/watch?v=r-SivgEpA1Q)。

[7]. 推荐一个正规的教程吧,[《清华大学 存储技术基础 2020》](https://www.bilibili.com/video/BV1xE411T7Dy),机电的同学应该很熟悉,非公开课程请大家低调观看。

总结

在本章中,我给大家详细介绍了固态硬盘的历史,同时了解固态硬盘的结构和原理,还给大家科普了两种常见的闪存颗粒。文章的内容真的是比较抽象又比较复杂,真心觉得能够看到这里的朋友学习能力和毅力都是一流的,有这么好的特质做什么都能成功,我自己都佩服你们,不得不给你们点个赞。

原本我是打算用一章讲完固态硬盘相关的知识,没想到固态硬盘要说的东西实在太多了,不得已拆成了上下两章。本章介绍完固态硬盘基本的结构原理之后,下一章就要介绍固态硬盘的各种参数以及它们对性能的影响,还有我们如何去测试查看硬盘的性能数据。


关联阅读