OpenEdv-开源电子网

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

MX25L64+fatfs文件系统+stm32f103读写时,空间突然被占满导致无法写入

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-30
在线时间
5 小时
发表于 2020-12-15 17:19:34 | 显示全部楼层 |阅读模式
1金钱
近期项目中发现一个问题,设备不知何故,flash空间被占满,导致无法写入新内容,只能格式化恢复,但是记录文件就全部丢了。flash的容量是8M,平时需要写入的文件总大小在50K左右,用完就删除,使用时再次写入。
拿到过一个出问题的flash,读出根目录只有我需要写的那几个文件,总大小32K左右,删除其中一个文件后,确实也只释放了被删掉文件的空间大小。
求助各位大佬,空间突然被写满的原因在哪?

写文件函数如下:

u8 write_file(const TCHAR *path,DWORD offset,u8 *buf,u16 len)
{
        u8 res=0xFF,nRetry=0;
       
        LED3=LED_ON;
//        f_mount(0, &fss); //初始化必须mount
        while(res!=FR_OK)
        {
                if(offset==0)
                {
                        res = f_open( &file , path , FA_CREATE_ALWAYS | FA_WRITE );        
                }
                else
                {
                        res = f_open( &file , path , FA_OPEN_ALWAYS | FA_WRITE );
                        f_lseek(&file, f_size(&file));
                }
                if ( res != FR_OK )
                {
                        nRetry++;
                        sprintf(disinfo,"%d,%d",res,nRetry);
                        Display_InfoMode("w_open",disinfo);
                        while((GPIO_ReadInputDataBit(KEY1_GPIO_Port, KEY1_Pin) == 1)||(GPIO_ReadInputDataBit(KEY2_GPIO_Port, KEY2_Pin) == 1));
                        delay_ms(100);
                               
                }
        }
       
    /* 将缓冲区的数据写到文件中 */
        res=0xFF,nRetry=0;
        while(res!=FR_OK)
        {       
                res = f_write(&file, buf, len, &br);
                if ( res != FR_OK )
                {
                        nRetry++;
                        sprintf(disinfo,"%d,%d",res,nRetry);
                        Display_InfoMode("w_write",disinfo);
                        while((GPIO_ReadInputDataBit(KEY1_GPIO_Port, KEY1_Pin) == 1)||(GPIO_ReadInputDataBit(KEY2_GPIO_Port, KEY2_Pin) == 1));
                        delay_ms(100);
                               
                }               
        }

        res=0xFF,nRetry=0;
        while(res!=FR_OK)
        {          
                res = f_sync(&file);
                if ( res != FR_OK )
                {
                        nRetry++;
                        sprintf(disinfo,"%d,%d",res,nRetry);
                        Display_InfoMode("w_sync",disinfo);
                        while((GPIO_ReadInputDataBit(KEY1_GPIO_Port, KEY1_Pin) == 1)||(GPIO_ReadInputDataBit(KEY2_GPIO_Port, KEY2_Pin) == 1));
                        delay_ms(100);
                               
                }                               
        }
       
        res=0xFF,nRetry=0;
        while(res!=FR_OK)
        {          
                res = f_close(&file);
                if ( res != FR_OK )
                {
                        nRetry++;
                        sprintf(disinfo,"%d,%d",res,nRetry);
                        Display_InfoMode("w_close",disinfo);
                        while((GPIO_ReadInputDataBit(KEY1_GPIO_Port, KEY1_Pin) == 1)||(GPIO_ReadInputDataBit(KEY2_GPIO_Port, KEY2_Pin) == 1));
                        delay_ms(100);
                               
                }       
        }
        LED3=LED_OFF;
//  else
//  {
//                debug_out( "\r\n occur error the error code is %d \r\n",res );
//  }
//        debug_out("end write file\r\n");               
        return res;
}

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

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2019-7-30
在线时间
5 小时
 楼主| 发表于 2020-12-18 17:16:22 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 15:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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