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

你可能感兴趣的:(BSP_Driver)