依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。
所在专栏 《元带你学: eMMC协议详解》
内容摘要
全文 4200字, 主要内容介绍了各种擦除操作概念以记用法,总结了不同擦除操作的区别, 根据不同安全级别和应用场景, 可以使用最合适的擦除类型。
前言
1 Erase
2 Trim
3 Sanitize
4 Discard
5 Secure Erase
参考
如果你存了一张照片, 想删除怎么办?
一种是重新将这段数据,重新写入全0 的数据, 这是隐式擦除。这种擦除因为要把所有的地址写一遍全0 的数据, 比较费时间。 但如果是一定要彻底删除, 比如Chen老师的照片, 那就要一定建议要用这种方式。
但一般情况下, 我们删除可能是因为磁盘快满了, 想删除一些没意义的照片,希望秒删, 这样体验很流畅。怎么做到呢?
除了用写操作隐式擦除之外,e-MMC还提供了一个主机显式擦除功能。e-MMC的可擦除单元为“擦除组”; 擦除组是用写入块数目来衡量的,写入块是设备的基本可写单位。Erase Group的大小是设备特定的参数。
根据不同的存储器技术,erase后,这段存储器地址范围的内容应为' 0 '或' 1 '。这个值在EXT_CSD中定义。一旦erase命令成功完成,被擦除的设备地址范围应该表现得好像被全部'0'或全部'1'覆盖,这取决于不同的内存技术。erase命令的影响应该只是将LBA映射到无效设备地址范围(注意,在某些情况下,其他flash管理任务也可能在执行该命令期间完成)。主机可以擦除连续的擦除组。
开始擦除过程有三个步骤。
错误情况
如果主机提供超出范围的地址作为CMD35或CMD36的参数,设备将拒绝该命令,以ADDRESS_OUT_OF_RANGE位设置响应并重置整个擦除序列。
如果设备接收到非擦除命令(非CMD35、CMD36、CMD38和CMD13),则响应设置ERASE_RESET位,重置擦除顺序,执行最后一条命令。
如果擦除范围包括写保护块,则保留写保护块,只擦除非保护块。应该设置状态寄存器中的WP_ERASE_SKIP状态位。如上所述,对于块写入,设备将通过保持低DAT0来指示擦除正在进行中(Busy 中)。实际擦除时间可能很长,主机可能发出CMD7命令取消选择设备。
根据CMD38 带的参数的不同, 擦除可以细分为不同的擦除类型。
在执行Erase命令时,主机应该注意到一个擦除组包含多个写块,每个写入块可能包含不同的信息片段。当Erase执行时,它将应用于擦除组内的所有写入块。在主机执行Erase命令之前,它应该确保不再需要各个写入块中的信息。因此,为了避免意外删除有效数据,最好在擦除整个设备或分区时候使用Erase命令。如果主机只希望清除单个写块,则Trim命令可能更合适。
Trim操作类似于erase操作。Trim函数将擦除操作应用于写入块而不是擦除组。Trim功能允许主机识别不再需要的数据,以便在后台擦除事件中必要时设备可以擦除数据。应用了trim功能的写块的内容应根据不同的存储技术为'0'或'1'。这个值在EXT_CSD中定义。
一旦trim命令成功完成,根据不同的内存技术,被Trim范围对应的设备地址范围应该表现为被全部'0'或全部'1'覆盖。trim命令的影响应该只是将LBA映射到无效物理地址(注意,在某些情况下,其他flash管理任务也可能在执行该命令期间完成)。
完成TRIM过程分为三个步骤。
对于TRIM操作,CMD35和CMD36都标识写块的地址,而不是擦除组的地址。
如果在擦除序列之外接收到Trim命令(CMD35, CMD36或CMD38),则设备将在状态寄存器中设置ERASE_SEQ_ERROR位并重置整个序列。
如果主机提供超出范围的地址作为CMD35或CMD36的参数,设备将拒绝该命令,以ADDRESS_OUT_OF_RANGE位设置响应并重置整个擦除序列。
如果设备收到非擦除命令(CMD35、CMD36、CMD38、CMD13之外),则返回ERASE_RESET位,重置擦除顺序,执行最后一条命令。
未指定所选设备地址的命令不会中止擦除序列。如果Trim范围包括写保护块,则保留写保护块,只擦除非保护块。应该设置状态寄存器中的WP_ERASE_SKIP状态位。
对于块写入,设备将通过保持低DAT0来指示Trim命令正在进行中。实际擦除时间可能很长,主机可发出CMD7命令取消选择设备。主机应谨慎执行Trim命令,以免意外丢失数据。重置设备(使用CMD0、CMD15或e-MMC硬件重置)或电源故障将终止任何挂起的或活动的Trim命令。这可能会使操作中涉及的数据处于未知状态。
Sanitize操作是除TRIM和Erase之外的一个功能,用于根据安全删除类型从设备中删除数据。使用Sanitize操作需要设备在物理上删除数据。Sanitize操作是通过向扩展的CSD[165] Sanitize START写入一个值来启动的。当设备执行清理操作时,DAT0 会一直拉低, 表示Busy中。设备将Busy的情况下继续Sanitize操作,直到发生以下事件之一:
清理操作完成后,未映射的主机地址空间中不应存在任何数据。如果清理操作因HPI、电源故障、CMD0或硬件复位而中断,则无法保证未映射的主机地址空间的状态。主机必须通过写入SANITIZE_START[165]来重新启动清理操作,并允许操作完成,以确保未映射的主机地址空间是清空的。由于主机无法访问正在操作的区域,因此需要此功能的应用程序必须与各个设备制造商合作,以确保该操作正确执行,并了解对设备可靠性的影响。
Discard的操作类似于TRIM。丢弃功能允许主机识别不再需要的数据,以便在后台擦除事件中必要时擦除数据。应用了丢弃函数的内容应该是“不关心”。在丢弃操作之后,根据设备的不同,原始数据可能保留部分或全部可被主机访问。主机不能再访问的数据部分可以被删除或取消映射,就像TRIM的情况一样。设备将决定丢弃写块的内容。
Discard和TRIM的区别在于,Discard对一个被丢弃的区域的读操作可能会返回部分或全部原始数据。但是,在Trim的情况下,整个区域将被取消映射或删除,并将返回'0'或'1',具体取决于内存技术。执行清理时,只有被Discard(丢弃)命令未映射的数据部分才会被清理命令删除。当应用“Sanitize”时,设备不能保证从设备中完全删除丢弃的数据。
完成Discard丢弃过程分为三个步骤。
首先,主机使用ERASE_GROUP_START (CMD35)命令定义范围的起始地址,
然后使用ERASE_GROUP_END (CMD36)命令定义范围的最后一个地址,
最后通过发出erase (CMD38)命令开始擦除过程,其中参数位0和位1设置为1,其余参数设置为0。
在丢弃操作的情况下,CMD35和CMD36标识写块的地址,而不是擦除组的地址。如果在擦除序列之外接收到丢弃命令(CMD35、CMD36或CMD38)之一,设备将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个序列。
如果主机提供超出范围的地址作为CMD35或CMD36的参数,设备将拒绝该命令,以ADDRESS_OUT_OF_RANGE位设置响应并重置整个擦除序列。
如果接收到非擦除命令(CMD35、CMD36、CMD38、CMD13之外),设备将响应设置ERASE_RESET位,重置擦除顺序,执行最后一条命令。
未指定所选设备地址的命令不会中止擦除序列。如果丢弃范围包括写保护块,则保留写保护块,只擦除非保护块。应该设置状态寄存器中的WP_ERASE_SKIP状态位。如上所述,对于块写入,设备将通过保持低DATO来指示丢弃命令正在进行中。实际擦除时间可能很长,主机可能发出CMD7取消选择设备。请谨慎执行Discard命令,避免数据丢失。重置设备(使用CMDO、CMD15或e-MMC硬件重置)或电源故障将终止任何未决或活动的丢弃命令。这可能使操作中涉及的数据处于未知状态。
说明: 安全擦除功能是为了向后兼容。新的系统级实现(基于v4.51及更高版本的设备)应该结合使用Erase和Sanitize,而不是安全擦除。除了标准的Erase命令之外,还有一个可选的Secure Erase命令。安全擦除命令不同于基本的擦除命令,它要求设备在发出命令时对内存阵列执行物理擦除操作, 而不是只删除映射表信息,并要求设备和主机等待操作完成后再进行下一个设备操作。
此外,安全擦除命令要求设备根据EXT_CSD中的安全删除类型对擦除组和这些擦除组中标识为擦除的任何项的副本执行安全清除操作。此命令允许具有高安全性要求的应用程序请求设备执行安全操作,同时接受可能的擦除时间性能影响(擦除时间可能比较长, 应用要接受这点)。Secure Erase命令的执行方式与Erase命令相同,只是Erase (CMD38)命令执行时将参数位31设置为1,其他参数位设置为0。有关Erase (CMD38)命令支持的参数组合的详细信息,请参见表11;有关与Erase (CMD38)命令相关的参数位的定义,请参见表12。请谨慎执行安全擦除命令,避免数据意外丢失。重置设备(使用CMDO、CMD15或e-MMC硬件重置)或电源故障将终止任何挂起的或活动的安全擦除命令。这可能使操作中涉及的数据处于未知状态。
免责声明:
本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。