当前位置: 首页 > news >正文

[元带你学: eMMC协议详解 14] 数据擦除(Erase) 详解

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载

所在专栏 《元带你学: eMMC协议详解》

内容摘要

全文 4200字, 主要内容介绍了各种擦除操作概念以记用法,总结了不同擦除操作的区别, 根据不同安全级别和应用场景, 可以使用最合适的擦除类型。

前言

1 Erase

2 Trim

3 Sanitize

4 Discard

5 Secure Erase

参考


前言

如果你存了一张照片, 想删除怎么办?

一种是重新将这段数据,重新写入全0 的数据, 这是隐式擦除。这种擦除因为要把所有的地址写一遍全0 的数据, 比较费时间。 但如果是一定要彻底删除, 比如Chen老师的照片, 那就要一定建议要用这种方式。

但一般情况下, 我们删除可能是因为磁盘快满了, 想删除一些没意义的照片,希望秒删, 这样体验很流畅。怎么做到呢?

1 Erase

除了用写操作隐式擦除之外,e-MMC还提供了一个主机显式擦除功能。e-MMC的可擦除单元为“擦除组”; 擦除组是用写入块数目来衡量的,写入块是设备的基本可写单位。Erase Group的大小是设备特定的参数。

根据不同的存储器技术,erase后,这段存储器地址范围的内容应为' 0 '或' 1 '。这个值在EXT_CSD中定义。一旦erase命令成功完成,被擦除的设备地址范围应该表现得好像被全部'0'或全部'1'覆盖,这取决于不同的内存技术。erase命令的影响应该只是将LBA映射到无效设备地址范围(注意,在某些情况下,其他flash管理任务也可能在执行该命令期间完成)。主机可以擦除连续的擦除组。

开始擦除过程有三个步骤。

  • 首先,主机使用ERASE GROUP_START (CMD35)命令定义擦除范围的起始地址,
  • 然后使用ERASE_GROUP_END (CMD36)命令定义擦除范围的最后一个地址,
  • 最后通过发出ERASE (CMD38)命令启动擦除过程,参数位设置为零。

错误情况

  • 如果不按照擦除Sequence(CMD35、CMD36、CMD38) 发送命令,设备将在状态寄存器中设置ERASE_SEQ_ERROR位,并重置整个擦除序列。

如果主机提供超出范围的地址作为CMD35或CMD36的参数,设备将拒绝该命令,以ADDRESS_OUT_OF_RANGE位设置响应并重置整个擦除序列。

如果设备接收到非擦除命令(非CMD35、CMD36、CMD38和CMD13),则响应设置ERASE_RESET位,重置擦除顺序,执行最后一条命令。

如果擦除范围包括写保护块,则保留写保护块,只擦除非保护块。应该设置状态寄存器中的WP_ERASE_SKIP状态位。如上所述,对于块写入,设备将通过保持低DAT0来指示擦除正在进行中(Busy 中)。实际擦除时间可能很长,主机可能发出CMD7命令取消选择设备。

根据CMD38 带的参数的不同, 擦除可以细分为不同的擦除类型。

 

在执行Erase命令时,主机应该注意到一个擦除组包含多个写块,每个写入块可能包含不同的信息片段。当Erase执行时,它将应用于擦除组内的所有写入块。在主机执行Erase命令之前,它应该确保不再需要各个写入块中的信息。因此,为了避免意外删除有效数据,最好在擦除整个设备或分区时候使用Erase命令。如果主机只希望清除单个写块,则Trim命令可能更合适。

2 Trim

Trim操作类似于erase操作。Trim函数将擦除操作应用于写入块而不是擦除组。Trim功能允许主机识别不再需要的数据,以便在后台擦除事件中必要时设备可以擦除数据。应用了trim功能的写块的内容应根据不同的存储技术为'0'或'1'。这个值在EXT_CSD中定义。

一旦trim命令成功完成,根据不同的内存技术,被Trim范围对应的设备地址范围应该表现为被全部'0'或全部'1'覆盖。trim命令的影响应该只是将LBA映射到无效物理地址(注意,在某些情况下,其他flash管理任务也可能在执行该命令期间完成)。

完成TRIM过程分为三个步骤。

  • 首先,主机使用ERASE_GROUP_START (CMD35)命令定义范围的起始地址,
  • 然后使用ERASE_GROUP_END (CMD36)命令定义范围的最后一个地址,
  • 最后通过发出erase (CMD38)命令启动擦除过程,将参数位0设置为1,其余参数设置为0。

对于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命令。这可能会使操作中涉及的数据处于未知状态。

3 Sanitize

Sanitize操作是除TRIM和Erase之外的一个功能,用于根据安全删除类型从设备中删除数据。使用Sanitize操作需要设备在物理上删除数据。Sanitize操作是通过向扩展的CSD[165] Sanitize START写入一个值来启动的。当设备执行清理操作时,DAT0 会一直拉低, 表示Busy中。设备将Busy的情况下继续Sanitize操作,直到发生以下事件之一:

  • 消毒操作完成。
  • HPI用于终止操作
  • 电源故障。
  • 硬件复位。

清理操作完成后,未映射的主机地址空间中不应存在任何数据。如果清理操作因HPI、电源故障、CMD0或硬件复位而中断,则无法保证未映射的主机地址空间的状态。主机必须通过写入SANITIZE_START[165]来重新启动清理操作,并允许操作完成,以确保未映射的主机地址空间是清空的。由于主机无法访问正在操作的区域,因此需要此功能的应用程序必须与各个设备制造商合作,以确保该操作正确执行,并了解对设备可靠性的影响。

4 Discard

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硬件重置)或电源故障将终止任何未决或活动的丢弃命令。这可能使操作中涉及的数据处于未知状态。

5 Secure Erase

说明: 安全擦除功能是为了向后兼容。新的系统级实现(基于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硬件重置)或电源故障将终止任何挂起的或活动的安全擦除命令。这可能使操作中涉及的数据处于未知状态。


 

参考

免责声明

本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

相关文章:

[元带你学: eMMC协议详解 14] 数据擦除(Erase) 详解

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4200字, 主要内容介绍了各种擦除操作概念以记用法,总结了不同擦除操作的区别, 根据不同安全级别和应用场景…...

【程序人生-Hello‘s P2P】哈尔滨工业大学深入理解计算机系统大作业

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 xxxx 学 号 2021xxxx 班 级 210xxxx 学 生 xx 指 导 教 师 xxx 计算机科学与技术学院 2023年5月 摘 要 HelloWorld是每个程序员接触的第一个程序,表面上平平无奇的它背后却是由操作系统许多设计精巧的机制支撑…...

Android Studio入门

首先确保系统已经安装好JDK和Android SDK Android SDK的安装有两种方案 方案一:直接下载包安装 官网下载 国内下载 方案二:使用命令行工具进行安装 在Android Studio官网下载Command line tools 最新:如果使用 Android Studio,…...

r2pm -ci r2ghidra 时报错:checking pkg-config flags for r_core... no

参考网址: sys/python.sh fails with checking pkg-config flags for r_core... no Issue #1943 radareorg/radare2 GitHub 进入目录/root/.local/share/radare2/r2pm/git/r2ghidra查看configure文件,查找报错位置 执行指令 : # pkg-co…...

【宿舍管理系统】注册登录页面的实现(前端)

目录 一.创建一个jsp文件,命名为login.jsp 代码: 1. 2. 3. 4. 5. 6. ​编辑 二. 创建一个css文件,并命名为style.css 1. ​编辑效果如下: ​编辑 代码解析: 2. 效果如下: 代码解析&#xff1…...

python写入excel,(二) 言简意赅傻瓜式写法

xlrd限制条数,openpyxl 上限较高,所以推荐这种写法 import openpyxl # openpyxl引入模块 def write_to_excel(path: str, sheetStr, info, data): # 实例化一个workbook对象 workbook openpyxl.Workbook() # 激活一个sheet …...

我用ChatGPT写2023高考语文作文(六):北京卷II

2023年 北京卷 II 适用地区:北京 舞台上,戏曲演员有登场亮相的瞬间。生活中也有许多亮相时刻:国旗下的讲话,研学成果的汇报,新产品的发布……每一次亮相,都受到众人关注;每一次亮相,…...

Vue中如何进行图表绘制

Vue中如何进行图表绘制 数据可视化是Web应用中非常重要的一部分,其中图表绘制是其中的重要环节。Vue作为一款流行的前端框架,提供了很多优秀的图表库,以满足不同业务场景下的需求。本文将介绍如何在Vue中进行图表绘制,包括使用Vu…...

【Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读】

Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读 INFORMATIONAbstract1 Introduction2 Related work3 Methodology3.1 Experimental setup 4 Results5 Discussion & Conclusion总结A Fairness metricsB Hyperparmeter DetailsC DatasetsD Prompt …...

Qt 定时器与定时事件

一、定时器 在头文件.h中进行声明: private slots:void timeOut(); // 定时器超时槽函数在.cpp中进行实现相应的功能: // 构造函数 Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// 创建一个新的定时…...

《UNUX环境高级编程》(1)UNIX基础

1、引言 2、UNIX体系结构 操作系统 一种软件,控制计算机硬件资源,提供程序运行环境。操作系统包含了内核和一些其他软件(如shell、公用函数库、应用程序等)。例如Linux就是GNU操作系统的内核,因此也称为GNU/Linux操作…...

MATLAB 入门之旅摘要

matlab官方基础课程,重温或者入门都是不错的选择。 MATLAB 入门之旅 MATLAB 入门之旅 | 自定进度在线课程 - MATLAB & Simulink 基本语法 示例说明x pi使用等号 () 创建变量。 左侧 (x) 是变量的名称,其值为右侧 (pi) 的值。y sin(-5)您可以使用括…...

chatgpt赋能python:Python小数运算:解决精度问题的最佳实践

Python小数运算:解决精度问题的最佳实践 在进行小数运算时,Python是一种十分常用的语言,但在进行小数运算时,由于二进制和十进制之间的转换不完全,可能会导致一些精度问题。为了避免这些问题,让我们一起了…...

Linux 安装Docker完整教程(六)

文章目录 背景一、Docker简介二、docker desktop 和 docker engin 区别三、Linux 安装Docker1. 安装docker的前置条件:2. 查看Docker版本3. 检查是否安装过Docker4. Docker自动化安装 (不想自带化安装的可跳过本步骤,选择手动安装)5. Docker手动安装&…...

手机连接adb 相关问题汇总

目录 关于端口占用问题1 关于修改adb 端口配置问题2 方法3 方法4 关于端口占用问题1 转载链接:https://www.jianshu.com/p/902a89b06271 报错信息: error: no device/emulators found error: device still connecting 解决方案: 重启…...

MySQL数据相关操作

一、介绍 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据以及。 二、插入数据INSERT 1. 插入完整…...

2023年5月青少年软件编程(Python) 等级考试试卷(四级)

青少年软件编程(Python) 等级考试试卷(四级)2023.6 分数: 100 题数: 38 一、 单选题(共 25 题, 共 50 分) 1.下列程序段的运行结果是? ( ) def s(n): if n0: …...

Python selenium自动化测试模型图解

1、线性测试 优势:每一个脚本都是完整独立的,每一个脚本对应一个测试用例 缺点:开发成本高,会有重复操作重复脚本;维护成本也高,修改重复操作的脚本时,要逐一进行修改。 2、模块化驱动测试 …...

【详解】篮球记分牌硬件及代码

篮球记分牌设计 1 系统设计1.1 设计任务 1.2 性能指标要求1.2 设计思路及设计框图1.2.1设计思路1.2.2总体设计框图1.2.3电路原理图1.2.3 PCB布线图 2 主要程序模块的设计及原理2.1 外部中断0 2.2 菜单2.3 两队比分及两队犯规次数显示及修改2.3.1选择功能2.3.2修改功能2.3.3显示…...

FreeRTOS实时操作系统(二)系统文件代码学习

文章目录 前言系统配置任务创建任务创建删除实践 前言 接着学习正点原子的FreeRTOS教程,涉及到一些详细的系统内文件代码 系统配置 可以通过各种的宏定义来实现我们自己的RTOS配置(在FreeRTOSconfig.h) “INCLUDE”:配置API函数…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...