STM32之SD卡学习

SD卡初始化

SPI方式驱动SD卡

SPI初始化

1、初始化SPI接口及相关IO(通过SPI连接SD卡,所以先要初始化MCU的SPI接口,以及相关IO)

2、上电延时(>74个CLK)(应为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步)

3、向SD卡发送复位命令(CMD0),进入IDLE状态。CS有效电平为“低”,SPI模式被启用

4、发送CMD8,检查是否支持SD卡2.0协议

5、根据不同协议检查SD卡(相关命令:CMD55、ACMD41、CMD58和CMD1等)

6、取消片选,发送8个CLK,结束初始化

 

注:卡初始化时,时钟不能大于400KHz.

SD卡单块数据块读取流程

1、发送CMD17指令,开始读数据块

2、等待CMD17响应(R1)

3、等待数据起始令牌:0XFE

4、接收数据

5、禁止片选,完成数据读取

 

SD卡多块数据块读取流程

1、发送CMD18指令,开始读取数据块

2、等待CMD18响应(R1)

3、等待数据起始令牌:0XFE

4、读第一个数据块的数据

5、等待数据起始令牌:0XFE

6、读第二个数据块的数据

7、......读取第N个数据块的数据

8、发送CMD12指令,结束数据块读取

9、等待CMD12响应(R1)

10、禁止片选,结束多块数据块读取

 

 

SD卡单块数据块写入流程

1、发送CMD24指令,开始写入数据

2、发送写数据起始令牌:0XFE

3、写入一个块的数据

4、发送2个字节的伪CRC(0XFE)

5、截止片选,完成单块数据写入

 

SD卡多块数据块写入流程

1、发送ACMD23指令,预擦除数据块

2、发送CMD25指令,开始写数据块

3、发送多块写数据起始令牌:0XFC

4、写入第一个数据块的数据

5、发送2个字节的伪CRC(0XFF)

6、发送多块写数据起始令牌:0XFC

7、写入第二个数据块的数据

8、......写入第N个数据块的数据

9、发送多块写数据结束令牌:0XFD

10、禁止片选,完成多数据块写入

注:发送ACMD之前,要先发送CMD55,通知SD卡,接下来要发送的是应用命令(APP CMD),而非标准命令

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值