Linux MMC子系统 - 3.eMMC 5.1常用命令说明(1)

2023-11-06 01:44

本文主要是介绍Linux MMC子系统 - 3.eMMC 5.1常用命令说明(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

By: Ailson Jack
Date: 2023.11.05
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/162.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

微信公众号:嵌入式那些事

概述

本文对eMMC 5.1协议定义的命令做一个简单的说明,以便在使用具体的命令时有个参考。

eMMC 5.1协议定义的命令可以分为11类,具体分类描述如下:

  • Basic commands (class 0 and class 1),基本命令;
  • Block-oriented read commands (class 2),面向块的读命令;
  • Class 3 commands,Class 3命令;
  • Block-oriented write commands (class 4),面向块的写命令;
  • Block-oriented write protection commands (class 6),面向块的写保护命令;
  • Erase commands (class 5),擦除命令;
  • I/O mode commands (class 9),I/O模式命令;
  • Lock Device commands (class 7),设备锁定命令;
  • Application-specific commands (class 8),特定应用命令;
  • Security Protocols (class 10),安全协议命令;
  • Command Queue (Class 11),命令队列命令;

本文主要对常用的6类命令进行说明,其他不常用的命令遇到时查看手册即可:

  • Basic commands (class 0 and class 1),基本命令;
  • Block-oriented read commands (class 2),面向块的读命令;
  • Block-oriented write commands (class 4),面向块的写命令;
  • Erase commands (class 5),擦除命令;
  • Lock Device commands (class 7),设备锁定命令;
  • Application-specific commands (class 8),特定应用命令;

基本命令(class 0 and class 1)

CMD0

CMD0的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
bc[31:0] 00000000NoneGO_IDLE_STATEResets the Device to idle state
bc[31:0] F0F0F0F0NoneGO_PRE_IDLE_STATEResets the Device to pre-idle state
[31:0]FFFFFFFANoneBOOT_INITIATIONInitiate alternative boot operation

CMD0带参数0x00000000时,命令的类型为bc,此时CMD0的命令缩写为GO_IDLE_STATE,命令无响应,命令功能为复位设备,让设备进入idle状态。

CMD0带参数0xF0F0F0F0时,命令的类型为bc,此时CMD0的命令缩写为GO_PRE_IDLE_STATE,命令无响应,命令功能为复位设备,让设备进入pre-idle状态。

CMD0带参数0xFFFFFFFA时,命令无类型,此时CMD0的命令缩写为BOOT_INITIATION,命令无响应,命令功能为让设备进入boot operation模式。

考虑到CMD0的兼容性,如果eMMC设备收到CMD0命令,并且参数是除了0xFFFFFFFA或者0xF0F0F0F0以外的其他值,eMMC设备在除了Inactive状态的其他任何状态下,eMMC设备会将CMD0命令视为设备复位命令,并让eMMC设备进入idle状态。

CMD1

CMD1的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
bcr[31:0] OCR with-out busyR3SEND_OP_CONDAsks Device, in idle state, to send its Operating
Conditions Register contents in the response on the
CMD line.

CMD1的参数可以根据OCR寄存器的位定义来填写,命令的类型为bcr,此时CMD1的命令缩写为SEND_OP_COND,命令响应为R3,命令功能为在idle状态下要求eMMC设备通过R3响应返回它的OCR寄存器的值。

如果eMMC设备不支持boot operation模式,或者eMMC设备仅仅支持eMMC 4.2或者更早的版本,或者BOOT_PARTITION_ENABLE位被清除,在power-on之后eMMC设备会自动进入idle状态。处于idle状态的eMMC设备,除非收到CMD1,否则会忽略所有的总线事务。

CMD1是一个特殊的同步命令,用来协商操作电压范围以及查看设备是否仍处在power-up序列。CMD1的响应除了包含eMMC设备的操作电压profile,还包含一个busy标志,用于指示eMMC设备仍处于power-up过程,并且没有准备好去identification。当R3中的busy位为0时,告诉Host当前的eMMC设备并没有准备好,Host需要重复发送CMD1和接收R3,直到eMMC设备准备好。当Host发送CMD1给eMMC设备,并且CMD1的参数带有有效电压范围,那么eMMC设备必须在1秒以内完成它的初始化。

如果Host发送的CMD1的参数为0,那么就表示Host在询问eMMC卡的电压范围和busy状态。

CMD2

CMD2的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
bcr[31:0] stuff bitsR2ALL_SEND_CIDAsks Device to send its CID number on the CMD line

CMD2的参数[31:0]位域可以是任意值(默认填写0),默认将参数设置为0即可,命令的类型为bcr,CMD2的命令缩写为ALL_SEND_CID,命令响应为R2,命令功能为获取eMMC设备的CID寄存器内容,CID寄存器内容通过R2返回给Host。

CMD3

CMD3的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:0] stuff bits
R1SET_RELATIVE_ADDRAssigns relative address to the Device

CMD3的参数[31:16]位域填写设置给eMMC设备的RCA,[15:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD3的命令缩写为SET_RELATIVE_ADDR,命令响应为R1,命令功能为给eMMC设备分配RCA。

一旦eMMC设备接收到CMD3,并且修改自身的RCA寄存器内容值为Host设置的RCA值之后,eMMC的设备状态将从Identification状态切换为Stand-by状态,并且eMMC设备不会再响应任何identification。此外,eMMC设备将把它的输出驱动方式从开漏输出(open-drain )切换为推挽输出(open-drain )。

CMD4

CMD4的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
bc[31:16] DSR
[15:0] stuff bits
NoneSET_DSRPrograms the DSR of the Device

CMD4的参数[31:16]位域填写设置给eMMC设备的DSR,[15:0]位域可以是任意值(默认填写0),命令的类型为bc,CMD4的命令缩写为SET_DSR,命令无响应,命令功能为设置eMMC设备的DSR(driver stage register)寄存器。

CMD5

CMD5的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15]Sleep/Awake
[14:0] stuff bits
R1bSLEEP_AWAKEToggles the Device between Sleep state and Standby
state.

CMD5的参数[31:16]位域填写RCA,[15]位的值表示该命令是Sleep还是Awake命令,[14:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD5的命令缩写为SLEEP_AWAKE,命令响应为R1b,命令功能为将eMMC设备的状态设置为Sleep状态或者Awake状态。

eMMC设备在Sleep状态下的电源消耗是最小的,在Sleep状态下eMMC设备仅仅响应复位命令(参数为0x00000000或者0xF0F0F0F0的CMD0或者硬件复位)和SLEEP_AWAKE命令(CMD5),所有其他命令都会被eMMC设备忽略。

CMD5的参数[15]位为1时表示该命令为Sleep命令。

CMD5的参数[15]位为0时表示该命令为Awake命令。

CMD6

CMD6的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:26] Set to 0
[25:24] Access
[23:16] Index
[15:8] Value
[7:3] Set to 0
[2:0] Cmd Set
R1bSWITCHSwitches the mode of operation of the selected Device
or modifies the EXT_CSD registers.

CMD6的参数[31:26]位域填写0,[25:24]位域设置访问模式,[23:16]位域填写EXT_CSD寄存器的索引,[15:8]位域填写Value值,[7:3]位域填写0,[2:0]位域填写要切换的命令集,命令的类型为ac,CMD6的命令缩写为SWITCH,命令响应为R1b,命令功能为切换eMMC设备的操作模式或者修改eMMC设备的EXT_CSD寄存器。

访问模式及其说明如下图所示:

在这里插入图片描述

索引域([23:16]位域 Index)的取值范围为0-255,但是仅仅0-191范围内的值是有效的。如果索引域的值在192-255范围内,

那么eMMC设备将不会执行任何的修改操作,并且SWITCH_ERROR状态位将被设置。

CMD7

CMD7的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:0] stuff bits
R1/R1bSELECT/DESELECT_CARDCommand toggles a device between the standby and
transfer states or between the programming and
disconnect states.
NOTE In both cases the Device is selected by its own
relative address and gets deselected by any other address;
address 0 deselects the Device.

CMD7的参数[31:16]位域填写RCA,[15:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD7的命令缩写为SELECT/DESELECT_CARD,命令响应为R1/R1b,命令功能为切换eMMC设备的状态,在standby状态和transfer状态之间切换或者在programming状态和disconnect状态之间切换。

当eMMC设备处于Stand-by状态时,CMD7(命令参数中RCA域为设备的RCA)能够将eMMC设备状态切换到Transfer状态。当eMMC设备处于Transfer状态并且eMMC设备之前被选中时,CMD7(命令参数中RCA域为除设备RCA外的其他值)能够将eMMC设备状态切换到Stand-by状态并且释放eMMC设备与Host之间的连接状态。当Host发送CMD7(命令参数中RCA域为0x0000)给eMMC设备时,eMMC设备将切换到Stand-by状态。当eMMC设备处于Transfer状态时,如果接收到了来自Host的CMD7(命令参数中RCA域为设备的RCA),那么eMMC设备将忽略该命令,或许该命令会被视为非法命令。

当eMMC设备处于Disconnect状态时,CMD7(命令参数中RCA域为设备的RCA)能够将eMMC设备状态切换到Programming状态。当eMMC设备处于Programming状态并且eMMC设备之前被选中时,CMD7(命令参数中RCA域为除设备RCA外的其他值)能够将eMMC设备状态切换到Disconnect状态并且释放eMMC设备与Host之间的连接状态。当eMMC设备处于Programming状态时,如果接收到了来自Host的CMD7(命令参数中RCA域为设备的RCA),那么eMMC设备将忽略该命令,或许该命令会被视为非法命令。

R1 while selecting from Stand-By State to Transfer State;

R1b while selecting from Disconnected State to Programming State.

CMD8

CMD8的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
adtc[31:0] stuff bitsR1SEND_EXT_CSDDevice sends its EXT_CSD register as a block of data.

CMD8的参数[31:0]位域可以是任意值(默认填写0),命令的类型为adtc,CMD8的命令缩写为SEND_EXT_CSD,命令响应为R1,命令功能为请求eMMC设备通过数据块的方式将它的EXT_CSD寄存器内容发送给Host。

CMD9

CMD9的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:0] stuff bits
R2SEND_CSDAddressed Device sends its Device-specific data
(CSD) on the CMD line.

CMD9的参数[31:16]位域填写RCA,[15:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD9的命令缩写为SEND_CSD,命令响应为R2,命令功能为获取eMMC设备的CSD寄存器内容,CSD寄存器内容通过R2返回给Host。

CMD10

CMD10的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:0] stuff bits
R2SEND_CIDAddressed Device sends its Device identification
(CID) on CMD the line.

CMD10的参数[31:16]位域填写RCA,[15:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD10的命令缩写为SEND_CID,命令响应为R2,命令功能为获取eMMC设备的CID寄存器内容,CID寄存器内容通过R2返回给Host。

CMD11

该命令已被废弃。

CMD12

CMD12的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:1] stuff bits
[0] HPI
R1/R1bSTOP_TRANSMISSIONForces the Device to stop transmission. If HPI flag is
set the device shall interrupt its internal operations in a
well-defined timing.

CMD12的参数[31:16]位域填写RCA,[15:1]位域可以是任意值(默认填写0),[0]位填写HPI,命令的类型为ac,CMD12的命令缩写为STOP_TRANSMISSION,命令响应为R1/R1b,命令功能为强制eMMC设备停止传输,如果HPI标志被置位,那么eMMC设备会在一个合适的时机打断它的内部操作。

在任意时刻,所有的数据读命令都可以被STOP_TRANSMISSION命令(CMD12)终止。数据传输将会结束并且eMMC设备将返回到Transfer状态。读命令包括:READ_SINGLE_BLOCK(CMD17),READ_MULTIPLE_BLOCK(CMD18),SEND_TUNING_BLOCK(CMD21),SEND_WRITE_PROT(CMD30)。

在任意时刻,所有的数据写命令都可以被STOP_TRANSMISSION命令(CMD12)终止。停止写命令的STOP_TRANSMISSION命令(CMD12)要在CMD7取消选择设备之前发送。写命令包括:WRITE_BLOCK(CMD24),WRITE_MULTIPLE_BLOCK(CMD25),PROGRAM_CID(CMD26),PROGRAM_CSD(CMD27)。

RCA in CMD12 is used only if HPI bit is set. The argument does not imply any RCA check on the device side.

R1 for read cases and R1b for write cases.

CMD13

CMD13的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15] SQS
[14:1] stuff bits
[0] HPI
R1SEND_STATUSIn 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’.

CMD13的参数[31:16]位域填写RCA,[15]位填写SQS,[14:1]位域可以是任意值(默认填写0),[0]位填写HPI,命令的类型为ac,CMD13的命令缩写为SEND_STATUS,命令响应为R1,命令功能为查询eMMC设备的状态或者读取QSR寄存器值。

CMD14

CMD14的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
adtc[31:0] stuff bitsR1BUSTEST_RA host reads the reversed bus testing data pattern from
a Device.

CMD14的参数[31:0]位域可以是任意值(默认填写0),命令的类型为adtc,CMD14的命令缩写为BUSTEST_R,命令响应为R1,命令功能为从eMMC设备读取翻转的总线测试数据。

CMD15

CMD15的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
ac[31:16] RCA
[15:0] stuff bits
NoneGO_INACTIVE_STATESets the Device to inactive state

CMD15的参数[31:16]位域填写RCA,[15:0]位域可以是任意值(默认填写0),命令的类型为ac,CMD15的命令缩写为GO_INACTIVE_STATE,命令无响应,命令功能为将eMMC设备切换到inactive状态。

CMD19

CMD19的命令类型,参数,响应类型,命令缩写和描述如下表所示:

TypeArgumentRespAbbreviationCommand Description
adtc[31:0] stuff bitsR1BUSTEST_WA host sends the bus test data pattern to a Device.

CMD19的参数[31:0]位域可以是任意值(默认填写0),命令的类型为adtc,CMD19的命令缩写为BUSTEST_W,命令响应为R1,命令功能为Host发送总线测试数据给eMMC设备。

欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事),可以扫描下面的公众号二维码:

在这里插入图片描述
如果文中有什么问题欢迎指正,毕竟博主的水平有限。

如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。

排版更好的内容见我博客的地址:http://www.only2fire.com/archives/162.html

注:转载请注明出处,谢谢!^_^

这篇关于Linux MMC子系统 - 3.eMMC 5.1常用命令说明(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353768

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Linux 下的Vim命令宝贝

vim 命令详解(转自:https://www.cnblogs.com/usergaojie/p/4583796.html) vi: Visual Interface 可视化接口 vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式)输入模式末行模式 模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式

yum install 失败报错`XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

/export/env/py3.6/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)   到/export/env/py3.6/lib cp /lib64/liblzma.so.5.2.2 . sudo ln -s -f liblzma.so.5.2.2 liblzm