Nand flash的基础知识
Nand flash的基础知识
什么是Nand Flash?
Nand Flash是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,电荷被存储在浮栅中,他们在无电源供应的情况下仍然可以保持。数据在Flash内存单元中是以电荷的形式存储的,存储电荷的多少取决于浮栅的外部门所被施加的电压,其控制了是向存储单元中充入电荷还是释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。
对于NAND Flash的写入,就是控制Control Gate去充电(对CG加压),使得悬浮门存储的电荷够多,超过阈值Vth,就表示0。
对于NAND Flash的擦除,就是对悬浮门放电,低于阈值Vth,就表示1。
l Device就是指单片NAND Flash,对外提供Package封装的芯片,通常包含1个或多个Target。
l Target拥有独立片选的单元,可以单独寻址,通常包含1或多个LUN;LUN也就是Die,能够独立封装的最新物理单元,通常包含多个plane。
l Plane拥有独立的Page寄存器,通常LUN包含1K或2K个奇数或偶数Block。
l Block是能够执行擦出操作的最小单元,通常由多个Page组成;Page是能够执行编程和读操作的最小单元,通常是4KB/8KB/16KB/32KB等。
l Cell是Page中的最小操作擦写读单元,对应一个浮栅晶体管,可以存储1bit或多bit数据,主要为颗粒类型。
由图可以看出一片Nand Flash为一个设备(device),其数据存储分层为:
1、1个设备(device) = 1024个块(blocks),块是nand flash擦除操作的最小单位。
3、一个页(Page) = 数据块大小(2K) + OOB块大小(64Bytes)
以此可以计算出如何访问一个物理地址:块大小x块号 + 页大小x页号 + 页内地址
通过时序图看出,上面有很多时间参数,在设置Nand flash控制器的时候,需要确认这些时间参数是否在合适的范围内,对于控制命令都是通过上面的几个基础命令组合而来。
UBER(Uncorrectable Bit Error Rate)指发生不可纠正ECC错误的几率,即一个纠错单元Codeword内发生bit位翻转的位数超出ECC算法可纠能力范围的几率。
DWPD(Diskful Write Per Day)指每日写入量。SSD的成本随着DWPD增加而变高,未来SSD的趋势预测密集型当前已占50%,未来的占比会逐渐变大。
Nand Flash的寿命不等于SSD的寿命;SSD盘可以通过多种技术手段从整体上提升SSD的寿命,通过不同的技术手段,SSD盘的寿命可以比NAND Flash宣城寿命提高20%~2000%不等。
Nand Flash的寿命主要通过P/E cycle来表征。SSD由多个Flash颗粒组成,通过盘片算法,可以发挥有效颗粒寿命。影响SSD盘使用寿命关键因素主要包括下面因素:
Over Provisioning占比,随着OP(预留空间)的增加SSD磁盘的寿命会得到提高。
对于常见的Nand Flash所拥有的的引脚(Pin)对应的功能如下:
CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能。
CE#:Chip Enanle,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作。
RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。
WE#:Write Enable,写使能,在写取数据之前,要先使WE#有效。
R/B#:Ready/Busy/Output,就绪/忙,主要用于在发送编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成。
【小常识】在数据手册中,对于一些引脚的定义,有些字母上面带一横杠,那是说明此引脚/信号是低电平有效。
5、擦写次数限制。造成nand flash有擦写次数限制的主要有2个因素,电荷被困在氧化层,不能进入悬浮门;或是氧化层结构被破坏。
影响Nand Flash稳定性和耐久度的一个主要因素就是ECC能力,目前最常用的三种算法是:
BCH(Bose,Ray-Chauduri,Hocquenhem)
1、每当一个Page写入Nand Flash,数据会通过ECC引擎,创造独特的ECC签名。
2、数据和对应的ECC签名都存放在Nand Flash里,数据存放在数据区,ECC签名存放在SA区。
3、当需要读取数据时,数据和ECC签名一起被送往主控制器,此时新的ECC签名被生成。
4、此时主控把2个签名对照,如果签名相同,说明数据没有错误,数据就会被送往主机。如果签名不同,数据就会先放在主控里,而不是直接送往主机。
对闪存单元的编程:控制栅极去充电,对栅极加压,使得浮置栅极存储的电荷越多,超过阈值,就表示0;对闪存单元的擦除,即对浮置栅极进行放电,低于阈值,就表示1。

















