FATFS笔记,mcu内置flash做u盘。

以下单位为块,1块可以是512Byte与可以是2048Byte。

64:MBR+备份分区。fatfs可以识别到文件系统的最小分区。

128:除MBR外,实现f_mkfs的最小块,函数内部与128比较,<128返回LEAVE_MKFS(FR_MKFS_ABORTED)

mcu内置flash小,只有

方法一:

使用f_mksf时,如果存储空间小,会依次使用fat12,fat16,fat32,如果存储范围在fat16以内,执意使用fat32,会出错,此时修改:

依然会出错,因为fat32会在1024,还是2048个扇区写东西,我们的扇区只有192,此时f_mkfs会失败。

方法二:

使用fat12,因为win10格式化,只显示fat,又没显示fat12,fat16,还是fat32,所以猜测是自动设置。

但是这样做后还是不行,最后有一个对齐的步骤将扇区大小改错了,调到一个非常大,明显异常的错误。需要屏蔽掉该行:

N_SEC_TRACK = 63

如果此时sz_vol大于63,减去63,也就是MBR与额外区域?难道想表达是除MBR的前64块以后的区域?但是后面是按总区域来算的,所以当sz_vol为64*2=128时出错,因为只有64的额外区域还被当做了MBR,那就无可用的块储存数据了。

验证过,可行。

三、f_mkfs例子:

opt.n_root = 0;

opt.n_fat = 0;

opt.align = 0;

opt.fmt = FM_FAT;

f_result = f_mkfs("0:", &opt, bpData, 2048);

四、附上最后结果

吃掉了20K,呵呵。

192k大小,还不行。