Fatfs 关于sd卡初始化问题请教?

greatriver007 2011-05-22 11:22:41
Fatfs 关于sd卡初始化问题请教,小弟最近在学习fatfs 这个据说很优秀的文件系统,用的是最新的0.08版本。
现在已经能够知道如何调用和运用fatfs来做一些简要的操作。
但是我有个问题,关于系统如何调用sd卡初始化的,我通过仔细看了后发现调用sd卡初始化的函数是
1、chk_mounted 没有任何条件直接 调用stat = disk_initialize(fs->drv);
2、f_mkfs 调用 stat = disk_initialize(drv);

关于f_mkfs 我不是很了解,但是 关于chk_mounted 这个函数是检查
/* Check if the file system object is valid or not */
关于它的调用就很多了...
....................................................................................................
f_open mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW;
res = chk_mounted(&path, &dj.fs, (BYTE)(mode & ~FA_READ));
...................................................................................................
f_chdir
res = chk_mounted(&path, &dj.fs, 0);
...................................................................................................
f_getcwd
res = chk_mounted((const TCHAR**)&path, &dj.fs, 0); /* Get current volume */
...................................................................................................
FRESULT f_opendir
res = chk_mounted(&path, &dj->fs, 0);
...................................................................................................
FRESULT f_stat
res = chk_mounted(&path, &dj.fs, 0);
...................................................................................................
FRESULT f_getfree
res = chk_mounted(&path, fatfs, 0);
...................................................................................................
FRESULT f_unlink
res = chk_mounted(&path, &dj.fs, 1);
................................................................................................
FRESULT f_mkdir
res = chk_mounted(&path, &dj.fs, 1);
.................................................................................................
FRESULT f_chmod
res = chk_mounted(&path, &dj.fs, 1);
...............................................................................................
FRESULT f_utime
res = chk_mounted(&path, &dj.fs, 1);
...............................................................................................
FRESULT f_rename
res = chk_mounted(&path_old, &djo.fs, 1);

以上是我一一罗列出来 关于最终调用sd卡初始化的相关函数,我有一个很大的疑问?为什么每次操作这些函数都要初始化一次sd卡呢?为什么不是开始的时候初始化一次就完成了呢?
在我印象中sd卡重要初始化一次,后面的都可以直接操作读写了

还有一点要说明的是这个fatfs 文件系统在网上评价很高,而且我也亲自测试了,这个确实是很优秀的。

望各位熟悉的能够给我指点,关于这个sd初始化为什么要操作这么多次,我印象中初始化每次都要等待比较长的时间的。
...全文
786 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
q45213212 2012-11-05
  • 打赏
  • 举报
回复
的确 有答案了 f_mount函数在FatFs模块上注册/注销一个工作区。在使用任何其它文件函数之前,必须使用该函数为每个卷注册一个工作区。要注销一个工作区,只要指定FileSystemObject为NULL即可,然后该工作区可以被丢弃。   该函数只初始化给定的工作区,以及将该工作区的地址注册到内部表中,不访问磁盘I/O层。卷装入过程是在f_mount函数后或存储介质改变后的第一次文件访问时完成的。
q45213212 2012-11-05
  • 打赏
  • 举报
回复
对于这个问题我也有疑问,但是我理解,可能你列举的那些调用disk_initialize的函数目的主要在于检查sd卡是否初始化,而这些函数相对于读取sd卡上的数据次数相比,调用的次数还是很少的 我发现这个问题是看别人的例程在main里都没有调用disk_initialize,而应该是在f_open的时候直接初始化sd卡,那是不是在sd卡初始化之前就可以f_mount呢?
greatriver007 2011-05-22
  • 打赏
  • 举报
回复
好像没人回答啊

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧