当前位置: 首页 > article >正文

STM32传感器模块编程实践(十二) micro SD卡模块简介及驱动源码

文章目录

    • 一.概要
    • 二.Micro SD卡模块主要特性
    • 三.Micro SD卡模块接线说明
    • 四.Micro SD卡模块参考原理图
    • 五.通讯协议介绍
    • 六.FATFS文件系统介绍
    • 七.STM32F030C8T6单片机与SD卡模块实现数据读写实验
      • 1.硬件准备
      • 2.软件工程
      • 3.软件主要代码
      • 4.实验效果
    • 八.源代码工程下载
    • 九.小结

一.概要

MicroSD卡是在数码相机,PDA等所用的Flash Memory Card(中文名:快闪存储卡)基础上发展出的一种更小更适合小型手机用的存储卡。尽管miniSD卡的外形大小及接口形状与原来的SD卡不同,但接口等电气标准相同,以确保兼容性。TF卡产品采用SD架构设计而成,SD协会于2004年年底正式将其更名为Micro SD,已成为SD产品中的一员。
在这里插入图片描述

二.Micro SD卡模块主要特性

该模块(MicroSD Card Adapter)是Micro SD卡读写模块,通过文件系统及SPI接口驱动程序,单片机系统即可完成MicroSD卡内的文件进行读写。用户可直接使用SD卡程序库即可完成卡的初始化和读写。

供电电压:4.5V-5.5V
接口:SPI接口
模块运行电流:0.2-200mA
接口电平:3.3V
支持卡类型:Micro SD卡(≤2G)、Micro SDHC卡(<32G)
产品重量:5g
定位孔:M2螺丝定位孔

三.Micro SD卡模块接线说明

在这里插入图片描述

控制接口:共6个引脚(GND、VCC、MISO、MOSI、SCK、CS),GND为地,VCC为供电电源一般接5V,MISO、MOSI、SCK为SPI总线,CS为片选信号脚;

四.Micro SD卡模块参考原理图

采用SPI接线方式
在这里插入图片描述

五.通讯协议介绍

读操作:
在这里插入图片描述

写操作:
在这里插入图片描述

主要寄存器

在这里插入图片描述

六.FATFS文件系统介绍

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统,要真正应用SD卡必须要使用文件系统。

FATFS是一个小型的文件系统,在小型的嵌入式系统中使用非常的广泛,我们通过简单的移植就能够使用,将前面的SD卡的读写操作进行修改,将文件系统挂载到SD卡进行操作。
我们无需理会FATFS的内容结构和复杂的FAT协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write和f_close等,就可以像在PC机上读/写文件。FATFS模块层是文件系统的实现层,它实现了FAT文件读写协议,提供ff.c和ff.h文件供用户使用。底层接口是FATFS与存储介质交互的部分,包括存储介质读写接口和提供文件创建、修改时间的实时时钟。移植FATFS模块时,通常只需修改两个文件:msd.c和diskio.c

FATFS主要函数说明:
1.注册工作区
FRESULT f_mount (
BYTE vol, /* Logical drive number to be mounted/unmounted /
FATFS fs / Pointer to new file system object (NULL for unmount)
/
)
函数说明:

1):该函数在 FatFs 模块上注册 / 注销一个工作区。在使用任何其他文件函数之前,必须使用该函数为每个卷注册一个工作区。要注销一个工作区,只要指定 fs为 NULL 即可,然后该工作区可以被丢弃。
2):参数说明:
vol:盘符。
*fs:指向缓冲区的指针。
调用示例:f_mount(0,&fs);

2.打开/新建一个文件
FRESULT f_open (
FIL fp, / Pointer to the blank file object */
const TCHAR path, / Pointer to the file name /
BYTE mode /
Access mode and file open mode flags */
)
函数说明:

1):此函数可以打开,或新建一个文件
2):参数说明:
*fp:指向一个用来存储文件对象的空结构体指针
*path:指向文件名的指针
mode:打开方式,可以是以下几种或几种的组合(默认方式是FA_OPEN_EXISTING)
FA_CREATE_ALWAYS:新建文件,如果文件已存在,覆盖旧文知平
FA_WRITE:写模式(读写模式可同时生效)
FA_READ:读模式(读写模式可同时生效)
FA_OPEN_EXISTING:默认打开方式
调用示例:f_open(&fsrc,“a.txt”,FA_CREATE_ALWAYS | FA_WRITE|FA_READ);

3.读取文件
FRESULT f_read (
FIL fp, / Pointer to the file object */
void buff, / Pointer to data buffer /
UINT btr, /
Number of bytes to read */
UINT br / Pointer to number of bytes read */
)
函数说明:

1):这个函数可以读取文件内容
2):参数说明:
*fp:指向文件对象结构体的指针
*buff:指向存储读取到的数据的数据缓冲的指针
btr:准备读取的字节数
*br:每次f_read执行完之后,br的值等于本次读取到的字节数,若br<btr,即本次读取到的字节小于准备读取的字节,说明读指针已到达文件末尾。
调用示例:res=f_read(&fp,buff,sizeof(buff),&br);

4.写文件
FRESULT f_write (
FIL fp, / Pointer to the file object */
const void buff, / Pointer to the data to be written /
UINT btw, /
Number of bytes to write */
UINT bw / Pointer to number of bytes written */
)
函数说明:

1):此函数用来想文件中写入数据, 前提是以写文件的方式打开文件
2):参数说明:
*fp:指向文件对象结构体的指针
*buff:指向数据缓冲的指针
btw:准备写入的字节数
bw:记录已写入的字节数,用来检测是否写完
调用示例:res = f_write(&fdst, textFileBuffer, sizeof(textFileBuffer), &bw);

七.STM32F030C8T6单片机与SD卡模块实现数据读写实验

1.硬件准备

STLINK接STM32F030C8T6开发板,STLINK接电脑USB口。

模块与开发板相连:
在这里插入图片描述

模块GND <----->板子GND
模块VCC <----->板子5V
模块MISO <---->板子PA6
模块MOSI <---->板子PA7
模块SCK <------>板子PA5
模块CS <-------->板子PA4

由于SD卡模块需要5V供电,所以开发板的5V USB线需要连接给板子供电。

2.软件工程

在这里插入图片描述
Part Number处输入STM32F030C8,再双击就创建新的工程
在这里插入图片描述

配置外部晶振引脚
在这里插入图片描述

配置系统主频
在这里插入图片描述

PA5,PA6,PA7配置成SPI,PA4配置成输出
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述

生成工程
在这里插入图片描述

用Keil5打开工程
在这里插入图片描述

添加文件系统相关代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加相关应用代码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.软件主要代码

#include "msd.h" 
#include "ff.h"
#include "stdio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
extern char file_num;//选中的文件标号
extern DIR start_dirs; //目录起点信息
extern uint8_t SD_Card_Ready;//SD卡初始化成功标志
FATFS fs; //FatFs文件系统对象           
FIL fsrc;  //文件对象
FRESULT res; //文件系统操作结果
UINT br, bw; // 文件 R/W 计数	

static const uint8_t WirtBuff[10]="HELLOWORLD";
static       uint8_t ReadBuff[100];
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
uint8_t ret = 1;	
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
	MX_GPIO_Init();
	MX_SPI1_Init();
	/* USER CODE BEGIN 2 */
	ret = MSD_Init();//初始化
	SD_Card_Ready = ret;//ret=0 ; 证明Ready
	res=f_mount(0, &fs);//挂载,res=0 ; 证明OK	
	res=f_open(&fsrc,"a.txt",FA_CREATE_ALWAYS | FA_WRITE|FA_READ);//res=0 ; 证明OK
	res = f_write(&fsrc, WirtBuff, 10, &bw);//写入HELLOWORLD
	f_close(&fsrc);//关闭文件
	res=f_open(&fsrc,"a.txt",FA_READ);//res=0 ; 证明OK
	res = f_read(&fsrc,ReadBuff,10,&br);//读取数据到ReadBuff
	f_close(&fsrc);
	f_mount(0, NULL);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

4.实验效果

SD卡先格式化,再装入到SD卡模块
在这里插入图片描述
上电之后,进入调试模式,全速运行,能看到ReadBuff数组的值是HELLWORLD,就说明SD卡写进去读出来都正确了
在这里插入图片描述

八.源代码工程下载

CSDN链接

九.小结

在STM32单片机中,MicroSD卡常用于存储和读取数据。例如,可以通过MicroSD卡进行程序更新、数据备份等操作,此外,MicroSD卡还可以用于恢复单片机的出厂设置。


http://www.kler.cn/a/397134.html

相关文章:

  • vue如何实现组件切换
  • 从零开始学习 sg200x 多核开发之 uboot 网络功能使能
  • Spring Batch :高效处理海量数据的利器
  • Nginx 上安装 SSL 证书并启用 HTTPS 访问
  • 0 -vscode搭建python环境教程参考(windows)
  • Tensorflow基本概念
  • [ACTF2020]Upload 1--详细解析
  • 健康之路三度冲击港交所,数字健康医疗平台IPO前景引关注
  • 【AI图像生成网站Golang】雪花算法
  • 前后端分离练习(云客项目)
  • 一文讲清楚人工智能自然语言处理中的数据预处理(数据清洗)
  • 【目标检测】用YOLOv8-Segment训练语义分割数据集(保姆级教学)
  • 34Web服务器(如Apache, Nginx)
  • SpringBoot如何集成WebSocket
  • 【LeetCode】每日一题 2024_11_15 最少翻转次数使二进制矩阵回文 I(模拟、矩阵遍历(竖着遍历))
  • SPIRiT-Diffusion:基于自一致性驱动的加速MRI扩散模型|文献速递-基于深度学习的病灶分割与数据超分辨率
  • 富格林:准确预判安全追损契机
  • flink架构 详解
  • GSMA eUICC 远程配置架构技术规范笔记 (SGP.02 v3.2)
  • 企业网络安全区域划分的原则和方法
  • 【鸿蒙开发】第十九章 Media媒体服务 --- 音频播放和录制
  • 鸿蒙进阶——HDI及IDL硬件接口IPC框架小结
  • 微服务各组件整合
  • Java读取WPS excel.xlsx嵌入图片
  • 达梦数据库迁移j脚本
  • 24 年第十届数维杯国际数模竞赛赛题浅析