2019-07-21 01:04发布
正点原子 发表于 2018-12-13 02:51 1,因为我们规定以512字节为单位访问SD卡。所以,你如果写入数据不是512的整数倍,FATFS会等待数据填满512 ...
最多设置5个标签!
非常感谢您的解答。
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主要是通过保留区来实现坏块管理和均衡摩擦(块内复制)吗?但是这样均衡摩擦好像没什么效果还是我理解的有错误???因为每次操作的块还是从头开始啊,并没有随机!!!
感谢您的耐心解答!
一周热门 更多>