概述
本文對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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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帶參數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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數可以根據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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:0]位域可以是任意值(默認填寫0),默認將參數設置為0即可,命令的類型為bcr,CMD2的命令縮寫為ALL_SEND_CID,命令響應為R2,命令功能為獲取eMMC設備的CID寄存器內容,CID寄存器內容通過R2返回給Host。
CMD3
CMD3的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
Type | Argument | Resp | Abbreviation | Command Description |
bc |
[31:16] DSR [15:0] stuff bits |
None | SET_DSR | Programs the DSR of the Device |
CMD4的參數[31:16]位域填寫設置給eMMC設備的DSR,[15:0]位域可以是任意值(默認填寫0),命令的類型為bc,CMD4的命令縮寫為SET_DSR,命令無響應,命令功能為設置eMMC設備的DSR(driver stage register)寄存器。
CMD5
CMD5的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[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寄存器。
訪問模式及其說明如下圖所示:
Snipaste_2023-10-19_20-16-57
索引域([23:16]位域 Index)的取值范圍為0-255,但是僅僅0-191范圍內的值是有效的。如果索引域的值在192-255范圍內,那么eMMC設備將不會執行任何的修改操作,并且SWITCH_ERROR狀態位將被設置。
CMD7
CMD7的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:0]位域可以是任意值(默認填寫0),命令的類型為adtc,CMD8的命令縮寫為SEND_EXT_CSD,命令響應為R1,命令功能為請求eMMC設備通過數據塊的方式將它的EXT_CSD寄存器內容發送給Host。
CMD9
CMD9的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:16]位域填寫RCA,[15:0]位域可以是任意值(默認填寫0),命令的類型為ac,CMD9的命令縮寫為SEND_CSD,命令響應為R2,命令功能為獲取eMMC設備的CSD寄存器內容,CSD寄存器內容通過R2返回給Host。
CMD10
CMD10的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:16]位域填寫RCA,[15:0]位域可以是任意值(默認填寫0),命令的類型為ac,CMD10的命令縮寫為SEND_CID,命令響應為R2,命令功能為獲取eMMC設備的CID寄存器內容,CID寄存器內容通過R2返回給Host。
CMD11
該命令已被廢棄。
CMD12
CMD12的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[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的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:16]位域填寫RCA,[15]位填寫SQS,[14:1]位域可以是任意值(默認填寫0),[0]位填寫HPI,命令的類型為ac,CMD13的命令縮寫為SEND_STATUS,命令響應為R1,命令功能為查詢eMMC設備的狀態或者讀取QSR寄存器值。
CMD14
CMD14的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:0]位域可以是任意值(默認填寫0),命令的類型為adtc,CMD14的命令縮寫為BUSTEST_R,命令響應為R1,命令功能為從eMMC設備讀取翻轉的總線測試數據。
CMD15
CMD15的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:16]位域填寫RCA,[15:0]位域可以是任意值(默認填寫0),命令的類型為ac,CMD15的命令縮寫為GO_INACTIVE_STATE,命令無響應,命令功能為將eMMC設備切換到inactive狀態。
CMD19
CMD19的命令類型,參數,響應類型,命令縮寫和描述如下表所示:
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的參數[31:0]位域可以是任意值(默認填寫0),命令的類型為adtc,CMD19的命令縮寫為BUSTEST_W,命令響應為R1,命令功能為Host發送總線測試數據給eMMC設備。
審核編輯:劉清
-
寄存器
+關注
關注
30文章
5109瀏覽量
117987 -
Linux系統
+關注
關注
4文章
573瀏覽量
26959 -
emmc
+關注
關注
6文章
181瀏覽量
52061 -
OCR
+關注
關注
0文章
137瀏覽量
16150
原文標題:Linux MMC子系統 - 4.eMMC 5.1常用命令說明(1)
文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論