FATFS文件系统问题
在看fatfs文件系统的f_mkfs格式化函数时,对它的一些算法不解:
FAT16的情况下:
// 计算fat表占字节数 (n_clst * 2) + 4;
n_fat = (fmt == FS_FAT12) ? (n_clst * 3 + 1) / 2 + 3 : (n_clst * 2) + 4;
n_fat = (n_fat + SS(fs) - 1) / SS(fs); // 应该是计算fat表所占扇区数
n_rsv = 1; // 保留扇区,fat16固定为1
n_dir = (DWORD)N_ROOTDIR * SZ_DIR / SS(fs); // 计算根目录所占扇区数
b_fat = b_vol + n_rsv; /* FAT area start sector */
b_dir = b_fat + n_fat * N_FATS; /* Directory area start sector */
b_data = b_dir + n_dir; /* Data area start sector */
但是fat白皮书中根目录所占扇区数是这样的公式:
RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec;
不明白的地方:
1、n_fat = (n_fat + SS(fs) - 1) / SS(fs);
计算fat表所占扇区数为什么不是n_fat = n_fat / SS(fs);
2、n_dir = (DWORD)N_ROOTDIR * SZ_DIR / SS(fs);
计算根目录所占扇区数为什么不是 n_dir = ((DWORD)N_ROOTDIR * SZ_DIR + SS(fs) - 1) / SS(fs);