STM32的FATFS文件系统 无法建立文件 res返回值不为0,到底是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的FATFS文件系统 无法建立文件 res返回值不为0,到底是怎么回事相关的知识,希望对你有一定的参考价值。

f_mount(0,&fs); //创建一个工作区 //

/* 在刚开辟的工作区盘符0下创建新文件123.TXT */
res = f_open(&fdst,"0:/123.TXT",FA_CREATE_NEW | FA_WRITE);
if ( res == FR_OK )


res=f_write(&fdst,textFileBuffer,sizeof(textFileBuffer),&bw);
printf( "\r\n File created succeed \n");

else
printf( "\r\n File created not succeed:%d \n",res);
res返回值不为0,意味着初始化失败?diskio.c里的初始化内容,不知是哪里出了问题
DSTATUS disk_initialize (BYTE drv) /* Physical drive nmuber (0..) */

SD_Error Status;
/* Supports only single drive */
if (drv)

return STA_NOINIT;

//SD Init
Status = SD_Init();
if (Status!=SD_OK )

return STA_NOINIT;

else

return RES_OK;

问题没表述清楚,f_open的返回不为零的可能性有很多种,你可以根据具体的返回值,找到错误类型
下面是具体的错误类型:
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 parameter error */
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_SHARE */
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
FRESULT;

还有f_mount也有返回值,你应该看看是否mount成功。追问

谢谢你指点

我看了一下 f_mont 的返回值是FR_OK,但f_open的返回值是FR_NOT_READY(驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作)。
不是很清楚,这到底是什么原因?

追答

应该是SD卡驱动问题吧,重点检查diskio.c文件中的disk_initialize()、disk_status()、disk_read()、disk_write()这几个函数

追问

我仔细核对了一下,没发现有什么不对的地方,这个问题真是要了命了,这是我万里长城的第一步就卡住了,diskio.c文件中的程序是网上教程贴来的,应该不会出错的呀。又从8G SD卡换了个2G的还是不行,怎么解决我的问题呢?

追答

没有你的代码,没有你用的开发板,问题有不够具体,帮你也只能帮到这里了。

参考技术A

f_open的返回不为零的可能性有很多种,可以根据具体的返回值,找到错误类型。


下面是具体的错误类型:


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_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 parameter error */


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_SHARE */


FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
FRESULT;

还有f_mount也有返回值,你应该看看是否mount成功。

参考技术B 关注
mark

以上是关于STM32的FATFS文件系统 无法建立文件 res返回值不为0,到底是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

stm32 fatfs 文件系统分析和代码解析

无法使用 STM32F407 上的 Chan FatFs 库通过 SPI 写入 SD 卡文件

STM32- 串行FLASH文件系统FatFs

基于STM32完成FATFS文件系统移植与运用--这是完全免费开源的FAT文件系统

STM32F407 - SDIO | FATFS - 将文件保存到 SD 卡

[stm32][FATFS]正在写文件时掉电,导致文件系统错误