12793|5

4996

帖子

19

TA的资源

裸片初长成(初级)

楼主
 

FatFs应用总结 [复制链接]

多年来一直在使用FatFs开发各种项目(特别感谢FatFs作者的奉献),但都是或多或少的应用,并没有全面的应用到FatFs的所有功能。最近一个项目需要操作大量的文件,终于进入FstFs应用的全面期,也遇到了不少问题,现将逐步总结这些应用中遇到的各种问题。

       我们都知道,使用FstFs的IAP时,一般的程序编写格式如下:
  1. void FunMode(void)
  2. {
  3.     FATFS fs;

  4.     f_mount(0, &fs);

  5.     // 其他代码部分

  6.     f_mount(0, 0);
  7. }
复制代码
问题1. 但是这样还是会遇到问题,在函数中前途使用IAP时:
  1. void Fun(void)
  2. {
  3.         f_mount(0, &fs);

  4.         // 其他代码部分
  5.         FunMode();              // 如果这里调用了此函数

  6.         f_mount(0, 0);
  7. }
复制代码
这时会遇到什么样的问题呢?在调用FunMode函数后,之前此函数中的FS之中或其他参数就被串改了,原因是在FunMode函数中从新对驱动0注册了工作区。为了解决这样的问题,一般采用两种方法实现。1-更改者两个函数中的驱动序号,一点要保证不一致。2-删除函数FunMode中的两个f_mount(0, &fs)和f_mount(0, 0)语句不在注册工作区。至于用哪种方法好,一切得根据自己的情况而定。

[ 本帖最后由 zhaojun_xf 于 2012-9-14 13:56 编辑 ]
此帖出自NXP MCU论坛

最新回复

大大,有没有更详细的学习fatfs文件系统的资料, 我现在已经会在sd卡上读写了,但是具体的按照固定格式读写, 校验SD卡的文件却不会,好拙计啊,恳请大大指导下!  详情 回复 发表于 2015-9-8 10:25
点赞 关注(2)
个人签名我的博客
 

回复
举报

2453

帖子

19

TA的资源

五彩晶圆(中级)

沙发
 
mark
此帖出自NXP MCU论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
问题2数据丢失?

此问题已经有网友写了,这里就不在重复,先感谢了。直接转载过来。。。。。

When write operation to the FAT file system is interrupted due to any accidental failure, such as sudden blackout, incorrect disk removal and unrecoverable disk error, the FAT structure can be collapted. Following images shows the critical section on the FatFs module.

当对FAT文件系统的写操作由于默写意外而中断,如突然断电,不正确的磁盘移除或不可恢复的磁盘错误,FAT结构可以被毁坏。下面的图片显示了FatFs的临界段。



1.jpg (49.81 KB, 下载次数: 81)




An interruption in the red section can cause a cross link; as a result, the file/directory being changed may be lost. There is one or more possibility listed below when an interruption in the yellow section is occured.

红色区域的中断会导致一个交叉链接,结果,正在修改的文件/目录可能会丢失。而黄色区域中断可能导致的效果在下面列出:




    File data being rewrited is collapted. 正在重写的文件数据被毁坏 A file being appended returns initial state. 正在添加内容的文件回到初始状态 A file created as new is gone. 丢失新建的文件 A file created as new or in overwritten remains with length of zero. 一个新建或覆盖的文件保持长度为0
  • Efficiency of disk use gets worse due to lost chain. 因为丢失关联,磁盘的使用效率变坏。

Each case does not affect the files that not in write mode open. To minimize risk of data loss, the critical section can be minimized like shown in Figure 5 by minimizing the time that file is opened in write mode or using f_sync function properly.

在文件不是用写模式打开时,这些情况不会发生。为了最小化磁盘数据的丢失,临界段可以像图表5显示的那样最小化,通过最小化文件处于写模式打开的时间或者适当的使用f_sync函数。



[ 本帖最后由 zhaojun_xf 于 2012-10-17 16:32 编辑 ]
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
问题3文件夹删除?

  FatFs的IAP函数 f_unlink 是支持删除一个文件或文件夹的。不过必须注意的是,此函数不能直接删除非空文件夹,如果要删除这样的文件夹,必须先删除文件夹里边的文件后在删除文件夹。

f_unlink
移除一个对象
FRESULT f_unlink ( const XCHAR* FileName /* 对象名的指针 */);
参数
FileName
'\0'结尾的字符串指针,该字符串指定了一个待移除的对象。
返回值
FR_OK (0)
函数成功。
FR_NO_FILE
找不到文件或目录。
FR_NO_PATH
找不到路径。
FR_INVALID_NAME
路径名无效。
FR_INVALID_DRIVE
驱动器号无效。
FR_DENIED
由于下列原因之一,而导致该函数被拒绝:
  • 对象具有只读属性
  • 目录不是空的

FR_NOT_READY
由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_WRITE_PROTECTED
存储介质被写保护。
FR_DISK_ERR
由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR
由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_ENABLED
逻辑驱动器没有工作区。
FR_NO_FILESYSTEM
磁盘上没有有效的FAT卷。
描述
f_unlink函数当_FS_READONLY == 0并且_FS_MINIMIZE == 0时可用。
f_unlink函数移除一个对象。不要移除打开的对象或当前目录。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
看看,写大神分享
此帖出自NXP MCU论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

6
 
大大,有没有更详细的学习fatfs文件系统的资料,
我现在已经会在sd卡上读写了,但是具体的按照固定格式读写,
校验SD卡的文件却不会,好拙计啊,恳请大大指导下!
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表