1.卡默认是3.3v 速度最大25MHZ,切换到高速模式后 卡默认是3.3V 速度最大50MHZ。速度要是再往上走就需要SDR模式和DDR模式了。
2.host发送reset cmd ,就是发送CMD0 让卡reset。卡上电就会进入reset状态或者host 发送cmd0 让卡进入reset状态,卡进入reset状态后会工作在默认的频率 默认的驱动模式 默认的地址是0 ,reset状态在spec上是idle状态
3.host 发送cmd8 + arg ,arg里面是host支持的电压范围,卡收到cmd8 后分析arg ,如果自己的电压范围满足 回response。如果不满足不回response。host收到response后也会分析response 看看卡支持的电压范围。卡支持不支持这个命令 都会呆在idle状态不会动。另外2.0的卡接收到这个命令会知道host也支持2.0
4.host 发送acmd41 + arg ,arg里面是host支持的电压范围 ,如果卡不支持就会进入inactive状态,如果支持就会进入ready状态,所以这个命令就是一个筛选的功能,用法是 host 发送 acmd41 + arg,arg里面的ocr置为0 ,0代表任意的电压范围,这样卡就会回自己的response,response里面是卡自己支持的电压范围,host收集到足够多的response后 就会得到这些卡支持的公共电压范围,所以host接下来就会发送 acmd41+arg ,arg里面的ocr是公共的电压范围,这样支持的卡就会ready state,不支持的进入inactive state。
4.1卡容量的识别:host发送 acmd41+arg ,arg里面的hcs代表host支持更高的容量,卡回的response里面的ccs 代表卡是否支持大容量。
如果host 不支持大容量 hcs=0,把这个参数发送给了大容量卡 那大容量卡回的response里面busy bit就会一直为busy 。不会ready
4.2卡电压的协商 :host发送acmd41+arg arg里面的S18R代表host支持1.8V电压,卡回的response里面的S18A代表卡是否准备好了可以切换电压 ,如果S18A=1代表卡已经准备好了,这时候host就可以发送cmd11去切换电压,如果卡S19A=0 那么host就不能发送cmd11去切换电压。
5.host发送cmd2 让卡发送自己的cid ,卡发送完自己的cid后 就会从ready状态 跳到identification 状态。
6,host 发送cmd3 让卡发送自己的地址,卡发送完自己的地址 就会从identification状态 跳到 stand by状态。
host可以重复发送 cmd2 cmd3 让更多的卡从ready状态跳到stand by状态
7.host issues SEND_CSD
(CMD9) to obtain the Card Specific Data (CSD register), e.g. block length, card storage capacity, etc
8.host 发送cmd7 切换卡进入transfer state ,或者让卡从transfer state切换到standy state 这些都是控制cmd7的参数实现的
9.ACMD 可以将数据总线从1bit通信切换到4bit通信
10.cmd17 读取一个block 。cmd18读取多个blcok 发送cmd12 stop读取
11.
来源:CSDN
作者:hingslay
链接:https://blog.csdn.net/jiajiangfei/article/details/103593927