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;
下面是具体的错误类型:
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的还是不行,怎么解决我的问题呢?
追答没有你的代码,没有你用的开发板,问题有不够具体,帮你也只能帮到这里了。
参考技术Af_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成功。
mark
以上是关于STM32的FATFS文件系统 无法建立文件 res返回值不为0,到底是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 STM32F407 上的 Chan FatFs 库通过 SPI 写入 SD 卡文件
基于STM32完成FATFS文件系统移植与运用--这是完全免费开源的FAT文件系统