sd卡怎么修改文件目录和分配表 fatfs

sd卡怎么修改文件目录和分配表 fatfs,第1张

SD的优势之一是它的便携性,它可以自由插拔,可以在嵌入式设备和PC机之间交换数据。如果使用FAT(File Allocation Table)文件系统,它便可以方便在安装windows的PC和嵌入式设备之间交换数据。一个完整的FAT文件系统代码量敏族稿非常庞大,不适合资源较少的嵌入式系统,于是就需要一个微型的FAT文件系统,FatFs就是基于这样的目的而开发的。

FatFS是一个专为小型嵌入式系统设计的通用FAT文件系统模块。FatFs具有较高的可配置性,最小配置仅使用1K的RAM空间,非常适用于嵌入式系统。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于桥孝硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。

特点

Windows兼容的FAT文件系统

不依赖于穗姿平台,易于移植

代码和工作区占用空间非常小

多种配置选项:

多卷(物理驱动器和分区)

多ANSI/OEM代码页,包括DBCS

在ANSI/OEM或Unicode中长文件名的支持

RTOS的支持

多扇区大小的支持

只读,最少API,I/O缓冲区等等

FatFs的源代码只有几个文件:diskio.c,ff.c,ff_util.c,tff.c及头文件。diskio.c是磁盘 *** 作的代码文件(这个文件是移植时要实现的),ff.c是一般FatFs的代码文件,tff.c是微型FatFs的代码文件,ff_util.c是几个辅助函数。integer.h是内部基本类型的定义,ff.h是一般FatFs包含的头文件,tff.h是微型FatFs包含的头文件。

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

#if _FATFS_TINY != 1

#include <fatfs/src/ff.h>

#else

#include <fatfs/src/tff.h>

#endif

#include <fatfs/src/ff_util.h>

微型FatFs配置最小时仅占用内存1KB,但它是一个只读的FAT系统。

FatFs的配置文件是fatfs_config.h:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

//------------------------------------------------------------------------------

// General Definitions (previously in ff.h)

//------------------------------------------------------------------------------

#define _FATFS_TINY 0

/* When _FATFS_TINY is set to 1, fatfs is compiled in Tiny mode

/ Else, it is compiled in normal mode

/ Tiny FatFs feature : Very low memory consumption, suitable for small memory

/ system. (1KB RAM) : Supports only single drive, no disk format,

/ only read functions, no write functions */

//------------------------------------------------------------------------------

// Definitions for normal FATFS (previously in ff.h)

//------------------------------------------------------------------------------

#if _FATFS_TINY == 0

#define _MCU_ENDIAN 2

/* The _MCU_ENDIAN defines which access method is used to the FAT structure.

/ 1: Enable word access.

/ 2: Disable word access and use byte-by-byte access instead.

/ When the architectural byte order of the MCU is big-endian and/or address

/ miss-aligned access results incorrect behavior, the _MCU_ENDIAN must be set to 2.

/ If it is not the case, it can also be set to 1 for good code efficiency. */

#define _FS_READONLY0

/* Setting _FS_READONLY to 1 defines read only configuration. This removes

/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,

/ f_truncate and useless f_getfree. */

#define _FS_MINIMIZE0

/* The _FS_MINIMIZE option defines minimization level to remove some functions.

/ 0: Full function.

/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename are removed.

/ 2: f_opendir and f_readdir are removed in addition to level 1.

/ 3: f_lseek is removed in addition to level 2. */

#define _USE_STRFUNC0

/* To enable string functions, set _USE_STRFUNC to 1 or 2. */

#define _USE_FSINFO 1

/* To enable FSInfo support on FAT32 volume, set _USE_FSINFO to 1. */

#define _USE_SJIS 1

/* When _USE_SJIS is set to 1, Shift-JIS code transparency is enabled, otherwise

/ only US-ASCII(7bit) code can be accepted as file/directory name. */

#define _USE_NTFLAG 1

/* When _USE_NTFLAG is set to 1, upper/lower case of the file name is preserved.

/ Note that the files are always accessed in case insensitive. */

#define _USE_MKFS 1

/* When _USE_MKFS is set to 1 and _FS_READONLY is set to 0, f_mkfs function is

/ enabled. */

#define _DRIVES 2

/* Number of logical drives to be used. This affects the size of internal table. */

#define _MULTI_PARTITION0

/* When _MULTI_PARTITION is set to 0, each logical drive is bound to same

/ physical drive number and can mount only 1st primaly partition. When it is

/ set to 1, each logical drive can mount a partition listed in Drives[]. */

//------------------------------------------------------------------------------

// Definitions for normal FATFS TINY (previously in tff.h)

//------------------------------------------------------------------------------

#else

#define _MCU_ENDIAN 2

/* The _MCU_ENDIAN defines which access method is used to the FAT structure.

/ 1: Enable word access.

/ 2: Disable word access and use byte-by-byte access instead.

/ When the architectural byte order of the MCU is big-endian and/or address

/ miss-aligned access results incorrect behavior, the _MCU_ENDIAN must be set to 2.

/ If it is not the case, it can also be set to 1 for good code efficiency. */

#define _FS_READONLY1

/* Setting _FS_READONLY to 1 defines read only configuration. This removes

/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,

/ f_truncate, f_getfree and internal writing codes. */

#define _FS_MINIMIZE0

/* The _FS_MINIMIZE option defines minimization level to remove some functions.

/ 0: Full function.

/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename are removed.

/ 2: f_opendir and f_readdir are removed in addition to level 1.

/ 3: f_lseek is removed in addition to level 2. */

#define _USE_STRFUNC0

/* To enable string functions, set _USE_STRFUNC to 1 or 2. */

#define _USE_FSINFO 1

/* To enable FSInfo support on FAT32 volume, set _USE_FSINFO to 1. */

#define _USE_SJIS 1

/* When _USE_SJIS is set to 1, Shift-JIS code transparency is enabled, otherwise

/ only US-ASCII(7bit) code can be accepted as file/directory name. */

#define _USE_NTFLAG 1

/* When _USE_NTFLAG is set to 1, upper/lower case of the file name is preserved.

/ Note that the files are always accessed in case insensitive. */

#define _USE_FORWARD0

/* To enable f_forward function, set _USE_FORWARD to 1. */

#define _FAT32 1

/* To enable FAT32 support in addition of FAT12/16, set _FAT32 to 1. */

#endif

//------------------------------------------------------------------------------

// Other definitions

//------------------------------------------------------------------------------

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

/* Correspondence between drive number and physical drive*/

/* Note that Tiny-FatFs supports only single drive and always*/

/* accesses drive number 0. */

#define DRV_MMC 0

#define DRV_SDRAM1

#define DRV_ATA 2

#define DRV_USB 3

#define SECTOR_SIZE_SDRAM 512

#define SECTOR_SIZE_SDCARD 512

fatfs文件系统支持4GB文件。

disk_initialize()等函数是FATFS底层的几个接口,移植实现后,FATFS的 *** 作跟WINDOWS上的文件 *** 作差不多一样,FATFS源代码里有说明文档自己看,不过设备要先挂载,如果原来的设备没有文件系统,还要格式化一下,才能用。

对于FAT16文件系统,可以保存的文件体积最大值是4 GB - 1 byte (2^32 bytes - 1 byte);卷的最大体积是4GB;每个卷上最多可以保存的文件数量是65,536个 (2^16);根目录下可以保存的文件和文件夹数量最大值是512个(如果使用了长文件名,该数字还会键清减小)。

FatFs 提供下面的函数:

f_mount - 注册/注销一个工戚铅作区域(Work Area)

f_open - 打开/创建一个文件

f_close - 关闭一个文件

f_read - 读文件

f_write - 写文件

f_lseek - 移动文件读/写指针

f_truncate - 截断文件稿仔前

f_sync - 冲洗缓冲数据 Flush Cached Data

f_opendir - 打开一个目录

f_readdir - 读取目录条目

f_getfree - 获取空闲簇 Get Free Clusters

1.从FATFS官网上下载FATFS程序

2.把FATFS中文件上中的后缀名为.c的文件改成.cpp

3.把FATFS程序(diskio.cpp,diskio.h,ff.cpp,ff.h,ffconf.h,integer.h)加载到自己的项目中(如果不会加,指肆悉官网上有FATFS使用实例,大家可以雹腔参考唯乎)

4.把FATFS中的ffconf.h的_CODE_PAGE改成936(支持简体中文),_USE_LFN改成1(支持长文件名)

_LFN_UNICODE改成1(支持UNICODE)

5.把cc936.cpp(cc936.c)和syscall.c(syscall.cpp)添加到自己的工程中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12209209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存