作者:admin 日期:2023-08-25 浏览: 次
手机闪存和固态硬盘为什么擦除多了会损坏?
点击上方“公众号” 可以订阅哦!
在我们闪存系列文章中多次提到,构成手机存储和固态硬盘SSD的基本存储单元的NAND闪存,它的寿命是由擦除次数来决定的。准确的来说,是由Program/Erase(P/E)次数来决定的。有很多朋友留言问其中的具体原因,今天我就专门撰文来详细讨论一下其中的原理。本文专注于NAND Flash,有些原理有可能同样适用于NOR Flash,但本文并不关心。如果不做特殊说明,下文闪存(Flash)指代NAND Flash。如果有朋友对NOR Flash感兴趣,见此专门文章:杂谈闪存二:NOR和NAND
闪存的工作原理
闪存价格节节攀升,让三星大赚特赚。其实它的基本原理在1980年代之后基本就没有变化过。它的构成和场效应管(MOSFET)十分类似:
它由:源极(Source)、漏极(Drain)、浮动栅(Float Gate)和控制栅(Control Gate)组成。相对场效应管的单栅极结构,闪存是双栅极结构。浮动栅是由氮化物夹在二氧化硅材料(Insulator)之间构成。
我们的写操作(Program)是这样:
在控制栅加正电压,将电子(带负电)吸入浮动栅。在此后,由于浮动栅上下的二氧化硅材料并不导电,这些电子被囚禁(Trap)在浮动栅之中,出不去了。这样无论今后控制栅电压有否,这个状态都会保持下去,所以闪存可以掉电保存数据。注意写操作完毕后,该闪存单元存储的是0,后面我们将会介绍为什么。
我们的擦除操作(Erase)刚好相反:
在源极加正电压利用浮空栅与漏极之间的隧道效应,将注入到浮空栅的负电荷吸引到源极,排空浮动栅的电子。这时读取的状态是1。
那为什么有电子是0,没电子是1呢?以为读取的时候,需要给控制栅加一个低的读取电压,对于被Program过的闪存单元来说,被囚禁的电子可以抵消该读取电压,造成源极和漏极之间是处于被关闭的状态:
如果是被擦除过的就刚好相反,源极和漏极在控制栅的低电压作用下,处于导通状态:
也就是说通过向控制栅加读取电压,判断漏极-源极之间是否处于导通状态来读取闪存单元的状态,如果被Program过的,就是处于关闭OFF状态,为0;而被Erase过的,就是处于导通状态ON,为1。
理论上来说,闪存可以每个单元来单独擦除和编程。但是为了节省成本,实际上作用在控制栅上的擦除电压是整个块(Block)连接在一起的,这就是为什么擦除要以块为单位了。
为什么闪存会损坏
每次电子在包围浮动栅的二氧化硅上进进出出,都会造成它的老化:
长此以往,浮动栅就不能很好的锁住电子,电子会流失造成漏极-源极之间是否处于导通状态错误,进而数据读取错误。闪存控制器通过校验发现错误后会将其标为不可用,而在OP空间找一块来替代,并在FTL表里改变对应关系。
而 SLC(Single-Level Cell)的省钱版:MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 的引入让这个问题更加严重。原来SLC只有ON/OFF两种状态,现在的TLC要有8种状态:
主要靠精确控制浮动栅里面的电子来实现,老化会让这种控制很容易出错。这样就是为什么MLC和TLC相比SLC,生命周期更短的原因:
注意图中的P/E Cycle。
结论
闪存单元的损坏是个不可逆的过程,坏了就是坏了,人死不能复生,节哀顺变吧。几个坏块不会产生多大问题,OP空间完全可以罩得住,问题是只要产生坏块,慢慢坏块会越来越多,写放大也会越来越严重,慢慢的就会产生读写错误,或者速度严重下降。这时我们一定要考虑换块SSD了。
也许仅仅依靠抽象的判断速度对普通用户并不是很好掌握。就像买西瓜都要拍一下,实际上估计很多人都是做个样子而已。真正科学判断SSD的状态要靠SMART(Self-Monitoring Analysis and Reporting Technology)等工具,我们可以借助SSD厂家提供的工具来查看SSD的健康情况,今后我会专文写写相关内容。