eMMC与NAND Flash在组成结构上存在显著差异。eMMC存储芯片通过MCP技术将NAND Flash芯片和控制芯片封装在一起,简化了存储器的设计,减少了电路板的占用面积,同时提升了手机和计算机厂商在设计时的便捷性。而NAND Flash则仅作为一块独立的存储设备存在,其数据传输必须通过主机端的控制器来完成。
在功能层面,eMMC内部集成了Flash Controller,涵盖了众多关键功能,如协议处理、擦写均衡、坏块管理、ECC校验等。这一设计使得Host端软件能够更加专注于上层业务,无需对NAND Flash进行特殊处理,从而简化了软件设计的复杂性。此外,eMMC还通过采用Cache、Memory Array等技术,在读写性能上显著优于单独的NAND Flash。
NAND Flash作为一种存储介质,在其上进行数据读写需要外部主控和电路设计的支持。而eMMC则将NAND Flash与主控IC相结合,对外接口协议与SD、TF卡相似,这使得厂家在电路设计上更为简化,进而降低了成本。使用eMMC的好处不仅体现在获得大容量存储空间上,更重要的是,它能够有效地管理NAND Flash,包括坏块处理和ECC校验等功能。
eMMC芯片内部被精心划分为三个独立区域,它们分别是BootBoot2以及User Area区。这样的设计不仅优化了存储空间的管理,还增强了数据存储的安全性。
eMMC的烧写过程独具特色,不同于其他Flash的烧录方式。在eMMC中,Boot区拥有独立的寻址地址,因此在进行烧写时,必须格外留意以下两个核心步骤:
首先,要烧写数据,这涵盖了BootBoot2以及User Area区的数据内容。
其次,需要配置寄存器,主要是对EXT_CSD寄存器进行设置,它决定了Boot的加载规则。这一步骤需要根据具体的方案来进行相应的配置。值得注意的是,EXT_CSD全称为“扩展寄存器”,类似于为eMMC芯片量身定制的特殊设置寄存器配置文件。它涵盖了诸如eMMC芯片的启动模式、存储架构、boot存储位置等关键信息的设置和存储区域。这些内容在eMMC的标准中均有详细说明。
在EXT_CSD的最后一行,我们找到了更为详尽的解释。在烧录eMMC时配置EXT_CSD的目的,主要是为了与主控MCU协同工作,进行读取设置和内容管理。这就像电脑中的CPU对硬盘分区有特定要求,系统盘、非系统盘以及其他存储空间的盘符和大小等都需要精心设置。
由于Nand Flash的特性,如坏块问题和读写寿命限制,其使用并非简单地将数据写入和读取。为了有效管理Nand flash,一套名为FTL(Flash Translation Layer)的软件被引入。它负责坏块检测、ECC校验以及读写速度优化等复杂任务。由于FTL软件设计的复杂性,通常由各大SOC芯片厂家进行专门优化,且这部分软件往往不开源。
若想在产品设计中直接使用Nand Flash,就必须在软件层面实现FTL功能。这需要相当的经验和技术积累。若自身具备足够的技术实力,可以自行设计FTL;若短时间内难以实现,也有一些开源的文件系统可供选择,如UBIFS、JFFS2和YAFFS等,它们都提供了必要的FTL功能。然而,即使采用这些方案,直接使用Nand Flash的工作量仍然相当大。
为了解决Nand Flash的使用问题,eMMC技术应运而生。具备强大FTL研发能力的厂家,如三星和Sandisk,将Nand flash颗粒与MCU封装在一起,作为Flash Controller使用。在这个MCU上,他们实现了坏块检测、磨损平衡和读写加速等FTL功能。然后,通过一个标准接口与Host Processor相连,Host Processor只需发送简单的读写命令,即可实现数据的快速读写。通常,一个Flash Controller可以与多个Nand flash颗粒一起封装,并且MCU上还配备了缓存。当Host Processor写入数据时,Flash controller能将数据并行分发到不同的Flash颗粒上。因此,我们通常看到的eMMC颗粒的读写速度比单纯的Nand Flash要快得多。
支持eMMC x协议的eMMC,其顺序读速度可达到400MB以上。而单纯的Nand Flash,其读写速度则要慢得多,只有几十MB甚至几MB。