资讯动态

eMMC擦除解析:Erase、Trim、Secure Erase、Secure Trim与Sanitize

发布时间:2026/10/14 3:51:26 来源:尧图企业网站定制
一、背景逻辑地址与物理地址的映射eMMC内部包含一个Flash控制器主机通过逻辑地址LBA访问数据控制器负责将逻辑地址翻译为NAND Flash上的物理地址。这一层映射关系带来两个重要特性磨损均衡控制器可以将同一逻辑地址的数据映射到不同物理位置避免某个物理块被过度擦写。逻辑擦除与物理擦除分离主机执行擦除时控制器可能只修改映射表而不立即清除物理NAND单元。因此eMMC的擦除操作可以分为两个层次逻辑擦除仅修改映射表物理数据保留。物理擦除真正清除NAND Flash单元上的数据。理解这一区分是理解所有eMMC擦除命令本质的基础。二、擦除命令框架CMD35 / CMD36 / CMD38eMMC的Erase、Trim、Secure Erase、Secure Trim均使用相同的命令序列命令作用CMD35设置擦除起始地址CMD36设置擦除结束地址CMD38执行擦除参数决定擦除类型CMD38为R1b类型命令设备在执行期间通过DAT0拉低表示忙完成后释放。CMD38的参数位定义如下位含义bit 31Secure requestbit 15Secure Trim Step 2bit 1Discard Enablebit 0Identify Write Blocks for Erase / TRIM Enable不同参数组合对应不同的擦除操作。三、Erase以擦除组为单位的逻辑擦除标准Erase使用CMD38参数0x00000000。3.1 操作粒度擦除组擦除组Erase Group是eMMC的最小可擦除单位由多个写块Write Block组成。写块是设备的基本可写单位大小为512字节。擦除组的大小由设备厂商定义。3.2 擦除组大小的计算擦除组大小的计算分为两种模式由ERASE_GROUP_DEFEXT_CSD[175]寄存器决定使用哪一种。模式一传统模式ERASE_GROUP_DEF 0当ERASE_GROUP_DEF为0时擦除组大小由CSD寄存器中的两个字段决定字段CSD中的位置宽度ERASE_GRP_SIZEbit[46:42]5 bitERASE_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_SIZEEXT_CSD[224]决定擦除组大小 512KB × HC_ERASE_GRP_SIZE该值以512KB为基本单位而非写块数。ERASE_GROUP_DEF是一个可读写的配置位主机可以通过CMD6SWITCH命令将其置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参数0x80000000bit 31置位表示安全请求。设备被要求对CMD35/CMD36指定的擦除组及其所有副本执行物理清除清除方式由EXT_CSD中的Secure Removal Type字段决定。该操作要求设备支持SEC_ER_ENEXT_CSD[231] bit 0。6.2 Secure TrimSecure Trim分两步执行步骤CMD38参数作用Step 10x80000001标记写块准备安全擦除Step 20x80008000对已标记的写块执行安全清除两步之间可以间隔任意时间Step 1可多次调用标记多个区域最后用一次Step 2统一清除。该操作要求设备同时支持SEC_ER_EN和SEC_GB_CL_ENEXT_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写入值来触发通常通过CMD6SWITCH写字节完成。设备随后保持DAT0忙状态直到清除完成并将SANITIZE_START自动清回0。7.3 支持性判断设备是否支持Sanitize可通过SEC_SANITIZEEXT_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写块逻辑擦除否推荐替代EraseDiscard写块提示设备不保证结果否性能优化Secure Erase擦除组试图物理清除指定范围无法保证已不推荐Secure Trim写块试图物理清除指定范围无法保证已不推荐Sanitize全局未映射区域强制物理清除所有未映射数据是推荐

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑