NAND Flash学习总结

一、NAND Flash综述
1.1 NAND基本概念
1.2 NAND组成单元及读写原理
1.3 NAND结构及特点
1.4 NAND分类
二、其他概念

一、NAND Flash综述

1.1 NAND基本概念

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

  • Nand Flash 中的 Nand的意思是 Not AND(与非门),意思就是该 Flash 的基础单元就是 与非门
  • Nor Flash 中的 Nor的意思是 Not OR(或非门),意思就是该 Flash 的基础单元就是 或非门在这里插入图片描述
    在这里插入图片描述

1.2NAND组成单元及读写原理

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 (’+'表示异或)
  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值