1. 程式人生 > >EMMC驅動中常用命令說明及初始化順序

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功能配置