嵌入式SD卡的初始化时序详解:上电到就绪要几步
摘要:嵌入式SD卡(SDNAND)的初始化流程包括:1)上电时序需满足电压要求并发送74个时钟脉冲;2)发送CMD0复位命令进入空闲状态;3)通过CMD8检测卡类型;4)循环发送CMD55和ACMD41完成初始化;5)读取CSD和CID获取卡信息;6)设置512字节块大小。常见问题包括时序错误、参数错误、超时过短或电源不稳。遵循标准SD协议,初始化后即可正常读写。
嵌入式SD卡,也就是SD NAND,上电后不能立即读写数据,需要完成一系列初始化步骤。理解这些步骤,有助于排查驱动问题。很多人遇到SD卡不工作的情况,多半是初始化流程出了问题。
第一步是上电时序。SD卡的工作电压范围是2.7V到3.6V。上电时,电压要在0.5V以下保持至少1毫秒,让SD卡内部电路完全放电。然后电压稳定上升,上升时间在0.1毫秒到35毫秒之间。电压稳定后,先发送至少74个时钟脉冲,让SD卡完成内部初始化。这一步很多人会忽略,导致初始化失败。
第二步是发送CMD0复位命令。CMD0让SD卡进入空闲状态。参数必须为0。发送后等待响应,如果返回0x01,表示成功进入空闲状态。SPI模式下,CMD0的CRC必须正确。
第三步是发送CMD8检查接口条件。CMD8用来检测SD卡是否支持2.0及以上协议。参数为0x1AA。如果返回的参数和发送的一致,说明是2.0卡;如果不响应,可能是1.0卡。这一步可以帮助区分卡的类型。
第四步是循环发送CMD55和ACMD41进行初始化。CMD55告诉SD卡下一个命令是应用特定命令。ACMD41进行初始化,参数中包含了工作电压信息。需要循环发送直到响应中的初始化完成标志位被置1。这个过程可能需要几十毫秒到几百毫秒,要设置合理的超时时间,建议1秒以上。
第五步是读取CSD和CID。CSD包含卡的参数信息,如容量、块大小、速度等级等。发送CMD9读取CSD。CID包含卡的唯一标识号,如制造商ID、产品名称、序列号等。发送CMD10读取CID。
第六步是设置块大小。发送CMD16,参数为512,设置块大小为512字节。这是SD卡最常用的块大小。
初始化完成后,SD卡进入传输状态,可以正常读写数据了。读单块用CMD17,写单块用CMD24,读多块用CMD18,写多块用CMD25。
常见初始化问题及解决方法。上电时序不对:没有发送足够的时钟脉冲,或者初始化时钟频率太高。初始化时钟必须低于400千赫兹。命令参数错误:CMD0参数必须为0,CMD8参数必须为0x1AA。超时时间太短:ACMD41可能需要几百毫秒,超时时间设置1秒以上。电源不稳定:VDD电压波动可能导致初始化失败,加滤波电容解决。
米客方德嵌入式SD卡完全遵循SD协议标准,初始化流程和普通SD卡一模一样。如果之前做过SD卡驱动,直接复用即可。米客方德还提供了针对主流MCU的参考代码,照着做就能跑通。
总结来说,嵌入式SD卡的初始化包括上电时序、CMD0复位、CMD8检测、ACMD41初始化、读取CSD/CID、设置块大小等步骤。理解这个流程,遇到初始化问题就知道从哪里排查了。
更多推荐
所有评论(0)