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

2019-07-21 01:04发布

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
fskofcpu
2019-07-22 06:55
正点原子 发表于 2018-12-8 01:28
多看几遍。
第一次写的时候,根本就没有数据,全部是0XFF,读出来ECC校验值的位置,也是0XFFF
自然就有 ...

串口发上来调试信息:
bad block index:2440
bad block index:3940
total block num:4096
good block num:4094
valid block num:3807
bad block index:2440
bad block index:3940
total block num:4096
good block num:4094
valid block num:3807
err hd,rd:0xff9a5999,0xff96a69a
eccnum,eccstart:1,0
PageNum,ColNum:261888,0
2bit ecc error or more
err hd,rd:0xffaaa599,0xffaaa6a5
eccnum,eccstart:1,1
PageNum,ColNum:261888,512
2bit ecc error or more
容量
disk total volume:950 MB
disk valid volume:950 MB
扫描到文件
err hd,rd:0xff9966a5,0xbedede4c
eccnum,eccstart:1,0
PageNum,ColNum:262002,0
2bit ecc error or more
1:/0
1:/1
1:/2
1:/3
读文件0:
Read file data is:
err hd,rd:0xff033cc0,0xf7ff9e4c
eccnum,eccstart:1,0
PageNum,ColNum:262003,0
2bit ecc error or more
0031   0032   0033   0034   0035   0036   0037   0038   0039   0000   
Readed data len:10
Read data over
读文件3:
Read file data is:
err hd,rd:0xffffffff,0x00
eccnum,eccstart:1,0
PageNum,ColNum:262004,0
2bit ecc error or more
0000   0001   0002   0003   0004   0005   0006   0007   0008   0009   
000A   000B   000C   000D   000E   000F   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   001A   001B   001C   001D   001E   001F   0020   0021   0022   0023   0024   002…………后面还有很多数据,但每512字节就有>2bit的ECC错误

下面是测试函数:
        FTL_Init();
        fatfs_init();
        res=f_mount(fs[1],"1:",1); //挂载NAND FLASH.
                if(res==0X0D)//NAND FLASH磁盘,FAT文件系统错误,重新格式化NAND FLASH
                {
                        printf("%s ","NAND Disk Formatting...");//格式化NAND
                        res=f_mkfs("1:",1,4096);//格式化FLASH,2,盘符;1,不需要引导区,8个扇区为1个簇
                        if(res==0)
                        {
                                f_setlabel((const TCHAR *)"0:NANDDISK");        //设置Flash磁盘的名字为:NANDDISK
                                printf("%s ","NAND Disk Format Finish");                //格式化完成
                        }else printf("%s ","NAND Disk Format Error ");        //格式化失败
                        delay_200ns();delay_200ns();delay_200ns();delay_200ns();delay_200ns();delay_200ns();
                }
        DELAY_US(1000000L);

        //fatfs_unlink((u8*)"1:/3");

        fatfs_showfree((u8*)"1:");//显示剩余容量
        fatfs_scan_files((u8*)"1:");//遍历文件

        fatfs_open((u8*)"1:/0",0x01);//打开、读取文件
        fatfs_read(10);
        fatfs_close();
        fatfs_open((u8*)"1:/3",0x01);
        fatfs_size();
        fatfs_read(8192);
        fatfs_close();

一周热门 更多>