SD/MMC 初始化流程 步骤是:1)配置时钟,慢速一般为400K,设置工作模式 2)发送CMD0,进入空闲态,该指令没有反馈 3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。 4)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈成功说明该卡为SD卡(短反馈第31位置1为HC卡),否则发送CMD0,有反应说明是MMC卡 5)发送CMD2,验证SD卡是否接入,长反馈(CID) 6)发送CMD3,读取SD卡的RCA(地址),短反馈 7)发送CMD9,读取CSD寄存器获取卡的相关信息 8)发送CMD7,使能SD卡 9)配置高速时钟,准备数据传输,一般20M~25M 10)发送CMD55+ACMD51读取SCR寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽。 11)SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽 12)发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。 13) 把命令参数设置为0,再次发送CMD7,取消选中所有卡。 SD 读操作(注意:标准卡和HC卡最大区别在于单块或者多块读写时命令的起始地址参数对齐,标准卡是以字节计算为起始地址的,而HC则按块地址作为起始地址.例如,一般情况下从CSD获取的卡信息中,块长度都为512字节大小,那么要访问第一个512字节时,对于标准卡,命令的参数直接写512,而HC卡则写1.另外,标准卡所使用的SD协议有可能是1.0也有可能是2.0,但是HC的卡就一定是2.0的,大部分的SD卡都是2.0的,而最新的XC卡则使用3.0的协议.) 步骤是:1)发送CMD7,以卡的相对地址为参数,选中该卡,并使其进入Tran状态 2)发送CMD17/CMD18,命令的参数需要根据初始化时所判断的卡类型填写,按字节或按块. 3)循环读取数据 4)发送CMD12,强制停止所有传输. 5)发送CMD7,以0作为命令参数,取消所有选中.
|