[元带你学: eMMC协议详解 13] 数据读(Read) 写(Write) 详解

news2024/11/17 3:06:40

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

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

内容摘要

全文 4700字, 主要内容

1. 数据读取

2. 块读取操作

3. 数据写

4.块写操作

参考

1. 数据读取

当没有数据传输时,DATO-DAT7总线电平高。传输的数据块由每个数据线上的起始位(LOW)组成,后面跟着一个连续的数据流。数据流包含有效载荷数据(如果使用了设备外ECC,则包含纠错位)。数据流在每条数据线上以一个结束位(HIGH)结束。

除HS400外,所有接口的时钟信号同步传输,HS400接口的DS信号同步传输。面向块的数据传输的有效载荷在单数据速率模式下由一个CRC校验和保护,或者在双数据速率模式下由两个CRC校验和保护。

2. 块读取操作

在单数据速率模式下,数据传输的基本单位是一个块,其最大大小在CSD (READ_BL_LEN)中定义。CRC被附加到每个块的末尾,以确保数据传输的完整性。

CMD17 (READ SINGLE_BLOCK)发起块读操作,完成传输后,设备返回到transfer状态。在双数据速率模式下,读取的块数据大小始终为512字节,不支持读取部分块数据。

CMD18 (READ_MULTIPLE_BLOCK)开始传输几个连续的块。定义了两种类型的多块读事务(主机可以在任何时候使用其中一种):

  • 开放式多块读取 (Open End Read)

读取多块操作的块数量没有定义。设备将继续传输数据块,直到收到停止传输命令。

  • 具有预定义块计数的多个块读取 (Closed End Read)

设备将传输请求的数据块数量,终止事务并返回传输状态。在这种类型的多块读取结束时不需要Stop命令,除非以错误结束。为了启动具有预定义块计数的多块读取,主机必须使用SET_BLOCK_COUNT命令(CMD23) + READ_MULTIPLE_BLOCK (CMD18)命令。否则,设备将开始一个开放式的多块读取,可以使用STOP_TRANSMISSION命令停止。

在一个多块操作中,无论其类型如何,主机都可以在任何时候中止读取。事务中止是通过发送停止传输命令来完成的。如果出现以下任何一种情况,设备将拒绝该命令,保持Tran状态,并设置相应的错误位进行响应。

  • 主机将超出范围的地址作为参数提供给CMD17或CMD18。设置ADDRESS_OUT_OF_RANGE。
  • 当前定义的块长度对于读操作是非法的。设置BLOCK_LEN_ERROR。
  • 地址/块长度组合定位第一个与设备物理块不对齐的数据块。设置ADDRESS_MISALIGN。

如果设备在多块读取操作(两种类型)期间检测到错误(例如,超出范围,地址不对齐,内部错误等),它将停止数据传输并保持在数据状态。然后,主机必须通过发送停止传输命令来中止该操作。在对停止传输命令的响应中报告读取错误。如果主机发送的停止传输命令是在设备发送了一个预定义块数的多块操作的最后一个块之后发出的,那么该命令将被视为非法命令,因为设备已不再处于数据状态。当主机发送CMD12设备将以ADDRESS MISALIGN位集响应并返回到Tran状态。

3. 数据写

写操作的数据传输格式与读操作的数据传输格式类似。对于面向块的写数据传输,在每个数据块上增加一个单数据速率模式下的CRC校验位或两个双数据速率模式下的CRC校验位。

在写操作之前,设备对每个接收到的数据块执行CRC奇偶校验。通过这种机制,可以防止写入错误传输(指在传输线路上发送数据错误)的数据。一般来说,对写过程的中断不应该导致任何其他地址的现有数据损坏。

在不同的应用程序中,写操作期间断电的风险是不同的。此外,对于用于实现e MMC的某些技术,在电源故障期间保护现有数据(例如,以前完成的写操作所写的数据)和写性能之间存在权衡。

主机能够设置所需的数据可靠性类型。当EXT_CSD (WR_REL_SET)中的写数据可靠性参数(WR_DATA_REL_USR、WR_DATA_REL_1、WR_DATA_REL_2、WR_DATA_REL_3和WR_DATA_REL_4)设置为1时,将向主机表明关联分区的写机制已经实现了对该分区现有数据的保护。这意味着一旦设备向主机指示写操作已经成功完成,那么写入的数据以及之前写入的所有数据都不会被主机发起的、控制器发起的或意外的其他操作破坏。如果这些位的值为0,则表示在断电的情况下,这些分区中先前写入的数据存在一定的风险。此可靠性设置仅影响主用户区和通用分区的可靠性。启动分区和RPMB分区中的数据必须具有与设置WR_DATA_REL位所暗示的相同的可靠性。

主机可以选择更改设备上一个或多个分区的写操作的可靠性。整个寄存器被认为是一次写入,所以主机有一次机会写入寄存器中的所有位。(不允许单独写操作来更改单个位)这种写操作必须作为分区过程的一部分进行,并且必须在PARTITION_SETTING_COMPLETED位设置之前进行。对WR_REL_SET寄存器所做的更改在分区过程完成之前(即在电源周期发生并且分区成功完成之后)不会产生影响。设置设备中不存在的分区的数据可靠性对设备没有影响。所有写操作必须按照它们到达的顺序完成。

4.块写操作

在单数据速率模式下,在块写入(CMD24 - 27)期间,主机将一个或多个数据块传输到设备,并在每个块的末尾附加一个CRC。支持块写入的设备应该总是能够接受由WRITE_BL_LEN定义的数据块。如果CRC失败,设备应在DATO线上提示失败(见下文);传输的数据将被丢弃,不写入,所有后续传输的块(多块写模式)将被忽略。双数据速率模式下,一个块写入的数据大小始终为512字节,不支持部分块数据写入,并且在每个块的末尾附加两个CRC,一个为偶数字节,一个为奇数字节。CMD25 (WRITE_MULTIPLE_BLOCK)启动几个连续块的传输。定义了三种类型的多块写事务(主机可以在任何时候使用这三种类型中的任何一种):

 Open-ended Multiple-block write

写多块操作的块数量没有定义。设备将持续接受和编程数据块,直到收到停止传输命令。

 Multiple-block write with pre-defined block count

设备将接受请求的数据块数量,终止事务并返回传输状态。在这种类型的多块写入结束时不需要Stop命令,除非以错误结束。为了启动具有预定义块计数的多块写入,主机必须使用SET_BLOCK_COUNT命令(CMD23)WRITE_MULTIPLE_BLOCK (CMD25)命令。否则,设备将开始一个开放式的多块写入,可以使用STOP_TRANSMISSION命令停止。

 Reliable Write: Multiple block write with pre-defined block count and Reliable Write parameters.

此事务类似于基本的预定义多块写入(在前面的项目中定义),但有以下例外。逻辑地址所指向的旧数据必须保持不变,直到写入同一逻辑地址的新数据被成功编程。这是为了确保由可靠写事务更新的目标地址从不包含未定义的数据。即使在编程过程中突然断电,数据也必须保持有效。

SET_BLOCKLEN(CMD16)定义的块大小被忽略,所有块的长度都是512 B。如果激活大扇区大小模式,数据传输将在512b扇区中的多个扇区中进行,或者在8个512b扇区中的多个扇区中进行。对可靠写入的大小没有限制。

  • 该功能通过在SET_BLOCK_COUNT命令(CMD23)参数中将可靠写请求参数(位31)设置为“1”来激活。
  • 可靠写事务必须是扇区对齐的,如果一个可靠写不是扇区对齐的,错误位19将被设置,事务将不会完成。
  • 如果在可靠写入过程中发生电源丢失,则写入所修改的每个扇区都是原子的。电源故障后,扇区可能包含旧数据或新数据。被中断的写操作修改的所有扇区可能处于以下状态之一:所有扇区都包含新数据,所有扇区都包含旧数据或部分扇区包含新数据,部分扇区包含旧数据。
  • 在一个可靠的写操作被高优先级中断操作中断的情况下,寄存器标记为已完成的扇区将包含新数据,其余扇区将包含旧数据。
  • REL_WR_SEC_C[222]寄存器应该设置为1,对可靠的写操作没有影响。

在一个多块操作中,无论其类型如何,主机都可以在任何时候中止写操作。事务中止是通过发送停止传输命令来完成的。如果一个具有预定义块计数的多块写操作被终止,那么剩余块中的数据将不被定义。如果出现以下任何一种情况,设备将拒绝该命令,保持Tran状态,并设置相应的错误位进行响应。

主机提供超出范围的地址作为CMD24或CMD25的参数。设置ADDRESS_OUT_OF_RANGE。

当前定义的块长度对于写操作是非法的。设置BLOCK_LEN_ERROR。

地址/块长度组合定位第一个与设备物理块不对齐的数据块。设置ADDRESS_MISALIGN。

如果设备在多块写操作(两种类型)期间检测到错误(例如,写保护违规,超出范围,地址不对齐,内部错误等),它将忽略任何进一步的传入数据块并保持在接收状态。然后,主机必须通过发送停止传输命令来中止该操作。在响应停止传输命令时,报告写错误。如果主机在接收到预先设定的多块写操作的最后一个数据块后发出停止传输命令,则认为该命令是非法的,因为设备已不再处于rcv状态。如果主机使用的部分块的累积长度不是块对齐的,并且不允许块错位(CSD参数WRITE_BLK_MISALIGN未设置),设备将在接收第一个错位块时检测到块错位错误,中止写操作,并忽略所有后续的数据。当主机发送CMD12时,设备将响应ADDRESS_MISALIGN位集并返回到Tran状态。如果主机将SET_BLOCK_COUNT命令(CMD23)的参数设置为所有o,则该命令被接受;然而,随后的写入将遵循开放式多块写入协议(需要STOP_TRANSMISSION命令—CMD12)。CID和CSD寄存器的编程不需要先前的块长度设置。传输的数据也受CRC保护。如果CSD或CID寄存器的一部分存储在ROM中,那么这个不可更改的部分必须与接收缓冲区的相应部分相匹配。如果匹配失败,那么设备将报告一个错误,并且不会更改任何寄存器内容。

有些设备可能需要很长且不可预测的时间来写入数据块。在接收到数据块并完成CRC检查后,设备将开始写入并保持低DATO线。主机可以在任何时候用SEND_STATUS命令(CMD13)轮询设备的状态,设备将用它的状态来响应(睡眠状态除外)。状态位READY_FOR_DATA表示设备是否可以接受新数据。主机可以通过发出CMD7来取消选择设备,这将使设备进入断开状态,并在不中断写操作的情况下释放DATO线。当重新选择设备时,它将通过将DATO拉到低来重新激活忙指示。有关忙指示的详细信息,请参见第6.15节如果一个主机已经发送了一个CMD16用于密码设置到高于2GB的设备密度,那么这个主机必须在写数据传输之前重新发送CMD16;否则,由于数据块(密码应用除外)传输是扇区单位(512B),设备将响应BLK_LEN_ERROR并保持TRANS状态而不进行数据传输。在不支持部分写访问的情况下,相同的错误适用于高达2GB的设备密度。


参考

免责声明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python使用happybase写入HBase

HBase是一个分布式的、面向列的NoSQL数据库,可以存储大量的非结构化或半结构化的数据。tif是一种常见的影像文件格式,可以存储多波段的栅格数据。本文将介绍如何使用Python的happybase模块和gdal模块,从tif格式的影像文件中读取数据&#xff…

排序算法的奇妙冒险

排序算法的奇妙冒险 一.排序的概念1.1 排序的定义1.2 排序的稳定性1.3 排序的内排序和外排序 二.插入排序2.1 直接插入排序2.2 希尔排序 三.选择排序3.1直接选择排序3.2 堆排序 四.交换排序4.1 冒泡排序4.2 快速排序**选取基准值的方法**快速排序的优化非递归实现快速排序 五.归…

Web3简述MetaMask并演示谷歌安装MetaMask扩展程序方式

Web3到现在理论这段是说的有点太多了 那么 我们先来看个东西 叫 MetaMask 这个在我们项目开发过程中需要使用 其实 你如果去找MetaMask 可能会被一些关键字下到 可能会看到 虚假 诈骗等关键字 因为 这个东西本事就是一个开源的以太坊的一个钱包 那么 钱包肯定就是用来管理资产…

LoadDef python工具包学习一:计算love数

首先在github下载这个工具箱:https://github.com/hrmartens/LoadDef 下载完毕,解压缩进入如下的界面,点击进入working工作文件夹。在doc文件夹里面有帮助文档和教程,有需要的可以仔细阅读。 loaddef主要的功能模块包括&#xff1…

力扣日记1494

1. 题目 [LeetCode 1494. 并行课程 II]https://leetcode.cn/problems/parallel-courses-ii/) 1.1 题意 严格按照选课先修顺序选课,每个学期选课数有上限,求选完所有课程的最短学期数 1.2 分析 这道题的数据量很小,而且作为困难题&#xff…

一起学 WebGL:纹理对象学习

大家好,我是前端西瓜哥,今天我们来了解 WebGL 的纹理对象(Texture) 纹理对象,是将像素(texels)以数组方式传给 GPU 的对象,常见场景是贴图,就是将图片的数据应用到 3D 物…

vue 根据word摸板导出word文档,并压缩为zip

yarn add jszip3.10.1 yarn add jszip-utils0.1.0 yarn add pizzip3.1.4 yarn add docxtemplater3.29.5 yarn add docxtemplater-image-module-free1.1.1 yarn add file-saver2.0.5 注意:这里的fileUrl必须是绝对路径,否则可能会报 is not zip的错误&…

当pytest遇上poium会擦出什么火花

当pytest遇上poium会擦出什么火花 首先,创建一个test_sample/test_demo.py 文件,写入下面三行代码。 def test_bing(page):page.get("https://www.bing.com")assert page.get_title "必应"不要问题 page 从哪里来,打开…

(LLM) 的所有知识;10分钟了解向量数据库;微软 Bing 可以识别图片了;

🦉 AI新闻 🚀 微软 Bing 可以识图」了,吊打 GPT-4? 摘要:微软 Bing 最新识图功能让用户可以上传图片并进行编程、做题、看病等操作,还能分析梗图笑点。然而在某些情况下表现不佳,例如无法数清…

技术分享 | i.MX8M Plus开发板 固定IP地址以及单网口多IP设置

以启扬IMX8MP开发板为例,给大家分享固定IP地址以及单网口多IP设置的步骤流程。 固定IP地址设置 20-wired.network 重启Network生效 网口多ip设置 对于一些网络管理的命令 connman设置(参考) imx8 yocto系统的init system使用systemd&#xff…

精选Java SSM 框架基础面试题

一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,se…

STM32 GPIO 详解

0. 实验平台 基于STM32F407ZG 1. GPIO 简介 1.1 简介 GPIO全称:General Purpose Input Output,即通用输入输出端口,一般用来采集外部器件的信息或者控制外部器件工作,即输入输出 1.2 STM32 的 GPIO 特点 不同型号&#xff0…

SpringBatch从入门到实战(五):执行上下文和单步骤重启

一:执行上下文 1.1 Job Context 作业上下文 JobContext 绑定 JobExecution 执行对象,为Job作业执行提供执行环境(上下文)。 1.2 Step Context 步骤上下文 StepContext 绑定 StepExecution 执行对象,为Step步骤执行提供执行环境(上下文)。 …

【剑指offer专项突破版】栈篇——“C“

文章目录 前言一、后缀表达式题目分析思路分析代码 二、小行星碰撞题目分析思路分析代码 三、每日温度题目分析思路分析代码 四、直方图最大矩形面积题目分析思路分析代码 五、矩阵中最大的矩形题目分析思路分析代码 总结 前言 剑指offer专项突破版(力扣官网&#x…

IBM不藏私:深刻解析量子计算机的突破和机遇

​ 巴伐利亚科学部长Markus Blume在莱布尼茨超级计算中心与Dieter Kranzlmlle(左)一起观看量子计算机的部分构件。(图片来源:网络) 关于量子计算机的研究已进行了数十年,目前还尚未生产一台能够掀起计算革命…

Vue全家桶(一):Vue基础+Vue-Cli+Vue组件化+过渡动画

目录 1.Vue概述1.1 认识Vue1.2 Vue的两核心1.3 Vue的初体验1.4 Vue的生命周期 2. Vue-CLI (Command Line Interface)3. Vue基本使用3.1 传统开发模式对比3.2 Vue.js引入3.3 Vue.js 案例分析3.3.1 实例参数el、data、methods的写法 4. Vue模板语法4.1 插值语法 {{xxx}}4.2 指令语…

vue3+ts:shims-vue.d.ts

一、本文引子 uniapp(3.8.4.20230531) vue3 ts vite 项目 在搭建这个base项目的时候出现红素波浪线如图,代码运行正常,但是看起来很难受,于是各种查找,能找到的资料很少,可能和我提问不够准…

【备战秋招】每日一题:4月23日美团春招第一题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第一题-申请奖学金 在线评测链接:P1245 题目内容 塔子哥是一个热爱学习的大学生,他的梦想是成为一名优秀的算法竞赛高手。为了实现自己的梦想,他需…

代理ip匿名原理及那些行业需要代理ip

互联网的高速发展,连带了代理ip也受到了更多人的使用,不同的行业都存在使用代理ip的情况,同时代理ip也以为匿名程度分成了高匿、普匿、透明代理,那么代理ip匿名的原理是什么呢?又有哪些行业需要代理ip呢?下…

flume环境配置-传输Hadoop日志(namenode或datanode日志)

解压文件 修改文件名 配置环境变量 执行flume-ng version 将flume-env.sh.template改名为flume-env.sh, 并修改其配置 启动Flume传输Hadoop日志 启动flume 解压文件 tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /opt 修改文件名 mv apache-flume-1.9.0-b…