0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心
发布
  • 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

基于STM32完成FATFS文件系统移植与运用

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-03-08 09:17 次阅读

一、环境介绍

主控MCU: STM32F103ZET6

STM32程序开发IDE: keil5

STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植

硬件包含: 一块STM32F103ZET6系统板、一个SPI接口的SD卡卡槽模块、一张SD卡

这篇文章主要演示FATFS文件系统如何移植到自己的工程,并完成文件的读写。

因为SD卡采用的是SPI模拟时序,所以,其他单片机一样可以照着移植,代码都可以复制粘贴的。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

二、FATFS文件系统介绍

2.1 FATFS简介

FatFs 是一种完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C 语言编写,所以具有良好的硬件平台独立性,可以移植到 8051、 PIC、 AVR、 SH、 Z80、 H8、 ARM 等系列单片机上而只需做简单的修改。它支持 FATl2、 FATl6 和 FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对 8 位单片机和 16 位单片机做了优化。

2.2 特点

  1. Windows兼容的FAT文件系统
  2. 不依赖于平台,易于移植
  3. 代码和工作区占用空间非常小
  4. 多种配置选项
  5. 多卷(物理驱动器和分区)
  6. 多ANSI/OEM代码页,包括DBCS
  7. 在ANSI/OEM或Unicode中长文件名的支持
  8. RTOS的支持
  9. 多扇区大小的支持
  10. 只读,最少API,I/O缓冲区等等

2.3 移植性

fatfs模块是ANSI C(C89)编写的。 没有平台的依赖, 编译器只要符合ANSI C标准就可以编译。

fatf模块假设大小的字符/短/长8/16/32位和int是16或32位。 这些数据类型在integer.h文件中定义。这些数据类型在大多数的编译器中定义都符合要求。 如果现有的定义与编译器有任何冲突发生时,需要自己解决。

2.4 源码下载

FATFS文件系统官网下载地址:http://elm-chan.org/fsw/ff/00index_e.html

这是在STM32上移植好的工程,可以直接下载使用,这个只要是STM32F103系列的所以芯片都可以使用工程:https://download.csdn.net/download/xiaolong1126626497/19687693

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

FATFS有两个版本,一个大版本,一个小版本。小版本主要用于8位机(内存小)使用。

下载图:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.5 FATFS源码文件介绍

将下载的源码解压后可以得到两个文件夹: doc 和 src。 doc 里面主要是对 FATFS 的介绍(离线文档—英文和日文),而 src 里面才是我们需要的源码。

其中,与平台无关的是:

ffconf.h FATFS配置文件

ff.h 应用层头文件

ff.c 应用层源文件

diskio.h 硬件层头文件

interger.h 数据类型定义头文件

option 可选的外部功能(比如支持中文等)

与平台相关的代码:

diskio.c 底层接口文件(需要用户提供)

FATFS 模块在移植的时候,我们一般只需要修改 2 个文件,即 ffconf.h 和 diskio.c。

FATFS模块的所有配置项都是存放在 ffconf.h 里面,我们可以通过配置里面的一些选项,来满足自己的需求。

FATFS最顶层是应用层,使用者无需理会 FATFS 的内部结构和复杂的 FAT 协议,只需要调用FATFS 模块提供给用户的一系列应用接口函数,如 f_open, f_read, f_write 和 f_close 等,就可以像在 PC 上读/写文件那样简单。

中间层 FATFS 模块, 实现了 FAT 文件读/写协议。 FATFS 模块提供的是 ff.c 和 ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。

需要我们编写移植代码的是 FATFS 模块提供的底层接口,它包括存储媒介读/写接口 ( disk、I/O) 和供给文件创建修改时间的实时时钟

三、 移植FATFS文件系统

移植之前,首先得准备一个能正常编译的工程,并且工程里有SD卡的驱动代码,提供了读写扇区这些函数才能进行FATFS文件系统的正常移植。

关于如何编写SD卡驱动,SD卡的时序介绍、命令介绍等知识点下篇文章再讲解。这篇文章重点是FATFS文件系统的移植过程。

3.1 新建工程

FATFS文件系统源码下载下来,解压之后,移植修改的步骤如下:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

打开KEIL工程,添加FATFS文件源码:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

加入.h文件主要是方便配。cc936.c 用于支持中文。

3.2 修改diskio.c文件

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

注释掉现在不需要的用到的文件,因为我们现在用的是SD卡,与USB,ATA,MMC卡没关系。

并加入一个新的宏 :

#define SD 0

定义SD卡的物理驱动器号为0。

修改 disk_status函数,该函数主要是用来获取磁盘状态。现在未用到,可以直接函数体内代码删除。

修改截图:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

代码示例:

#include "diskio.h" /* fatf底层API */

#include "sd.h" /* SD卡驱动头文件 */

/* 定义每个驱动器的物理驱动器号*/

#define SD 0

/*-----------------------------------------------------------------------*/

/* 获取设备(磁盘)状态 */

/*-----------------------------------------------------------------------*/

DSTATUS disk_status (

BYTE pdrv /* 物理驱动识别 */

)

{

return 0; //该函数现在无需用到,直接返回0

}

修改disk_initialize函数,添加SD卡的初始化,其他不用到的代码直接删掉,该函数成功返回0,失败返回1。

修改截图:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

代码示例:

/*-----------------------------------------------------------------------*/

/* 初始化磁盘驱动 */

/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (

BYTE pdrv /* 物理驱动识别 */

)

{

DSTATUS stat;

int result;

switch (pdrv) {

case SD : //选择SD卡

stat=SD_Init(); //初始化SD卡-用户自己提供

}

if(stat)return STA_NOINIT; //磁盘未初始化

return 0; //初始化成功

}

修改disk_read函数,加入SD卡读任意扇区的函数(需要用户自己提供),其他不用到的选项可以删掉。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

修改代码如下:

/*-----------------------------------------------------------------------*/

/* 读扇区 */

/*-----------------------------------------------------------------------*/

DRESULT disk_read (

BYTE pdrv, /* 物理驱动编号 - 范围0-9*/

BYTE *buff, /* 数据缓冲区存储读取数据 */

DWORD sector, /* 扇区地址*/

UINT count /* 需要读取的扇区数*/

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

res=SD_Read_Data((u8*)buff,sector,count); //读SD扇区函数--用户提供

return res; //在此处可以判错误

}

return RES_PARERR; //无效参数

}

修改disk_write 函数,添加写扇区函数:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

代码:

/*-----------------------------------------------------------------------*/

/* 写扇区 */

/*-----------------------------------------------------------------------*/

#if _USE_WRITE

DRESULT disk_write (

BYTE pdrv, /* 物理驱动号*/

const BYTE *buff, /* 要写入数据的首地址 */

DWORD sector, /* 扇区地址 */

UINT count /* 扇区数量*/

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

res=SD_Write_Data((u8*)buff,sector,count); //写入扇区

return res;

}

return RES_PARERR; //无效参数

}

#endif

修改disk_ioctl 函数,填充ioctl命令功能。这些功能是标准的命令,在diskio.h有定义。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

代码如下:

/*-----------------------------------------------------------------------*/

/* 其他函数 */

/*-----------------------------------------------------------------------*/

#if _USE_IOCTL

DRESULT disk_ioctl (

BYTE pdrv, /* 物理驱动号 */

BYTE cmd, /* 控制码 */

void *buff /* 发送/接收数据缓冲区地址 */

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

switch(cmd)

{

case CTRL_SYNC: //等待写过程

SD_CS(0); //选中SD卡

if(SD_Wait_Ready())result = RES_ERROR;/*等待卡准备好*/

else res = RES_OK; //成功

SD_CS(1); //释放SD卡

break;

case GET_SECTOR_SIZE://获取扇区大小

*(DWORD*)buff = 512;

res = RES_OK; //成功

break;

case GET_BLOCK_SIZE: //获取块大小

*(WORD*)buff = 8; //块大小(扇区为单位),一块等于8个扇区

res = RES_OK;

break;

case GET_SECTOR_COUNT: //获取总扇区数量

*(DWORD*)buff = SD_Get_Sector_Count();

res = RES_OK;

break;

default: //命令错误

res = RES_PARERR;

break;

}

return res;

}

return RES_PARERR; //返回状态

}

diskio.c 文件修改完整代码:

/*-----------------------------------------------------------------------*/

/*低级别磁盘I / O模块框架fatf(C)ChaN)2014

*存储控制模块fatf模块定义了一个API。 */

/*-----------------------------------------------------------------------*/

#include "diskio.h" /* fatf底层API */

#include "sd.h" /* SD卡驱动头文件 */

/* 定义每个驱动器的物理驱动器号*/

#define SD 0

/*-----------------------------------------------------------------------*/

/* 获取设备(磁盘)状态 */

/*-----------------------------------------------------------------------*/

DSTATUS disk_status (

BYTE pdrv /* 物理驱动识别 */

)

{

return 0; //该函数现在无需用到,直接返回0

}

/*-----------------------------------------------------------------------*/

/* 初始化磁盘驱动 */

/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (

BYTE pdrv /* 物理驱动识别 */

)

{

DSTATUS stat;

int result;

switch (pdrv) {

case SD : //选择SD卡

stat=SD_Init(); //初始化SD卡-用户自己提供

}

if(stat)return STA_NOINIT; //磁盘未初始化

return 0; //初始化成功

}

/*-----------------------------------------------------------------------*/

/* 读扇区 */

/*-----------------------------------------------------------------------*/

DRESULT disk_read (

BYTE pdrv, /* 物理驱动编号 - 范围0-9*/

BYTE *buff, /* 数据缓冲区存储读取数据 */

DWORD sector, /* 扇区地址*/

UINT count /* 需要读取的扇区数*/

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

res=SD_Read_Data((u8*)buff,sector,count); //读SD扇区函数--用户提供

return res; //在此处可以判错误

}

return RES_PARERR; //无效参数

}

/*-----------------------------------------------------------------------*/

/* 写扇区 */

/*-----------------------------------------------------------------------*/

#if _USE_WRITE

DRESULT disk_write (

BYTE pdrv, /* 物理驱动号*/

const BYTE *buff, /* 要写入数据的首地址 */

DWORD sector, /* 扇区地址 */

UINT count /* 扇区数量*/

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

res=SD_Write_Data((u8*)buff,sector,count); //写入扇区

return res;

}

return RES_PARERR; //无效参数

}

#endif

/*-----------------------------------------------------------------------*/

/* 其他函数 */

/*-----------------------------------------------------------------------*/

#if _USE_IOCTL

DRESULT disk_ioctl (

BYTE pdrv, /* 物理驱动号 */

BYTE cmd, /* 控制码 */

void *buff /* 发送/接收数据缓冲区地址 */

)

{

DRESULT res;

int result;

switch (pdrv) {

case SD:

switch(cmd)

{

case CTRL_SYNC: //等待写过程

SD_CS(0); //选中SD卡

if(SD_Wait_Ready())result = RES_ERROR;/*等待卡准备好*/

else res = RES_OK; //成功

SD_CS(1); //释放SD卡

break;

case GET_SECTOR_SIZE://获取扇区大小

*(DWORD*)buff = 512;

res = RES_OK; //成功

break;

case GET_BLOCK_SIZE: //获取块大小

*(WORD*)buff = 8; //块大小--一块等于8个扇区

res = RES_OK;

break;

case GET_SECTOR_COUNT: //获取总扇区数量

*(DWORD*)buff = SD_Get_Sector_Count();

res = RES_OK;

break;

default: //命令错误

res = RES_PARERR;

break;

}

return res;

}

return RES_PARERR; //返回状态

}

#endif

//返回FATFS时间

//获得时间

DWORD get_fattime (void)

{

return (DWORD)(2017-1980)<<25|    //年

7<<21|    //月

27<<16|    //日

12<<11|    //时

13<<5|    //分

14; //秒

}

/*

Return Value

Currnet local time is returned with packed into a DWORD value. The bit field is as follows:

bit31:25

Year origin from the 1980 (0..127)

bit24:21

Month (1..12)

bit20:16

Day of the month(1..31)

bit15:11

Hour (0..23)

bit10:5

Minute (0..59)

bit4:0

Second / 2 (0..29)

*/

3.3修改ffconf.h文件

需要注意的一些宏配置:

#define _CODE_PAGE 936 //采用中文GBK编码 (64行)

#define _USE_LFN 3 //动态的堆上工作 (93行)

#define _MAX_LFN 255 /*_USE_LFN选项开关LFN(长文件名)特性。

#define _VOLUMES 1 /* 支持的磁盘数量(逻辑驱动器)。 */ (142行)

#define _MIN_SS 512 (165行)

#define _MAX_SS 512 /*这些选项配置支持扇区大小的范围。(512,1024, 4096*/

#define _FS_NORTC 0 /*启用RTC时间功能*/ (202行)

#define _NORTC_MON 1

#define _NORTC_MDAY 1

#define _NORTC_YEAR 2015 //年

/*需要实现:get_fattime()函数*/

ffconf.h 文件源码(讲解):

/*---------------------------------------------------------------------------/

/ FatFs - FAT文件系统模块配置文件 R0.11a (C)ChaN, 2015

/---------------------------------------------------------------------------*/

#define _FFCONF 64180 /* 版本识别*/

/*---------------------------------------------------------------------------/

/ 功能配置

/---------------------------------------------------------------------------*/

#define _FS_READONLY 0

/* 这个选项开关只读配置。(0:读/写或1:只读)

/只读配置删除编写API函数,f_write(),f_sync(),

/ f_unlink(),f_mkdir(),f_chmod(),f_rename(),f_truncate(),f_getfree()

/写和可选的功能. */

#define _FS_MINIMIZE 0

/*此选项定义删除一些基本的API函数极小化水平。

/

/ 0:所有基本功能都是激活的。

/ 1:f_stat(),f_getfree(),f_unlink(),f_mkdir(),f_chmod(),f_utime(),

/ f_truncate()和f_rename()函数删除。

/ 2:f_opendir(),f_readdir()和f_closedir()中除了1。

/ 3:f_lseek()函数删除除了2。*/

#define _USE_STRFUNC 1

/*这个选项开关字符串函数,f_gets(),f_putc(),f_puts()和

/ f_printf()。

/

/ 0:禁用字符串函数。

/ 1:启用没有LF-CRLF转换。

/ 2:启用LF-CRLF(回车换行)转换。*/

#define _USE_FIND 0

/*这个选项开关过滤目录读取特性和相关功能,

/ f_findfirst()和f_findnext()。(0:禁用或1:启用)*/

#define _USE_MKFS 1

/* 这个选项开关f_mkfs()函数。(0:禁用或1:启用) */

#define _USE_FASTSEEK 1

/* 这个选项开关快速寻求功能。(0:禁用或1:启用) */

#define _USE_LABEL 1

/* 磁盘卷标这个选项开关功能,f_getlabel()和f_setlabel()。

/(0:禁用或1:启用) */

#define _USE_FORWARD 0

/* 这个选项开关f_forward()函数。(0:禁用或1:启用)

/启用它,也_FS_TINY需要设置为1. */

/*---------------------------------------------------------------------------/

/ 语言环境和名称空间配置

/---------------------------------------------------------------------------*/

#define _CODE_PAGE 936 //采用中文GBK编码

/*这个选项指定OEM代码页在目标系统上使用。

/不正确的代码页的设置会导致文件打开失败.

/

/ 1 - ASCII (没有扩展字符。Non-LFN cfg。只有)

/ 437 - U.S.

/ 720 - 阿拉伯语

/ 737 - 希腊语;

/ 771 - 阿富汗

/ 775 - 波罗的海

/ 850 - 拉丁1

/ 852 - 拉丁2

/ 855 - 西里尔字母

/ 857 - 土耳其语

/ 860 - 葡萄牙语

/ 861 - 冰岛语

/ 862 - 希伯来人

/ 863 - 加拿大法语

/ 864 - 阿拉伯语

/ 865 - 日耳曼民族的

/ 866 - 俄语

/ 869 - 希腊 2

/ 932 - 日本人 (DBCS)

/ 936 - 简体中文(DBCS)

/ 949 - 韩国人 (DBCS)

/ 950 - 繁体中文(DBCS)

*/

#define _USE_LFN 3 //动态的堆上工作

#define _MAX_LFN 255

/*_USE_LFN选项开关LFN(长文件名)特性。

/

/ 0:禁用LFN特性。_MAX_LFN没有影响。

/ 1:启用LFN BSS静态工作缓冲区。总是不是线程安全的。

/ 2:启用LFN与动态缓冲栈上的工作。

/ 3:使LFN与动态缓冲区在堆上工作。

/

/ 当启用LFN(长文件名)特性,Unicode(选项/ unicode.c)必须处理功能

/被添加到项目中。LFN工作缓冲区占用(_MAX_LFN + 1)* 2字节。

/当使用堆栈缓冲区,照顾堆栈溢出。当使用堆

/工作缓冲区内存,内存管理功能,ff_memalloc()和

/ ff_memfree(),必须添加到项目中。 */

#define _LFN_UNICODE 0

/* 这个选项开关字符编码的API。(0:ANSI / OEM或1:Unicode)

路径名/使用Unicode字符串,并设置_LFN_UNICODE启用LFN特性

/1。这个选项也会影响行为的字符串的I / O功能。

*/

#define _STRF_ENCODE 3

/* 当_LFN(长文件名)_UNICODE是1,这个选项选择文件的字符编码

/通过字符串读取/写入I /O功能,f_gets(),f_putc(),f_puts和f_printf().

/

/ 0: ANSI/OEM

/ 1: UTF-16LE

/ 2: UTF-16BE

/ 3: UTF-8

/

/ 当_LFN_UNICODE = 0时,该选项没有影响。*/

#define _FS_RPATH 0

/*这个选项配置相对路径的功能。/

/ 0:禁用相对路径特性和删除相关功能。

/ 1:启用相对路径特性。f_chdir()和f_chdrive()是可用的。

/ 2:f_getcwd()函数可用除了1。/

/注意,目录项读通过f_readdir()这个选项。

*/

/*---------------------------------------------------------------------------/

/ 驱动/卷配置

/---------------------------------------------------------------------------*/

#define _VOLUMES 1

/* 支持的磁盘数量(逻辑驱动器)。 */

#define _STR_VOLUME_ID 0

#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"

/* STR_VOLUME_ID选项开关卷ID字符串功能。

/当_STR_VOLUME_ID设置为1时,也可以使用预先定义的字符串在路径名称/数量。

为每个_VOLUME_STRS定义驱动ID字符串

/逻辑驱动器。条目的数量必须等于_VOLUMES。有效字符

/驱动ID字符串:a - z和0 - 9。*/

#define _MULTI_PARTITION 0

/* 这个选项开关多分区的特性。在默认情况下(0),每个逻辑驱动器

/号绑定到相同的物理驱动器号

/物理驱动器将被安装。当启用分区特性(1),

/每个逻辑驱动器号是绑定到任意物理驱动器和分区

/中列出VolToPart[]。还f_fdisk()函数可用. */

#define _MIN_SS 512

#define _MAX_SS 512

/* 这些选项配置支持扇区大小的范围。(512,1024,

/ 2048或4096)总是为大多数系统设置两个512,卡和所有类型的内存

/硬盘。但是可能需要更大的值为车载闪存和一些

/类型的光学媒体。当_MAX_SS大于_MIN_SS,fatf配置

/变量扇区大小和GET_SECTOR_SIZE命令必须执行disk_ioctl()函数. */

#define _USE_TRIM 0

/* 这个选项开关ATA-TRIM特性。(0:禁用或1:启用)

/启用削减特性,也应该实现CTRL_TRIM命令

/ disk_ioctl()函数。*/

#define _FS_NOFSINFO 0

/*

如果你需要知道正确的自由空间体积FAT32,设置一些0

/选项,f_getfree()函数在第一次后体积将迫使山

/全脂肪扫描。位1控制使用的集群数量分配。/

/ bit0 = 0:使用免费的集群计算FSINFO如果可用。

/ bit0 = 1:不相信自由FSINFO集群计算。

/ bit1 = 0:最后使用集群可用FSINFO如果数量分配。

/ bit1 = 1:不相信最后分配FSINFO集群数量.

*/

/*---------------------------------------------------------------------------/

/ 系统配置列表

/---------------------------------------------------------------------------*/

#define _FS_TINY 0

/* 这个选项开关小缓冲区配置。(0:正常或1:小)

/小配置,文件对象的大小(FIL)_MAX_SS减少字节。而不是私人部门从文件对象,缓冲了

/公共部门缓冲文件系统中的对象(fatf)是用于该文件

/数据传输. */

#define _FS_NORTC 0

#define _NORTC_MON 1

#define _NORTC_MDAY 1

#define _NORTC_YEAR 2015 //年

/* _FS_NORTC选项开关时间戳的特性。如果系统没有/

RTC函数或不需要有效的时间戳,_FS_NORTC 1设置为禁用/

时间戳的特性。所有对象修改fatf将有一个固定的时间戳。/

固定的时间定义为_NORTC_MON _NORTC_MDAY _NORTC_YEAR。

/当启用时间戳特性(_FS_NORTC = = 0),需要实现get_fattime()函数。/

添加到项目RTC读当前时间形式。_NORTC_MON, /

_NORTC_MDAY和_NORTC_YEAR没有效果。

/这些选项没有影响只读配置(_FS_READONLY = = 1)。 */

#define _FS_LOCK 0

/* _FS_LOCK选项开关控制复制的文件打开的文件锁定功能

/和非法操作打开对象。这个选项_FS_READONLY时必须是0

/是1。/

/ 0:禁用文件锁定功能。为了避免体积腐败、应用程序

/应该避免非法打开,删除和重命名的开放对象。

/ > 0:启用文件锁定功能。值定义了多少文件/子目录

可以同时打开的/文件锁的控制之下。注意,这个文件独立于re-entrancy /锁功能。 */

#define _FS_REENTRANT 0

#define _FS_TIMEOUT 1000

#define _SYNC_t HANDLE

/* _FS_REENTRANT选项开关re-entrancy fatf的(线程安全)

/模块本身。注意,不管这个选项,文件访问不同

/体积始终是凹角和音量控制功能,f_mount(),f_mkfs()

/和f_fdisk()函数,总是不凹角。只有文件/目录的访问

/相同的体积是这个功能的控制。

/

/ 0:禁用re-entrancy。_FS_TIMEOUT和_SYNC_t没有效果。

/ 1:启用re-entrancy。还提供用户同步处理程序,

/ ff_req_grant(),ff_rel_grant(),ff_del_syncobj()和ff_cre_syncobj()

/函数,必须添加到项目中。样品中可用

/选项

/ syscall.c。

/

/ _FS_TIMEOUT定义超时时间单位的滴答声。

/ _SYNC_t定义了O

/ S依赖同步对象类型。例如处理、ID、OS_EVENT *

/ SemaphoreHandle_t等. .O / S的头文件定义需要

/包括在ff.c的范围。 */

#define _WORD_ACCESS 0

/* _WORD_ACCESS选项是一个只有依赖于平台的选择。

它定义了这个词/访问方法是用来体积上的数据。

/

/ 0:逐字节的访问。总是兼容所有平台。

/ 1:词的访问。不要选择这个,除非在下列条件。

/

/ *地址对齐内存访问总是允许所有指令。

/ *字节顺序的记忆是低位优先。

/

/如果是这样的情况,_WORD_ACCESS也可以减少代码的大小设置为1。

/下表显示允许设置某种类型的处理器。

/

/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2

/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1

/ Cortex-M0 0 *2 x86 0/1 TLCS-870 0/1

/ AVR 0/1 RX600(LE) 0/1 TLCS-900 0/1

/ AVR32 0 *1 RL78 0 *2 R32C 0 *2

/ PIC18 0/1 SH-2 0 *1 M16C 0/1

/ PIC24 0 *2 H8S 0 *1 MSP430 0 *2

/ PIC32 0 *1 H8/300H 0 *1 8051 0/1

/

/

* 1:高位优先。/

* 2:不支持不连续的内存访问。/

* 3:一些编译器生成LDM(逻辑磁盘管理器 ) / STM mem_cpy(内存拷贝)函数。

*/

3.4实现动态内存分配函数与时间函数

ff.h文件有动态内存的释放,动态内存申请,时间获取函数接口。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

在diskio.c文件实现函数功能:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

代码实现如下:

//动态内存分配

void* ff_memalloc (UINT msize) /* 分配内存块 */

{

return (void*)malloc(msize); //分配空间

}

//动态内存释放

void ff_memfree (void* mblock) /* 空闲内存块 */

{

free(mblock); //释放空间

}

//返回FATFS时间

//获得时间

DWORD get_fattime (void)

{

//Get_RTC_Timer(); //获取一次RTC时间

return (RTC_Timer.year-1980)<<25|   //年

RTC_Timer.month<<21|  //月

RTC_Timer.day<<16|    //日

RTC_Timer.hour<<11|   //时

RTC_Timer.minute<<5|  //分

RTC_Timer.sec; //秒

}

/*

Return Value

Currnet local time is returned with packed into a DWORD value. The bit field is as follows:

bit31:25

Year origin from the 1980 (0..127)

bit24:21

Month (1..12)

bit20:16

Day of the month(1..31)

bit15:11

Hour (0..23)

bit10:5

Minute (0..59)

bit4:0

Second / 2 (0..29)

*/

3.5 修改堆栈空间

完成了上述的修改,还需要修改堆栈空间,因为长文件支持需要占用堆空间。

修改STM32启动文件如下:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.6编译工程测试

修改完毕之后,给开发板插上SD卡,调用API函数在SD卡创建一个文件,并写入数据,测试是否成功:

#include "ff.h"

FATFS fs; // 用户定义的文件系统结构体

FIL file; // 用户定义的文件系统结构体

u8 buff[]="123 知识!!";

int main(void)

{

u32 data; //检测SD卡容量

u8 i,res;

LED_Init(); //LED灯初始化

Delay_Init();

KEY_Init();

USART1_Init(72,115200);

USART2_Init(36,115200);

FLASH_Init();

Set_Font_addr(); //字库地址初始化

FSMC_SRAM_Init();

LCD_Init();

RTC_Init(); //RTC时钟初始化

while(SD_Init()) //检测不到SD卡,SD相关硬件初始化

{

i=!i;

LCD_ShowString(60,150,200,16,16,"SD Card Error! Please Check SD Card!!",0xf800);

Delay_ms(500);

LED1(i)//DS0闪烁

}

f_mount(&fs,"0",1); // 注册工作区,驱动器号 0,初始化后其他函数可使用里面的参数

printf("注册工作区!\n");

if(f_mkfs("0",0,4096)) //格式化SD卡

{

printf("格式化失败!!\n");

}

else

{

printf("格式化成功!!\n");

}

res = f_open(&file, "/file.c", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);

if(res==0)

{

printf("文件创建成功!!\n");

}

else

{

printf("文件创建失败!!\n");

}

res =f_write(&file,buff,strlen((const char*)buff),&data);

if(res==0)

{

printf("数据写入成功!!\n");

}

else

{

printf("数据写入失败!!\n");

}

printf("成功写入%d字节数据\n",data);

f_close(&file); //关闭文件

//_FS_RPATH

while(1)

{

Delay_ms(1000);

LED1(1);

Delay_ms(500);

LED1(0);

}

}


  • STM32
    +关注

    关注

    2127

    文章

    8725

    浏览量

    342716
  • SPI
    SPI
    +关注

    关注

    14

    文章

    1309

    浏览量

    88180
  • FATFS
    +关注

    关注

    0

    文章

    36

    浏览量

    17607
  • keil5
    +关注

    关注

    5

    文章

    32

    浏览量

    19941
  • 系统移植
    +关注

    关注

    0

    文章

    14

    浏览量

    4706
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #STM32STM32-75 FATFS文件系统基础知识讲解-1

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:42:30

    #硬声创作季 #STM32STM32-75 FATFS文件系统基础知识讲解-2

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:42:59

    #硬声创作季 #STM32STM32-75 FATFS文件系统基础知识讲解-3

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:43:51

    #硬声创作季 #STM32STM32-76 FATFS文件系统实验-1

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:44:34

    #硬声创作季 #STM32STM32-76 FATFS文件系统实验-2

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:45:22

    #硬声创作季 #STM32STM32-76 FATFS文件系统实验-3

    文件系统stm32
    水管工
    发布于 :2022年11月11日 04:46:04

    【技术精选】嵌入式STM32原创征文活动精选文章

    总线、W25Q64(FLASH)的详细介绍STM32: 介绍IIC总线、读写AT24C02(模拟时序)STM32F103实现IAP在线升级应用程序基于STM32完成FATFS文件系统移植运用
    发表于 07-27 18:26

    在SD卡上创建FatFS文件系统发生错误如何解决呢?

    我正在观看来自 ST Youtube 频道的视频“STM32 – 在 SD 卡上创建文件系统”。我做了与视频中严格相同的事情,但发生了错误。../Core/Src/main.c:22:10
    发表于 01-05 07:53

    FATFS文件系统移植----基于STM32F10x控制芯片的

    前一周做了FATFS文件系统移植,当初用的是STM32库里的评估板的SD卡驱动。当然,库的驱动是比较好的。听说能支持到16G的SD卡。不过可惜,没移植成功。后来用了我同学给的SD卡的驱动才移植成功
    发表于 08-08 09:36

    FATfs文件系统解析

    。 到这里,移植基本完成了,如果你的文件系统出现LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))有问题(数据异常终止DATA ABORT exception之类的)的情况,请百度搜索“转一篇比较详细介绍FatFS文件系统移植的文章”就可以搞定
    发表于 07-18 11:13

    FATFS文件系统移植

    这是本人,整理的FATFS文件系统移植资料,很少的一部分,希望大家把自己搜到的比较好的资料,分享一下,本人正在学习fatfs文件系统,希望和高手讨论,
    发表于 09-11 16:05

    STM32FATFS文件系统移植笔记

    一、序言 经常在网上、群里看到很多人问关于STM32FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。二、FATFS简介
    发表于 01-09 15:18

    FATFS文件系统建立文件失败

    FATFS 文件系统用f_open()函数创建一个文件时还回FR_NO_FILESYSTEM,意思就是SD卡上没有有效的FAT文件系统,可我已经在电脑上将SD卡格是化为FAT32系统。我的FATFS是在51单片机上运行的。
    发表于 05-05 22:22

    FATFS文件系统移植日志

    按照原有的结构进行编写即可。这样就基本完成FATFS移植工作了,接下来就是直接使用文件系统提供的函数即可完成功能。需要注意的是:当扇区改变是需要进行格式化操作才能完成设备的挂载。不然若扇区于上次
    发表于 08-12 23:33

    转:基于KL26的SD卡Fatfs文件系统移植

    可以用的文件系统也比较多,网络上适用于微型处理器的常见文件系统有:uc/FS, ZLG/FS, Efsl,FatFs等。其中FatFs文件系统是开源的,而且一直在更新,目前使用的人也比较多,便于交流,所以
    发表于 06-04 14:41

    转:STM32CubeMX系列教程18:文件系统FATFS

    :http://elm-chan.org/fsw/ff/00index_e.html结合STM32cubeMX软件移植FATFS文件系统非常简单。本章程序在上一章SDMMC工程的基础上修改,复制串口
    发表于 07-06 16:57

    转:【STM32746G-Discovery】基于FreeRTOS的Fatfs文件系统

    这里使用了开发板上的TF卡接口,用于在TF卡上建立Fatfs文件系统,并新建一个文件,在文件写内容相应内容。开发板插上TF卡,这个座不是常见的,触点没有在板子侧,而是上侧。再来看程序,与所有的程序
    发表于 08-03 10:17

    关于STM32F405VET6移植FATFS文件系统,利用SDIO读写SD卡的问题

    本人目前正在利用STM32F407VET6移植FATFS文件系统通过SDIO读写SD卡,可是为什么总是移植不成功,串口打印“写入文件失败”,本人测试的是16G MicroSD卡,搜了资料网上有人说
    发表于 06-13 21:56

    【NXP LPC54114试用体验】FATFS文件系统使用分析

    。其主要具有与Windows FAT系统兼、不依赖于任何平台、可移植性高、代码和工作区占用空间非常小等特点。 二、FATFS文件系统移植1、获取FATFS代码资源链接地址:http
    发表于 08-27 14:20

    HAL库基于SPI驱动的SD卡的Fatfs文件系统,SD卡初始化一直不成功

    最近在做fatfs文件系统移植的时候,SD卡初始化一直不成功。我是使用STM32CUBEMX生成的系统,想用SPI驱动SD卡,实现文件读写,但是在网上没有找到使用HAL库做的基于SPI驱动的SD卡
    发表于 12-21 08:44

    Fatfs文件系统函数f_open能打开文件,stdio库的fopen函数不能打开

    如题:Fatfs文件系统问题,文件系统函数f_open能打开文件,stdio库的fopen函数不能打开移植了一个Fatfs文件系统,里面的文件使用fatfs文件系统的读写函数f_open能打开文件,但使用C
    发表于 01-24 07:24

    利用STM32Cube移植FatFs文件系统,f_Open返回FR_NOT_READY

    新手移植FatFs文件系统,利用STM32Cube,初始化SPI2,选择PB9作为片选信号,没用使用cube自带的fatfs文件系统;问题如标题所示,f_Open返回FR_NOT_READY,通过
    发表于 02-26 07:52

    请问FATFS文件系统怎么实现文件搜索功能?

    1.求IS62LV256AL-TSOP28 PCB封装,99SE格式,那位大虾有用过的,赐小弟一份!2.FATFS文件系统怎么实现文件搜索功能,比如搜索BMP后缀的文件
    发表于 06-21 04:35

    Petit FATFs移植分享!

    Petit FATFs小型化的轻量级的fat文件系统,适合资源紧张的8bit,16bitMCU系统下载地址:http://elm-chan.org/fsw/ff/00index_p.html移植可参考百度上的一些教程,这里我就不说移植过程了移植源码:TF_Pff_51.kz
    发表于 11-04 04:35

    请问FAT文件系统能创建或删除文件夹等操作吗?

    使用SD卡。可是我们的开发板是用SD卡的SPI模式,用最少的STM32引脚,如果运用FAT文件系统也能创建和删除文件,就不用去使用FATFS了,不行也只好换文件系统了,看到这里有位朋友使用FATFS
    发表于 03-19 01:08

    如何在库函数版本找到fatfs文件系统

    库函数版本的文件系统fatfs在资料的什么位置????????????
    发表于 04-09 04:35

    串行FLASH文件系统FatFs—零死角玩转STM32-F429系列

    串行FLASH文件系统FatFs—零死角玩转STM32-F429系列
    发表于 05-30 12:03

    怎样移植FATFS文件到工程文件

    STM32移植FATFS文件系统目录一、前言二、硬件及软件准备三、移植FATFS文件到工程文件夹下四、将移植文件添加到工程中五、修改“diskio.c”文件六、配置“ffconf.h”文件七、
    发表于 07-13 06:12

    STM32ZET6移植文件系统FatFs

    STM32ZET6移植文件系统FatFs,以文件的形式存储数据到flash中。并给出了恢复w25q128的出厂文件的方法。
    发表于 08-03 07:03

    进行具体的文件系统移植

    STM32F407单片机内部flash空间比较小,所以内部flash的数据组织形式为FAT12格式;移植过程需要用到的知识为 FATFS文件系统源码包,FAT12文件格式。这两方面具体知识,自行百度
    发表于 08-04 07:49

    STM32——FAT文件系统移植 精选资料分享

    进行管理和查找,对扇区进行编号,从第0(最里圈)磁道开始累积计数。2,文件系统3,FATFS简介FATFS 是一个完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准 C
    发表于 08-05 06:36

    LVGL的文件系统(fs)API对接

    LittleVGL (LVGL)干货入门教程三之LVGL的文件系统(fs)API对接。前言:阅读前,请确保你拥有以下条件:你的项目已经完成FatFS”的移植(例如你可以用FatFS进行SD卡的文件
    发表于 08-09 08:38

    FATFS文件系统简介

    FATFS文件系统1.FATFS文件系统简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 08-10 08:14

    FATFS文件系统如何移植工程

    STM32F103ZET6系统板、一个SPI接口的SD卡卡槽模块、一张SD卡工程完整源码下载地址这篇文章主要演示FATFS文件系统如何移植到自己的工程,并完成文件的读写...
    发表于 08-24 06:34

    FATFS文件系统的特点是什么?它是如何移植的?

    SD卡具有哪几种操作模式?引脚功能是什么?FATFS文件系统的特点是什么?它是如何移植的?
    发表于 09-23 08:25

    STM32如何移植FatFS文件系统最新版R0.14b?

    STM32如何移植FatFS文件系统最新版R0.14b?
    发表于 09-24 08:33

    什么是串行FLASH文件系统FatFs?如何在STM32F1上移植

    什么是串行FLASH文件系统FatFs?如何在STM32F1上移植
    发表于 10-08 09:31

    怎样去移植基于STM32F407的FATFS文件系统

    怎样去移植基于STM32F407的FATFS文件系统呢?有哪些流程?
    发表于 10-18 08:39

    FATFS文件系统的结构是怎样构成的

    FATFS是什么?FATFS的特点有哪些?FATFS文件系统的结构是怎样构成的?
    发表于 10-27 07:52

    介绍移植fatfs文件系统步骤

    就可以派上用场,fatfs是一小型的可裁剪免费文件系统移植起来比较方便,移植文件系统大大缩短开发周期,可以很方便的操作内存,废话不再多说,下面开始介绍移植文件系统步骤:
    发表于 11-23 07:19

    FatFs文件系统的原理是什么?如何对FATFS进行移植

    FatFs文件系统的原理是什么?FatFs文件系统移植方法是什么?如何实现eMMC卡中文件的读写及其它操作?
    发表于 11-25 07:52

    Fatfs文件系统移植要经过哪几个步骤呢

    Fatfs文件系统有何特点?Fatfs文件系统移植要经过哪几个步骤呢?
    发表于 12-01 07:33

    如何选择fatfs文件系统

    如何选择fatfs文件系统
    发表于 12-03 06:11

    怎样去移植基于STM32F103的FATFS文件系统

    怎样去移植基于STM32F103的FATFS文件系统呢?有哪些步骤?
    发表于 12-13 07:02

    FATFS文件系统移植的相关资料推荐

    FATFS文件系统移植(FLASH)一、说明1、在移植文件系统前需先验证FLASH的全部扇区读写是否没问题,将全部扇区读写一遍。2、可在FatFs文件系统官网下载文件系统源码:http
    发表于 01-11 06:57

    fatfs移植注意事项和误区

    准备再单片机CH579上移植FATFS1.3方便数据管理,下面简单介绍一下移植注意事项和误区。需要准备的材料有:(1)FATFS文件系统源码FATFS1.3(点此下载最新FATFS源码)。(2
    发表于 01-11 07:08

    FATFS文件系统的相关资料推荐

    采用的独特的文件系统结构CDFS:CDFS是大部分的光盘的文件系统exFATFATFS文件系统FATFS是一个完全免费开源的FAT 文件系统模块,专门为小型的嵌入式系统而设计。完全用标准C 语言编写,所以具有良好的硬件平***立性。可以移植到8051、PIC、A
    发表于 01-24 07:43

    FatFs文件系统在嵌入式芯片LPC18XX上的移植过程

    目录一 准备工作二 FatFs源码移植FatFs源码适配四 文件系统测试一 准备工作(1)FatFs驱动源码(CSDN下载:https://download.csdn.net/download
    发表于 02-07 06:15

    如何在spi_flash上移植建立fatfs文件系统

    文章目录基于stm32f103系列MCU,在spi_flash上移植建立fatfs文件系统移植准备FATFS文件系统源码单片机平台SPI_FLASH芯片W25Q32底层spi驱动程序编写移植过程
    发表于 02-14 06:38

    FATFS文件系统基础知识简介

    一、FATFS文件系统基础知识1.简介文件系统可以从官网进行下载官网地址:FATFS是一个完全免费开源的FAT 文件系统模块,FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I / O层
    发表于 02-16 06:41

    Stm32文件系统FATFS参考资料分享

    Stm32文件系统FATFS参考资料主要是原子和野火两家的讲解。1.FATFS简介:适合嵌入式小型单片机,是一个 独立 的软件层文件系统,我们只需要将底层硬件的读取函数移植FATFS提供的向下
    发表于 02-28 12:17

    如何使用STM32CubeMX移植FATFS文件系统到SD卡上

    本篇详细的记录了如何使用STM32CubeMX移植FATFS文件系统到SD卡上。1. 准备工作硬件准备开发板首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):Micro
    发表于 03-01 07:45

    讲一讲在FatFs文件系统下读取SD卡的该如何做

    1、前言上一篇文章我讲述了在SDIO模式下读取SD卡,在文章最后说了需要注意的地方,同时也是裸机下利用SDIO模式的不足,今天给大家讲一讲在FatFs文件系统下读取SD卡的该如何做,以及相比于裸机下SDIO模式的优势。2、FatFs系统简介FatFs文件系统是用于嵌入式的
    发表于 03-02 07:08

    FATFS文件系统主要结构体及接口函数说明

    FATFS结构(文件系统对象)用来保存独立逻辑驱动器动态工作区域。这个结构由应用程序给定,使用f_mount函数注册/注销 FatFs模块。在执行f_mount或媒体发生变化后,访问第一个文件FATFS
    发表于 04-26 16:01 286次下载

    stm32-SDIO+FatFS文件系统txt-int-ascii

    stm32-SDIO+FatFS文件系统txt-int-ascii
    发表于 03-26 15:46 148次下载

    SDIO文件系统forHMI-STM32

    SDIO文件系统 for HMI-STM32
    发表于 03-26 16:01 39次下载

    stm32+sdio+fatfs文件系统_源码分析

    stm32+sdio+fatfs文件系统介绍,通俗易懂。
    发表于 11-06 09:52 21次下载

    基于stm32_的fatfs0.07e移植过程分享

    基于stm32_的fatfs0.07e移植过程分享
    发表于 11-05 17:04 9次下载

    FatFs文件系统使用

    STM系列FatFs文件系统使用文件,希望对大家有帮助。
    发表于 11-06 18:10 5次下载

    基于SD卡的FATFS文件系统的研究与应用_崔鹏伟

    基于SD卡的FATFS文件系统的研究与应用_崔鹏伟。
    发表于 04-14 16:46 40次下载

    FatFs通用FAT文件系统模块_中文手册

    FatFs通用FAT文件系统_0.09A中文手册,学习嵌入式的肯定要用到它。FatFs 是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs
    发表于 07-13 15:40 86次下载

    基于FatFs在32位微控制器STM32上的移植

    基于FatFs在32位微控制器STM32上的移植
    发表于 09-26 09:31 8次下载
    基于<b>FatFs</b>在32位微控制器<b>STM32</b>上的<b>移植</b>

    如何进行FatFs文件系统移植

    FatFs 的底层可以写一次命令,读写多个扇区。FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图:
    发表于 04-30 18:24 2次下载
    如何进行<b>FatFs</b><b>文件系统</b>的<b>移植</b>

    CH579 SPIFLASH W25Q64 FATFS文件系统

    CH579 SPIFLASH W25Q64 FATFS文件系统(arm嵌入式开发平台PB)-W25Qxx的SPIFlash挂载文件系统,实现挂载fatfs文件系统成功。FATFS版本为V0.12,测试使能了长文件名。
    发表于 08-04 11:44 67次下载
    CH579 SPIFLASH W25Q64 <b>FATFS</b><b>文件系统</b>

    嵌入式Linux系统移植-(Linux文件系统

    嵌入式Linux系统移植-(Linux文件系统)嵌入式文件系统概述·文件是有组织、有次序地存储在某种介质上的一组信息的集合,是用来存储信息的一种基本结构。·文件系统决定了信息和数据在存储设备上
    发表于 11-02 12:51 13次下载
    嵌入式Linux<b>系统</b><b>移植</b>-(Linux<b>文件系统</b>)

    MSP430、STM32、8051单片机fatfs 文件系统移植 W25Q128

    MSP430、STM32、8051单片机fatfs 文件系统移植 W25Q128
    发表于 11-15 16:21 19次下载
    MSP430、<b>STM32</b>、8051单片机<b>fatfs</b> <b>文件系统</b><b>移植</b> W25Q128

    STM32——FAT文件系统移植

    进行管理和查找,对扇区进行编号,从第0(最里圈)磁道开始累积计数。2,文件系统3,FATFS简介FATFS 是一个完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准 C 语言编写,所以具有良好的硬件平台独立性,可
    发表于 11-15 17:21 24次下载
    <b>STM32</b>——FAT<b>文件系统</b>的<b>移植</b>

    Fatfs文件系统移植

    Fatfs文件系统移植)一、文件系统介绍二、移植条件、说明1、FatFs模块在可移植性方面设定了以下条件:2、数据类型说明3、系统框架三、文件移植操作四、接口的实现修改后的diskio.c
    发表于 11-15 18:51 21次下载
    <b>Fatfs</b>(<b>文件系统</b>的<b>移植</b>)

    STM32移植FATFS+USB+FLASH+PDFLIB库总结

    STM32移植FATFS+USB+FLASH+PDFLIB库总结
    发表于 11-25 20:06 34次下载
    <b>STM32</b><b>移植</b><b>FATFS</b>+USB+FLASH+PDFLIB库总结

    FATFS文件系统详解

    采用的独特的文件系统结构CDFS:CDFS是大部分的光盘的文件系统exFATFATFS文件系统FATFS是一个完全免费开源的FAT 文件系统模块,专门为小型的嵌入式系统而设计。完全用标准C 语言编写,所以具有良好的硬件平台独立性。可以移植到8051、PIC、AV
    发表于 11-29 09:51 25次下载
    <b>FATFS</b><b>文件系统</b>详解

    基于STM32F103的Littlefs文件系统移植

    移植平台: 正点原子STM32F1精英版V1.41MCU:STM32F103ZET6SPI Falsh:W25Q128LittleFS是ARM mbedOS的官方推荐文件系统,具有轻量级,掉电安全
    发表于 12-02 12:51 23次下载
    基于<b>STM32</b>F103的Littlefs<b>文件系统</b><b>移植</b>

    文件系统FatFs文件系统在嵌入式芯片LPC18XX上的移植

    文件系统FatFs文件系统在嵌入式芯片LPC18XX上的移植
    发表于 12-04 10:51 11次下载
    【<b>文件系统</b>】<b>FatFs</b><b>文件系统</b>在嵌入式芯片LPC18XX上的<b>移植</b>

    手把手教你在flash上移植fatfs文件系统(含实时操作系统)

    文章目录基于stm32f103系列MCU,在spi_flash上移植建立fatfs文件系统移植准备FATFS文件系统源码单片机平台SPI_FLASH芯片W25Q32底层spi驱动程序编写移植过程
    发表于 12-09 12:51 23次下载
    手把手教你在flash上<b>移植</b><b>fatfs</b><b>文件系统</b>(含实时操作<b>系统</b>)

    FATS文件管理系统STM32移植

    /11916818一、概述1、 文件系统简介:(1)文件系统:管理和存储文件信息的软件机构。(2)常用的文件系统: FAT/FATFS NTFS(基于安全性的文件系统,是W...
    发表于 12-17 18:39 4次下载
    FATS<b>文件</b>管理<b>系统</b><b>STM32</b><b>移植</b>

    FATFS文件系统原版文件下载

    FATFS文件系统原版文件下载
    发表于 02-13 10:16 12次下载

    XfS文件系统,XfS文件系统是什么意思

    XfS文件系统,XfS文件系统是什么意思 XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Lin
    发表于 03-29 10:39 3774次阅读

    FatFs特点和应用接口以及其移植方法

    FatFs是一个通用的文件系统模块,以小的嵌入式系统的FAT文件系统FatFs的编程遵守的ANSI C格式语法标准,因此,它是具有独立于硬件架构。 在不做任何改变就可以被移植到常用的微控制器中,如8051, PIC, AVR, SH, Z80, H8, ARM等。
    发表于 11-24 13:52 2597次阅读

    FatFS文件系统STM32F4上的移植和应用

    在实现如U盘文件读写,SD卡的文件读写等工作时,我们往往需要一个文件系统来支持我们的工作。特别在一些MCU应用中,文件系统的加入能明显改善系统交互的友好性。在这一篇中,我们就来讨论FatFS文件系统STM32F4上的移植和应用。
    的头像 发表于 12-13 17:26 945次阅读
    <b>FatFS</b><b>文件系统</b>在<b>STM32</b>F4上的<b>移植</b>和应用

    文件系统概述及代码移植

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。它支持FAT12
    的头像 发表于 01-31 17:57 337次阅读
    <b>文件系统</b>概述及代码<b>移植</b>

    STM32入门学习笔记之文件系统FatFs移植1

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。它支持FAT12
    的头像 发表于 02-16 15:26 142次阅读
    <b>STM32</b>入门学习笔记之<b>文件系统</b><b>FatFs</b>的<b>移植</b>1

    STM32入门学习笔记之文件系统FatFs移植2

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。它支持FAT12
    的头像 发表于 02-16 15:26 136次阅读

    STM32入门学习笔记之文件系统FatFs移植3

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。它支持FAT12
    的头像 发表于 02-16 15:27 309次阅读
    <b>STM32</b>入门学习笔记之<b>文件系统</b><b>FatFs</b>的<b>移植</b>3

    STM32入门学习笔记之文件系统FatFs移植4

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。它支持FAT12
    的头像 发表于 02-16 15:27 179次阅读

    文件系统FatFs移植

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。
    的头像 发表于 03-01 14:38 226次阅读
    <b>文件系统</b><b>FatFs</b>的<b>移植</b>

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

    图标,字库文件,方便设备开机加载。为了让单片机更加方便的读写这些资源文件,通常都会加文件系统,如果没有文件系统,直接读取写扇区的方式,对数据不好管理。这篇文章就手把
    的头像 发表于 02-17 15:50 0次阅读
    基于<b>STM32</b>采用CS创世 SD NAND(贴片SD卡)<b>完成</b><b>FATFS</b><b>文件系统</b><b>移植</b>与测试

    基于STM32+CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试(下篇)

    四、移植FATFS文件系统前面第3章,完成了SDNAND的驱动代码编写,这一章节实现FATFS文件移植。4.1FATFS文件系统介绍(1)介绍FatFs是一种完全免费开源的FAT文件系统模块,专门
    的头像 发表于 03-03 11:46 0次阅读
    基于<b>STM32</b>+CS创世 SD NAND(贴片SD卡)<b>完成</b><b>FATFS</b><b>文件系统</b><b>移植</b>与测试(下篇)

    下载硬声App