Fatfs文件系统循环多次向文件写内容出现f_write返回值为1的情况

2019-07-14 16:36发布

各位,大家好,小弟最近在做文件系统存储相关的工作,就是用Cubemx生成文件系统和SDIO,那么我的问题来了
在向文件写内容的时候

result= f_write(&File_Element.fil,File_Element.Fatfs_Buf,sizeof(File_Element.Fatfs_Buf), &File_Element.bwee);        
printf("f_write1=%d ",result);


循环多次向文件写内容,那么就可能会出现f_write返回值为1的情况,而且是没有规律的
我看了这个错误的解释是:FR_DISK_ERR,                        /* (1) A hard error occurred in the low level disk I/O layer */
说是底层硬件错误,

有没有人做过这方面的工作,大神给点指点
在线等
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
吕少大大
1楼-- · 2019-07-16 12:46
表示关注!
maobs20
2楼-- · 2019-07-16 14:32
吕少大大 发表于 2018-10-25 08:55
CubeMX生成的SD+FATFS程序确实很方便。
我用F4做录音器,也遇到类似的问题,就是连续写SD卡的时候,很容易出现FR_DISK_ERR错位。
后来把写扇区函数改了。

就是我是一直调用自己写的一个函数,这个函数里有f_open  f_wtire   f_close,   可能写了几百次或者上千次会出现一个f_write 的错误,你的这个修改就是当SD卡挂了的时候你就让他重新初始化对吧,感谢万分 ,我也试试去
maobs20
3楼-- · 2019-07-16 19:24
 精彩回答 2  元偷偷看……
吕少大大
4楼-- · 2019-07-16 22:44
maobs20 发表于 2018-10-25 09:21
不好意思,在问下,BSP_SD_WriteBlocks如果一直不返回OK,也就是说不为0的话,那岂不是一直死在while里

确实会有这样的可能性。我测试了一下,比如录音的过程中突然把卡拔出来,如果正好在执行这个底层函数,就会在里面死循环。

除了人为把卡拔出来的情况,正常情况下我没有遇到卡死的情况。

如果担心这个问题,最合理的做法是:增加一个变量,控制初始化的次数,如果尝试了N次之后,仍不能写成功,就退出。
zhangkun111
5楼-- · 2019-07-16 23:12
哥们,你的问题解决没?我最近遇到了这个问题?长时间循环写入一个文件的时候,就会返回硬件错误这个问题。尝试了很多方法,目前还没解决....复位之后又好了,工作七八个小时的话,就会出现问题

一周热门 更多>