1.前言
本文主要對eMMC的command進行詳細介紹,主要包含如下內容:
(1)command類型
(2)command格式
2.command類型
| command類型 | 說明 |
| bc | 不帶response的廣播命令 |
| bcr | 帶有response的廣播命令 |
| ac | 點對點無數據傳輸 |
| adtc | 點對點數據傳輸 |
表 command類型
3. command格式

如上圖所示,eMMC Command 由 48 Bits 組成,各個 Bits 的解析如下所示:

表 command格式
- 總長度48bits;
- 固定以0開始,以1結束;
- transmiter bit表示數據的傳輸方向,1代表從host to device;
- 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 中的介紹。
4. command分類
eMMC將command index(0~56)分成12個class,每個class代表一類功能,包含所有commands的一個子集。
具體某一個設備支持哪些class的命令,可以通過CSD寄存器的CCC[95:84] feilds來查詢,如bit84為1則表示支持class0
| device command class | class description | note |
| class 0 | basic | 基本命令 |
| class 1 | obsolete | 廢棄 |
| class 2 | block read | 塊數據讀相關命令,包括設置塊長度、讀取單塊、讀取多塊 |
| class 3 | obsolete | 廢棄 |
| class 4 | block write | 塊數據寫相關命令,包括設置塊個數、寫入單塊、寫入多塊、修改設備id寄存器、修改CSD、設置RTC |
| class 5 | erase | 設置擦除組開始地址、設置擦除組結束地址、擦除操作 |
| class 6 | write protection | 設置寫保護、清除寫保護、獲取device的寫保護狀態、獲取寫保護類型 |
| class 7 | lock device | lock/unlock device |
| class 8 | application-specific | 指示下一個命令是一個特定應用命令而非標准命令 |
| class 9 | I/O mode | 寫寄存器、設置系統進入中斷模式 |
| class 10 | security protocols | 連續傳輸數據塊從device to host或從host to device |
| class 11 | command queuing | 執行隊列里的任務 |
| class 12 | reserved | \ |
表 command分類
5.參考文檔
[1] http://www.jedec.org/sites/default/files/docs/JESD84-B51.pdf
