当前位置: 首页 > 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函数…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...