STM32的FATFS文件系统 无法建立文件 res返回值不为0,到底是怎么回事
/* 在刚开辟的工作区盘符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()这几个函数
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成功。
mark