EraseTrim Discard Sanitize详解
针对JEDEC协议中几个抹除资料的命令,大家都很容易将其混淆。现在就这四个抹除命令作详细介绍,希望能帮助大家分清各个命令的具体含义及用法。
Erase
1.1擦除组(EraseGroup)
Erase翻译过来是抹去、擦除的意思。eMMC中可擦除的单位称为“擦除组”,擦除组是用写入块(writeblocks,Device的基本可写单位)来测量的。擦除组的大小是一个设备特殊参数,当ERASE_GROUP_DEF设置为不可用的时候,擦除组的大小在CSD中定义;当ERASE_GROUP_DEF设置为可用的时候,擦除组的大小在EXT_CSD中定义。
当ERASE_GROUP_DEF(EXT_CSD[175])=0时
size of erasableunit = (ERASE_GRP_SIZE + 1) * (ERASE_GRP_MULT+ 1)
size of writeprotect = (WP_GRP_SIZE+1)
当ERASE_GROUP_DEF(EXT_CSD[175])=1时
size of erasableunit = 512Kbyte × HC_ERASE_GRP_SIZE
size of writeprotect = 512KB * HC_ERASE_GRP_SIZE *HC_WP_GRP_SIZE
Erase的原理
一旦擦除的命令成功完成,擦除掉的映射地址范围用写满0或1的形式表现出来。擦除命令的作用就是简单的将映射地址范围移动到未映射的地址范围。
Erase的过程
Erase的过程分三个步骤:
首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
通过ERASE(CMD38)命令将参数全部设置为0(ERASE命令的地址段是一个擦除组地址)
如果erase命令(CMD35,CMD36.CMD38)接收到的命令顺序与Erase步骤不同,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。
如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个擦除顺序。
如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。
如果擦除的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。
具体流程图如下所示:
TRIM
2.1TRIM单位—写入块(writeblock)
Trim的可擦除单位是写入块,而非擦除组。定义了三种多块写入的类型:
Open-ended Multiple-block write ,Multiple-block write with pre-defined block count,
Reliable Write。
Host可以通过多块操作在任意时间中止写动作。Host通过发送一个传输命令中止动作。
2.2 TRIM的原理
一旦Trim的命令成功完成,Trim掉的映射地址范围用写满0或1的形式表现出来。Trim命令的作用就是简单的将映射地址范围移动到未映射的地址范围。
2.3 TRIM的过程
TRIM的过程分三个步骤:
首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
通过ERASE(CMD38)命令将参数bit0设置为1,其他的bit都设置为0.(在TRIM操作中CMD35及CMD36地址的识别都是通过写入块实现的)
如果Trim命令(CMD35,CMD36或CMD38)中的一个元素接收到与既定TRIM步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。
如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个TRIM顺序。
如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。
如果TRIM的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。
Host应该慎重执行Trim命令以防止非故意的数据丢失。
重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。
Discard
3.1Discard单位-写入块(writeblock)
Discard的可擦除单位是写入块,而非擦除组。
3.2 Discard的原理
Host端不关心Discard的映射地址范围的表现形式,不像ERASE和TRIM根据内存技术的不同需要写满0或1,它的表现形式可以是一些或全部的原始数据。它的作用也是简单的将映射地址范围移动到未映射的地址范围。
3.3 Discard的过程
Discard的过程分三个步骤:
首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址
Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址
通过ERASE(CMD38)命令将参数bit0及bit1设置为1,其他的bit都设置为0.(在Discard操作中CMD35及CMD36地址的识别都是通过写入块实现的)
如果Discard命令(CMD35,CMD36或CMD38)中的一个元素接收到与既定Discard步骤不同的顺序,Device端将在状态寄存器中设置一个ERASE_SEQ_ERROR位并重置整个顺序。
如果host提供一个范围外的地址作为CMD35或CMD36的参数值,Device将会拒绝这个命令,回复一个ADDRESS_OUT_OF_RANGE的提示并重置整个Discard顺序。
如果接收到一个“非擦除”(不是CMD35,CMD36,CMD38或CMD13)的命令,Device将会回复一个ERASE_RESET位,重置擦除顺序并执行最后一个命令。对于所选设备的非地址范围的命令将不会终止整个擦除顺序。
如果Discard的范围包含写保护块,写保护块将会完整保留,只会擦除未写保护的数据块。WP_ERASE_RESET位将会在状态寄存器中设置。
Host应该慎重执行Discard命令以防止非故意的数据丢失。
重置Device(使用CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。
Sanitize
Sanitize操作是一个功能,它不同于Trim和Erase将映射地址范围移动到未映射的地址范围。而是要求Device直接从未映射地址范围空间的数据物理移除。
Sanitize通过extendedCSD[165]SANITIZE_START写入一个值发起,当device在进行Sanitize操作时,Device进入到busy状态。直到下列操作发生时,Sanitize操作才会停止:
Sanitizeoperation is complete.
AnHPI is used to abort the operation
Apower failure.
Ahardware reset.
当Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPI或Powerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。
当Host无法对该域进行Sanitize操作时,应用程序必须配合Device生厂商正确地实现该操作以确保device的可靠性。
ERASE/TRIM/DISCARD/SANITIZE的区别
总体上来说,ERASE/TRIM/DISCARD三者很相似,SANTIZE差异比较大。总体区别如下图表格所示:
|
擦除命令 |
||||
|
Erase |
Trim |
Discard |
Sanitize |
|
argument |
0x00000000 |
0x00000001 |
0x00000003 |
N/A |
|
unit |
Erase group |
Write block |
Write block |
N/A |
|
Operation |
moving the mapped host address range to the unmappedhost address range |
moving the mapped host address range to the unmappedhost address range |
moving the mapped host address range to the unmappedhost address range |
Removedfrom unmapped user address space
|
|
Read the region applied |
All 0 or 1 (depending on memory tech.) |
All 0 or 1 (depending on memory tech.) |
Don’t care (Some or all of the original data) |
N/A |
|
Interrupt |
N/A |
重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Trim命令,这样将会导致在这样操作中的数据处在一个未知的状态。 |
重置Device(使CMD0,CMD15,或使用eMMC的硬件重置)或电源故障将终止任何挂起和运行中的Discard命令,这样将会导致在这样操作中的数据处在一个未知的状态。 |
当Sanitize操作完成了之后,在未映射的host地址空间内将不会有数据存在。当Sanitize操作被HPI或Powerfailure中断后,未映射的host地址空间状态将无法得到保护,Host必须写入extendedCSD[165]SANITIZE_START来重新初始化Sanitize操作并允许Sanitize操作来确保未映射的host地址空间里的数据已被清除。 |