【STM32】TF卡FTA32文件系统

一、SD卡介绍

1.SD简介

本质:NandFlash+控制芯片

2.SD卡存储容量等级

3.FAT文件系统的使用

4.SD卡速度等级

5.SD卡驱动方式

1.SDIO&&SD

1)SDIO接口通信线:CLK/CMD/DAT0-3(数据传输线4根)

2)SPI接口通信线:CS/CLK/MOSI/MISO(数据传输线2根)

3)因为SDIO的传输数据线比SPI传输数据线多,所以SDIO的传输速度比SPI还快

2.SDIO引脚

 3.TF卡(Micro SD)

比SD卡少一个电源引脚VSS2

6.SDMMC

7.SDMMC,TF(mirco card),SD

二、SD卡

1.原理图分析

2.CubeMX设置

【精选】STM32CubeMX学习笔记(26)——SDIO接口使用(读写SD卡)_stm32 读写sd卡_Leung_ManWah的博客-CSDN博客

1.参数配置

 SD 4 bits Wide bus 四线SD模式

2.DMA设置

SDIO 外设支持生成 DMA 请求,使用 DMA 传输可以提高数据传输效率,因此在 SDIO 的控制代码中,可以把它设置为 DMA 传输模式或轮询模式,ST 标准库提供 SDIO 示例中针对这两个模式做了区分处理。应用中一般都使用DMA 传输模式。

点击 DMA Settings 添加 SDIO 对应 DMA2 的通道4。DMA模式选择循环模式,方向选为内存到外设。

3.配置NVIC

3.参考代码(SDIO作为SD卡接口)

#include "stm32f4xx_hal.h"// SD卡句柄
SD_HandleTypeDef hsd;// SD卡初始化
void SD_Init(void) {hsd.Instance = SDIO;hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;hsd.Init.BusWide = SDIO_BUS_WIDE_1B;hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;hsd.Init.ClockDiv = 0;if (HAL_SD_Init(&hsd) != HAL_OK) {Error_Handler();}if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK) {Error_Handler();}
}// SD卡读取数据
void SD_ReadBlocks(uint32_t *pData, uint32_t startBlock, uint32_t numBlocks) {if (HAL_SD_ReadBlocks(&hsd, pData, startBlock, numBlocks, HAL_MAX_DELAY) != HAL_OK) {Error_Handler();}
}// SD卡写入数据
void SD_WriteBlocks(uint32_t *pData, uint32_t startBlock, uint32_t numBlocks) {if (HAL_SD_WriteBlocks(&hsd, pData, startBlock, numBlocks, HAL_MAX_DELAY) != HAL_OK) {Error_Handler();}
}// SD卡擦除块
void SD_EraseBlocks(uint32_t startBlock, uint32_t numBlocks) {if (HAL_SD_Erase(&hsd, startBlock, numBlocks) != HAL_OK) {Error_Handler();}
}int main(void) {// 初始化HAL库HAL_Init();// 配置系统时钟SystemClock_Config();// 配置GPIO和SDIOMX_GPIO_Init();SD_Init();// 读取数据uint32_t readBuffer[512];SD_ReadBlocks(readBuffer, 0, 1);// 写入数据uint32_t writeBuffer[512];// 填充写入数据SD_WriteBlocks(writeBuffer, 0, 1);// 擦除块SD_EraseBlocks(0, 1);while (1) {// 主循环}
}// 错误处理函数
void Error_Handler(void) {while (1) {// 发生错误时的处理}
}// 系统时钟配置
void SystemClock_Config(void) {// 你的时钟配置代码
}// GPIO初始化
void MX_GPIO_Init(void) {// 你的GPIO初始化代码
}

三、SD卡的HAL库/LL库解读

SD卡在HAL库的函数调用流程:

路向1:HAL_SD_Init(hal_sd.c)--->HAL_SD_InitCard(hal_sd.c)-->SDIO_PowerState_ON(ll_sdmmc.c)--->这个只是单纯的使能sd卡

路线2:HAL_SD_Init(hal_sd.c)--->HAL_SD_InitCard(hal_sd.c)-->SD_InitCard(hal_sd.c)--->结束

0.sdmmc.c与sd.c的不同

sd.c中调用的寄存器底层实际上是调用sdmmc.c中的函数

1.stm32f1xx_ll_sdmmc.c

底层操作寄存器的(硬件控制)

1.SDIO_PowerState_ON

2.stm32f1xx_hal_sd.c

1.HAL_SD_Init

在这个函数中调用了【HAL_SD_InitCard】

2.HAL_SD_InitCard

这个函数包含以下功能:

1)SDIO_PowerState_ON():打开SDIO开关

2)SD_InitCard()【在hal库中】:这个是真正开始使能SDIO,初始化成功

3.SD_InitCard

在【HAL_SD_InitCard】中被调用

四、FAT32文件系统简介

 1、文件系统究竟是什么

(1)参考项目驱动创新学习训练营中《基于X210的裸机时钟温度显示器》第2季课程
(2)文件系统(仓库管理员)是一套用来管理存储设备的软件
(3)文件系统给用户提供用文件访问存储的机制,比扇区式访问舒服

2、FAT32文件系统介绍

(1)网络搜索FAT32文件系统

FAT32指的是文件分配表是采用32位二进制数记录管理的磁盘文件管理方式,因FAT类文件系统的核心是文件分配表,命名由此得来。


(2)官网  http://elm-chan.org/fsw/ff/00index_e.html


(3)CubeMX工具包中middleware里包含了FAT32文件系统

3、FAT32文件系统的开发方式

(1)传统开发:自己到官网下载源码,自己移植,自己使用。
(2)CubeMX式开发:直接勾选,默认对接HAL库,少量移植即可使用。

五、HAL库的SD和DMA实例BUG

1、bug发现与查找

(1)bug发现:f_mount(挂载)不成功,单步追查发现是MBR扇区(扇区0-->目录)读取不对


(2)bug验证:去掉FAT32,原工程中读写异常【应该是STM32中MDA的问题】

2、bug解决

(1)研究DMA,尝试修改HAL库源码解决,不推荐。
(2)绕开DMA,使用阻塞读写函数来实现SD读写--》HAL_SD_WriteBlocks【删除DMA模块】

六、在SD例程中添加FAT32实战

待完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高压开关柜无线测温系统

高压开关柜无线测温系统是一种用于监测高压开关柜内部温度的系统。依托电易云-智慧电力物联网,它采用无线通信技术,实现对开关柜内部温度的实时监测和数据传输。下面我将为您介绍高压开关柜无线测温系统的组成、原理、功能以及优势。 一、系统组成 高压开…

JAVA项目测试----用户管理系统

一)项目简介: 用户管理系统是依据于前后端分离来实现的,是基于Spring SpringBoot Spring MVC,SpringAOP,MyBatis等框架来实现的一个用户管理网站,并且已经部署到了云服务器上, 目前的用户管理系统实现了超级管理员的注册功能&…

竞赛 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖,适合作为竞赛课题…

python中Thread实现多线程任务

目录 多线程概括: 使用 Thread 模块创建线程 如果不使用多线程: 多线程概括: 多线程是一种并发执行的编程方式,允许程序同时执行多个独立的线程,每个线程在程序中运行独立的任务。每个线程都是程序的基本执行单元&a…

万字长文深入理解 cache,写出高性能代码

CACHE的一致性 Cache的一致性有这么几个层面 1. 一个CPU的icache和dcache的同步问题 2. 多个CPU各自的cache同步问题 3. CPU与设备(其实也可能是个异构处理器,不过在Linux运行的CPU眼里,都是设备,都是DMA)的cache同…

用百度AI大模型给头像换风格

心血来潮想尝试尝试AI小应用,给图片加个风格(例如微信头像),于是有了这篇简短的教程 目录 1. 领取免费资源2. 在应用列表创建应用3. 在线API调试4. 效果对比 1. 领取免费资源 网站:百度智能云 百度给提供了很多AIGC的…

OpenCV入门7——OpenCV中的滤波器(包括低通滤波与高通滤波,其中低通滤波用于降噪,而高通滤波用于边缘检测)

文章目录 图像滤波卷积相关概念锚点 实战图像卷积Blur an image with a 2d convolution matrix 方盒滤波与均值滤波高斯滤波中值滤波双边滤波高通滤波—索贝尔算子高通滤波—沙尔算子高通滤波—拉普拉斯算子边缘检测Canny 图像滤波 卷积核滤波器 卷积相关概念 锚点 锚点…

详解硬盘的接口、总线和协议

总线:总线是计算机系统中用于连接各个硬件组件的一种通信方式,它可以实现数据、地址和控制信号的传输。在服务器中,内部总线起着承载数据和控制信号的重要作用。总线在单位时间内能传输数据量称为带宽。分为SATA,SAS,P…

linux 系统调用流程分析

x86 1.系统调用 系统调用是用户空间程序与内核交互的主要机制。系统调用与普通函数调用不同,因为它调用的是内核里的代码。使用系统调用时,需要特殊指令以使处理器权限转换到内核态。另外,被调用的内核代码由系统调用号来标识,而…

上门维修安装派单系统小程序APP开发之会员级别设计深度解析

啄木鸟鲁班大师上门安装维修平台APP开发之VIP会员解析,在APP或者小程序里设置的会员叫VIP级别会员,系统一共分为4种会员,注册会员,正式会员,VIP金卡会员,VIP钻卡会员。注册用户是指注册了平台但是没有消费记…

预计2023年交付35万台,增速超400%!HUD硬核玩家强势崛起

随着HUD市场渗透率加速提升,其高速增长期已经来临。 W-HUD和AR-HUD在中国市场的萌芽导入期是在2020年前后,此前HUD市场不温不火,主要归因于以往W-HUD FOV较小,成像画面有限,显示内容简单且效果粗糙;而AR-H…

Linux下使用宏定义判断系统架构和系统类型

文章目录 查看编译器当前支持的宏定义查找指定的宏不同架构不同系统 附录-编译器内部常用的一些宏定义宏定义实际应用使用宏定义判断系统架构使用宏定义判断系统类型 一般情况下在linux下做C/C方面的开发不需要太关注系统架构,当然如果涉及到不同架构下的适配问题&a…

软考小记-软件工程

模块的控制范围包括模块本身及其所有的从属模块。模块的作用范围是指模块一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围.,原则上一个模块的作用范围应该在其控制范围之内,若没有,则可以将判定所在模块…

安装向量数据库milvus及其Attu

前置条件安装docker compose 在宿主机上创建文件目录 mkdir -p /home/sunyuhua/milvus/db mkdir -p /home/sunyuhua/milvus/conf mkdir -p /home/sunyuhua/milvus/etcd下载docker-compose.yml wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-s…

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中,它通常叫做一个漫反射贴图(Diffuse Map)(3D艺术家通常都这么叫它),它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…

AI技术实力认证,宏电股份荣获2023年度AI天马“领军企业”

近日,由中国新一代人工智能发展战略研究院指导,深圳市人工智能产业协会主办,广东未来产业研究院承办的2023年度“AI天马”认定最终结果公布,宏电股份荣获AI天马“领军企业”奖项。 宏电股份基于20余年的技术沉淀,在工业…

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码

基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于猎食者算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于猎食者优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

关于lenra你需要了解的

monorepo:项目代码管理方式,单个仓库中管理多个项目是一种设计思想 lenra:是一种工具,对于使用npm和git管理多软件包代码仓库的工作流程进行优化 使用这些工具的优点: 公共依赖只要安装一次,Monorepo 中…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大关键点分析

数字化时代银行网点厅堂营销需要抓住以下5大关键点: 1、精准识别客户:在数字化时代,银行网点厅堂营销的关键在于精准识别客户。通过利用大数据和人工智能技术,银行可以分析客户的行为和需求,从而更好地了解客户&#…

面试题:你怎么理解System.out.println() ?

文章目录 首先分析System源码out源码分析println分析拓展知识点 你如何理解System.out.println() ? 学了这么久的面向对象编程,那如何用一行代码体现呢? 如果你能自己读懂System.out.println(),就真正了解了Java面向对象编程的含义 面向对…