首页 > 其他分享 >通过SDIO接口+FATFS对SD卡进行读写操作

通过SDIO接口+FATFS对SD卡进行读写操作

时间:2024-02-21 17:15:32浏览次数:29  
标签:读写操作 SDCardInfo SDIO Card FATFS printf fil SD

摘要:

  • cubemax 工程建立(主要描述SDIO和FATFS配置部分,实际上还添加了串口用作调试打印)
  • 代码示例
  • 主函数、fatfs、sdio接口之间的层次关系

 

cubemax工程建立:

首先,找到SDIO,进行配置。SDIO的模式有1bit、4bits总线模式,根据板子的原理图进行选择。SDIO其他参数保持默认,只修改SDIO时钟分频因子。这个时钟分频出来的频率就是SDIO_CK引脚输出的频率,分频公式:SDIOCLK/ (CLKDIV+2)。SDIOCLK=HCLK。我的开发板时钟是168MHz,这里分频系数为6,也就是168/(6+2) = 21MHz。(如果测试发现读写失败,可以尝试增大分频系数)

 SDIO_CK输出的频率为21MHz,比较大,所以这里使用DMA收发数据。

把SDIO的全局中断打开。这里我把SDIO中断优先级设置得比DMA中断高。因为我希望SDIO操作结束之后再进行DMA操作。

添加FATFS,模式选择" SD Card "

Set Defines--->Locale and Namespace Parameters:

  " CODE_PAGE(code page on target) "选择 Simplified Chinese GBK(支持中文编码)

  " USE_LFN(Use Long Filename)" 选择 Enabled with static working buffer on the BBS(支持长文件名,使用BSS静态工作缓冲区)

其他参数保持默认

 Advanced Settings--->SDIO/SDMMC--->Use dma template 选择 Enable

最后,增大栈空间,避免空间溢出的问题。

 

 代码示例:

FRESULT res;
extern SD_HandleTypeDef hsd;
HAL_SD_CardInfoTypeDef SDCardInfo; //SD卡信息结构体
FATFS fs; // 文件系统对象
FIL fil; // 文件对象
char buff[512]; // 数据缓存区

(下面代码添加到main函数中)

res = f_mount(&fs,"",1);//挂载

//得到卡的信息并输出到串口1
HAL_SD_GetCardInfo(&hsd, &SDCardInfo);//获取SD卡信息
printf("Card Type:%ld\r\n",SDCardInfo.CardType); //卡类型
printf("Card CardVersion:%ld\r\n",SDCardInfo.CardVersion);//CardVersion
printf("Card RCA:%ld\r\n",SDCardInfo.RelCardAdd);//卡相对地址
printf("Card Capacity:%ld MB\r\n",(uint32_t)(SDCardInfo.LogBlockNbr)>>11); //显示容量
printf("Card BlockSize:%ld\r\n\r\n",SDCardInfo.LogBlockSize);//显示块大小

//打开文件
if(f_open(&fil, "test.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
{
  f_puts("SD card write test!", &fil);
  f_close(&fil);
}
if(f_open(&fil, "test.txt", FA_READ) == FR_OK)
{
  f_gets(buff, sizeof(buff), &fil);
  f_close(&fil);
}

Res = f_mount(NULL,"",1);//取消挂载

printf(buff);//打印sd卡读到得内容

主函数、fatfs、sdio接口之间的层次关系

 

标签:读写操作,SDCardInfo,SDIO,Card,FATFS,printf,fil,SD
From: https://www.cnblogs.com/Kim-blog/p/18025597

相关文章

  • STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板USB_OTG_FS为工作在MassStorageHostClass(大容量存储主机类)模......
  • STM32CubeMX教程27 SDIO - 读写SD卡
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动逻辑分析仪nanoDLA野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板SDIO读写4线SD卡,实现轮询方式读写SD卡、以中......
  • STM32CubeMX教程26 FatFs 文件系统 - W25Q128读写
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板使用FatFs中间件通过SPI通信协议对W25Q128芯片进行读写等操作3......
  • 深度解析Java中的ReadWriteLock:高效处理并发读写操作
    第1章:引言大家好,我是小黑,今天咱们聊聊读写锁。当多个线程同时对同一数据进行读写操作时,如果没有合理的管理,那数据就乱套了。就好比小黑在写日记,突然来了一帮朋友,大家都想往日记本上写点什么,不加以控制,日记本就成了涂鸦板。这时,ReadWriteLock就派上用场了。它可以确保当一个线程......
  • stm32 CubeMx 怎么实现SD卡/sd nand FATFS读写测试
    本实验仅用于记录和分享技术经验若涉及侵权请联系我删除。stm32CubeMx实现SD卡/sdnandFATFS读写测试。材料:stm32F407ZGT6开发板、雷龙公司的SD_NAND测试板(CSNP1GCR01-AOW)。(一开始是使用Nandflash的操作起来不太方便而且stm32cubemx自带的fatfs还没有磨损平衡算......
  • 第6章 使用EF Core进行读写操作的技巧
    本章涵盖选择正确的方法从数据库中读取数据编写在数据库端表现良好的查询避免使用查询筛选器和特殊LINQ命令时出现问题使用AutoMapper更快地编写Select查询编写代码以快速复制和删除数据库中的实体前四章介绍了读取/写入数据库的不同方法,在第5章中,您使用这些信息......
  • FatFS移植
    1.修改diskio.c/*-----------------------------------------------------------------------*//*LowleveldiskI/OmoduleSKELETONforFatFs(C)ChaN,2019*//*-----------------------------------------------------------------------*//*Ifawork......
  • STM32使用SDIO模式和DMA实现SD卡的读写及擦除操作
    对于STM32操作SD卡来说,最重要的就算初始化、写操作、读操作、擦除这几个操作了。对于初始化部分上一篇文章已经分析,本篇就主要分析写、读、擦除操作。本篇函数来自于STM32提供的例程。参考野火的程序进行了解释,与野火函数有些不同。这几种函数完成之后,就是开始实现对SD卡进行操作了......
  • 文件的读写操作
    文件读写用途:数据存储和持久化:将应用程序中的数据写入文件,使得数据在程序退出后仍然存在,从而实现数据的持久化数据共享:将数据写入文件后,其他应用程序或系统可以读取并共享这些数据,实现数据的共享和交流配置文件:许多应用程序使用配置文件存储用户设置和参数,以便在下次运行时使......
  • uboot/Linux下MMC/SD/SDIO阅读记录
    1uboot下MMC/SD/SDIO1.1uboot下MMC/SD/SDIO相关配置uboot下关于MMC/SD/SDIO驱动以及工具配置:DeviceDrivers->MMCHostcontrollerSupportMMC/SD/SDIOcardsupport supportforMMC/SDwriteoperations--支持对MMC/SD/SDCar......