这个版块的好几个达人都不出现了,真是可惜啊!
本帖子介绍一下我在Wind River 6.X下调试Nand Flash TFFS的过程和遇到的问题以及解决方法:
6.X以后不再支持Nand Flash 了,只支持Nor Flash 和 SSFDC(在很大一部分上Nand Flash与之类似,但并不完全相同);所以我再移植的时候,是把Nand Flash 当做Nor Flash来用的。
1、首先你要确保Flash的读写都是正确的,特别是时间,尤其要注意。
2、在BSP文件夹中的config.h中增加以下几项
#define INCLUDE_TFFS /* True flash file systerm */#define INCLUDE_TFFS_SHOW
#define INCLUDE_SHOW_ROUTINES /* */
#define INCLUDE_TFFS_MOUNT
3、编译BSP,会在BSP文件夹下发现一个sysTffs.c的文件,如果没有,则需要从系统目录下拷贝一个过来。
4、在sysTffs.c中定义你的Flash类型,#undef 掉与你无关的类型,我的Fllash是MT29F2G08,定义如下:
#define INCLUDE_MTD_MT29F2G08 /* */5、同文件中,由于是基于Nor框架的,所以如下定义:
#define INCLUDE_TL_FTL /* FTL translation layer */#undef INCLUDE_TL_SSFDC /* SSFDC translation layer */
6、定义Flash 的地址和大小:
#define FLASH_BASE_ADRS EMIF_CS3_BASE_ADDR /* EMIFA CS3 Base address */#define FLASH_SIZE 0x10000000 /* 200MBytes */
7、添加tffsConfig.c文件,从系统目录下拷贝过来,修改包含路径,否则将不认BSP文件夹下的文件。
//#include "tffs/tffsConfig.c"#include "tffsConfig.c" /**/
8、其他
XXXRegister (void)中对应的电源控制,检测等,在相关的框架里面自己加上即可。
9、打开格式化函数 sysTffsFormat (void),前面有个#if FALSE,屏蔽或者改为 TRUE
10、修改sysTffsFormat (void)格式化参数表tffsDevFormatParams params={。。。}
说明:第一项表示起始地址,从0x00到此地址不用
第二项和第三项一般不改动。
第四项表示每扇区大小,必须是Block的整数倍。
其他不需修改。
11、在tffsConfig.c文件下,增加:
#ifdef INCLUDE_MTD_MT29F2G08 /*sysTffs.c中定义 */
FLStatus MT29F2G08Identify (FLFlash vol); /*在Flash操作文件中实现*/
#endif
12、在mtdTable[]表中增加一项:
#ifdef INCLUDE_MTD_MT29F2G08MT29F2G08Identify,
#endif /* INCLUDE_MTD_USR */
13、其它暂时不做修改。
14、MT29F2G08Identify函数:
vol.interleaving = 1; /* */
vol.noOfChips = 1; /* Flash 数量为1 片*/
vol.erasableBlockSize= NAND_BLOCKS_SIZE * vol.interleaving; /* 最小擦除字节数*/
vol.chipSize =NAND_CHIP_SIZE; /* 实际的 Flash 大小*/
15、定义个函数
vol.write = MTBWrite; /*写*/vol.erase = MTBeraseBlock; /*擦除*/
vol.read = MTBRead; /*读*/
vol.map = MTBMap; /*重映射*/
vol.flags |= SUSPEND_FOR_WRITE;
16、读和写函数,必须写成以字节或者字为单位进行操作!确定给出的地址所在的Block和Page,以及offset地址。
17、MTBMap函数,实际返回的是一个数组的首地址,可定义一个全局数据,大小等于一个Page,函数中先读出指定的起始地址开始的1Page到全局数组中,再返回此数组首地址。
18、格式化和挂载。。。。。
目前格式化和加载成功,还有几个没明白的地方,也未进行过文件的创建,写入和文件读出,删除等测试。欢迎大家探讨!!