问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

NAND Flash技术详解:从基本概念到高级应用

创作时间:
作者:
@小白创作中心

NAND Flash技术详解:从基本概念到高级应用

引用
CSDN
1.
https://blog.csdn.net/sorry1996/article/details/139012126

NAND Flash是一种重要的非易失性存储技术,在各种电子设备中广泛应用。本文将从基本概念、组成单元及读写原理、结构特点、分类等多个维度,深入解析NAND Flash的核心技术原理。

一、NAND Flash综述

1.1 NAND基本概念

NAND Flash是一种非易失性存储介质。非易失性存储技术是一种能够在断电后保持存储数据的存储技术。

  • NAND Flash中的NAND的意思是Not AND(与非门),意思就是该Flash的基础单元就是与非门
  • NOR Flash中的NOR的意思是Not OR(或非门),意思就是该Flash的基础单元就是或非门

1.2 NAND组成单元及读写原理

NAND的基本存储单元(Cell)是一种类NMOS的双层浮栅MOS管

  • 如何写入和读取信息?

在栅极和衬底之间加入一个高电压,P区里面的部分自由电子会被吸引到浮栅层,这样即使断电之后,自由电子也仍会存储在浮栅层,因为浮栅层上下都是二氧化硅绝缘层,自由电子无法逃出去,一位信息就是这样被存储进去,即写0。

将栅极和衬底之间的电压反向,此时禁锢在浮栅层的电子就会被吸引出去,此时数据就会被擦除,即写1。

读0:因为大部分电子已经被吸到浮栅导以,当控制栅加10V电压时,只有部分电子聚集到两个N型半导体之间,这些电子不够形成一个电子通道,导致源极和漏极之间无法导通,此时表示读到0。

读1:擦除之后读,因为浮栅层的电子全部释放回了P型半导体中,这时在控制栅加10V电压,P型半导体中的电子会聚集到N型半导体之间形成电子通道,源极和漏极之间接上电源,会导通,此时表示读到1。

  • 二氧化硅绝缘层也是绝缘的,自由电子如何通过?

隧道效应:给二氧化硅绝缘层加入足够大的电压,电子就会通过该绝缘层。

1.3 NAND结构及特点

  • 闪存快内部结构

Word Line,WL,字线
Bit Line,BL,位线

1个字线包含若干页,对于SLC来说,1个字线包含1个页,对于MLC来说,1个字线包含2个页,
对于TLC,1个字线包含3个页。

假设一个SCL闪存块由1024个页,则m=1024,即有1024条字线。
一个闪存页有多少位,就有多少条位线,比如对16KB的闪存页,n=16x1024x8。
一个闪存块中的所有存储单元都是共用一个衬底,因此擦除操作的基本单元是块

  • 整块NAND内部结构


一个闪存芯片有若干个LUN,每个LUN有若干个Plane,每个Plane有若干个Block,每个Block有若干个Page,每个Page对应着一个Wordline,Wordline由成千上万个存储单元构成。

一个LUN可以分为若干个Plane,每个Plane有独立的Cache Register和DataRegister,写某个Page的时候,先把数据从主控传输到该Page所对应Plane的Cache Register中,再把整个Cache Register中的数据写到闪存阵列;读则相反,即闪存介质–>Cache Register→主控。

Page、Block、Plane、LUN这些大小没有统一的要求,由各个厂商按照相应的工艺和需求决定。

  • 存储单元写入过程

对于单个存储单元,写入就是在控制级加高电压,在衬底加0V电压,建立强电场把电子从衬底注入浮栅极。闪存写入的最小单元是闪存页。

假设要写某个闪存页在字线WL1上,在与要编程的闪存页对应的控制级加上一个高电压Vprog,在其他不编程字线的控制极加个稍微大点的电压Vpass,从而保证不管当前存储单元处于什么状态,这些晶体管都是导通的。

因为在写入之前已经处于擦除状态,即所有存储单元都处于‘1’状态,所以无需注入电子,但是这些存储单元的控制极被统一加了一个高电压Vprog,需要抑制这些存储单元被注入电子,所以需要在对应的位线上加一个高电压Vinh,
这样就可将这些存储单元在控制级和衬底间建立的电场削弱,从而使电子不会进入浮栅极。

在对闪存页写入的时候,存在写干扰和抑制编程干扰问题。

写干扰是对写入所在字线上无需写入的存储单元的干扰。
所谓的干扰,就是不希望注入电子的存储单元被意外注入电子。

写干扰:当对WL1上的Page写入时,在控制极施加一个较大的电压,在其他非写入单元的位线上施加了一个电压,这会导致同一字线上不希望编程的存储单元注入额外的电子。

抑制编程干扰:由于不需要写入的Page控制极页需要加一个电压,这会对对需要编程的存储单元所在位线上的存储单元的干扰。

  • 存储单元读取过程

假设要读的页在WL1上,首先在不读取的其他字线控制极施加Vpass电压,确保这些晶体管是导通的,绕后给每个位线充电,

接着根据所读取闪存页的类型(LP、MP、UP),在WL1上施加不同的读参考电压,如果某个位线放电了,说明该位线所读的那个存储单元是导通的,

如果位线保持之前的充电状态,说明对应的存储单元是截止的,通过一次或者多次施加不同的参考电压,最终能确定所有晶体管所处的状态,从而获取存储在里面的数据。

读干扰:在其他字线上时间Vpass电压,这会导致这些晶体管遭受轻微的写入,随着闪存快读的次数越来越多,越来越多的电子进入浮栅层,最终可能导致位翻转。

读干扰是由于有额外的注入电子加大了存储单元的阈值电压,导致数据读取错误。

NAND Flash的特点:

  • 读写的操作对象是Page,擦除的操作对象是Block
  • 不能覆盖写,写入之前要先进行擦除
  • 寿命有限,不能一直写入数据。(Program Erase Cycle,PEC,衡量闪存寿命)
  • 读写干扰、抑制编程
  • 数据保持性、可靠性

与性能相关的特性:

1.4 NAND分类

根据每个存储单元内存储比特个数的不同,可以分为:

  • SLC(Single-Level Cell)即1 bit per cell,只存在0和1两个充电值,结构简单但是执行效率高。SLC闪存的优点是传输速度更快,功率消耗更低和存储单元的寿命更长。然而,由于每个存储单元包含的信息较少,成本高,约10万次擦写寿命。
  • MLC(Multi-Level Cell)即2 bit per cell,有00,01,10,11四个充电值,因此需要比SLC更多的访问时间,每个Cell存放比SLC多一倍的数据,但与SLC相比其传输速度较慢,功率消耗较高和存储单元的寿命较低,一万次以内擦写寿命
  • TLC(Triple-Level Cell)即3 bit per cell,每个单元可以存放比MLC多1/2的数据,共八个充电值,所需访问时间更长,因此传输速度更慢,TLC优势价格便宜
  • QLC(Quad-Level Cell),即4 bit per cell,每个单元可以存放4个数据,一共16个充电值,成本更低,容量更大,但是擦除的次数在几百次左右。英特尔公司将在2020年推出128层的QLC NAND Flash

根据每个存储单元内存储比特个数的不同,分为:

  • 2D工艺:60nm、40nm、20nm、15nm
  • 3D工艺:Floating Gate、Charge Trap

二、其他概念

  • NAND Flash中的坏块

Nand Flash中,一个块中含有1个或多个位是坏的,就称为其为坏块Bad Block。坏块的稳定性是无法保证的。
也就是说,不能保证你写入的数据是对的。或者写入对了。读出来也不一定对的。与此相应的正常的块。肯定是写入读出都是正常的。

坏块有两种:

(1)出厂时就有存在的坏块:
一种是出厂的时候。也就是,你买到的新的,还没用过的Nand Flash,就能够包括了坏块。此类出厂时就有的坏块,被称作factory (masked) bad block 或initial bad/invalid block,在出厂之前,就会做相应的标记,标为坏块。

(2)使用过程中产生的坏块:
第二类叫做在使用过程中产生的,因为使用过程时间长了,在擦块除的时候,出错了,说明此块坏了,也要在程序执行过程中,发现。而且标记成坏块的。详细标记的位置。和上面一样。这类块叫做worn-out bad block。即用坏了的块。

  • FTL

FTL是什么?
FTL是平台文件系统到NAND之间的中间层,因为NAND是页读取,块写入(如果写入区非FF),块的编程和擦除过程中,还会发生坏块,块本身的擦除次数还有寿命限制,所以,文件系统读写NAND时候,FTL在中间做地址转换,坏块管理等转换

完整的FTL功能通常包括如下:

1 - 坏块管理
nand block都有一定擦写次数,到达一定次数后,读写会不稳定,当发现写入或擦除失败时,应该标记为坏块,不再使用这些块

2 - 擦写平衡
原因同上,不能一直在固定块擦除写入,例如逻辑sector0数据,写入block0 page0,下一次sector再写入时,不是擦除block0后重新写入,而是在block2 page0写入,block0标记为垃圾块,block2标记为新的逻辑块,当找不到空闲块时,进行垃圾块擦除回收

3-掉电恢复
4 - 冷热数据
有些数据是频繁读取和写入的,例如系统LOG,称为热数据,有些数据是写入之后,很少变动的,例如UI图片等,称为冷数据,为了避免频繁擦写寻找空闲块,应该尽可能把热数据和冷数据,分别存在不同区块

  • ECC

ECC的全称是Error Checking and Correction, NAND Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page(例如512Bytes)中只有一个或几个bit出 错。一般使用一种比较专用的校验——ECC。

ECC能纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的 错误不保证能检测。

ECC一般每256字节原始数据生成3字节ECC校验数据,这三字节共24比特分成两部分:6比特的列校验和16比特的行校验,多余的两个比特置1。(512生成两组ECC,共6字节)

当往NAND Flash的page中写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB (out- of-band)数据区中。其位置就是eccpos[]。校
验的时候,根据上述ECC生成原理不难推断:将从OOB区中读出的原ECC校验和新ECC校验 和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误);
若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠 正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错;其他情况均表示出现了无法纠正的错误。

  • OOB

OOB(out of band),即通常所说的spare area区,nand flash中每个page后都有一个oob区域,用于存放硬件ecc校验码、坏块标记、和文件系统的组织信息,主要用于硬件纠错和坏块处理。

一般page大小为512字节的nand 每页分配16字节的oob;如果为2k的page,则每个page分配64字节的oob.

oob区中用1或2个字节来标志一个block是否为坏块,如果这1或2个字节的内容是0xff,就说明这个block是好块,否则为坏块。对于small page(每页512字节)的芯片,坏块信息存储在每个block的第一个page的oob的第6个字节中,
而big page(每页2k个字节)的芯片,坏块信息存储在每个block的第一个page的oob的第1和第2个字节中。

一般在uboo中识别坏块是通过oob区直接判断的,进入kernel会创建坏块表,相当于把各个block的第一page的oob区的坏块标记统一整理到一个表格里存放,下次直接查这个表格就可以知道具体的坏块信息,这个表格就是bbt。

注:oob是每个页都有的数据,而bbt是一个flash才有一个。

  • RAID

RAID (Redundant Arrays of Independent Disks,独立磁盘冗余阵列),固态硬盘内部本质就是一个闪存阵列,所以可以借鉴磁盘阵列技术来确保数据的完整性。

固态硬盘的RAID一般采用RAID 5,如果某个闪存页的数据翻转的过多,运用各种恢复手段,ECC还是纠正不过来,就会用到RAID。

例如某个SSD的闪存阵列由4个Die构成,写入用户数据A~G的时候,通过异或操作生产校验数据(Parity):

Parity = A + B + C + D + E + F + G ('+‘表示异或),把教研数据存储在闪存上,A~G和Parity组成一个RAID条带。

假设后续读取C失败,可以通过读取该RAID条带上的其他数据来恢复C

C = Parity + A + B + D + E + F + G (’+'表示异或)

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号