这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » TFFS相关问题探讨。不断更新中。。。

共15条 1/2 1 2 跳转至

TFFS相关问题探讨。不断更新中。。。

菜鸟
2013-08-01 18:01:55     打赏

这个版块的好几个达人都不出现了,真是可惜啊!

本帖子介绍一下我在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_MT29F2G08
 MT29F2G08Identify,
#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、格式化和挂载。。。。。

目前格式化和加载成功,还有几个没明白的地方,也未进行过文件的创建,写入和文件读出,删除等测试。欢迎大家探讨!!

 




关键词: 相关     问题     探讨     不断     更新     Flash     INCL    

菜鸟
2013-08-06 15:42:35     打赏
2楼

遇到的问题:

->sysTffsFormat  

成功

->usrTffsConfig 0,0, "/C"

->devs

======================
drv name               
  0 /null              
  1 /tyCo/0            
  1 /tyCo/1            
  1 /tyCo/2            
  8 :                  
  9 /vio               
 10 /tgtsvr            
  3 /bd0               
  4 /C                 
======================

但是

->ls /C

Can't open "/C".

谁能解释下?或者遇到过同样的问题?


院士
2013-08-06 15:53:30     打赏
3楼
赶紧回个帖子 表示一下我没有被人请去“喝茶”

院士
2013-08-06 15:54:21     打赏
4楼

没有遇到过类似的问题。

楼主 只能帮你顶一下了


菜鸟
2013-08-06 16:39:32     打赏
5楼

嘿嘿。。版主出来了!

有几个问题想请教下!

1、我是用Nand Flash 按照 NOR 来作的,那么rfaSetWindow()有什么特殊的地方?

2、map的时候我是定义一个页的数组,直接读一个Page页到数组中,然后返回这个数组的首地址的;

3、挂载的时候:Instantiating /C as rawFs,  device = 0x10001,提示是rawFS (原始文件系统),是否正确?

4、理论上挂载成功,应该可以进行操作了的啊,为什么我这不行呢??

我的平台是Wind River work bench 6.8

谢谢!!


高工
2013-08-06 23:04:11     打赏
6楼
不能打开应该是权限的问题,用指令chmod 777 试一下
777,就是你自己,用户组和其他人都对这个文件有完全控制的权限

菜鸟
2013-08-07 15:04:58     打赏
7楼

->usrTffsConfig 0,0, "/tffs0"

Instantiating /tffs0 as rawFs,  device = 0x10001
======================
drv name               
  0 /null              
  1 /tyCo/0            
  1 /tyCo/1            
  1 /tyCo/2            
  8 :                  
  9 /vio               
 10 /tgtsvr            
  4 /tffs0             
======================

->chmod "/tffs0",777

->ls "/tffs0"
Can't open "/tffs0".

还是一样呢!!

而且看格式化的时候,怎么是rawFs 了?????期待解答!


菜鸟
2013-08-07 15:44:17     打赏
8楼

继续。。。

格式化和加载的时候提示信息如下:

Instantiating /tffs0 as rawFs,  device = 0x10001
Bulk Class Driver Successfully Initialized
Failed.
Error opening :.sym: status = 0x2b0001
wdbCommDevInit: could not get device name
wdbConfig: error configuring WDB communication interface


高工
2013-08-07 15:57:54     打赏
9楼

存储技术这一块.....

进来学习的,看上去好深奥。


菜鸟
2013-08-08 08:34:22     打赏
10楼

继续补充:

看到我的系统格式化后成为了rawFs文件系统。

查系统帮助资料上说:

If the TFFS device has a valid file system installed (dosFS or HRFS) the file system handler mounts the underlying file system. If there is no valid file system on the device, the rawfs file system is instantiated on the device. The user can then format the device with the file system of choice.

那么,是不是说进行sysTffsFormat() 后还需要再进行一次dosFsVolFormat()然后才能当成FOSFS文件系统一样进行读写?

 


共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]