EMMC驱动中常用命令说明及初始化顺序

转载地址:https://blog.csdn.net/Deep_l_zh/article/details/82665909 

一、命令说明

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值