zoukankan      html  css  js  c++  java
  • 读《闪存基础》总结

    原文的出处:来自 http://www.ssdfans.com/?p=45

    1.写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。擦除操作正好相反,是在衬底加正电压,把电子从浮栅极中吸出来。如下图所示:

    一个存储单元电子划分的越多,那么在写入的时候,控制进入浮栅极的电子的个数就要越精细,所以写耗费的时间就加长;同样的,读的时候,需要尝试用不同的参考电压去读取,一定程度上加长读取时间。所以我们会看到在性能上,TLC不如MLC,MLC不如SLC. 

    一个FLASH Block的组织架构。一个WordLine对应着一个或若干个Page,取决于SLC,MLC或者TLC。对SLC来说,一个WordLine对应一个Page;MLC则对应2个Page,这两个Page是一对:Lower Page 和Upper Page;TLC对应3个Page。一个Page有多大,那么WordLine上面就有多少个存储单元(Cell),就有多少个Bitline。一个Block当中的所有这些存储单元(Cell)都是共用一个衬底的。

    DIE/LUN是接收和执行FLASH命令的基本单元。上图中,LUN0和LUN1可以同时接收和执行不同的命令。但在一个LUN当中,一次只能执行一个命令,你不能对其中的某个Page写的同时,又对其他Page进行读访问。

    每个Plane都有自己独立的Cache Register或者 Page Register,一般情况下,两个Register内容都是一样的,其大小等于一个Page的大小。

    Host在写某个Page的时候,它是先把数据从Host传输到该Page所对应Plane的Cache Register当中,然后再把整个Cache Register当中的数据写到NAND FLASH阵列;

    读的时候类似,它先把这个Page的数据从FLASH阵列读取到Page Register,然后再按需传给host。

    NAND FLASH的擦除是以Block为单位的。为什么呢?那是因为在组织结构上,一个Block当中的所有存储单元(Cell)是共用一个衬底的(Substrate)。当你对某衬底施加强电压,那么上面所有浮栅极的电子都被吸出来了。

    SLC的擦写次数可达十万次,MLC一般为几千到几万,TLC降到几百到几千。

    对MLC或者TLC来说,写一个Block当中的Page,应该顺序写:Page0,Page1,Page2,Page3,…;禁止随机写入,比如:Page2,Page3,Page5,Page0,…,这是不允许的。但对读来说,没有这个限制。SLC也没有这个限制。

    读干扰(Read Disturb)

    从NAND读取原理来看,当你读取一个Page的时候,Block当中未被选取的Page控制极都会加一个正电压,以保证未被选中的MOS管是导通的。这样问题就来了,频繁的在一个MOS管控制极加正电压,就可能导致电子被吸进浮栅极,形成轻微的Program。从而最终导致比特翻转。但是,这个不是永久性损伤,重新擦除Block还能正常使用。注意的是,Read Disturb影响的是同一个Block中的其它Page,而非读取的Page本身。

    写干扰(Program Disturb)

    我们写一个Page的时候,数据0和1混合的。由于对擦除过的Block,其所有的存储单元初始值就 是1,所以Program的时候,只有写0的时候才真正需要Program。如上图所示,绿色的Cell是写0,需要Program的,红色的代表写1,并不需要Program。我们这里把绿色的Cell称之为Programmed Cells,红色的Cell叫Stressed Cells。写某个Page的时候,我们是在其 WordLine的控制极加一个正电压(上图是20V),对于Programmed Cells所在的String,它是接地的,不需要Program Cell所在的String,它是接一正电压(上图为10V)。这样最终产生的后果是,Stressed Cell也会被轻微Program。与Read Disturb不同的是,Program Disturb 影响的不仅是同一个Block当中的其它Page,自身Page也受影响。相同的是,都是不期望的轻微 Program导致比特翻转,都非永久性损伤,经擦除后,Block还能再次使用。

    电荷泄漏

     存储在NAND FLASH存储单元的电荷,如果长期不使用,会发生电荷泄漏。不过这个时间比较长,一般十年左右。同样是非永久性损伤,擦除后Block还能使用。

    上面说的这些,是所有NAND面临的问题,包括SLC,MLC和TLC。对MLC来说,又有其特有的 一些问题。

    1.正如前面提到的,MLC最大擦写次数变小。这样,就更需要Wear Leveling技术来保证整个存储介质的使用寿命。

    2.对MLC来说,一个存储单元存储了两个比特的数据,对应着两个Page:Lower Page和Upper Page。假设Lower Page先写,然后再写Upper Page的过程中,由于改变了整个Cell的状态,如果这个时候掉电,那么之前写入的Lower Page数据也丢失。一句话,写一个Page失败,可能会导致另外一个Page的数据损坏。

    3.前面说到,不能随机写。不能先Program Upper Page,然后再Program Lower Page,这点就限制了我们不能随意的写。 4.写Lower Page时间更短,写Upper Page时间更长。所以会看到有些Page写入速度快,有些Page写入时间慢。读取时间对Lower Page和Upper Page来说都差不多。

  • 相关阅读:
    Notepad++的ftp远程编辑功能
    Scapy脚本执行出现警告WARNING解决办法
    在文本域textarea里添加含换行的字符串
    Python打包成exe工具
    SQL字段数据类型集锦
    解决Python扩展: Unable to find vcvarsall.bat
    解决安装python第三方模块 'mnocygwin'报错的问题
    python安装wmi模块
    ubuntu设置本地软件安装源【DVD版】
    linux下expect安装
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/7365155.html
Copyright © 2011-2022 走看看