关于fatfs初始化

来源:互联网 发布:青岛网络内链优化 编辑:程序博客网 时间:2024/06/01 07:50
最近看了SD卡和fatfs相关的一些东西。      在不上文件系统的时候,我们读写扇区,程序一开始是要初始化SD卡,然后再进行读写扇区操作。       然后移植了fatfs文件系统以后,我们程序最开始只调用f_mount(0,&fs)然后就可以直接调用fatfs的API进行对SD卡的操作    (ps:sd卡到底是在那里初始化的呢)

然后查找了一下SD_Init() 这个函数在我们一直的时候,以及在disk_initialize()磁盘初始化的时候调用,但是发现f_mount(0,&fs)中并没有调用disk_initialize()这个函数。。。。。。

于是继续查找,发现调用这个disk_initialize()的函数有三个地方地方,其中chk_mounted()这个函数是被调用的最多的(此函数调用了disk_initialize());

然后在f_read()    f_write()等等很多操作的函数都调用了chk_mounted();

这样再看初始化,于是有了  f_mount()开辟了一个磁盘区域,然后调用其他操作的时候,就初始化了SD卡!

到这里就看明白为啥不初始化SD卡(ps:其实在操作的时候才初始化)。

但是有个疑问,为什么每次调用一次f_read等操作都要初始化一次????为什么不直接在开辟磁盘的时候初始化,后面就不用每次都初始化了????     暂时没想明白为啥要这样。。。。

在后面的测试中,发现了一个比较郁闷的事情:     我单独测试SD卡的写操作,定时器每隔100ms触发一次SD卡写操作,每次SD卡写入10KByte     用时大概10ms左右          然而测试过程中,发现正常情况都是10ms左右完成写入,但是偶尔会有一次用时很长,大概100多ms       没有发现特定的规律。。。      找了一下原因,没找出来        不知道是驱动原因,还是SD卡物理层本身的原因。。。。。。。。     (目前未解之谜,呵呵)



原创粉丝点击