6.6.12 Discard 丢弃
Discard(放弃)操作与TRIM(修剪)操作类似。Discard(丢弃)功能允许host识别有没有EMMC在后台擦除操作期间必要时擦除的数据,如果没有则将这个带有丢弃功能的写入块的内容标记为“不需要”。
Discard操作类似于TRIM。Discard功能允许host识别不再需要的数据,以便在后台擦除事件期间,有必要的情况下,EMMC可以擦除数据。应用了Discard功能的写入块中的内容应为“不关心”。在Discard操作之后,原始数据可能部分或全部对host设置可访问,具体取决于使用的EMMC。不再可由host访问的数据块可以像TRIM操作一样,被删除或被取消映射。EMMC将决定何时丢弃写入块中的数据。
Discard和TRIM之间的区别在于,对已被Discard的区域进行读取可能会返回部分或全部原始数据。然而,在TRIM的情况下,整个区域应该被取消映射或删除,并且将根据内存技术返回“0”或“1”。
当执行Sanitize操作时,只有被Discard命令取消映射的数据部分将被Sanitize命令删除。EMMC无法保证在应用Sanitize时已丢弃的数据能够完全从EMMC中删除。
完成Discard过程需要三个步骤。首先,host使用ERASE_GROUP_START(CMD35)命令定义范围的开始地址,然后使用ERASE_GROUP_END(CMD36)命令定义范围的结束地址,最后通过发出ERASE(CMD38)命令来启动擦除过程,其中CMD38 的参数位0和位1设置为1,其余参数设置为零。在Discard操作的情况下,CMD35和CMD36都标识写入块的地址,而不是擦除组。
如果接收到的擦除相关的命令不属于Discard命令队列(CMD35、CMD36或CMD38)中的元素,EMMC将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个序列。
如果host下发CMD35或CMD36的参数地址超出范围规定的地址,则EMMC会拒绝执行该该命令,并将ADDRESS_OUT_OF_RANGE进行置位,接着重置整个擦除序列。
如果接收到“非擦除”命令(不是CMD35、CMD36、CMD38或CMD13中的任何一个),EMMC会置位ERASE_RESET位进行响应,并重置擦除序列,执行CMD13 命令。
未寻址到选定EMMC的命令不会中止擦除序列,如果Discard范围包括写保护块,则它们被标跳过,且只有非保护块将被擦除。状态寄存器中的WP_ERASE_SKIP位将被置位。
与块写入一样,在进行Disca