5.1.1 闪存的存储单元
基本存储单元——类NMOS浮栅晶体管,在源级和漏极之间电流单向传导的半导体上形成存储电子的浮栅。
用浮栅里面有无电子,表示0/1。一般,0代表有电子,有数据;1代表无电子,无数据;
写是在控制极施加一个大电压,让电子通过隧道氧化层,进入浮栅极;
擦是在衬底加正电压,把电子从浮栅极吸出来。
为什么闪存可以存储数据?
因为闪存的存储结构决定,因为浮栅极里面的电子被上下两个绝缘层(上面的氧化层和下面的隧道氧化层)所包围,即使掉电,电子也不会跑出来,所以闪存被作为非易失存储器存储数据。
闪存写的时候为什么要擦除?
设存储单元在写之前是0,有电子,想把该位从0变成1,是不能通过往里面注入更多的电子达到这个目的,只能通过擦除动作实现。
5.1.2 闪存类型
是将存储单元中电子数量的状态划分的更细来存储更多的数据的。
- 比如SLC,使用0~10个电子表示1,51~100表示0;
- MLC,就可以用0~5个电子表示11,20~40个电子表示10,50~70个电子01,80~100个电子表示10。MLC存储两位数据,在存储组织上,低位数据和高位数据会存在不同的物理页上,低位数据所在的物理页称LP,高位数据所在的物理页称UP。
随着存储状态的增多,数据对电子流失会越来越敏感:对于SLC即使表示0状态的51~100电子丢到20个电子,那么也不会进入0~51的1状态;但是MLC如果同样流失20个电子,就有可能从00,变成01状态,在读LP的时候就会读错。
5.1.3 闪存的组织结构
组成递进关系:存储单元—>闪存页—>闪存块—>Plane—>DIE/LUN
- 一个闪存块由m条字线和n条位线组成
- 一个字线包含的闪存页取决于每个存储单元存储的数据位数,SLC一个字线包含1一个闪存页,TLC一个字线包含3个闪存页
- 假设SLC闪存块有1024个闪存页,字线m=1024。位线的个数取决于一个闪存页有多少位,对于一个16KB的闪存页面来说,位线n=16*1024*8
一个闪存块的所有存储单元共用一个衬底,所以擦除的基本单位是闪存块。读写的单位是闪存页。
5.1.4 擦除、读、写
怎么擦除?怎么确保擦除干净了?
擦除是在衬底加高电压,控制极加0V电压。闪存内部存在验证过程,读这些存储单元,查看是否在擦除状态,已经在擦除状态的话就结束擦除动作,不是就增加衬底的电压,继续擦除。允许擦除不干净的存储单元的个数取决于厂商的闪存参数。
怎么写入闪存页?
衬底加0V电压,闪存页对应的控制极加高电压VPRPG,在其他不编程的闪存页的控制极施加一个稍微大的电压VPASS,从而保证当前存储单元是什么状态,这些晶体管都是导通的。
什么是抑制编程?怎么实现?
有个事需要注意下,因为我们在闪存页的控制极统一加了一个较高的编程电压VPRPG,但是有一些需要写1的存储单元,因为在写之前的擦除动作后该存储单元已经是1,所以说其实是无需编程的,否则可能会导致额外的电子进入存储单元。
对于这个问题采用抑制编程的手段解决:在不需要编程的存储单元对应的位线上施加一个高电压VINH来削弱控制极和衬底之间的电场。
怎么读取闪存页?
- 在不读取的其他字线的控制极施加一个VPASS电压,确保晶体管无论处于何种状态都是导通的;
- 然后给每个字线充电;
- 接着在字线上根据闪存类型的不同施加不同的读参考电压:如果某个位线放电了,说明该位线所读的存储单元是导通的;如果位线继续保持之前的充电状态,说明该位线上所读的存储单元是截止的。
读操作对闪存的寿命是否影响?
读操作本身不会对闪存的寿命造成影响,只会影响数据的可靠性(VPASS可能会对其他字线上的存储单元造成轻微编程),但为了解决读干扰的问题,闪存固件算法会引入刷新操作会造成额外的写入,带来写放大,这样就会对闪存的寿命造成影响。