其他分享
首页 > 其他分享> > 使用STM32在SPI模式下读写SD卡

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

作者:互联网

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

代码分享

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

一、SD卡

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

它主要应用于手机,且是功能机必搭存储卡,又因其拥有体积极小的优点,随着不断提升的容量,它慢慢开始在GPS设备、便携式音乐播放器和一些闪存盘中使用。
在这里插入图片描述
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
在这里插入图片描述

寄存器及功能描述如下:

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卡模式相比就是丧失了速度。

请添加图片描述


二、实验操作

1.在stm32cubemx建立工程

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

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

stm32Micro SD
GNDGND
5VVCC
GPIOA4CS
GPIOA5SCK
GPIOA6MISO
GPIOA7MOSI

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

3.keil编译和烧录

请添加图片描述

请添加图片描述

三、实验结果

下面是我得到的结果哦
在这里插入图片描述

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

请添加图片描述
发现后面是乱码哦,
看代码主函数
将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);
		}		
}		

得到没有乱码的结果
请添加图片描述

总结

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

参考文献

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

标签:模式,STM32,SPI,寄存器,WriteBuffer,Card,SD
来源: https://blog.csdn.net/rzh222/article/details/122090798