野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 376|回复: 8

flash FATFS文件系统只能写入一次

[复制链接]
发表于 2024-4-12 21:34:30 | 显示全部楼层 |阅读模式
本帖最后由 wbb_forever 于 2024-4-12 21:46 编辑

格式化文件系统后只能写入一次文件,再次写入文件时无法写入,显示剩余空间为空,并且flash里面内容也会被清空,使用野火的例程也会出现这个情况,是什么原因呢?main函数代码如下:

static void malloc_size()
{
        FATFS *pfs;
        DWORD fre_clust, fre_sect, tot_sect;
       
        res2 = f_getfree("1:", &fre_clust, &pfs);

  tot_sect = (pfs->n_fatent - 2) * pfs->csize;
  fre_sect = fre_clust * pfs->csize;

  printf("》设备总空间:%10lu KB。\n》可用空间:  %10lu KB。\n", tot_sect *4, fre_sect *4);
}


int main(void)
{
        USART_Config();
               
        res = f_mount(&FsObject,"1:",1);//调用spi初始化函数
//       
//        res = f_mkfs("1:",0,0);
//        res = f_mount(&FsObject,"1:",1);
        printf("f_mount_res = %d\n",res);
       
        if(res == FR_NO_FILESYSTEM)
        {
                printf("进入格式化!\n");
                res = f_mkfs("1:",0,0);
                printf("f_mkfs_res = %d\n",res);
                //格式化后要取消挂载再重新挂载文件系统
                res = f_mount(NULL,"1:",1);
                res = f_mount(&FsObject,"1:",1);
                printf("f_mkfs_res2 = %d\n",res);
        }
       
        malloc_size();
       
       
        res = f_open(&fp,"1:1bbbbbbbbbbbbbbba.txt",FA_OPEN_ALWAYS|FA_WRITE|FA_READ);
       
        if(res == FR_OK)
        {
                res = f_write(&fp,write_buff,sizeof(write_buff),&w_p_num);
                printf("w_p_num = %d\n",w_p_num);
               
                f_lseek(&fp,0);
                if(res == FR_OK)
                {
                        res = f_read(&fp,read_buff,f_size(&fp),&r_p_num);
                        printf("r_p_num = %d\n",r_p_num);
                        if(res == FR_OK)
                        {
                                printf("读出内容 : %s\n",read_buff);
                        }
                }
                f_close(&fp);
        }
       
        malloc_size();
       
        f_mount(NULL,"1:",1);
       
        printf("文件关闭!\n");
               
        while(1)
        {};
}


屏幕截图 2024-04-12 200626.png 屏幕截图 2024-04-12 200017.png 屏幕截图 2024-04-12 200306.png 屏幕截图 2024-04-12 200416.png
回复

使用道具 举报

发表于 2024-4-15 09:58:11 | 显示全部楼层
是哪一个板子例程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-15 10:40:51 | 显示全部楼层
WishWish 发表于 2024-4-15 09:58
是哪一个板子例程

指南者,我看视频他运行几次就能写几次,但是我这儿不行,然后我直接用他例程跑也会出现这个问题
回复 支持 反对

使用道具 举报

发表于 2024-4-15 14:46:22 | 显示全部楼层
wbb_forever 发表于 2024-4-15 10:40
指南者,我看视频他运行几次就能写几次,但是我这儿不行,然后我直接用他例程跑也会出现这个问题 ...

改过的例程发下,把这个malloc_size放进去写入后读出可用空间没有变化
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-15 16:05:12 | 显示全部楼层
MO12138 发表于 2024-4-15 14:46
改过的例程发下,把这个malloc_size放进去写入后读出可用空间没有变化

FatFs文件系统移植-例程.rar (5.42 MB, 下载次数: 4)
SPI-文件系统.rar (6.31 MB, 下载次数: 4)
这两个程序一个是例程,没有变化,另一个是根据视频写的,只是多了一个查看可用空间的函数,麻烦你看看是哪里的问题,谢谢
回复 支持 反对

使用道具 举报

发表于 2024-4-15 18:05:14 | 显示全部楼层
两个直接跑的结果,拍照下你的开发板正面图,看下接了那些脚,有没有影响到的
野火论坛202404151803315339..png
野火论坛202404151803344412..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-15 20:39:14 | 显示全部楼层
MO12138 发表于 2024-4-15 18:05
两个直接跑的结果,拍照下你的开发板正面图,看下接了那些脚,有没有影响到的 ...

为啥你的可用空间不变呢,运行第一次是正常的,再一次写入另一个文件就不正常了
野火论坛202404152038556865..png Weixin Image_20240415203612.jpg
回复 支持 反对

使用道具 举报

发表于 2024-4-16 11:04:05 | 显示全部楼层
你只是按复位键就会显示0KB吗,还是改了什么
野火论坛202404161103171760..png
野火论坛202404161103409234..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 17:22:52 | 显示全部楼层
MO12138 发表于 2024-4-16 11:04
你只是按复位键就会显示0KB吗,还是改了什么

按复位键是正常的,修改一个文件名再下载程序就显示0kb,用flash模拟u盘程序看里面的内容,结果里面什么也没有,反正就是你现在用这个程序跑是没有问题的是吧
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-25 03:26 , Processed in 0.150131 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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