• 【Linux】嵌入式·NAND Flash


    Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的如硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。

    Flash的内部存储是金属-氧化层-半导体-场效晶体管(MOSFET),里面有个悬浮门(Floating Gate),是真正存储数据的单元。

    数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于图中的控制门(Control gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth 来表示。

    1.对于NAND Flash的写入(编程),就是控制Control Gate去充电(对Control Gate加压),使得悬浮门存储的电荷够多,超过阈值Vth,就表示0。

    2.对于NAND Flash的擦除(Erase),就是对悬浮门放电,低于阀值Vth,就表示1。

    NAND Flash的架构:

     

    如上图所示,这是一个8Gb 50nm的SLC颗粒内部架构。

    每个page有33,792个单元,每个单元代表1bit(SLC),所以每个page就是4096Byte + 128Byte(SA)。
    每个Block有64个page组成,所以每个Block容量为262,114Byte + 8192Byte (SA)

    page是NAND Flash上最小的读/写单位(一个page上的单元共享一根字符线Word line),块是最小的擦除单位(。不同厂牌不同型号颗粒有不同的page和block大小。

    下图是个8Gb 50nm的SLC颗粒。

     

    4KB的页尺寸,256KB的块尺寸。图中4096字节用于存储数据,另外128字节用来做管理和ECC用。

    SLC 和 MLC 区别:

    SLC主要针对军工,企业级应用,有着高速写入,低出错率,长耐久度特性。
    MLC主要针对消费级应用,有着2倍容量于SLC,低成本,适合USB闪盘,手机,数码相机等储存卡。如今也被用于消费级固态硬盘上。


    由上图可以看到,MLC和SLC虽然使用相同的电压值,但是电压之间的阀值被分成了4份,直接影响了性能和稳定性。主要有下面几点: 

    1.相邻的存储电荷的悬浮门间会互相干扰,造成悬浮门里的电荷不稳定出现bit错误,MLC由于阀值相比SLC更接近,造成出错几率更大。
    2.MLC读写性能降低,写入更是降低50%以上,因为需要确认充入电荷的量,这需要更精确的处理。SLC只有0和1,也就是有和没有,而MLC会有00,01,10,11 4个状态,在充入电荷后还要去判断是哪个状态,自然就慢了。
    3.因为上面说的,造成额外的读写压力,所以功耗明显增大。
    4.因为额外的读写压力,造成闪存的写入耐久度和数据保存期受到影响。

    eMLC和eSLC的耐久度提升是用牺牲了数据保存期和增加读写时间换来的。(也就是性能会更差点)

  • 相关阅读:
    easyRL学习笔记:强化学习基础
    Java中的ArrayList集合
    Java8中有哪些原子类呢?
    虚拟机centos设置网络模式(桥接|NAT)
    ROS2+cartorgrapher+激光雷达建图
    先做事,后创新
    机器视觉技术在现代汽车制造中的应用
    本人开发Android视频编码和直播推流使用到的相关命令
    【C++】认识STL
    算法通过村第十八关-回溯|白银笔记|经典问题
  • 原文地址:https://blog.csdn.net/m0_64560763/article/details/126038464