STM32初始化SD卡流程

1,初始化SDIO外设,关闭SDIO时钟。
2,上电,开启时钟,注意此时时钟应不能超过400kHz,且此时是只有一位数据线,要到初始化完成后再调时钟与数据线宽度。
3,延时最低74个时钟周期。使时钟与SD卡稳定,否则会出错。
4,发送CMD0,需要返回0x01,进入Idle状态
5,为了区别SD卡是2.0还是1.0,或是MMC卡,这里根据协议向上兼容的原理,首先发送只有SD2.0才有的命令CMD8,如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55+ACMD41,直到返回0x00,确定SD2.0卡初始化成功,进入Ready状态,再发送CMD58命令来判断是HCSD还是SCSD,到此SD2.0卡初始化成功。如果CMD8返回错误则进一步判断为1.0卡还是MMC卡,循环发送CMD55+ACMD41,返回无错误,则为SD1.0卡,到此SD1.0卡初始成功,如果在一定的循环次数下,返回为错误,则进一步发送CMD1进行初始化,如果返回无错误,则确定为MMC卡,如果在一定的次数下,返回为错误,则不能识别该卡,初始结束。

6,发送CMD2获取CID。
7.发送CMD3,获取RCA。
8,发送CMD9,获取CSD(SD卡容量等相关内容在这里)。
9,将时钟设置为所需要的频率,将数据线位宽设置为所需要的宽度。
10,之后便可以收发数据。

注意:收发数据时,当卡为标准容量卡时以字节为单位,当卡为高容量卡时应以块为单位来写地址。且读取或写入只能按块读写。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值