1,大体是这样,fatfs源码我是没看过的,你可以屡一下。
2,关于:GET_BLOCK_SIZE,FATFS是这样解释的:Returns erase block size of the flash memory media in unit of sector into the DWORD variable pointed by buff. The allowable value is 1 to 32768 in power of 2. Return 1 if the erase block size is unknown or non flash memory media. This command is used by only f_mkfs function and it attempts to align data area on the erase block boundary. Required at FF_USE_MKFS == 1., 因此,是返回以扇区为单位的block大小,因此要/512,之前我说错了。我们代码是没问题的。
3,不对。
2,这里确实应该是个bug,不用除512
3,快内复制没有做坏块检查的,坏块检查在ecc出错的时候才执行,而且会多次读取以确认,然后会进行坏块检查,如果确实是坏块,则会标记坏块。不会直接标记保留区的。
4,新建文件和写文件可能会,读文件一般就不会出现2bitecc错误了。
非常感谢您的解答。
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主要是通过保留区来实现坏块管理和均衡摩擦(块内复制)吗?但是这样均衡摩擦好像没什么效果还是我理解的有错误???因为每次操作的块还是从头开始啊,并没有随机!!!
感谢您的耐心解答!
2,关于:GET_BLOCK_SIZE,FATFS是这样解释的:Returns erase block size of the flash memory media in unit of sector into the DWORD variable pointed by buff. The allowable value is 1 to 32768 in power of 2. Return 1 if the erase block size is unknown or non flash memory media. This command is used by only f_mkfs function and it attempts to align data area on the erase block boundary. Required at FF_USE_MKFS == 1., 因此,是返回以扇区为单位的block大小,因此要/512,之前我说错了。我们代码是没问题的。
3,不对。
谢谢您的解答!
原子哥,我想搞明白:FTL中磨损均衡是怎么实现的。(我说利用保留区,你说不正确)您能细说说均衡摩擦的原理吗?这对我理解很重要,谢谢啦。
下面图片是我从开发指南看到的:
一周热门 更多>