野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11037|回复: 12

FATFS打开文件,写文件,读文件返回都正常,但是写不进去

[复制链接]
发表于 2021-10-2 16:22:28 | 显示全部楼层 |阅读模式
FATFS打开文件,写文件,读文件返回都正常,但是写不进去
回复

使用道具 举报

 楼主| 发表于 2021-10-2 16:23:24 | 显示全部楼层
  1. #include "stm32f10x.h"
  2. #include "bsp_usart.h"
  3. #include "bsp_spi.h"
  4. #include "ff.h"
  5. char wdata[]="这是一个FATFS文件系统读写测试";
  6. char rdata[4096];
  7. FATFS fs;
  8. FIL fp;
  9. UINT bw;
  10. UINT br;
  11. int main(void)
  12. {
  13.         FRESULT res_flash;
  14.         usart_config();
  15.         res_flash=f_mkfs("4:",0,0);
  16.         printf("\r\n****** 这是一个SPI FLASH 文件系统实验 ******");
  17.         res_flash=f_mount(&fs,"4:",1);
  18.         printf("\r\nf_mount=%d",res_flash);
  19.         if(res_flash==FR_OK)
  20.         {
  21.                 printf("\r\n逻辑驱动装载完成");
  22.         }
  23.         else
  24.         {
  25.                 if(res_flash==FR_NO_FILESYSTEM)
  26.                 {
  27.                         res_flash=f_mkfs("4:",0,0);
  28.                         printf("\r\nf_mkfs=%d",res_flash);
  29.                         //卸载逻辑驱动
  30.                         f_mount(NULL,"4:",1);
  31.                         //装载逻辑驱动
  32.                         f_mount(&fs,"4:",1);
  33.                 }
  34.         }
  35.         res_flash=f_open(&fp,"4:xyz.txt",FA_WRITE|FA_OPEN_ALWAYS);
  36.         printf("\r\nf_open=%d",res_flash);
  37.         if(res_flash==FR_OK)
  38.         {
  39.                 printf("\r\n文件打开成功");
  40.                 res_flash=f_write(&fp,wdata,sizeof(wdata),&bw);
  41.                 if(res_flash==FR_OK)
  42.                 {
  43.                         printf("\r\nbw=%d",bw);
  44.                 }
  45.         }
  46.         f_close(&fp);
  47.         res_flash=f_open(&fp,"4:xyz.txt",FA_READ|FA_OPEN_EXISTING);
  48.         if(res_flash==FR_OK)
  49.         {
  50.                 f_lseek(&fp,0);
  51.                 res_flash=f_read(&fp,rdata,f_size(&fp),&br);
  52.                 if(res_flash==FR_OK)
  53.                 {
  54.                         printf("\r\n文件中的内容为:%s",rdata);
  55.                         printf("\r\nbr=%d",br);
  56.                 }
  57.         }
  58.         f_close(&fp);
  59.         printf("\r\n文件关闭");
  60. }
复制代码
野火论坛202110021622451014..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 16:24:42 | 显示全部楼层
有没有人来救救孩子
回复 支持 反对

使用道具 举报

发表于 2021-10-4 19:41:59 | 显示全部楼层
检查一下底层函数,或者看看是不是 flash 配置的问题
移植了文件系统的话,留有的那些底层接口供上层调用,所以如果这段代码逻辑上没问题的话就去检查接口那里的函数。
就是移植文件系统时你写进接口的函数,仔细检查一下。
回复 支持 反对

使用道具 举报

发表于 2021-10-4 19:47:31 | 显示全部楼层
res_flash=f_mkfs("4:",0,0);
这行代码执行完后最好再加一个if语句判断是否格式化成功,更严谨一点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 22:40:15 | 显示全部楼层
一级菜鸟 发表于 2021-10-4 19:41
检查一下底层函数,或者看看是不是 flash 配置的问题
移植了文件系统的话,留有的那些底层接口供上层调用, ...

我用例程也是这样,我之前用flash模拟u盘的时候在电脑上把flash里面的文件系统格式化了,是不是和这个有关系
回复 支持 反对

使用道具 举报

发表于 2021-10-4 22:57:16 | 显示全部楼层
lyp82nxb 发表于 2021-10-4 22:40
我用例程也是这样,我之前用flash模拟u盘的时候在电脑上把flash里面的文件系统格式化了,是不是和这个有 ...

flash要是FAT文件格式才能支持这种方式的读写
但是按道理程序中又已经把flash格式化了所以应该不存在这种问题
你也可以尝试再次把flash格式化成FAT32格式,然后使用官方提供的例程读写。
解决不了的话就等国庆完了再咨询客服吧
你使用的是哪块板子呢?
回复 支持 反对

使用道具 举报

发表于 2021-10-4 23:01:30 | 显示全部楼层
lyp82nxb 发表于 2021-10-4 22:40
我用例程也是这样,我之前用flash模拟u盘的时候在电脑上把flash里面的文件系统格式化了,是不是和这个有 ...

或者你换一种方法尝试
使用SPI通讯的方式对 flash 读写,如果正常的话那么flash芯片就是没有问题的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 23:18:09 | 显示全部楼层
1111111111111
野火论坛202110042317439981..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 23:18:38 | 显示全部楼层
一级菜鸟 发表于 2021-10-4 23:01
或者你换一种方法尝试
使用SPI通讯的方式对 flash 读写,如果正常的话那么flash芯片就是没有问题的
...

我用spi对flash进行3000个字节的读写看起来是没问题的,图我放在上面了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 23:24:02 | 显示全部楼层
一级菜鸟 发表于 2021-10-4 23:01
或者你换一种方法尝试
使用SPI通讯的方式对 flash 读写,如果正常的话那么flash芯片就是没有问题的
...

但我用fatfs例程实验时,新建一个文件是没问题的,读写也没问题,但是把名字改一下,就是f_open(&fnew, "1:abcd.txt",FA_CREATE_ALWAYS | FA_WRITE );改成f_open(&fnew, "1:efg.txt",FA_CREATE_ALWAYS | FA_WRITE );就出问题了,文件是可以新建的,但是写不进去数据了
回复 支持 反对

使用道具 举报

发表于 2021-10-4 23:27:41 | 显示全部楼层
使用官方提供的例程还是不能读写吗?
你使用的是哪款开发板
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-4 23:34:13 | 显示全部楼层
一级菜鸟 发表于 2021-10-4 23:27
使用官方提供的例程还是不能读写吗?
你使用的是哪款开发板

我用的指南者,我之前学习spi的时候对flash整片擦除过,我觉得是和我在电脑上把文件系统格式化有关系,明天准备刷一下flash程序看看
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 15:28 , Processed in 0.053700 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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