【STM32】TF卡&&FTA32文件系统

这篇具有很好参考价值的文章主要介绍了【STM32】TF卡&&FTA32文件系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SD卡介绍

1.SD简介

本质:NandFlash+控制芯片

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.SD卡存储容量等级

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

3.FAT文件系统的使用

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

4.SD卡速度等级

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

5.SD卡驱动方式

1.SDIO&&SD

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

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

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.SDIO引脚

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

 3.TF卡(Micro SD)

比SD卡少一个电源引脚VSS2

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

6.SDMMC

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

7.SDMMC,TF(mirco card),SD

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

二、SD卡

1.原理图分析

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.CubeMX设置

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

1.参数配置

 SD 4 bits Wide bus 四线SD模式

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.DMA设置

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

3.配置NVIC

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

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和SDIO
  MX_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中的函数

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

1.stm32f1xx_ll_sdmmc.c

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

1.SDIO_PowerState_ON

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.stm32f1xx_hal_sd.c

1.HAL_SD_Init

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

2.HAL_SD_InitCard

这个函数包含以下功能:

1)SDIO_PowerState_ON():打开SDIO开关

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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

3.SD_InitCard

在【HAL_SD_InitCard】中被调用

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

四、FAT32文件系统简介

 1、文件系统究竟是什么

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

2、FAT32文件系统介绍

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

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


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

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机


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

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

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

五、HAL库的SD和DMA实例BUG

1、bug发现与查找

(1)bug发现:f_mount(挂载)不成功,单步追查发现是MBR扇区(扇区0-->目录)读取不对at32读写tf卡,STM32,stm32,嵌入式硬件,单片机

at32读写tf卡,STM32,stm32,嵌入式硬件,单片机
(2)bug验证:去掉FAT32,原工程中读写异常【应该是STM32中MDA的问题】

2、bug解决

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

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

待完成文章来源地址https://www.toymoban.com/news/detail-773566.html

到了这里,关于【STM32】TF卡&&FTA32文件系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX教程28 SDIO - 使用FatFs文件系统读写SD卡

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 SDIO使用FatFs中间件读写4线SD卡,并实现以轮询方式读写SD卡或以DMA方式读取SD卡 FatFs文件系统相关知识请读者

    2024年02月19日
    浏览(47)
  • 【STM32】AT24C256硬件I2C读写,基于HAL库

    目录 一、简单介绍 二、配置工程 打开CubeMX,配置时钟,调试接口,工程名,目录等 配置iic 配置串口用于显示信息 三、硬件连接 四、代码编写 一、随机写入一个字节 测试代码 波形如下 代码编写 二、连续写入 代码如下 三、随机读取 测试代码 波形如下 代码编写 四、连续

    2024年02月03日
    浏览(48)
  • STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 使用FatFs中间件通过SPI通信协议对W25Q128芯片进行读写等操作 关于STM32F407使用SPI通信协议对W25Q128 FLASH芯片读写

    2024年02月19日
    浏览(52)
  • STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    ==== 文章汇总(有代码汇总) ==== 准备看看这方面的知识,一时间还没不清有什么区别,先补补课,不需要的跳过。 参考文章(内容来源):http://www.360doc.com/content/21/1125/22/59057945_1005908465.shtml 主要写这两个:SD卡、TF卡 共同点:SD、TF、MMC都是在MMC基础上演化发展不同的规范,

    2024年02月09日
    浏览(46)
  • STM32基于HAL工程硬件I2C读写AT24C02/04/08数据

    ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创! 🍁对于文中所提供的相关资源链接将作不定期更换。 相关篇针对AT24C32及以上容量《STM32基于STM32-HAL工程硬件I2C读取AT24Cxx数据》 🎯本工程使用STM32F103VE+AT24C02实

    2023年04月11日
    浏览(50)
  • STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 USB_OTG_FS为工作在Mass Storage Host Class(大容量存储主机类)模式下的USB_HOST(USB主机),并使用FatFs文件系统对

    2024年02月19日
    浏览(43)
  • stm32毕设分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(60)
  • stm32毕设分享 Stm32酒驾检查系统 - 单片机 嵌入式 物联网

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(72)
  • AI嵌入式K210项目(14)-TF卡读取

    本章介绍一些读取TF卡的方法,本章内容和前面的项目非常类似,都是采用了SPI接口AI嵌入式K210项目(11)-SPI Flash读写 TF有4个数据传输端,DAT0,DAT1,DAT2,DAT3。还有一个CMD脚,是用来读取卡内信息的。 TF卡主要管脚的功能: CLK:时钟信号,每个时钟周期传输一个命令或数据

    2024年01月23日
    浏览(48)
  • STM32的时钟系统(嵌入式学习)

    时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包