[元带你学: eMMC协议详解 20] emmc的命令(cmd)、响应(resp)详解

news2024/12/23 14:20:55

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

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

内容摘要

全文 8100字, 主要内容

对eMMC的command进行详细介绍,主要包含如下内容:

(1) emmc命令有哪些

(2) 使用不同命令时要注意的点

(3) command class 分类

(4) command 命令参数和响应格式


1.前言

eMMC 命令很多, 可以分成很多类。比较重要的是class 0/2/4/11。

2.command类型

command类型说明
bc不带response的广播命令
bcr带有response的广播命令
ac点对点无数据传输
adtc点对点数据传输

表 command类型

3. command格式

如上图所示,eMMC Command 由 48 Bits 组成,各个 Bits 的解析如下所示:

表 command格式

  • 总长度48bits;
  • 固定以起始bit 值0开始,以End Bit 值1结束;
  • transmiter bit表示数据的传输方向,1代表从host to device,即写操作, 0 表示 device to host, 即读操作;
  • command index 用6个bits指示了command的索引,取值范围0~63;
  • argument:有些command需要发送参数,是否需要发送参数依赖于具体的命令;
  • CRC7是包含 Start Bit、Transmission Bit、 Command Index 和 Argument 内容的 CRC 校验值。通过CRC7保护,device 端在接收到CMD时同样会计算一个CRC值,如果与host发送的CRC不一致,则被认为是传输错误;

注1:eMMC可能不会支持0~63的所有命令,有些命令可能会不支持

注2: CRC 校验简单来说,是发送方将需要传输的数据“除于”(模2除)一个约定的数,并将得到的余数附在数据上一并发送出去。接收方收到数据后,再做同样的“除法”,然后校验得到余数是否与接收的余数相同。

如果不相同,那么意味着数据在传输过程中发生了改变。扩展阅读 CRC wiki 中的介绍。

Command 线是一跟线,所以在波形上看到这 48 bit 是依次传输的,看波形时, 要找到 Start bit(从高拉低),然后再数对应的bit 数目偏移, 一般偏移 2 个bit, 看对应的Command 是什么,来分析这一段波形的行为。

4. command class 分类

eMMC将command index(0~56)分成12个class,每个class代表一类功能,包含所有commands的一个子集。具体某一个设备支持哪些class的命令,可以通过CSD寄存器的CCC[95:84] feilds来查询,如bit84为1则表示支持class0。

其实一般命令(除了废弃classs)设备都会支持,也不复杂。要关注的是 class 11 Command Queue 命令,有的平台是不支持Command Queue, 这样无法做CMDQ Read 和 CMDQ Write, 智能用普通的Read(CMD16 or CMD17) 和 普通Write(CMD24 or CMD25) 命令,极速性能也会差一些。

对于 Pack Read 和 Pack Write, 虽然协议有这种, 但实际很少遇到。 这个功能不够灵活, 算是鸡肋功能, 但设备一般支持这个特性,只是主机几乎不会用到。所以大家也不要花太多resource 在 Pack Read/Write 上。

device command classclass description note
class 0basic基本命令
class 1obsolete 废弃
class 2block read块数据读相关命令,包括设置块长度、读取单块、读取多块
class 3obsolete废弃
class 4block write块数据写相关命令,包括设置块个数、写入单块、写入多块、修改设备id寄存器、修改CSD、设置RTC
class 5erase设置擦除组开始地址、设置擦除组结束地址、擦除操作
class 6write protection设置写保护、清除写保护、获取device的写保护状态、获取写保护类型
class 7lock devicelock/unlock device
class 8application-specific指示下一个命令是一个特定应用命令而非标准命令  
class 9I/O mode写寄存器、设置系统进入中断模式
class 10security protocols连续传输数据块从device to host或从host to device
class 11command queuing执行队列里的任务
class 12reserved\

 表 command分类

以上转载自

https://www.cnblogs.com/smartjourneys/p/6657397.html

5. Command 命令和Response 格式

Basic commands (class 0 and class 1)

CMD0

Abbr.TypeArgumentRespDescription
GO_IDLE_STATEbc[31:0] 00000000NoneResets the Device to idle state
GO_PRE_IDLE_STATEbc[31:0] F0F0F0F0NoneResets the Device to pre-idle state
BOOT_INITIATION-[31:0]FFFFFFFANoneInitiate alternative boot operation

CMD1

Abbr.TypeArgumentRespDescription
SEND_OP_CONDbcr[31:0] OCR without busyR3Asks Device, in idle state, to send its Operating Conditions Register contents in the response on the CMD line.

CMD2

Abbr.TypeArgumentRespDescription
ALL_SEND_CIDbcr[31:0] stuff bitsR2Asks Device to send its CID number on the CMD line

CMD3

Abbr.TypeArgumentRespDescription
SET_RELATIVE_ADDRac[31:16] RCA, [15:0] stuff bitsR1Assigns relative address to the Device

CMD4

Abbr.TypeArgumentRespDescription
SET_DSRbc[31:16] DSR, [15:0] stuff bits-Programs the DSR of the Device

CMD5

Abbr.TypeArgumentRespDescription
SLEEP_AWAKEac[31:16] RCA, [15]Sleep/Awake, [14:0] stuff bitsR1bToggles the Device between Sleep state and Standby state.

CMD6

Abbr.TypeArgumentRespDescription
SWITCHac[31:26] Set to 0, [25:24] Access, [23:16] Index, [15:8] Value, [7:3] Set to 0, [2:0] Cmd SetR1bSwitches the mode of operation of the selected Device or modifies the EXT_CSD registers.

CMD7

Abbr.TypeArgumentRespDescription
SELECT/DESELECT_CARDac[31:16] RCA, [15:0] stuff bitsR1/R1bCommand toggles a device between the standby and transfer states or between the programming and disconnect states.

CMD8

Abbr.TypeArgumentRespDescription
SEND_EXT_CSDadtc[31:0] stuff bitsR1Device sends its EXT_CSD register as a block of data.

CMD9

Abbr.TypeArgumentRespDescription
SEND_CSDac[31:16] RCA, [15:0] stuff bitsR2Addressed Device sends its Device-pecific data (CSD) on the CMD line.

CMD10

Abbr.TypeArgumentRespDescription
SEND_CIDac[31:16] RCA, [15:0] stuff bitsR2Addressed Device sends its Device identification (CID) on CMD the line.

CMD12

Abbr.TypeArgumentRespDescription
STOP_TRANSMISSIONac[31:16] RCA, [15:1] stuff bits, [0] HPIR1/R1bForces the Device to stop transmission. If HPI flag is set the device shall interrupt its internal operations in a well-defined timing.

CMD13

Abbr.TypeArgumentRespDescription
SEND_STATUSac[31:16] RCA, [15] SQS, [14:1] stuff bits, [0] HPIR1In case SQS bit = 0: Addressed Device sends its status register. If HPI flag is set the device shall interrupt its internal operations in a well-defined timing. In case SQS bit = 1: indicate that this is a QSR query. In response device shall send the QSR (Queue Status Register). In this case HPI must be set to ‘0’

CMD14

Abbr.TypeArgumentRespDescription
BUSTEST_Radtc[31:0] stuff bitsR1A host reads the reversed bus testing data pattern from a Device.

CMD15

Abbr.TypeArgumentRespDescription
GO_INACTIVE_STATEac[31:16] RCA, [15:0] stuff bits-Sets the Device to inactive state

CMD19

Abbr.TypeArgumentRespDescription
BUSTEST_Wadtc[31:0] stuff bitsR1A host sends the bus test data pattern to a Device

NOTE 1 - CMD7, R1 while selecting from Stand-By State to Transfer State; R1b while selecting from Disconnected State to Programming State.
NOTE 2 - CMD12, RCA in CMD12 is used only if HPI bit is set. The argument does not imply any RCA check on the device side.
NOTE 3 - CMD12, R1 for read cases and R1b for write cases.

Block-oriented read commands (class 2)

CMD16

Abbr.TypeArgumentRespDescription
SET_BLOCKLENac[31:0] block lengthR1Sets the block length (in bytes) for all following block commands (read and write). Default block length is specified in the CSD

CMD17

Abbr.TypeArgumentRespDescription
READ_SINGLE_BLOCKadtc[31:0] data addressR1Reads a block of the size selected by the SET_BLOCKLEN command

CMD18

Abbr.TypeArgumentRespDescription
READ_MULTIPLE_BLOCKadtc[31:0] data addressR1Continuously transfers data blocks from Device to host until interrupted by a stop command, or the requested number of data blocks is transmitted If sent as part of a packed read command, the argument shall contain the first read data address in the pack (address of first individual read command inside the pack).

CMD21

Abbr.TypeArgumentRespDescription
SEND_TUNING_BLOCKadtc[31:0] stuff bitsR1128 clocks of tuning pattern (64 byte in 4bit mode or 128 byte in 8 bit mode) is sent for HS200 optimal sampling point detection.

NOTE 1 - CMD17 & CMD18, Data address for media =<2 32="" gb="" is="" a="" bit="" byte="" address="" and="" data="" for="" media=""> 2GB is a 32 bit sector (512 B) address.
NOTE 2 - CMD17, The transferred data must not cross a physical block boundary, unless READ_BLK_MISALIGN is set in the CSD register.

Block-oriented write commands (class 4)

CMD23 (default)

Abbr.TypeArgumentRespDescription
SET_BLOCK_COUNTac[31] Reliable Write Request, [30] ‘0’ non- packed, [29] tag request,[28:25] context ID, [24]: forced programming, [23:16] set to 0, [15:0] number of blocksR1Defines the number of blocks (read/write) and the reliable writer parameter (write) for a block read or write command.

CMD23 (packed)

Abbr.TypeArgumentRespDescription
SET_BLOCK_COUNTac[31] set to 0, [30] ‘1’ packed, [29:16] set to 0, [15:0] number of blocksR1Defines the number of blocks (read/write) for the following packed write command or for the header of the following packed read command.

CMD24

Abbr.TypeArgumentRespDescription
WRITE_BLOCKadtc[31:0] data addressR1Writes a block of the size selected by the

SET_BLOCKLEN command. |

CMD25

Abbr.TypeArgumentRespDescription
WRITE_MULTIPLE_BLOCKadtc[31:0] data addressR1Continuously writes blocks of data until a STOP_TRANSMISSION follows or the requested number of block received. If sent as a packed command (either packed write, or the header of packed read) the argument shall contain

the first read/write data address in the pack (address of first individual command inside the pack). |

CMD26

Abbr.TypeArgumentRespDescription
PROGRAM_CIDadtc[31:0] stuff bitsR1Programming of the Device identification register. This command shall be issued only once. The Device contains hardware to prevent this operation after the first programming. Normally this command is reserved for the manufacturer.

CMD27

Abbr.TypeArgumentRespDescription
PROGRAM_CSDadtc[31:0] stuff bitsR1Programming of the programmable bits of the CSD.

CMD49

Abbr.TypeArgumentRespDescription
SET_TIMEadtc[31:0] stuff bitsR1Sets the real time clock according to the RTC information in the 512 B data block.

NOTE 1 - CMD24 & CMD25, Data address for media =<2 32="" gb="" is="" a="" bit="" byte="" address="" and="" data="" for="" media=""> 2GB is a 32 bit sector (512 B) address.
NOTE 2 - CMD24, The transferred data must not cross a physical block boundary, unless READ_BLK_MISALIGN is set in the CSD register.

Block-oriented write protection commands (class 6)

Erase commands (class 5)

I/O mode commands (class 9)

Lock Device commands (class 7)

Application-specific commands (class 8)

Security Protocols (class 10)

Command Queue (Class 11)

本部分你转载自 

eMMC Commands_子曰小玖的博客-CSDN博客


参考

[1] https://www.cnblogs.com/smartjourneys/p/6657397.html

免责声明

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

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

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

相关文章

Java POI (1)—— 数据读写操作快速入门

一、Excel的版本区别&#xff08;03版和07版&#xff09; 所谓“03版” 和 “07版”&#xff0c;指的是 Microsoft Excel 版本号。这些版本号代表着不同的Excel 文件格式。2003版 Excel 使用的文件格式为 .xls&#xff0c;而2007版开始使用新的文件格式 .xlsx。 . xlsx 文件格式…

Unreal 5 蓝图常用的一些节点和规范

命名规范 蓝图类以 BP_作为前缀 对应Blue Print 混合空间以 BS_作为前缀 Blend Space 静态网格体以 SM_作为前缀 StaticMesh 骨骼网格体以 SK_作为前缀 Skeletal Mesh 纹理以 T_作为前缀 Texture 粒子系统 以 PS_作为前缀 Particle System 主材质以 M_作为前缀 Material 材质子…

手术机器人常见骨科手术 TKA UKA HTO

TKA UKA HTO 首先这几种手术都是常见的手术&#xff0c;下面先进行常见的但要介绍&#xff1a; 近年来有大量的研究聚焦于手术方式的对比&#xff0c;这里先就现有证据对「HTO」、单髁置换「UKA」和全膝置换「TKA」做一个简要的总结&#xff0c;以便于速查&#xff1a; TKA 不…

熵权法步骤及例题讲解

一、基本原理 在信息论中&#xff0c;熵是对不确定性的一种度量。不确定性越大&#xff0c;熵就越大&#xff0c;包含的信息量越大&#xff1b;不确定性越小&#xff0c;熵就越小&#xff0c;包含的信息量就越小。 根据熵的特性&#xff0c;可以通过计算熵值来判断一个事件的随…

【玩转Linux操作】详细讲解shell的注释,变量,字符串,数组等操作

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;概述⭐注意⭐示例&#x1f3f3;️‍&#x1f308;然…

scala的基本语法

注释 对于scala的注释&#xff0c;简而言之就是一句话&#xff0c;和java的注释一模一样 基本语法 &#xff08;1&#xff09;单行注释&#xff1a;// &#xff08;2&#xff09;多行注释&#xff1a;/* */ &#xff08;3&#xff09;文档注释&#xff1a;/****/代码示例&…

samaphore、countdownlatch、cyclinarrier

目录 一、samaphore 1、介绍 2、应用 3、原理 二、countdownlatch 三、cyclicbarrier 一、samaphore 1、介绍 信号量&#xff0c;用来限制同时访问共享资源的线程上限。可以理解为停车场入口的提示排&#xff0c;标识有多少车位&#xff0c;有车位才能进去停车&#xf…

ElasticSearch-使用IK分词器进行分词

使用KIbana测试IK分词器 打开开发工具台 ik_smart 最少分词器 分词结果比较少 GET _analyze{"analyzer": "ik_smart","text": "中国共产党"}ik_max_word 颗粒度最细分词器 分词结果比较多,组成各种结果,穷尽词库的可能&#xff01…

easypan前端学习

文章目录 前端项目node 版本node镜像构建项目创建项目安装项目所有依赖 图片资源网站encodeURI & decodeURIapp.config.globalProperties与getCurrentInstanceObject.assignvue-cookies安装vue-cookies 使用vue-cookiesrouter.currentRoutepreserve logimport.meta.envRequ…

QPaint绘制图形

流程 继承QWidget类&#xff0c;重写paintEvent方法&#xff0c;在其中使用QPainter进行绘图。 举例 创建项目&#xff0c;项目结构如下&#xff1a; // widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget…

TypeScript ~ TS 掌握编译文件配置项 ⑥

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

git 上传下载

文章目录 gitee/GitHub 是用来做什么的&#xff1f;什么时候需要学习上传项目到 gitee&#xff1f;为什么要将本地项目上传到 gitee&#xff1f;创建 gitee 仓库&#xff1a;在本地新建一个项目将仓库拉取到本地使用 idea 实现项目的上传下载gitee 仓库查看 下面我就来为大家介…

第六章 习题(6789B)【计算机系统结构】

第六章 习题【计算机系统结构】 前言推荐第六章 习题678911 最后 前言 2023-6-24 10:43:46 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 第五章 作业&#xff08;149A&#xff09;【计算机系统结构】 答案参考&#xff1a; https://www.docin.com/p-28456…

LVDS (Low Voltage Differential Signaling)基础知识

LVDS(Low Voltage Differential Signaling&#xff09;: 是一种小振幅差分信号技术&#xff0c;它使用非常低的幅度信号 (250mV~450mv&#xff09;通过一对平行的 PCB 走线或平衡电缆传输数据。 在两条平行的差分信号线上流经的电流及电压振幅相反&#xff0c;噪声信号同时耦…

小鱼C python - 集合的练习

题一&#xff1a;用字典实现集合的去重特性 1. 生成100个1&#xff5e;100的随机值 思路&#xff1a; 1. range 范围 2. random.randint(a,b) import random x [] for I in range(100):x.append(random.randint(1,100)) print(x) 2. x和y的交集 思路&#xff1a;1.遍历x,…

通过 pGina 对 Windows 设备进行管理

文章目录 前言1、环境信息1.1、服务器端1.2、客户端 2、pGina 安装及配置2.1、下载并安装2.2、配置2.3、模拟测试2.4、Windows 远程登录测试 总结 前言 对 Windows 设备进行管理&#xff0c;一般是通过 AD 进行的&#xff0c;但是这玩意儿是收费的&#xff0c;而且还挺贵。有没…

SpringSecurity(二):自定义认证(源码+落地实现)。

自定义认证 自定义资源权限规则资源分类自定义资源权限规则为什么我们要自定义呢&#xff1f;如何去覆盖呢&#xff1f;WebSecurityConfigurerAdapter它是干什么用的实例 自定义登录界面步骤源码解析 自定义登录成功处理&#xff08;前后端分离的情况&#xff09;项目环境succe…

Axure中使用echarts图标

第一步&#xff1a;axure中防一个矩形框 第二步&#xff1a;将矩形框命名为Demo 这步很重要&#xff0c;后续会引用这个名字 第三步&#xff1a;打开Echarts示例&#xff0c;选择需要的样式&#xff0c;并调整数值 Examples - Apache ECharts 第四步&#xff1a;代码准备 需…

Windows10host文件修改方法

1、首先打开“此电脑”&#xff0c;定位到&#xff1a; C:\Windows\System32\drivers\etc 2、使用鼠标右键单击“hosts”&#xff0c;弹出来的菜单中选择“属性” 3、弹出“文件属性”窗口后单击“上方的”安全“栏”。 选中“ALL APPLICATON PACKAGES”后单击“编辑” 4、同…

Jmeter核心结构和运行原理(1)

Jmeter核心结构和运行原理 一、Jmeter核心结构和运行原理1、JMeter核心结构2、JMeter的体系结构3、JMeter运行原理a、GUI模式&#xff1a;b、非GUI模式&#xff1a;c、单机模式&#xff1a;d、分布式模式 一、Jmeter核心结构和运行原理 1、JMeter核心结构 测试计划 线程组 配…