本文主要讲述SD卡协议原理,用STM32F103 完成对SD卡的数据读取(FAT文件模式)
目录
一 基本知识
1.1 SD卡简述
很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有 U 盘,FLASH 芯片,SD 卡等。他们各有优点,综合比较,最适合单片机系统的莫过于 SD 卡了,它不仅容量可以做到很大(32GB 以上),支持 SPI/SDIO 驱动,而且有多种体积的尺寸可供选择(标准的 SD 卡尺寸,以及 TF 卡尺寸等),能满足不同应用的要求。
只需要少数几个 IO 口即可外扩一个高达 32GB 以上的外部存储器,容量从几十 M 到几十G 选择尺度很大,更换也很方便,编程也简单,是单片机大容量外部存储器的首选。
1.2 SPI协议
关于SPI协议可以看我之前写的博客
基于SPI协议 AHT20+OLED屏显_我想恰鱼的博客-CSDN博客
1.3 SD卡物理结构
一般SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器 5个部分。
- 存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;
- 电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;
- 卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器; 接口驱动器控制SD卡引脚的输入输出。
二 代码配置与修改
具体的从cubemx创建工程到源代码移植修改代码等教程可以看博客:
stm32芯片使用STM32cube配置TFAST模式SPI读写SD卡_浩923的博客-CSDN博客
这里我就不过多赘述了,我前面的博客也介绍了很多利用cubemx创建工程的教程,感兴趣可以去看看
下面我就直接贴出配置好的工程便于大家下载学习。
2.1 源码下载
github下载:GitHub - cdsgsjx/-
2.2 硬件连线
STM32 | SD卡 |
---|---|
CS | PA4 |
SCK | PA5 |
MISO | PA6 |
MOSI | PA7 |
2.3 代码修改
- main.c
while循环中
while (1)
{
WritetoSD(WriteBuffer,sizeof(WriteBuffer));
HAL_Delay(500);
/*WriteBuffer[0] = WriteBuffer[0] +10;
WriteBuffer[1] = WriteBuffer[1] +10;*/
write_cnt ++;
while(write_cnt > 0)
{
printf(" while \r\n");
HAL_Delay(500);
}
}
2.4 编译烧录
编译后无错。
2.5 结果展示
三、可能的错误原因
由于stm32最小开发板性能确实有限,导致本次实验失败率及其高,确实一分钱一分货,有条件的还是推荐买高级一点的板子。错误的原因可能有:
1、编译运行后无反应一直显示main,可能是由于我们的stm最小系统和SD卡需要更高的电压来驱动它,可将3.3V电压换成5V电压,SD卡与串口都要上5V电压。
2、可能是因为一些杜邦线的接触不良或太长,可以试着移动SD卡,更换较短的杜邦线,在玄学的作用下可能就成功了。
3、SPI协议是高速运作的,需要尽可能的降低时钟速率。