小李的她 发表于 2018-3-21 15:11:37

fatfs 统计容量函数 f_getfree疑惑

CPU:STM32F407IGHT
FLASH:SST38VF6401
fatfs R0.13A 最新
开发环境:mdk

目前已经格式化成功,可以挂载、创建文件、读写等。
但是通过f_getfree函数测试容量,发现可用容量只有总容量的一半。跟踪f_getfree代码,发现代码如下(ff.cL4663):

if(fs->fs_type == FS_FAT16)//FAT16文件格式
{
         if(ld_word(fs->win + i) == 0) //数据为0x0000
         {
               nfree++; //空闲扇区数加1
         }
      
      i %= 512;
}

代码如上,可以看到其从第一个数据扇区到最后一个扇区,检测指定位置的数据是不是0,如果是0,空闲扇区数就增1。首先我不太明白这样是什么机制,不过按照它的这个处理流程,我将flash全片写为0,然后再调用该接口,发现总可用扇区数和空闲扇区数相等了。这什么情况?难道我拿到一个新存储芯片 ,首先要将其全部写0?写0也没啥问题,真正的问题是,SST38VF6401字编程典型时间是7us,按照8M字节来算,大概需要50多秒时间,这谁受得了???

小李的她 发表于 2018-3-22 08:20:21

是我的底层驱动 disk_write有bug,修复后已不存在该问题
页: [1]
查看完整版本: fatfs 统计容量函数 f_getfree疑惑