STM32F103通过SPI完成对SD卡的数据读取(fat文件模式)

一. SD卡协议原理

SD 卡系统定义了两种通信协议:SD 和 SPI 主机系统可以选择任意一种。

当收到 reset 命令的时候,SD 卡通过主机的信息来决定 使用何种模式,并且之后的通讯都会使用相同的模式。

SD 卡的 SPI 实现使用了 SD 模式相同的命令。SD 卡 SPI 接口同市场上现有的 SPI 主 机兼容。

同其他 SPI 设备一样,SD 卡的 SPI 信道有以下 4 个信号:

CS: 主机到卡的片选(chip select)信号

CLK: 主机到卡的时钟信号

DataIn: 主机到卡的数据信号

DataOut: 卡到主机的数据信号

另一个 SPI 的通用特点是字节传输,这也是卡的实现。所有的数据都是字节(8 bit)的 整数倍,并且直接总是对齐 CS 信号

SD 卡系统(SPI 模式)总线拓扑结构如图

image-20211220205515786

SD 卡系统(host &card)定义了两种操作模式:

  • 卡识别模式 在复位后,查找总线上的新卡的时候,主机会处于“卡识别模式”。卡在复位后会处于 识别模式,直到收到 SEND_RCA(CMD3)命令.

  • 数据传输模式 当 RCA 第一次发布后,卡会处于“数据传输模式”。主机会在总线上所有的卡都被识别 后进入这个模式

SD协议其它方面可参考相关资料。

二. 代码实现

由于网上有人提供了完整代码,因此这里直接使用。

参考链接在文末

代码下载:此工程是用stmcubmx创建的keil工程

蓝奏云链接(无需密码):https://diyugreat.lanzouw.com/i7wypxt7q9e

所用软件及硬件:

  • 芯片stm32f103c8t6

  • usb转ttl模块(因为用串口烧录,且要用串口进行发送信息)

  • SD卡模块(这里用的是Micro SD模块SPI接口)

  • SD卡及读卡器

stm32f103c8t6与此SD卡模块的接线如下,由于线多杂乱,就不拍实物图了。

stm32f103c8t6 SD卡
PA4 SDCS
PA5 SCK
PA7 MOSI
PA6 MISO
VCC VCC
GND GND

需要注意的是,以往stm32f103c8t6都是接3.3V,此次stm32f103c8t6芯片以及SD卡模块都要用5V驱动

打开工程,编译,烧录。

然后打开串口助手即可(波特率、停止位这些都保持默认)。

收到mian后,如图需要等几分钟才会显示后续。
最后能不能显示SD卡初始化成功等之后的消息,有点玄学,也许一下就成功,也许半天不行。
ps:有的同学说考虑下线长的问题,尽量短线

在这里插入图片描述

其它具体参考链接

参考链接及资料:

STM32用cube配置FATFS模式下SPI读写SD卡_Drive World的博客-CSDN博客
SD2.0协议标准完整版[1-6章中文翻译].pdf

猜你喜欢

转载自blog.csdn.net/qq_45945548/article/details/122051403