☰
eMMC擦除解析:Erase、Trim、Secure Erase、Secure Trim与Sanitize
2026/10/14 3:51:25 网站建设 项目流程

一、背景:逻辑地址与物理地址的映射

eMMC内部包含一个Flash控制器,主机通过逻辑地址(LBA)访问数据,控制器负责将逻辑地址翻译为NAND Flash上的物理地址。这一层映射关系带来两个重要特性:

  1. 磨损均衡:控制器可以将同一逻辑地址的数据映射到不同物理位置,避免某个物理块被过度擦写。

  2. 逻辑擦除与物理擦除分离:主机执行擦除时,控制器可能只修改映射表,而不立即清除物理NAND单元。

因此,eMMC的擦除操作可以分为两个层次:

  • 逻辑擦除:仅修改映射表,物理数据保留。

  • 物理擦除:真正清除NAND Flash单元上的数据。

理解这一区分,是理解所有eMMC擦除命令本质的基础。

二、擦除命令框架:CMD35 / CMD36 / CMD38

eMMC的Erase、Trim、Secure Erase、Secure Trim均使用相同的命令序列:

命令作用
CMD35设置擦除起始地址
CMD36设置擦除结束地址
CMD38执行擦除,参数决定擦除类型

CMD38为R1b类型命令,设备在执行期间通过DAT0拉低表示忙,完成后释放。CMD38的参数位定义如下:

位含义
bit 31Secure request
bit 15Secure Trim Step 2
bit 1Discard Enable
bit 0Identify Write Blocks for Erase / TRIM Enable

不同参数组合对应不同的擦除操作。

三、Erase:以擦除组为单位的逻辑擦除

标准Erase使用CMD38参数0x00000000。

3.1 操作粒度:擦除组

擦除组(Erase Group)是eMMC的最小可擦除单位,由多个写块(Write Block)组成。写块是设备的基本可写单位,大小为512字节。擦除组的大小由设备厂商定义。

3.2 擦除组大小的计算

擦除组大小的计算分为两种模式,由ERASE_GROUP_DEF(EXT_CSD[175])寄存器决定使用哪一种。

模式一:传统模式(ERASE_GROUP_DEF = 0)

当ERASE_GROUP_DEF为0时,擦除组大小由CSD寄存器中的两个字段决定:

字段CSD中的位置宽度
ERASE_GRP_SIZEbit[46:42]5 bit
ERASE_GRP_MULTbit[41:37]5 bit

计算公式为:

擦除组大小 = (ERASE_GRP_SIZE + 1) × (ERASE_GRP_MULT + 1) × 512 字节

其中ERASE_GRP_SIZE和ERASE_GRP_MULT均为5位二进制编码值,计算结果以写块(512字节)为单位。在实际设备中,ERASE_GRP_MULT经常被固定为0x1F,而ERASE_GRP_SIZE则根据设备容量有所不同。

模式二:高容量模式(ERASE_GROUP_DEF = 1)

当ERASE_GROUP_DEF为1时,擦除组大小由Extended CSD中的HC_ERASE_GRP_SIZE(EXT_CSD[224])决定:

擦除组大小 = 512KB × HC_ERASE_GRP_SIZE

该值以512KB为基本单位,而非写块数。

ERASE_GROUP_DEF是一个可读写的配置位,主机可以通过CMD6(SWITCH)命令将其置1,以启用高容量擦除组定义。eMMC规范要求:当设备被分区后,应启用高容量组大小定义。

3.3 行为本质

Erase是逻辑擦除。控制器将指定擦除组内的所有写块从映射表中移除,但不强制立即物理擦除NAND数据。物理擦除可能推迟到后台垃圾回收时进行。

3.4 工程问题

如果起始地址未对齐到擦除组边界,Erase会向下取整到整个擦除组,可能导致相邻分区的数据被意外擦除。这是Erase在实际系统中的一个重要限制。

四、Trim:以写块为单位的逻辑擦除

Trim使用CMD38参数0x00000001。

操作粒度:写块(Write Block),即512字节。

行为本质:与Erase相同,Trim也是逻辑擦除,仅修改映射表,不强制物理清除。

与Erase的核心区别:Trim的粒度更细。Erase以擦除组为单位,Trim以写块为单位。因此Trim可以精确擦除指定写块,不会影响同一擦除组内的其他写块。

由于擦除组对齐问题,U-Boot等系统在支持eMMC 4.0以上设备时,默认使用Trim替代Erase。

五、Discard:仅作提示的操作

Discard使用CMD38参数0x00000003。

操作粒度:写块。

行为本质:Discard向设备提示这些写块不再需要,但eMMC标准没有定义Discard 后读取应返回什么。数据可能是原始数据,也可能是0或1,完全取决于设备实现。

Discard更接近性能优化提示,不适合作为安全擦除手段。

六、Secure Erase与Secure Trim:试图物理擦除,但无法保证

Secure Erase和Secure Trim是eMMC 4.4引入的功能,目标是实现指定地址范围内的物理擦除。

6.1 Secure Erase

使用CMD38参数0x80000000,bit 31置位表示安全请求。设备被要求对CMD35/CMD36指定的擦除组及其所有副本执行物理清除,清除方式由EXT_CSD中的Secure Removal Type字段决定。

该操作要求设备支持SEC_ER_EN(EXT_CSD[231] bit 0)。

6.2 Secure Trim

Secure Trim分两步执行:

步骤CMD38参数作用
Step 10x80000001标记写块,准备安全擦除
Step 20x80008000对已标记的写块执行安全清除

两步之间可以间隔任意时间,Step 1可多次调用标记多个区域,最后用一次Step 2统一清除。该操作要求设备同时支持SEC_ER_EN和SEC_GB_CL_EN(EXT_CSD[231] bit 4)。

6.3 为什么Secure Erase/Trim不可靠

JEDEC在eMMC 5.1规范中明确指出:

Secure Erase is included for backwards compatibility. New system level implementations (based on v4.51 devices and beyond) should use Erase combined with Sanitize instead of secure erase.

根本原因在于,Secure Erase/Trim无法在逐LBA范围内保证物理擦除。由于磨损均衡和垃圾回收机制,同一逻辑地址的数据可能在物理上有多个副本。主机无法验证设备是否真正清除了所有副本。

因此,Secure Erase和Secure Trim仅为了向后兼容而保留,已不推荐在新系统中使用。Linux内核注释也明确指出:“Secure erase feature is deprecated in eMMC v4.5 specification”。

七、Sanitize:设备级物理清除

Sanitize是eMMC 4.5引入的功能,也是JEDEC推荐的最终数据清除方案。

7.1 作用范围

Sanitize不针对特定地址范围,而是作用于设备中所有未映射区域。未映射区域是指曾经被写入、但后来通过Erase、Trim或Discard逻辑删除的数据所占的物理空间。这些数据在映射表中已不存在,但物理NAND单元上可能仍然残留。

7.2 触发方式

Sanitize通过向EXT_CSD[165](SANITIZE_START)写入值来触发,通常通过CMD6(SWITCH)写字节完成。设备随后保持DAT0忙状态,直到清除完成,并将SANITIZE_START自动清回0。

7.3 支持性判断

设备是否支持Sanitize,可通过SEC_SANITIZE(EXT_CSD[231] bit 6)判断。在Linux内核的mmc.h头文件中,该位定义如下:

#define EXT_CSD_SEC_SANITIZE BIT(6) /* v4.5 only */

EXT_CSD[231](SEC_FEATURE_SUPPORT)中各位的定义如下:

位名称含义
bit 0SEC_ER_ENSecure Erase 支持
bit 4SEC_GB_CL_ENSecure 擦除组清除支持
bit 6SEC_SANITIZESanitize 支持(v4.5 only)

注意:在eMMC v4.5规范中,bit 0被保留,bit 6才是secure sanitize支持位。代码中检查Sanitize支持时,应使用bit 6。

7.4 关键特性

  • 全局性:一次操作清除所有未映射区域。

  • 强制性:要求设备真正执行物理清除。

  • 不可中断:如果被CMD0、CMD15或硬件复位中断,未映射空间的状态无法保证,主机必须重新发起完整的Sanitize操作。

  • 超长超时:Linux内核为Sanitize设置的超时时间为240秒。

7.5 驱动实现注意事项

Sanitize通过CMD6触发时,应使用R1响应而非R1b。因为设备会长时间保持DAT0忙状态,R1b的硬件等待逻辑会因自身较短的超时先返回错误,无法进入软件轮询阶段。正确做法是用R1发送CMD6,然后轮询Card Status,等待设备从PROG状态回到TRAN状态。

此外,轮询过程中如果出现错误返回路径,必须清除驱动内部的忙标志,避免上层误认为设备仍在忙。

八、对比总结

操作操作粒度本质物理清除规范状态
Erase擦除组逻辑擦除否基础功能
Trim写块逻辑擦除否推荐替代Erase
Discard写块提示设备,不保证结果否性能优化
Secure Erase擦除组试图物理清除指定范围无法保证已不推荐
Secure Trim写块试图物理清除指定范围无法保证已不推荐
Sanitize全局未映射区域强制物理清除所有未映射数据是推荐

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询