EMMC驅動中常用命令說明及初始化順序
一、命令說明
-
mmc_go_idle
傳送CMD0指令,GO_IDLE_STATE
使mmc card進入idle state。
雖然進入到了Idle State,但是上電覆位過程並不一定完成了,這主要靠讀取OCR的busy位來判斷,而流程歸結為下一步。 -
mmc_send_op_cond
傳送CMD1指令,SEND_OP_COND
這裡會設定card的工作電壓暫存器OCR,並且通過busy位(bit31)來判斷card的上電覆位過程是否完成,如果沒有完成的話需要重複傳送。
完成之後,mmc card進入ready state。 -
mmc_all_send_cid
這裡會傳送CMD2指令,ALL_SEND_CID
廣播指令,使card回覆對應的CID暫存器的值。在這裡就相應獲得了CID暫存器的值了,儲存在cid中。
完成之後,MMC card會進入Identification State。 -
mmc_set_relative_addr
傳送CMD3指令,SET_RELATIVE_ADDR
設定該mmc card的關聯地址為card->rca,也就是0x0001
完成之後,該MMC card進入standby模式。 -
mmc_send_csd
傳送CMD9指令,MMC_SEND_CSD
要求mmc card傳送csd暫存器,儲存到card->raw_csd中,也就是原始的csd暫存器的值。
此時mmc card還是處於standby state -
mmc_select_card & mmc_deselect_cards
傳送CMD7指令,SELECT/DESELECT CARD
選擇或者斷開指定的card
這時卡進入transfer state。後續可以通過各種指令進入到receive-data state或者sending-data state依次來進行資料的傳輸 -
mmc_get_ext_csd
傳送CMD8指令,SEND_EXT_CSD
這裡要求處於transfer state的card傳送ext_csd暫存器,這裡獲取之後存放在ext_csd暫存器中
這裡會使card進入sending-data state,完成之後又退出到transfer state。 -
mmc_switch
傳送CMD6命令,MMC_SWITCH
用於設定ext_csd暫存器的某些bit -
mmc_send_status
傳送CMD13命令,MMC_SEND_STATUS
要求card傳送自己當前的狀態暫存器 -
mmc_send_cid
傳送CMD10命令,MMC_SEND_CID
要求mmc card回覆cid暫存器 -
mmc_card_sleepawake
傳送CMD5命令,MMC_SLEEP_AWAKE
使card進入或者退出sleep state,由引數決定。
二、初始化順序
1.power up emmc
2.設定電壓,配置階段為400khz
3.設定位寬為1bit
4.cmd0
5.cmd1迴圈一直到檢測到emmc返回的電源狀態穩定
6.cmd2獲取cid
7.cmd3 設定rca,如果獲取到的數值不正確,可以手動設定為0x01
8.cmd9 獲取csd
9.可以重新配置工作速率
10.cmd7 設定為transfer mode
11.cmd8獲取額外的csd資訊
12.cmd 16設定block len
13.cmd6 設定工作bit模式
14讀cmd17.18
15.寫cmd24.25
三、EMMC的主機配置
主機的配置最先要注意的就是IO的配置,很多複用的管腳,是否是EMMC的CMD和DATA功能配置