SD卡初始化以及识别过程

2019-04-14 16:36发布


转载自:http://blog.sina.com.cn/s/blog_8f9592d70101kcpd.html SD卡上电后进入SD模式,如果SD卡在接收CMD0命令时CS为低,则SD卡进入SPI模式,并且应答为R1应答,SD卡处于idle状态,回到SD模式的唯一方法就是重新上电。 SPI模式初始化 1.上电后主机应发送至少74个时钟,在这期间应保持CS为高电平,然后SD卡进入idle模式。 2.发送CMD0命令时,CS为低电平,则SD卡进入SPI模式。CMD0命令没有参数,CMD0的应答R1格式,收到应答为01。 3.SD卡发送复位命令CMD0后,为了区别卡是SD1.0、SD2.0或者MMC卡,要发送版本查询命令CMD8,命令参数0X1AA。以便初始化High Capacity SD卡,如果SD卡不能在该电压下工作,则SD卡不作应答,并处于idle状态,否则SD卡将作出应答,回应状态一般分两种:若返回0x01,表示此SD卡接CMD8,也就是说此SD卡为版本2.0;若应答为其他,则表示此SD卡为版本1或者MMC。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。 4.若是SD2.0,进一步循环发送命令CMD55+ACMD41。其中,CMD55无参数,应答直到返回0x00。发送CMD41命令,直至返回00。根据应答判断SD卡仍然处于初始化阶段;R1应答的bit0为1表明处于idle状态,SD卡还在初始化阶段;当应答为0x00时,表明SD卡已完成初始化过程。然后,发送CMD58命令来判断是HCSD还是SCSD,到此SD2.0卡初始化成功 5.若CMD8应答错误,则进一步判断为1.0卡还是MMC卡,循环发送CMD55+ACMD41,返回00,则为SD1.0卡,到此SD1.0卡初始成功。如果在一定的循环次数下,应答不为00,则为MMC卡,进一步发送CMD1进行初始化,应答为00,则确定为MMC卡,初始化成功。 6.理论上要求发送CMD58获得SD卡电压参数,但实际过程中由于事先都知道了SD卡的工作电压,因此可省略这一步简化程序。协议书上也建议尽量不要用这个命令。 图片
图片来自:http://blog.chinaunix.net/uid-28414100-id-5754671.html