EEPROM和FLASH(NOR 和 NAND FLASH)的特点和区别
EEPROM 电可擦可编程只读存储器
1. 核心特点:按照字节进行擦除和写入
2. 工作原理:每个cell都有一个浮栅晶体管构成。通过量子隧穿效应,用电信号将电子注入或者移出浮栅。
3. 优点:可以单独修改任何一个字节,而不影响其他字节。
4. 缺点:
- 结构复杂:每个字节都需要独立的控制电路来实现精确寻址和擦写,导致芯片面积大、成本高。
- 容量小:由于上述原因,EEPROM的容量通常很小(几KB到几MB)。
FLASH 闪存
FLASH继承了EEPROM用电信号擦写的特性,但改变了结构以追求更大的容量和更低的价格。
1. 核心特点:必须按“块”或“扇区”进行擦除,按“页”进行编程(NOR FLASH是按照字或者字节)。这是它与EEPROM最根本的区别。
- 擦除:一次操作必须擦除一大块存储区域(例如64KB、128KB),将整个块的所有比特重置为“1”。
- 编程/写入:可以在擦除后的块内,按“页”(通常为4KB)为单位将“1”改为“0”。
2. 工作原理:同样基于浮栅晶体管,但单元结构更简单,排列成高密度的阵列。
3. 优点:高密度,低成本,容量大。
4. 缺点: - 写入灵活性差:不能像EEPROM那样真正地“覆盖”一个字节。如果要修改某个字节,必须先将整个块复制到缓存,擦除整个块,然后再把修改后的数据写回去。这个过程耗时且会导致写入放大,影响寿命。
- 寿命限制:每个存储单元的擦写次数有限(NAND Flash约在千次到万次级别),需要通过磨损均衡等算法来管理。
NOR FLASH
特点:支持 “按位寻址” (XIP, eXecute In Place),CPU可以直接从NOR Flash中读取代码并执行,并行地址,读取速度快。
缺点:容量相对较小,写入(按字节/字)和擦除速度(相比NOR FLASH)慢,成本高。
应用:主要用于 存储嵌入式系统的启动代码(如BIOS/UEFI、手机 bootloader)、操作系统内核 等需要直接执行的代码。
NAND FLASH
特点:容量大、成本低、写入(按页)和擦除速度快。但不支持按位寻址,只能按页读取,必须将数据复制到RAM中才能被CPU执行。
缺点:可能存在坏块,需要额外的控制器进行管理(FTL)。
应用:所有大容量存储设备的核心,如SSD(固态硬盘)、U盘、SD/TF卡、eMMC/UFS芯片(手机存储)、SD卡等。
NAND 对于坏块的处理
坏块的来源
坏块分为两类:
- 固有坏块:在生产制造过程中就产生的坏块。这是不可避免的工艺缺陷导致的。芯片出厂时,厂商就会把这些坏块标记出来。
- 后天坏块:在使用过程中,由于擦写次数耗尽或其他原因(如突然断电)而损坏的块。每个NAND Flash单元都有擦写次数限制(P/E Cycle,通常为几千到几万次),超过后其可靠性急剧下降,变成坏块。
核心处理机制:FTL (Flash Translation Layer)
- FTL是一个运行在SSD主控或U盘控制器内部的特殊软件/固件。它是连接主机系统(如你的电脑)和物理NAND Flash芯片的“桥梁”。所有对坏块的处理,都是在FTL中完成的。
- 主机系统看到的是一个连续的、没有坏块的“逻辑地址”空间,而FTL负责将这个逻辑地址动态地映射到物理上可能不连续且包含坏块的真实“物理地址”上。
坏块管理的具体步骤
第一步:识别与记录
FLT将固有坏块和后天坏块,记录在一个坏块表中。
第二步:替换与重映射
当FLT需要访问一个逻辑块时,它会:
- 查询映射表:FTL维护着一个逻辑块地址 到物理块地址 的动态映射表。
- 发现坏块:如果映射表指向的物理块是一个坏块(在坏块表中),或者在对这个物理块进行操作时发生了错误;
- 分配新块:FTL会从空闲块池中选取一个好的、空闲的物理块。
- 数据转移:
- 如果是读:直接从这个新分配的好块中读取数据。
- 如果是写/擦除:如果需要保留旧数据,会先将旧坏块中的数据拷贝到新好块中,然后再在新好块中执行写入操作。
- 更新映射表:将逻辑地址和新的好物理地址重新绑定。之后所有对该逻辑地址的访问,都会被导向这个新的好块。
- 隔离坏块:将那个坏的物理块标记为不可用,放入坏块列表,永不使用。
关键支撑技术:
为了高效地实现坏块管理,FTL还集成了几个至关重要的技术:
- 磨损均衡:为了防止某些“热门”数据块被过早写坏,FTL会动态地将数据写入到不同的物理块中,确保所有块的擦写次数相对平均,从而延长整个Flash设备的寿命。
- 垃圾回收:因为NAND Flash必须先擦除才能写入,而且擦除单位(块)大于写入单位(页),所以当某个块中包含无效数据时,FTL需要将这些无效数据块进行回收:把其中还有效的数据搬移到新的块中,然后把这个旧的块整个擦除,放入空闲块池备用。这个过程会处理掉那些包含无效数据的坏块。
- 强大的ECC:每次读写数据时,控制器都会使用纠错码来检测和纠正比特错误。ECC能力是判断一个块是否“变坏”的关键依据。当错误比特数超过ECC的纠正能力时,这个块就会被判定为坏块
浙公网安备 33010602011771号