求助FATFS文件系统中正点原子提供FTL转化层算法

2019-07-21 01:04发布

最近在学习正点原子提供的FATFS文件系统,在针对NAND FLASH设备,正点原子提供了FTL层使它能兼容FAT文件系统,但正点原子没有提供关于FTL较为详细的资料!大家有关于FTL详细的文档或自己的见解吗?正点原子提供的FTL用的算法均衡摩擦算法是什么?有没有垃圾回收?坏块管理?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
fskofcpu
2019-07-22 22:05
本帖最后由 fskofcpu 于 2018-12-13 23:27 编辑
正点原子 发表于 2018-12-13 02:51
1,因为我们规定以512字节为单位访问SD卡。所以,你如果写入数据不是512的整数倍,FATFS会等待数据填满512 ...

非常感谢您的解答。
1、对于第一个问题,我经过查询,如果写入字节小于512,则FATFS先从物理磁盘相应扇区位置读取一扇区内容到buffer中,然后修改其中相应内容,并设置回写标记,这样下次调用f_close或者f_write时,就会将buffer内容回写到物理设备中,这也就符合每512字节写一次。读的过程与此类似。这样理解对吧?
2、对于第二个问题,您上次给的人回复:http://www.openedv.com/posts/list/22812.htm。说也得除以512。我上网查询,有人这样写到:GET_BLOCK_SIZE 代表着:返回以扇区为单位的存储阵列的擦除块大小赋给 Buffer 指向的 DWORD 变量。当擦除块大小未知或是磁盘设备时,返回 1 。只在 f_mkfs 函数中,使用了该命令。

那么按照这种说法,也是需要除以512来获取扇区数了。那这个地方到底应该怎么回事?

3、对于第三个问题,源代码中:块内复制确实没有坏块检查,但却会标记坏块,若复制不成功,则会标记从保留区搜到的未使用的块为坏块,然后重建LUT表;若复制成功,则会标记该块已经使用,并修正LUT表,然后擦除源块,这样源块不就进入保留区了?我这样理解对吗?
    另外我还想搞明白的是:您所实现的这个FTL主要是通过保留区来实现坏块管理和均衡摩擦(块内复制)吗?但是这样均衡摩擦好像没什么效果还是我理解的有错误???因为每次操作的块还是从头开始啊,并没有随机!!!

感谢您的耐心解答!

一周热门 更多>