本博文要求各位初步了解Fatfs文件系统

友情提示Fatfs官网:http://elm-chan.org/fsw/ff/00index_e.html

1.开发软件

  keil5,Cube5.21

2.实验目的

  往SDHC卡上移植Fatfs文件

SDHC:

  SDHC是"Secure Digital High Capacity“的缩写,即“高容量SD存储卡”。2006年5月SD协会发布了SD 2.0的系统规范,并在其中规定SDHC是符合该规范、SDHC存储卡容量为“4GB-32GB”。

  SDHC最大的特点就是高容量(4GB-32GB)。另外,SD协会规定SDHC必须采用FAT32 文件系统,这是因为之前在SD卡中使用的FAT16文件系统所支持的最大容量为2GB,并不能满足SDHC的要求。
  作为SD卡的继任者,SDHC主要特征在于文件格式从以前的FAT12、FAT16提升到了FAT32,而且最高支持32GB。同时传输速度被重新定义为Class2、Class4、Class6等级别,高速的SD卡可以支持高分辨视频录制的实时存储。
  SDHC卡的外形尺寸与SD卡一样,著作权保护机能等也和以前相同,但是由于文件系统被变更,以前只支持FAT12/16格式的SD设备存在不兼容现象,而支持FAT32(SDHC)的机器,仍可以读取现存的FAT12/16格式的SD卡。
FATFS:
  FatFs是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 组件的编写遵循ANSI C(C89),完全分离于磁盘 I/O 层,因此不依赖于硬件平台。它可以嵌入到便宜的微控制器中,如 8051, PIC, AVR, ARM, Z80, RX等等,不需要做任何修改。
因为FatFs模块完全与磁盘I/O层分开,因此需要下面的函数来实现底层物理磁盘的读写与获取当前时间。底层磁盘I/O模块并不是FatFs的一部分,并且必须由用户提供。

3.Cube配置

(1)在Cube上点开芯片功能的SDIO,因为我用的是4GB的SDHC卡,所以用SD 4 bits,用默认配置即可与SD卡通信

红框内为SDIO协议引用的引脚

PC8 ------> SDIO_D0
PC9 ------> SDIO_D1
PC10 ------> SDIO_D2
PC11 ------> SDIO_D3
PC12 ------> SDIO_CK
PD2 ------> SDIO_CMD

(2)再点开下面的FATFS,即向工程里添加fatfs移植文件,然后再勾选SD Card,底层的disiko接口默认添加SD卡读写程序

(3)配置时钟完成后,就可生成工程

4.工程讲解

(1)下面的文件是Cube帮你移植的Fatfs文件,但不用修改里面的程序

(2)下面的两个C文件,一个是SD的diskio接口层,Cube已往里面调用了HAL库的SD卡读写函数,可以不修改,另一个是上层的fatfs文件功能函数,可根据需要添加函数,也可以不用修改。

(3)虽然Cube使用了MX_SDIO_SD_Init();进行了SD卡的初始化,但还要用下面的初始化进行初始化才能使用SD卡,它们在stm32f4xx_hal_sd.c里

  HAL_SD_Init(&hsd);HAL_SD_InitCard(&hsd);

5.程序测试

(1)使用FATFS_GetAttachedDriversNbr()判断SD卡是否挂载上驱动

i=FATFS_GetAttachedDriversNbr();
printf("已挂载的驱动:%d",i);

(2)调用ff.c的文件功能函数,如果返回FR_OK(0)则成功

/* USER CODE BEGIN Application */void SD_Fatfs_Test(void){printf("文件挂载\n" );retSD=f_mount(&SDFatFS, "0:/",0);  if(retSD==FR_OK){printf("MOUNT OK\n");printf("FAILED0: %d\n",retSD);}elseprintf("FAILED2: %d\n",retSD);printf("文件打开\n" );retSD=f_open(&SDFile, "0:hellow.txt", FA_CREATE_ALWAYS | FA_WRITE | FA_READ );  if(retSD==FR_OK){printf("OPEN OK\n");}elseprintf("FAILED3: %d\n",retSD);printf("文件关闭\n" );retSD=f_close(&SDFile);if(retSD==FR_OK){printf("closk OK\n");}elseprintf("FAILED5: %d\n",retSD);}    

(3)HAL_SD_ReadBlocks()和HAL_SD_WriteBlocks()可以往SD卡读写数据

(4)用以下的HAKL库函数可读取SD卡的信息,有兴趣可以去弄

HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd);
HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID);
HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD);
HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus);
HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo);

6.Fatfs使用小经验

(1)使用FATFS,FIL等类型的变量时,可能要先申请内存空间,才能使用。具体是怎样请先学习STM32的内存管理。

(2)使用f_mount,f_close等文件功能函数出错时,请看其返回函数为何值,更容易调试。

typedef enum {FR_OK = 0,                /* (0) Succeeded */FR_DISK_ERR,            /* (1) A hard error occurred in the low level disk I/O layer */FR_INT_ERR,                /* (2) Assertion failed */FR_NOT_READY,            /* (3) The physical drive cannot work */FR_NO_FILE,                /* (4) Could not find the file */FR_NO_PATH,                /* (5) Could not find the path */FR_INVALID_NAME,        /* (6) The path name format is invalid */FR_DENIED,                /* (7) Access denied due to prohibited access or directory full */FR_EXIST,                /* (8) Access denied due to prohibited access */FR_INVALID_OBJECT,        /* (9) The file/directory object is invalid */FR_WRITE_PROTECTED,        /* (10) The physical drive is write protected */FR_INVALID_DRIVE,        /* (11) The logical drive number is invalid */FR_NOT_ENABLED,            /* (12) The volume has no work area */FR_NO_FILESYSTEM,        /* (13) There is no valid FAT volume */FR_MKFS_ABORTED,        /* (14) The f_mkfs() aborted due to any problem */FR_TIMEOUT,                /* (15) Could not get a grant to access the volume within defined period */FR_LOCKED,                /* (16) The operation is rejected according to the file sharing policy */FR_NOT_ENOUGH_CORE,        /* (17) LFN working buffer could not be allocated */FR_TOO_MANY_OPEN_FILES,    /* (18) Number of open files > _FS_LOCK */FR_INVALID_PARAMETER    /* (19) Given parameter is invalid */
} FRESULT;

(3)要先加载文件卷,才能用文件功能函数。

(4)程序出错一般是底层接口函数没写好。

粗糙之作,有不合之处请多多指教。

转载于:https://www.cnblogs.com/feiniaoliangtiangao/p/11023636.html

基于STM32F429,Cubemx的SDHC卡的基本Fatfs文件移植相关推荐

  1. 物联网控制卡学习资料第465篇:基于STM32F429多路RS232 物联网控制卡

    基于STM32F429多路RS232 物联网控制卡 一.板卡概述            板卡基于STM32F429核心板进行扩展,包括多路RS232,百兆网络,RS232 可以扩展多路 声避障模块.G ...

  2. CE下基于Zylonite硬件平台的SD卡驱动开发

    摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于IN ...

  3. 基于STM32F103完成对SD卡的数据读取(fat文件模式)

    文章目录 实验内容 一.SD卡协议 (一).SD卡简介 (二).SD 卡物理结构 (三).SD卡总线 二.基于STM32F103完成对SD卡的数据读取 (一).创建工程 (二).修改代码 (三).串口 ...

  4. [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上...

    实在很抱歉,时间紧张,我只讲怎样从SD卡内读取bin文件(二进制文件),然后现在TFT-LCD上. 准备工具 1. Image2Lcd.zip 操作步骤 步骤1 寻找或制作240x320的图片 简单起 ...

  5. python信用评分卡_基于Python的信用评分卡模型分析(二)

    上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...

  6. 基于Python的信用评分卡模型-give me some credit数据集,AUC 0.93 KS 0.71

    信用风险计量模型可以包括跟个人信用评级,企业信用评级和国家信用评级.人信用评级有一系列评级模型组成,常见是A卡(申请评分卡).B卡(行为模型).C卡(催收模型)和F卡(反欺诈模型). 今天我们展示的是 ...

  7. 基于PCI接口的数据采集卡!(第一次做的板卡)

    [板      名]    基于PCI接口的数据采集卡 [板大  小]   *X* 比标准PCI卡长点 [板层  数]   8 [输入接口] 100PIN外输入以及子板接口(AD子板) [输出接口] ...

  8. 用计算机获取机读卡是通过什么实现的,一种基于图像识别技术的答题卡及考试系统的制作方法...

    本发明涉及智能考试系统. 背景技术: 传统答题卡具有如下缺陷: 1.答题卡定位需要右侧和底端的黑点来实现定位整张答题卡的行和列: 2.需要专用答题卡识别机(专有硬件)来识别答案: 3.需要用特种铅笔( ...

  9. 基于STM32采用CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

    一.前言 在STM32项目开发中,经常会用到存储芯片存储数据. 比如:关机时保存机器运行过程中的状态数据,上电再从存储芯片里读取数据恢复:在存储芯片里也会存放很多资源文件.比如,开机音乐,界面上的菜单 ...

  10. 基于CH568芯片加密SD卡方案

    基于CH568芯片加密SD卡方案 简介 基于CH568芯片加密SD卡方案采用CH568芯片实现,CH568芯片内置USB2.0高速接口.SD卡接口以及SM4加密算法.可通过按键或指纹模块等进行密码的输 ...

最新文章

  1. MongoDB(4.0)分片——大数据的处理之道
  2. C++(五)——运算符重载
  3. linux中查找某一个字符串,Linux系统下,在文件中查找某个字符串
  4. 发布 项目_第十八期科创基金项目发布会圆满结束
  5. 基于live555的视频直播 DM368IPNC RTSP分析
  6. python 控件叠加_如何将图像应用于控件背景(叠加)
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 10丨换座位【难度中等】
  8. c#之Stringbuilder、String、Append
  9. 任何人都可以胜任全栈开发?
  10. AutoCAD 版本历史 版本代号
  11. windows server 2008 R2 SP1多国语言包官方下载
  12. 大芒果 mysql 断开_大芒果3.3.5进入显示 与服务器断开连接
  13. adf4351 锁相环相关硬件设计
  14. Excel如何使用DATE函数
  15. 12.2总结(纵使结局不如意,放弃实属下下签。)
  16. netscreenfortinet
  17. FPGA Altera Remote Update笔记
  18. Trinity安装全过程并解决部分报错
  19. 葡萄牙晋级世界杯决赛
  20. 新走遍美国第一遍总结

热门文章

  1. 浅谈智慧校园建设中存在的问题及解决方案
  2. 打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”
  3. MSDN Library下载与安装(MFC)
  4. 圆形头像制作,仿QQ做法。
  5. c语言工具栏运行不见了,电脑下面的任务栏不见了怎么办 几种方法介绍
  6. FPGA实现AM调制
  7. 女神节快乐!细数历史上那些有名的程序媛
  8. 怎么显示文件后缀名?很容易的几个步骤
  9. 基于华三交换机,限制其他网段的IP访问
  10. python贴吧签到多账号版本最新可用