NAND是一种非易失性存储器件。最近在做一款AM335x核心板的移植工作,在移植过程中对NAND芯片I的使用积累了一些经验,将此记录以备后查。
一. 存储方式分类
FLASH芯片根据存储方式,可分为NOR和NAND两种。
NOR芯片读取速度快,擦写速度慢,单元集成度低,可以在片上执行代码,类似以前的ROM等。
NAND芯片读取速度稍慢,擦写速度很快,单元集成度较高,不能按地址随机读取字节,而只能按整块数据读出(称为页Page),类似磁盘、光盘等设备。
后面的文章都是描述NAND芯片的使用。
二. 存储原理分类
FLASH芯片根据存储原理,可以分为Single-Level Cell (SLC)、Multi-Level Cell (MLC)和Trinary-Level Cell (TLC或8LC)。
SLC是每个单元存1 bit信息,速度快,价格贵,寿命长(约100,000次擦写)。SLC是嵌入系统常用的器件,由于需要直接芯片级别的操作,因此需要较高的可靠性。
MLC是每个单元存2 bits信息,速度一般,价格一般,寿命一般(约10,000次擦写);
TLC是每个单元存3 bits信息,速度慢,价格低,寿命短(大约2,000次擦写以内)。TLC是目前SSD固态硬盘使用的主要器件,SSD通过优化FLASH控制器的存储算法,增加额外存储空间,可以做到大约5年的使用寿命。
三. 组织结构
NAND芯片不能按字节随机访问。
最小的读取单位是页(Page)或子页(Sub-page),通常每个Page是2048字节,每个子页是512字节。
最小的擦除和写入单位是块(Block),通常每个Block是128K,含64个Page。
四. 带外数据(OOB)
由于NAND芯片容易发生个别数据位(Bit)的反转,为保证数据正确性,芯片厂商为每个Page提供了一块额外的存储空间,称为Out Of Band (OOB),或spare area。
以我使用的FLASH芯片为例,该款芯片按8位访问时,每个Page有2112个字节,其中2048字节是正常存储空间,64字节是额外存储空间。
这块区域中可以存放Page的标志数据,Error Checking and Correction (ECC)数据,或其他辅助信息。
通常OOB中前两个字节存放”坏块“标志”。当块中存在无法复原的错误时,整个块就被标记为坏块(Bad Block),不可再被使用。
后面的文章会继续说明ECC配置,基于NAND之上的UBI系统的使用。