OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5265|回复: 8

SPI 读写FLASH文件创建写入都没问题,但是打开文件失败————返回no——file

[复制链接]

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
发表于 2017-7-13 16:39:57 | 显示全部楼层 |阅读模式
1金钱
FATFS fs;                                                                                                        /* FatFs文件系统对象 */
FIL fnew;                                                                                                        /* 文件对象 */
FRESULT res_flash;                /* 文件操作结果 */
UINT fnum;                                                      /* 文件成功读写数量 */
BYTE ReadBuffer[1024]={0};        /* 读缓冲区 */
BYTE WriteBuffer[] =              /* 写缓冲区*/
"欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件\r\n";  
int main(void)
{

        uint32_t  free, total, i = 0;       
        /* 初始化调试串口,一般为串口1 */
        USART1_Config(9600);
        SPI1_Config();
  printf("****** 这是一个SPI FLASH 文件系统实验 ******\r\n");

        //在外部SPI Flash挂载文件系统,文件系统挂载时会对SPI设备初始化
        res_flash = f_mount(&fs,"1:",1);
       
/*----------------------- 格式化测试 ---------------------------*/  
        /* 如果没有文件系统就格式化创建创建文件系统 */
        if(res_flash == FR_NO_FILESYSTEM)
        {
                printf("》FLASH还没有文件系统,即将进行格式化...\r\n");
    /* 格式化 */
                res_flash=f_mkfs("1:",0,0);                                                       
               
                if(res_flash == FR_OK)
                {
                        printf("》FLASH已成功格式化文件系统。\r\n");
      /* 格式化后,先取消挂载 */
                        res_flash = f_mount(NULL,"1:",1);                       
      /* 重新挂载        */                       
                        res_flash = f_mount(&fs,"1:",1);
                }
                else
                {
                        printf("《《格式化失败。》》\r\n");
                        while(1);
                }
        }
  else if(res_flash!=FR_OK)
  {
    printf("!!外部Flash挂载文件系统失败。(%d)\r\n",res_flash);
    printf("!!可能原因:SPI Flash初始化不成功。\r\n");
                while(1);
  }
  else
  {
    printf("》文件系统挂载成功,可以进行读写测试\r\n");
  }

    //读取FLASH卡FAT的容量和空余
    while(FATFS_GetFree("1:", &total, &free))
    {
                        f_mkfs("1:", 1, 4096); //如果读取失败,格式化FLASH
        i++;
        if(i > 10)
        {
            break;
        }
    }

    //显示FAT容量
    if(i > 10)
    {
        printf(" FLASH FAT 错误!");

    }
    else
    {
        printf(" FLASH total memory:%d KB\n", total);
        printf(" FLASH free memory:%d KB\n", free);   
    }
/*----------------------- 文件系统测试:写测试 -----------------------------*/
        /* 打开文件,如果文件不存在则创建它 */
        printf("\r\n****** 即将进行文件写入测试... ******\r\n");       
        res_flash = f_open(&fnew, "1:中国.txt",FA_CREATE_ALWAYS | FA_WRITE );
        if ( res_flash == FR_OK )
        {
                printf("》打开/创建测试文件中国.txt文件成功,向文件写入数据。\r\n");
    /* 将指定存储区内容写入到文件内 */
                res_flash=f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
    if(res_flash==FR_OK)
    {
      printf("》文件写入成功,写入字节数据:%d\n",fnum);
      printf("》向文件写入的数据为:\r\n%s\r\n",WriteBuffer);
    }
    else
    {
      printf("!!文件写入失败:(%d)\n",res_flash);
    }   
                /* 不再读写,关闭文件 */
    f_close(&fnew);
        }
        else
        {       
                printf("!!打开/创建文件失败。\r\n");
        }
       
       
          while(FATFS_GetFree("1:", &total, &free))
    {
                        f_mkfs("1:", 1, 4096); //如果读取失败,格式化FLASH
        i++;
        if(i > 10)
        {
            break;
        }
    }

    //显示FAT容量
    if(i > 10)
    {
        printf(" FLASH FAT 错误!");

    }
    else
    {
        printf(" FLASH total memory:%d KB\n", total);
        printf(" FLASH free memory:%d KB\n", free);


    }
       
/*------------------- 文件系统测试:读测试 ------------------------------------*/
        printf("****** 即将进行文件读取测试... ******\r\n");
        res_flash = f_open(&fnew, "1:中国.txt", FA_OPEN_EXISTING | FA_READ);          
        if(res_flash == FR_OK)
        {
                printf("》打开文件成功。\r\n");
                res_flash = f_read(&fnew, ReadBuffer, sizeof(ReadBuffer), &fnum);
    if(res_flash==FR_OK)
    {
      printf("》文件读取成功,读到字节数据:%d\r\n",fnum);
      printf("》读取得的文件数据为:\r\n%s \r\n", ReadBuffer);       
    }
    else
    {
      printf("!!文件读取失败:(%d)\n",res_flash);
    }               
        }
        else
        {
    printf("%d\r\n",res_flash);
                printf("!!打开文件失败。\r\n");
        }
        /* 不再读写,关闭文件 */
        f_close(&fnew);       

        /* 不再使用文件系统,取消挂载文件系统 */
        f_mount(NULL,"1:",1);

  /* 操作完成,停机 */
        while(1);
               

}

下面是几次更改实验串口接收的数据:
***** 这是一个SPI FLASH 文件系统实验 ******
》FLASH还没有文件系统,即将进行格式化...
》FLASH已成功格式化文件系统。
FLASH total memory:3820 KB
FLASH free memory:3820 KB
***** 这是一个SPI FLASH 文件系统实验 ******
》文件系统挂载成功,可以进行读写测试
FLASH total memory:3820 KB
FLASH free memory:3820 KB

****** 即将进行文件写入测试... ******
》打开/创建测试文件中国.txt文件成功,向文件写入数据。
》文件写入成功,写入字节数据:58
》向文件写入的数据为:
欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件

FLASH total memory:3820 KB
FLASH free memory:3816 KB
***** 这是一个SPI FLASH 文件系统实验 ******
》文件系统挂载成功,可以进行读写测试
FLASH total memory:3820 KB
FLASH free memory:3816 KB

****** 即将进行文件写入测试... ******
》打开/创建测试文件中国.txt文件成功,向文件写入数据。
》文件写入成功,写入字节数据:58
》向文件写入的数据为:
欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件

FLASH total memory:3820 KB
FLASH free memory:3816 KB
****** 即将进行文件读取测试... ******
4
!!打开文件失败。
***** 这是一个SPI FLASH 文件系统实验 ******
》文件系统挂载成功,可以进行读写测试
FLASH total memory:3820 KB
FLASH free memory:3816 KB

****** 即将进行文件写入测试... ******
》打开/创建测试文件中国.txt文件成功,向文件写入数据。
》文件写入成功,写入字节数据:58
》向文件写入的数据为:
欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件

FLASH total memory:3820 KB
FLASH free memory:3816 KB
****** 即将进行文件读取测试... ******
4
!!打开文件失败。
***** 这是一个SPI FLASH 文件系统实验 ******
》文件系统挂载成功,可以进行读写测试
FLASH total memory:3820 KB
FLASH free memory:3816 KB

****** 即将进行文件写入测试... ******
》打开/创建测试文件中国.txt文件成功,向文件写入数据。
》文件写入成功,写入字节数据:58
》向文件写入的数据为:
欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件

FLASH total memory:3820 KB
FLASH free memory:3816 KB
****** 即将进行文件读取测试... ******
4
!!打开文件失败。
***** 这是一个SPI FLASH 文件系统实验 ******
》文件系统挂载成功,可以进行读写测试
FLASH total memory:3820 KB
FLASH free memory:3816 KB

****** 即将进行文件写入测试... ******
》打开/创建测试文件中国.txt文件成功,向文件写入数据。
》文件写入成功,写入字节数据:58
》向文件写入的数据为:
欢迎使用TBOX开发板 今天是个好日子,新建文件系统测试文件

FLASH total memory:3820 KB
FLASH free memory:3816 KB
****** 即将进行文件读取测试... ******
4
!!打开文件失败。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-13 16:43:56 | 显示全部楼层
求帮助  已经搞了好几天了  就是不知道什么原因   来位大神帮帮我吧  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-7-13 22:55:42 | 显示全部楼层
帮顶
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-14 10:43:28 | 显示全部楼层
求帮助  
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-14 14:37:15 | 显示全部楼层
有没有个人帮我也下啊   谢谢了
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-18 09:36:10 | 显示全部楼层
yklstudent 发表于 2017-7-14 21:32
一句话根据错误提示四路找问题啊,楼主这点都不知道;一遇到问题就寻求帮助?
检测自己的文件名命名是否符 ...

朋友 这些我都试过了,我已经搞了一个星期了还是没找到 源代码好多指针看的头疼
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-20 10:39:29 | 显示全部楼层
:):):)
回复

使用道具 举报

18

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-1-20
在线时间
89 小时
 楼主| 发表于 2017-7-31 11:20:59 | 显示全部楼层
有没有人遇到过这种问题
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2021-8-6
在线时间
7 小时
发表于 2021-10-29 13:34:52 | 显示全部楼层
jinchunxing 发表于 2017-7-31 11:20
有没有人遇到过这种问题

时隔四年,我遇到了,请问楼主解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 13:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表