FatFs学习(1)——枚举:返回值FRESULT

 
1.FatFs(通用FAT文件系统模块)下载与介绍
2.FatFs移植——基于STM32 SD卡
3.FatFs学习(1)——枚举:返回值FRESULT

注:本文基于R0.14版本,给出的源码、翻译以及分析不保证与其他版本适合。
  本文主要翻译官网给出的文档,链接: FatFs–FRESULT,下载源码后文档位于 /FATFS/documents/doc/rc.html



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_readdisk_writedisk_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)

  参数无效。
  给定的参数无效或卷不一致。


  以上是本文的全部,很荣幸写的文章被阅读完。

  刚入门的小白,如果本文有错欢迎大家提醒,十分感谢。

  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值