OpenEdv-开源电子网

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

求助SD卡SPI模式fatfs文件系统问题 f_sync保存失败 返回FR_DISK_ERR

[复制链接]

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
发表于 2015-8-20 09:44:55 | 显示全部楼层 |阅读模式
5金钱
求助SD卡SPI模式fatfs文件系统问题
正常运行时     f_sync保存失败 返回FR_DISK_ERR    f_close返回FR_DISK_ERR (f_close调用f_sync)   
调试的时候又没有问题,保存成功,
请问大家遇到过吗

res = f_open(&file, "test.txt", FA_OPEN_ALWAYS|FA_WRITE|FA_READ);     
   if(res!=FR_OK)
   { UartPutc(res+0x30);
uart_printf(QN_UART0,"打开文件失败\n");
uart_printf(QN_UART0,"等待中.....\n");
while(1);
   }

res = f_lseek(&file, file.fsize);
if(res!=FR_OK)
   {
uart_printf(QN_UART0,"移动指针失败\n");
uart_printf(QN_UART0,"等待中.....\n");
f_close(&file);
while(1);
   }
uart_printf(QN_UART0,"移动指针成功\n");

res = f_write(&file, P_T__file, zu_num*31, &br);
if(res!=FR_OK)
{ UartPutc(res+0x30);
uart_printf(QN_UART0,"写失败\n");
uart_printf(QN_UART0,"等待中.....\n");
f_close(&file);
while(1);
}
uart_printf(QN_UART0,"写成功\n");

res=f_sync(&file);
if(res!=FR_OK)
{ UartPutc(res+0x30);
uart_printf(QN_UART0,"保存失败\n");
uart_printf(QN_UART0,"等待中.....\n");
f_close(&file);
while(1);
}
uart_printf(QN_UART0,"保存成功\n");


//res=f_close(&file);
if(res!=FR_OK)
{ UartPutc(res+0x30);
uart_printf(QN_UART0,"关闭失败\n");
uart_printf(QN_UART0,"等待中.....\n");
f_close(&file);
while(1);
}
uart_printf(QN_UART0,"关闭成功\n");

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

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-8-17
在线时间
19 小时
发表于 2015-8-20 09:48:52 | 显示全部楼层
楼主没有挂载文件系统吧!f_mount()函数
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-8-17
在线时间
19 小时
发表于 2015-8-20 09:50:26 | 显示全部楼层
我用的是STM32的SDIO+FatFs首先第一件事就是f_mount();
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
 楼主| 发表于 2015-8-20 09:52:58 | 显示全部楼层
回复【3楼】郭佳佳:
---------------------------------
初始化 和挂载f_mount已经成功了  我只是没有贴出来,f_read也是可以的,可以读到数据,就是f_write写完之后成功,再保存关闭就出错了
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
 楼主| 发表于 2015-8-20 09:57:02 | 显示全部楼层
回复【2楼】郭佳佳:
---------------------------------
我不加系统,测试的驱动 读扇区和写扇区都是没问题的
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-20 13:02:37 | 显示全部楼层
回复【5楼】奔走在路上的程序猿:
---------------------------------
在读跟写disk的时候关闭中断或者禁止ucos任务切换。
操作完成后再打开中断或启动uocs任务切换
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
 楼主| 发表于 2015-8-20 13:06:33 | 显示全部楼层
回复【6楼】Theone:
---------------------------------
 我没有移植ucos系统,而且也没有使用中断
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-20 13:11:26 | 显示全部楼层
回复【7楼】奔走在路上的程序猿:
---------------------------------
你不是说
     我不加系统,测试的驱动 读扇区和写扇区都是没问题的
那你这出了问题就只是关闭的时候?、

我还以为你是加了系统了。

那既然没法关闭保存 那应该就是f_write的问题了吧。
你试试 写入1024个字节 看看是不是返回写入成功。
fatfs每512个字节才会真正往磁盘写入一次,你使用f_sync或f_close都是需要真正写入到磁盘的操作。
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
 楼主| 发表于 2015-8-20 13:20:48 | 显示全部楼层
回复【8楼】Theone:
---------------------------------
我说的不加系统 指的是fatfs这个文件系统, f_write写入可以 返回0.
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-8-14
在线时间
0 小时
 楼主| 发表于 2015-8-20 16:27:52 | 显示全部楼层
现在测试小于500KHz正常保存关闭, 大于500KHz保存出错,我用的不是stm32,stm32可以到18MHz吧,我用的这款spi速率最高2MHz,不过500KHz也有点低了,写的时间太慢了。     和我那天发的帖子一样,最高到500KHz, 我怀疑是我用的这款单片机spi接口的问题。  晚上用stm32测试一下。
回复

使用道具 举报

4

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2017-12-6
在线时间
50 小时
发表于 2018-1-19 15:25:03 | 显示全部楼层
Theone 发表于 2015-8-20 13:02
回复【5楼】奔走在路上的程序猿:
---------------------------------
在读跟写disk的时候关闭中断或者禁止u ...

大神这种是不是遇到过,我是裸机跑的时候,FATFs访问SD卡是正常的,上了FreeRTOS就容易出错,我是SPI驱动SD卡的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 23:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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