1.FatFs(通用FAT文件系统模块)下载与介绍
2.FatFs移植——基于STM32 SD卡
3.FatFs学习(1)——枚举:返回值FRESULT
…
注:本文基于R0.14版本,给出的源码、翻译以及分析不保证与其他版本适合。
本文主要翻译官网给出的文档,链接: FatFs–FRESULT,下载源码后文档位于 /FATFS/documents/doc/rc.html
枚举FRESULT
- 1、FRESULT定义
- 2、解释
- 2.0 FR_OK (0)
- 2.1 FR_DISK_ERR (1)
- 2.2 FR_INT_ERR (2)
- 2.3 FR_NOT_READY (3)
- 2.4 FR_NO_FILE (4)
- 2.5 FR_NO_PATH (5)
- 2.6 FR_INVALID_NAME (6)
- 2.7 FR_DENIED (7)
- 2.8 FR_EXIST (8)
- 2.9 FR_INVALID_OBJECT (9)
- 2.10 FR_WRITE_PROTECTED (10)
- 2.11 FR_INVALID_DRIVE (11)
- 2.12 FR_NOT_ENABLED (12)
- 2.13 FR_NO_FILESYSTEM (13)
- 2.14 FR_MKFS_ABORTED (14)
- 2.15 FR_TIMEOUT (15)
- 2.16 FR_LOCKED (16)
- 2.17 FR_NOT_ENOUGH_CORE (17)
- 2.18 FR_TOO_MANY_OPEN_FILES (18)
- 2.19 FR_INVALID_PARAMETER (19)
1、FRESULT定义
FatFs通过一个枚举FRESULT表示一些操作函数的返回值,如下:
/* File function return code (FRESULT) */
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 > FF_FS_LOCK */
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
} FRESULT;
2、解释
FatFs大多数API函数返回枚举FRESULT
内的值。
当API函数成功执行时,返回0 (FR_OK),否则返回非零值,表示错误类型。
2.0 FR_OK (0)
函数执行成功,无错误。
2.1 FR_DISK_ERR (1)
磁盘I/O层硬错误。(当已工作的存储设备(如SD卡)被拔,会报告此错误)
较低层的disk_read
、disk_write
或disk_ioctl
函数报告发生了一个不可恢复的硬错误。
请注意,一旦对打开的文件的任何操作发生此错误,则file对象将中止,并且除close之外对该文件的任何操作都将被拒绝。
2.2 FR_INT_ERR (2)
断言错误。
在内部流程中检测到错乱。怀疑有以下一种可能性:
工作区域(文件系统对象、文件对象等)已被栈溢出或任何其他任务破坏。这是大多数情况下的原因。
(1)卷上的FAT结构有错误。
(2)FatFs模块自身存在bug。
(3)底层实现错误。
请注意,一旦对打开的文件的任何操作发生此错误,则file对象将中止,并且除close之外对该文件的任何操作都将被拒绝。
2.3 FR_NOT_READY (3)
物理驱动器无法工作。(出现这种情况,一般是硬件初始化失败,因此存储设备未准备好。)
底层disk_initialize
函数报告存储设备尚未准备工作。怀疑是以下原因之一:
(1)驱动器中无介质。
(2)底层实现错误。
(3)硬件配置错误。
(4)存储设备已损坏。
2.4 FR_NO_FILE (4)
找不到文件。
当前目录下找不到文件。
2.5 FR_NO_PATH (5)
找不到路径。
找不到路径中的目录
2.6 FR_INVALID_NAME (6)
路径名格式无效。
给定作为路径名的字符串无效。怀疑是以下原因之一:
(1)文件名中存在不允许的字符。
(2)文件名超出8.3格式。(非长文件名情况下)
(3)FF_MAX_LFN
小于当前文件名长度。(长文件名情况下)
(4)字符串内存在编码错误。
FF_MAX_LFN
: FatFs的配置宏,文件名的最大长度。使能长文件名(FF_USE_LFN
设为1)才生效。
2.7 FR_DENIED (7)
拒绝访问。
拒绝访问因以下原因之一:
(1)使用写模式打开只读文件。
(2)删除只读文件或目录。
(3)删除非空目录或当前目录。
(4)读取未使用FA_READ
标志打开的文件。
(5)对未使用FA_WRITE
标志打开的文件进行任何修改。
(6)由于根目录已满或磁盘已满,无法创建对象。
(7)无法为文件分配连续区域。
2.8 FR_EXIST (8)
名称冲突。
目录中已经存在具有相同名称的对象。
2.9 FR_INVALID_OBJECT (9)
文件/目录对象无效。
文件/目录无效,或传入了空指针。以下是一些原因:
(1)文件/目录对象已关闭,或结构崩溃。
(2)文件/目录对象失效。卷的挂载过程使从卷上打开对象无效
(3)由于介质移除,物理驱动器不能工作。
2.10 FR_WRITE_PROTECTED (10)
写保护。
写模式操作与写保护介质冲突。
2.11 FR_INVALID_DRIVE (11)
逻辑驱动器号无效。
在路径名中指定了无效的驱动器号,或者将空指针作为路径名传入。(相关选项:FF_VOLUMES
)
FF_VOLUMES
: 要使用的卷(逻辑驱动器)的数量。(1 - 10)。
2.12 FR_NOT_ENABLED (12)
当前卷无工作区。
逻辑驱动器的工作区未通过f_mount
函数注册。
2.13 FR_NO_FILESYSTEM (13)
没有有效的FAT卷。
驱动器上无有效的FAT卷,或底层实现错误。
2.14 FR_MKFS_ABORTED (14)
MKFS终止。
f_mkfs
函数在格式化开始前中止,由于以下原因之一:
(1)无法使用给定的参数进行格式化。
(2)卷的大小太小。最少128个扇区(带有FM_SFD
选项)。
(3)找不到绑定到逻辑驱动器的分区。(相关选项:FF_MULTI_PARTITION
)
FM_SFD
:用作f_mkfs
的第二参数标志,格式化为super-floppy disk
FF_MULTI_PARTITION
: 此选项可切换多分区功能。 默认情况下(0),每个逻辑驱动器号绑定到相同的物理驱动器号,并且仅安装物理驱动器中的卷。 启用后(1),每个逻辑驱动器都绑定到用户定义的分区解析表VolToPart []
中列出的物理驱动器上的分区。 此外,还将提供f_fdisk
功能。
2.15 FR_TIMEOUT (15)
超时。
由于线程安全控制超时,函数被取消。(相关选项:FF_FS_TIMEOUT
)
FF_FS_TIMEOUT
:当等待时间太长时,使用FR_TIMEOUT终止文件函数的计时次数。当FF_FS_REENTRANT==0
时,此选项无效。
2.16 FR_LOCKED (16)
根据文件共享策略拒绝操作。
文件共享控制拒绝了对该对象的操作。(相关选项:FF_FS_LOCK)(Related option: FF_FS_LOCK
)
FF_FS_LOCK
: FatFs的配置宏。0代表禁用文件锁定功能,大于0时,代表启用文件锁定,其值为支持打开的最大文件/目录的数目。
2.17 FR_NOT_ENOUGH_CORE (17)
无法分配 LFN 工作缓冲区。
没有足够的内存来进行操作。有以下原因之一:
(1)无法为 LFN 工作缓冲区分配内存。(相关选项:FF_USE_LFN
)
(2)给定缓冲区的大小不足以满足所需的大小。
FF_USE_LFN
: FatFs的配置宏。1使用长文件名,0禁用。
2.18 FR_TOO_MANY_OPEN_FILES (18)
打开的文件数目> FF_FS_LOCK
。
打开的对象数已达到最大值,无法再打开任何对象。(相关选项:FF_FS_LOCK
)
FF_FS_LOCK
: FatFs的配置宏。0代表禁用文件锁定功能,大于0时,代表启用文件锁定,其值为支持打开的最大文件/目录的数目。
2.19 FR_INVALID_PARAMETER (19)
参数无效。
给定的参数无效或卷不一致。
以上是本文的全部,很荣幸写的文章被阅读完。
刚入门的小白,如果本文有错欢迎大家提醒,十分感谢。