?對照后0 1 2 4 6 位為1,即支持HS400 HS200 HS52-DDR HS52 HS26,4412可以選用任意一種時鐘模式操作eMMC。?這里還有不同的模式需要的時鐘速率及最大傳輸速率。?
1.2 4412 eMMC控制器部分從CMU(Clock Management Unit)模塊中找到MMC控制器時鐘圖,如下:?
?系統上電默認使用XusbXTI時鐘源,但是在實際使用中24M時鐘是遠遠不夠的,所以我們按照手冊推薦將時鐘源選擇到SCLKmpll_user_t ,選擇方法請參考《exynos 4412 時鐘配置》。?MUXmmc0-3涉及的寄存器:? ? CLK_SRC_FSYS
? ? 地址:0x1003C240
? ? 默認值:0x00011111
? ? 設置后的值:0x00066666
DIVmmc0-3和DIVmmc0-3_PRe涉及的寄存器:
? ? CLK_DIV_FSYS1 &?CLK_DIV_FSYS2 &?CLK_DIV_FSYS3
? ? 地址:0x1003C544 & 0x1003C548 & 0x1003C54C
? ? 默認值:0x00000000 &?0x00000000 &?0x00000000
? ? 設置后的值:0x09010901 &?0x09010901 &?0x09010901
這樣在MPLL為800MHz的情況下,先二分頻再十分頻,最后eMMC控制器的時鐘是40MHz。但是如果eMMC芯片支持HS200或者HS400高速模式,那么隨后對控制器時鐘進行修改即可。?
二、確定Class我們都知道,eMMC也是分等級的,分別從Class0 ~ Class11 ,不同的Class支持的命令范圍不同,不先確定Class就不敢確定發出的指令eMMC能夠正確響應。查一下CSD Register的[95:84]共12bit。這里的這款B031讀數為0xF5(11110101),支持Class0 Class2 Class4 Class5 Class6 Class7指令集。三、確定支持的CMD從支持的Class指令集就可以推出支持的CMD命令,?
這樣可以得出這款B031不支持的命令有CMD11 CMD20?CMD39?CMD40?Cmd53~56。四、CMD列表







?五、CMD回復格式先看上面表格的第4列Resp列,代表eMMC回復給4412控制器的消息,他們的含義如下:5.1 R1回復格式
?共48bit,最高bit永遠是0,后緊接0代表從eMMC傳給控制器,而后[45:40]共6bit代表回復的哪個CMD(0 ~ 63),而后的[39:8]共32bit代表eMMC的設備狀態,而后就是CRC和結束位。Device status的含義如下:?


5.2 R1b回復格式
5.3 R2回復格式R2用來回復CMD2 9 10這三個命令,當回復CMD2 10的時候內容是CID寄存器的值,當回復CMD9的時候內容是CSR寄存器的值。
5.4 R3回復格式
?5.5 R4回復格式
5.6 R5回復格式
?六、幾種常用CMD?6.1 CMD0這個命令用來復位eMMC,沒有回復:
6.2 CMD1這個命令得到eMMC的OCR寄存器值:
在這里[31]位比較重要,如果是1代表eMMC復位完成了,0x40FF8080復位未完成,0xC0FF8080復位完成。6.3 CMD2這個命令得到eMMC的CID寄存器值,共128bit,16字節:
與文檔(1)中CID寄存器對照后就會發現完全一致。6.4 CMD3此命令用來設置eMMC的相對地址,相對地址是為一條總線掛接多個eMMC準備的,如果只有一個eMMC這個命令沒有很大意義。
[31:26]:為0[25:24]:見下表,
[23:16]:為將要操作的寄存器索引[15:8]:為將要寫入寄存器的值[7:3]:為0[2:0]:如果[25:24]為00b,那么這三位含義如下,
6.6 CMD7此命令用來設置eMMC的狀態,因為當使用CMD0使eMMC復位后,eMMC處于idle或pre_idle狀態,如果需要數據傳輸,必須將eMMC置于transfer_state,CMD7就是這個作用。
eMMC回復R1給控制器。6.7 CMD8此命令用來獲取EXT_CSD的值,雖然回復為R1,但是EXT_CSD的512字節值會被讀取并存儲到內存里,然后用戶可以根據這些數據分析出eMMC當前支持的各種參數和狀態。
?參考文檔:[1]?KLMxGxxEMx-B031 Spec[2] JESD84-B50(注:eMMC 5.0標準協議)新聞熱點
疑難解答