针对JEDEC协议中几个抹除资料的命令,大家都很容易将其混淆。现在就这四个抹除命令作详细介绍,希望能帮助大家分清各个命令的具体含义及用法。

  1. 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

  1. Erase的原理

一旦擦除的命令成功完成,擦除掉的映射地址范围用写满0或1的形式表现出来。擦除命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

  1. Erase的过程

Erase的过程分三个步骤:

  1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

  2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

  3. 通过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位将会在状态寄存器中设置。

具体流程图如下所示:

  1. 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的过程分三个步骤:

  1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

  2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

  3. 通过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命令,这样将会导致在这样操作中的数据处在一个未知的状态。

  1. Discard

3.1Discard单位-写入块(writeblock)

Discard的可擦除单位是写入块,而非擦除组。

3.2 Discard的原理

Host端不关心Discard的映射地址范围的表现形式,不像ERASE和TRIM根据内存技术的不同需要写满0或1,它的表现形式可以是一些或全部的原始数据。它的作用也是简单的将映射地址范围移动到未映射的地址范围。

3.3 Discard的过程

Discard的过程分三个步骤:

  1. 首先host通过ERASE_GROUP_START(CMD35)命令定义地址范围的开始地址

  2. Host再通过ERASE_GROUP_END(CMD36)命令定义地址范围的终止地址

  3. 通过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命令,这样将会导致在这样操作中的数据处在一个未知的状态。

  1. 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的可靠性。

  1. 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地址空间里的数据已被清除。

Erase/Trim/Discard/Sanitize 区别详解相关推荐

  1. 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)

    文/黑猫学长 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,已加入原创维权,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详 ...

  2. Erase/Trim/Discard/Sanitize

    针对JEDEC协议中几个抹除资料的命令,大家都很容易将其混淆.现在就这四个抹除命令作详细介绍,希望能帮助大家分清各个命令的具体含义及用法. Erase 1.1擦除组(EraseGroup) Erase ...

  3. linux 文件擦除,linux文件系统如何使用emmc的擦除功能(Erase Trim Discard Sanitize)达到最优performance...

    1.android init.rc中可以看到, 系统启动mount /data 目录时,mount命令添加了参数:discard mount ext4 /emmc@usrdata /data noat ...

  4. python frozenset_Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元 ...

  5. HashTable和HashMap的区别详解

    HashTable和HashMap的区别详解 一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同 ...

  6. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  7. 关于numpy中eye和identity的区别详解

    https://www.jb51.net/article/175386.htm np.identity(n, dtype=None) np.eye(N, M=None, k=0, dtype=< ...

  8. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  9. python协程详解_对Python协程之异步同步的区别详解

    一下代码通过协程.多线程.多进程的方式,运行代码展示异步与同步的区别. import gevent import threading import multiprocessing # 这里展示同步和异 ...

最新文章

  1. js调试,输出函数调用顺序
  2. codeup 二叉树(dfs超时版)
  3. ESP32 OTA 策略的优点与可能的问题
  4. Nancy简单实战之NancyMusicStore(二):打造首页
  5. ABAP 生成ZIP压缩文件的代码
  6. HD1864_最大报销额
  7. 二、逻辑回归算法梳理
  8. No.1010_第七次团队会议
  9. 面试题40:数组中只出现一次的数字
  10. 使用Skrollr创建视差滚动效果页面
  11. 内网嗅探自我保护用到的批处理
  12. SpringBoot整合Mybatis,并实现事务控制
  13. golang 将对象转换成string_Golang 匿名 struct 解码数据技巧
  14. mysql的大字段clob,Oracle数据库导出大字段(CLOB)数据
  15. base64编码格式
  16. redis linux工具安装,linux 安装redis缓存工具
  17. 思维导图很难做?MindManager教你一招致胜!
  18. java基础知识总结(经典)_Java基础知识总结(超级经典)(三)
  19. Protocol Buffer编译器安装
  20. 服务器显示器超分辨率,显示器分辨率超频1080超到2K屏方法

热门文章

  1. JavaScript工具函数大全
  2. Rabbitmq消费者接收不到发送到队列的消息
  3. JSR-330 JAVA 依赖注入标准API说明
  4. 麦当劳一“发币”,币圈就闹笑话,加密数字货币到底是什么?
  5. with as的update写法
  6. API解读:StringTokenizer
  7. C++——求平均数、求和函数
  8. Maven连接MySQL数据库
  9. web安全防火墙介绍
  10. Mask R-CNN训练日记