使用STM32在SPI模式下读写SD卡

使用STM32在SPI模式下读写SD卡

代码分享

链接: https://pan.baidu.com/s/1AhzP3XglmqDT-m0MhBYUDA
提取码: ebig

一、SD卡

Micro SD卡(原名:Trans-flash Card(TF卡))是由SanDisk公司发明的一种极细小的闪存卡。

它主要应用于手机,且是功能机必搭存储卡,又因其拥有体积极小的优点,随着不断提升的容量,它慢慢开始在GPS设备、便携式音乐播放器和一些闪存盘中使用。
使用STM32在SPI模式下读写SD卡
SD 卡主要引脚和功能描述如下:

CLK:时钟信号,控制器或者 SD 卡在每个时钟周期传输一个命令位或数据位,在 SD 总线的默认速度模式下频率可在0~25MHz 之间变化,SD 卡的总线管理器可以不受任何限制的*产生0~25MHz 的频率,在 UHS-I 速度模式下,时钟频率最高可达208M。

CMD:命令和响应复用引脚,命令是由控制器发给 SD 卡,可以是从控制器到单个 SD 卡,也可以是到 SD 总线上所有卡;响应是存储卡对控制器发送的命令应答,应答可以来自单卡或所有卡。

DAT0~3:数据线,数据可以从卡传向控制器也可以从控制器传向卡。

SD卡的管脚定义和Micro SD(TF)卡的管脚定义是不一样的。

SD卡:1-data3,2-cmd,3-vss,4-vdd,5-clk,6-vss,7-data0,8-data1,9-data2.

TF卡(SD模式):1-data2,2-data3,3-cmd,4-vdd,5-clk,6-vss,7-data0,8-data1

TF卡(SPI模式):1-rsv,2-cs,3-di,4-vdd,5-sclk,6-vss,7-do,8-rsv
使用STM32在SPI模式下读写SD卡

寄存器及功能描述如下:

OCR(Operating Conditions Register)寄存器:32位的操作条件寄存器主要存储了 VDD 电压范围,SD 卡操作电压范围为2~3.6V。

CID(Card IDentification Register)寄存器:卡识别码寄存器,长度为16个字节,存储 SD 卡唯一标识号,该号在卡生产厂家编程后无法修改。

CSD(Card-Specific Data Register)寄存器:卡特性数据寄存器,包含了访问该卡数据时的必要配置信息。

SCR(SD Card Configuration Register)寄存器:SD 卡配置寄存器(SCR),提供了 SD 卡的一些特殊特性在这张卡内,长度为64 位,这个寄存器内容由制造商在生产厂内设置。

RCA(Relative Card Address)寄存器:卡相对地址寄存器是一个16位可写的地址寄存器,控制器可通过地址选择对应地址的 SD 卡。 DSR(Driver Stage Register)寄存器:驱动级寄存器,属于可选寄存器,用于配置卡的驱动输出。

接口控制器:主要用于对内部存储核心进行控制和管理,通过接收用户对其发送的命令来进行控制和设置,并根据命令作出响应,然后执行响应的数据读写等操作。

内部存储介质:数据记忆存储的 Flash 块。

SD 卡 (Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk 公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。
SD卡一般支持2种操作模式:
1,SD卡模式;
2,SPI模式;
主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。

使用STM32在SPI模式下读写SD卡


二、实验操作

1.在stm32cubemx建立工程

使用STM32在SPI模式下读写SD卡
使用STM32在SPI模式下读写SD卡

使用STM32在SPI模式下读写SD卡

使用STM32在SPI模式下读写SD卡
使用STM32在SPI模式下读写SD卡
使用STM32在SPI模式下读写SD卡
使用STM32在SPI模式下读写SD卡

2.根据上面的原理图连接硬件

stm32 Micro SD
GND GND
5V VCC
GPIOA4 CS
GPIOA5 SCK
GPIOA6 MISO
GPIOA7 MOSI

建议STM32核心板和Micro都接5V的电压

3.keil编译和烧录

使用STM32在SPI模式下读写SD卡

使用STM32在SPI模式下读写SD卡

三、实验结果

下面是我得到的结果哦
使用STM32在SPI模式下读写SD卡

这时候用一个读卡器将SD卡连接到我们的电脑上,就可以在里面发现一个hello.txt文件,里面就是你写入的东西。

使用STM32在SPI模式下读写SD卡
发现后面是乱码哦,
看代码主函数
将main函数里面的
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 > 10)
		{	
			printf(" while \r\n");
			//HAL_Delay(500);
		}		
}		

得到没有乱码的结果
使用STM32在SPI模式下读写SD卡

总结

怎么说呢,这次实验硬件连接真的太容易接触不良了,实验10次,9次接触不良,好不容易出了结果,结果是有乱码,离了个大谱

参考文献

STM32在SPI模式下读写SD卡
Micro SD
STM32用cube配置FATFS模式下SPI读写SD卡

上一篇:python入门(7)名片管理系统案例


下一篇:The Path to Learning WR Python FPE.15(TO NONAME)