最近在调试TFFS,由于我使用的nandflash的页为2048字节,这与dosfs中sector默认的512字节不一样,但我在flcustom.h中看到SECTOR_SIZE_BITS默认是9(也就是说SECTOR_SIZE是2的9次方),但也可以自己改,于是我改成了11。同时,由于ftllite.c文件中的writesector()函数默认是按照SECTOR_SIZE那么大去写,这样在dosfs格式化时候,它的主引导区的大小为512,它会调用writesector()去写,也就是它本身没有2048字节的数据,而却非要写2048,这样就会出现地址越界的错误。于是我为writesector()及其相关的一些函数增加了一个length的入口参数,当格式化时length传入实际写入的字节数,而在其他地方length依旧是SECTOR_SIZE。
按照上面的做法,格式化加载都没有问题,只是在写多个文件后,只能读出第一个,反过来也一样,也就是只有第一次读的文件可以读出来。
偶然一次我在makefile文件中将ftllite.o去掉了,结果编译之后格式化、加载256M(整片flash有512M)读写文件都正常,只是再格一点的话加载均不能成功。
我很疑惑,因为ftllite.c ftl.c dosformat.c fatlite.c文件中都用到了SECTOR_SIZE,而当时makefile文件中除了ftllite.c其他都编译了,也就是在ftllite.c文件中SECTOR_SIZE为512,而其他都是2048.不知道这样怎么也能成功,但我也觉得在读写大文件时候应该有问题。
所以我想请教高手,TFFS中的SECTOR和page是否是一个概念,是否要求一样大。同时unit和block是否一样呢?谢谢
p.s.上面写的比较混乱,请包涵