概述
本文對(duì)eMMC 5.1協(xié)議定義的命令做一個(gè)簡(jiǎn)單的說(shuō)明,以便在使用具體的命令時(shí)有個(gè)參考。
eMMC 5.1協(xié)議定義的命令可以分為11類(lèi),具體分類(lèi)描述如下:
? Basic commands (class 0 and class 1),基本命令;
? Block-oriented read commands (class 2),面向塊的讀命令;
? Class 3 commands,Class 3命令;
? Block-oriented write commands (class 4),面向塊的寫(xiě)命令;
? Block-oriented write protection commands (class 6),面向塊的寫(xiě)保護(hù)命令;
? Erase commands (class 5),擦除命令;
? I/O mode commands (class 9),I/O模式命令;
? Lock Device commands (class 7),設(shè)備鎖定命令;
? Application-specific commands (class 8),特定應(yīng)用命令;
? Security Protocols (class 10),安全協(xié)議命令;
? Command Queue (Class 11),命令隊(duì)列命令;
本文主要對(duì)常用的6類(lèi)命令進(jìn)行說(shuō)明,其他不常用的命令遇到時(shí)查看手冊(cè)即可:
? Basic commands (class 0 and class 1),基本命令;
? Block-oriented read commands (class 2),面向塊的讀命令;
? Block-oriented write commands (class 4),面向塊的寫(xiě)命令;
? Erase commands (class 5),擦除命令;
? Lock Device commands (class 7),設(shè)備鎖定命令;
? Application-specific commands (class 8),特定應(yīng)用命令;
基本命令(class 0 and class 1)
CMD0
CMD0的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
bc | [31:0] 00000000 | None | GO_IDLE_STATE | Resets the Device to idle state |
bc | [31:0] F0F0F0F0 | None | GO_PRE_IDLE_STATE | Resets the Device to pre-idle state |
--- | [31:0]FFFFFFFA | None | BOOT_INITIATION | Initiate alternative boot operation |
CMD0帶參數(shù)0x00000000時(shí),命令的類(lèi)型為bc,此時(shí)CMD0的命令縮寫(xiě)為GO_IDLE_STATE,命令無(wú)響應(yīng),命令功能為復(fù)位設(shè)備,讓設(shè)備進(jìn)入idle狀態(tài)。
CMD0帶參數(shù)0xF0F0F0F0時(shí),命令的類(lèi)型為bc,此時(shí)CMD0的命令縮寫(xiě)為GO_PRE_IDLE_STATE,命令無(wú)響應(yīng),命令功能為復(fù)位設(shè)備,讓設(shè)備進(jìn)入pre-idle狀態(tài)。
CMD0帶參數(shù)0xFFFFFFFA時(shí),命令無(wú)類(lèi)型,此時(shí)CMD0的命令縮寫(xiě)為BOOT_INITIATION,命令無(wú)響應(yīng),命令功能為讓設(shè)備進(jìn)入boot operation模式。
考慮到CMD0的兼容性,如果eMMC設(shè)備收到CMD0命令,并且參數(shù)是除了0xFFFFFFFA或者0xF0F0F0F0以外的其他值,eMMC設(shè)備在除了Inactive狀態(tài)的其他任何狀態(tài)下,eMMC設(shè)備會(huì)將CMD0命令視為設(shè)備復(fù)位命令,并讓eMMC設(shè)備進(jìn)入idle狀態(tài)。
CMD1
CMD1的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
bcr | [31:0] OCR with-out busy | R3 | SEND_OP_COND |
Asks Device, in idle state, to send its Operating Conditions Register contents in the response on the CMD line. |
CMD1的參數(shù)可以根據(jù)OCR寄存器的位定義來(lái)填寫(xiě),命令的類(lèi)型為bcr,此時(shí)CMD1的命令縮寫(xiě)為SEND_OP_COND,命令響應(yīng)為R3,命令功能為在idle狀態(tài)下要求eMMC設(shè)備通過(guò)R3響應(yīng)返回它的OCR寄存器的值。
如果eMMC設(shè)備不支持boot operation模式,或者eMMC設(shè)備僅僅支持eMMC 4.2或者更早的版本,或者BOOT_PARTITION_ENABLE位被清除,在power-on之后eMMC設(shè)備會(huì)自動(dòng)進(jìn)入idle狀態(tài)。處于idle狀態(tài)的eMMC設(shè)備,除非收到CMD1,否則會(huì)忽略所有的總線事務(wù)。
CMD1是一個(gè)特殊的同步命令,用來(lái)協(xié)商操作電壓范圍以及查看設(shè)備是否仍處在power-up序列。CMD1的響應(yīng)除了包含eMMC設(shè)備的操作電壓profile,還包含一個(gè)busy標(biāo)志,用于指示eMMC設(shè)備仍處于power-up過(guò)程,并且沒(méi)有準(zhǔn)備好去identification。當(dāng)R3中的busy位為0時(shí),告訴Host當(dāng)前的eMMC設(shè)備并沒(méi)有準(zhǔn)備好,Host需要重復(fù)發(fā)送CMD1和接收R3,直到eMMC設(shè)備準(zhǔn)備好。當(dāng)Host發(fā)送CMD1給eMMC設(shè)備,并且CMD1的參數(shù)帶有有效電壓范圍,那么eMMC設(shè)備必須在1秒以?xún)?nèi)完成它的初始化。
如果Host發(fā)送的CMD1的參數(shù)為0,那么就表示Host在詢(xún)問(wèn)eMMC卡的電壓范圍和busy狀態(tài)。
CMD2
CMD2的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
bcr | [31:0] stuff bits | R2 | ALL_SEND_CID | Asks Device to send its CID number on the CMD line |
CMD2的參數(shù)[31:0]位域可以是任意值(默認(rèn)填寫(xiě)0),默認(rèn)將參數(shù)設(shè)置為0即可,命令的類(lèi)型為bcr,CMD2的命令縮寫(xiě)為ALL_SEND_CID,命令響應(yīng)為R2,命令功能為獲取eMMC設(shè)備的CID寄存器內(nèi)容,CID寄存器內(nèi)容通過(guò)R2返回給Host。
CMD3
CMD3的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:0] stuff bits |
R1 | SET_RELATIVE_ADDR | Assigns relative address to the Device |
CMD3的參數(shù)[31:16]位域填寫(xiě)設(shè)置給eMMC設(shè)備的RCA,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD3的命令縮寫(xiě)為SET_RELATIVE_ADDR,命令響應(yīng)為R1,命令功能為給eMMC設(shè)備分配RCA。
一旦eMMC設(shè)備接收到CMD3,并且修改自身的RCA寄存器內(nèi)容值為Host設(shè)置的RCA值之后,eMMC的設(shè)備狀態(tài)將從Identification狀態(tài)切換為Stand-by狀態(tài),并且eMMC設(shè)備不會(huì)再響應(yīng)任何identification。此外,eMMC設(shè)備將把它的輸出驅(qū)動(dòng)方式從開(kāi)漏輸出(open-drain )切換為推挽輸出(open-drain )。
CMD4
CMD4的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
bc |
[31:16] DSR [15:0] stuff bits |
None | SET_DSR | Programs the DSR of the Device |
CMD4的參數(shù)[31:16]位域填寫(xiě)設(shè)置給eMMC設(shè)備的DSR,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為bc,CMD4的命令縮寫(xiě)為SET_DSR,命令無(wú)響應(yīng),命令功能為設(shè)置eMMC設(shè)備的DSR(driver stage register)寄存器。
CMD5
CMD5的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15]Sleep/Awake [14:0] stuff bits |
R1b | SLEEP_AWAKE |
Toggles the Device between Sleep state and Standby state. |
CMD5的參數(shù)[31:16]位域填寫(xiě)RCA,[15]位的值表示該命令是Sleep還是Awake命令,[14:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD5的命令縮寫(xiě)為SLEEP_AWAKE,命令響應(yīng)為R1b,命令功能為將eMMC設(shè)備的狀態(tài)設(shè)置為Sleep狀態(tài)或者Awake狀態(tài)。
eMMC設(shè)備在Sleep狀態(tài)下的電源消耗是最小的,在Sleep狀態(tài)下eMMC設(shè)備僅僅響應(yīng)復(fù)位命令(參數(shù)為0x00000000或者0xF0F0F0F0的CMD0或者硬件復(fù)位)和SLEEP_AWAKE命令(CMD5),所有其他命令都會(huì)被eMMC設(shè)備忽略。
CMD5的參數(shù)[15]位為1時(shí)表示該命令為Sleep命令。
CMD5的參數(shù)[15]位為0時(shí)表示該命令為Awake命令。
CMD6
CMD6的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command 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 |
R1b | SWITCH |
Switches the mode of operation of the selected Device or modifies the EXT_CSD registers. |
CMD6的參數(shù)[31:26]位域填寫(xiě)0,[25:24]位域設(shè)置訪問(wèn)模式,[23:16]位域填寫(xiě)EXT_CSD寄存器的索引,[15:8]位域填寫(xiě)Value值,[7:3]位域填寫(xiě)0,[2:0]位域填寫(xiě)要切換的命令集,命令的類(lèi)型為ac,CMD6的命令縮寫(xiě)為SWITCH,命令響應(yīng)為R1b,命令功能為切換eMMC設(shè)備的操作模式或者修改eMMC設(shè)備的EXT_CSD寄存器。
訪問(wèn)模式及其說(shuō)明如下圖所示:
Snipaste_2023-10-19_20-16-57
索引域([23:16]位域 Index)的取值范圍為0-255,但是僅僅0-191范圍內(nèi)的值是有效的。如果索引域的值在192-255范圍內(nèi),那么eMMC設(shè)備將不會(huì)執(zhí)行任何的修改操作,并且SWITCH_ERROR狀態(tài)位將被設(shè)置。
CMD7
CMD7的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:0] stuff bits |
R1/R1b | SELECT/DESELECT_CARD |
Command 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的參數(shù)[31:16]位域填寫(xiě)RCA,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD7的命令縮寫(xiě)為SELECT/DESELECT_CARD,命令響應(yīng)為R1/R1b,命令功能為切換eMMC設(shè)備的狀態(tài),在standby狀態(tài)和transfer狀態(tài)之間切換或者在programming狀態(tài)和disconnect狀態(tài)之間切換。
當(dāng)eMMC設(shè)備處于Stand-by狀態(tài)時(shí),CMD7(命令參數(shù)中RCA域?yàn)樵O(shè)備的RCA)能夠?qū)MMC設(shè)備狀態(tài)切換到Transfer狀態(tài)。當(dāng)eMMC設(shè)備處于Transfer狀態(tài)并且eMMC設(shè)備之前被選中時(shí),CMD7(命令參數(shù)中RCA域?yàn)槌O(shè)備RCA外的其他值)能夠?qū)MMC設(shè)備狀態(tài)切換到Stand-by狀態(tài)并且釋放eMMC設(shè)備與Host之間的連接狀態(tài)。當(dāng)Host發(fā)送CMD7(命令參數(shù)中RCA域?yàn)?x0000)給eMMC設(shè)備時(shí),eMMC設(shè)備將切換到Stand-by狀態(tài)。當(dāng)eMMC設(shè)備處于Transfer狀態(tài)時(shí),如果接收到了來(lái)自Host的CMD7(命令參數(shù)中RCA域?yàn)樵O(shè)備的RCA),那么eMMC設(shè)備將忽略該命令,或許該命令會(huì)被視為非法命令。
當(dāng)eMMC設(shè)備處于Disconnect狀態(tài)時(shí),CMD7(命令參數(shù)中RCA域?yàn)樵O(shè)備的RCA)能夠?qū)MMC設(shè)備狀態(tài)切換到Programming狀態(tài)。當(dāng)eMMC設(shè)備處于Programming狀態(tài)并且eMMC設(shè)備之前被選中時(shí),CMD7(命令參數(shù)中RCA域?yàn)槌O(shè)備RCA外的其他值)能夠?qū)MMC設(shè)備狀態(tài)切換到Disconnect狀態(tài)并且釋放eMMC設(shè)備與Host之間的連接狀態(tài)。當(dāng)eMMC設(shè)備處于Programming狀態(tài)時(shí),如果接收到了來(lái)自Host的CMD7(命令參數(shù)中RCA域?yàn)樵O(shè)備的RCA),那么eMMC設(shè)備將忽略該命令,或許該命令會(huì)被視為非法命令。
R1 while selecting from Stand-By State to Transfer State;
R1b while selecting from Disconnected State to Programming State.
CMD8
CMD8的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
adtc | [31:0] stuff bits | R1 | SEND_EXT_CSD | Device sends its EXT_CSD register as a block of data. |
CMD8的參數(shù)[31:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為adtc,CMD8的命令縮寫(xiě)為SEND_EXT_CSD,命令響應(yīng)為R1,命令功能為請(qǐng)求eMMC設(shè)備通過(guò)數(shù)據(jù)塊的方式將它的EXT_CSD寄存器內(nèi)容發(fā)送給Host。
CMD9
CMD9的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:0] stuff bits |
R2 | SEND_CSD |
Addressed Device sends its Device-specific data (CSD) on the CMD line. |
CMD9的參數(shù)[31:16]位域填寫(xiě)RCA,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD9的命令縮寫(xiě)為SEND_CSD,命令響應(yīng)為R2,命令功能為獲取eMMC設(shè)備的CSD寄存器內(nèi)容,CSD寄存器內(nèi)容通過(guò)R2返回給Host。
CMD10
CMD10的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:0] stuff bits |
R2 | SEND_CID |
Addressed Device sends its Device identification (CID) on CMD the line. |
CMD10的參數(shù)[31:16]位域填寫(xiě)RCA,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD10的命令縮寫(xiě)為SEND_CID,命令響應(yīng)為R2,命令功能為獲取eMMC設(shè)備的CID寄存器內(nèi)容,CID寄存器內(nèi)容通過(guò)R2返回給Host。
CMD11
該命令已被廢棄。
CMD12
CMD12的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:1] stuff bits [0] HPI |
R1/R1b | STOP_TRANSMISSION |
Forces the Device to stop transmission. If HPI flag is set the device shall interrupt its internal operations in a well-defined timing. |
CMD12的參數(shù)[31:16]位域填寫(xiě)RCA,[15:1]位域可以是任意值(默認(rèn)填寫(xiě)0),[0]位填寫(xiě)HPI,命令的類(lèi)型為ac,CMD12的命令縮寫(xiě)為STOP_TRANSMISSION,命令響應(yīng)為R1/R1b,命令功能為強(qiáng)制eMMC設(shè)備停止傳輸,如果HPI標(biāo)志被置位,那么eMMC設(shè)備會(huì)在一個(gè)合適的時(shí)機(jī)打斷它的內(nèi)部操作。
在任意時(shí)刻,所有的數(shù)據(jù)讀命令都可以被STOP_TRANSMISSION命令(CMD12)終止。數(shù)據(jù)傳輸將會(huì)結(jié)束并且eMMC設(shè)備將返回到Transfer狀態(tài)。讀命令包括:READ_SINGLE_BLOCK(CMD17),READ_MULTIPLE_BLOCK(CMD18),SEND_TUNING_BLOCK(CMD21),SEND_WRITE_PROT(CMD30)。
在任意時(shí)刻,所有的數(shù)據(jù)寫(xiě)命令都可以被STOP_TRANSMISSION命令(CMD12)終止。停止寫(xiě)命令的STOP_TRANSMISSION命令(CMD12)要在CMD7取消選擇設(shè)備之前發(fā)送。寫(xiě)命令包括: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的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15] SQS [14:1] stuff bits [0] HPI |
R1 | SEND_STATUS |
In 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的參數(shù)[31:16]位域填寫(xiě)RCA,[15]位填寫(xiě)SQS,[14:1]位域可以是任意值(默認(rèn)填寫(xiě)0),[0]位填寫(xiě)HPI,命令的類(lèi)型為ac,CMD13的命令縮寫(xiě)為SEND_STATUS,命令響應(yīng)為R1,命令功能為查詢(xún)eMMC設(shè)備的狀態(tài)或者讀取QSR寄存器值。
CMD14
CMD14的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
adtc | [31:0] stuff bits | R1 | BUSTEST_R |
A host reads the reversed bus testing data pattern from a Device. |
CMD14的參數(shù)[31:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為adtc,CMD14的命令縮寫(xiě)為BUSTEST_R,命令響應(yīng)為R1,命令功能為從eMMC設(shè)備讀取翻轉(zhuǎn)的總線測(cè)試數(shù)據(jù)。
CMD15
CMD15的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
ac |
[31:16] RCA [15:0] stuff bits |
None | GO_INACTIVE_STATE | Sets the Device to inactive state |
CMD15的參數(shù)[31:16]位域填寫(xiě)RCA,[15:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為ac,CMD15的命令縮寫(xiě)為GO_INACTIVE_STATE,命令無(wú)響應(yīng),命令功能為將eMMC設(shè)備切換到inactive狀態(tài)。
CMD19
CMD19的命令類(lèi)型,參數(shù),響應(yīng)類(lèi)型,命令縮寫(xiě)和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
adtc | [31:0] stuff bits | R1 | BUSTEST_W | A host sends the bus test data pattern to a Device. |
CMD19的參數(shù)[31:0]位域可以是任意值(默認(rèn)填寫(xiě)0),命令的類(lèi)型為adtc,CMD19的命令縮寫(xiě)為BUSTEST_W,命令響應(yīng)為R1,命令功能為Host發(fā)送總線測(cè)試數(shù)據(jù)給eMMC設(shè)備。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5325瀏覽量
120052 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
592瀏覽量
27357 -
emmc
+關(guān)注
關(guān)注
7文章
200瀏覽量
52621 -
OCR
+關(guān)注
關(guān)注
0文章
144瀏覽量
16330
原文標(biāo)題:Linux MMC子系統(tǒng) - 4.eMMC 5.1常用命令說(shuō)明(1)
文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論