这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于TFFS的若干问题

共11条 1/2 1 2 跳转至

关于TFFS的若干问题

菜鸟
2007-06-15 18:27:38     打赏

我的flash是2048 bytes * 64 pages * 4096 blocks = 512MB积累了若干TFFS的问题,烦请高手帮忙看看。

1.我得知VxWorks5.5的TFFS不再支持NAND Flash了,这一点我也得到了风河的确认,可是我在代理商那里看5.4中也没有相应的TFFS文件。我觉得应该是缺少一个nftllite.c文件。不知道谁那里有该文件,不知道是否方便传给我一份。

2.同时我在VxWorks5.5中看到了一个ssfdc.c的文件,里面的处理类似于nand flash的操作,应该修改一下就可以用。这个我还没有试成功。不知道和nftllite.c是否有差别,能否直接用。

3.现在我的做法是,将nand flash当作nor flash来处理,即将不连续的地址映射为连续的地址空间,而不用nand flash后的空闲区。这样格式化、挂载的都成功了。只是在读写文件时候出现异常:
1)将4096块格式化后,写文件没有问题(读取flash相应的地址,有写入的数据,这就是说的确写入了文件),但是却找不到文件,但读函数也并没有报错,表现就是读出来的数据没有内容(忘了是ff还是00了)。或者只有第一个文件可以读出来,第二个文件无法读取。
2)如果只格式化16、256个块的话(即让系统认为flash只有这么多块),读写均成功,两个文件也一样。
3)怀疑是跟FAT系统有关系,是不是FAT12 16没有选好啊?需要在什么地方配置吗?簇的大小是否有限制呢?
4)另一个就是我的写函数中并没有对overwrite进行处理,上层传下来的overwrite是否表示我需要将整块的数据都读取出来然后在将数据修改后,擦块,然后再整块写入吗?还是这些机制都不用我来处理呢?
目前就是以上若干问题,谢谢版主赐教,不胜感激!




关键词: 关于     若干     问题     文件    

菜鸟
2007-06-18 17:08:00     打赏
2楼

我的flash是2048 bytes * 64 pages * 4096 blocks = 512MB积累了若干TFFS的问题,烦请高手帮忙看看。

1.我得知VxWorks5.5的TFFS不再支持NAND Flash了,这一点我也得到了风河的确认,可是我在代理商那里看5.4中也没有相应的TFFS文件。我觉得应该是缺少一个nftllite.c文件。不知道谁那里有该文件,不知道是否方便传给我一份。

是的,nftllite.c是处理nand类型flash的,给个油箱我发你一份。需要做一些修改,把include_ftl的地方改成nftl,在format和mount的函数列表中增加nftl的函数。最后是修改你的驱动,增加对overwrite的处理。

2.同时我在VxWorks5.5中看到了一个ssfdc.c的文件,里面的处理类似于nand flash的操作,应该修改一下就可以用。这个我还没有试成功。不知道和nftllite.c是否有差别,能否直接用。

也可以用。

3.现在我的做法是,将nand flash当作nor flash来处理,即将不连续的地址映射为连续的地址空间,而不用nand flash后的空闲区。这样格式化、挂载的都成功了。只是在读写文件时候出现异常:
1)将4096块格式化后,写文件没有问题(读取flash相应的地址,有写入的数据,这就是说的确写入了文件),但是却找不到文件,但读函数也并没有报错,表现就是读出来的数据没有内容(忘了是ff还是00了)。或者只有第一个文件可以读出来,第二个文件无法读取。

map的时候需要先全部读到缓冲区再map,或者是配置有错误。我用nor的方法模拟了nand,一切正常,没有问题。只是坏块无法管理。


2)如果只格式化16、256个块的话(即让系统认为flash只有这么多块),读写均成功,两个文件也一样。

可能是配置的问题。


3)怀疑是跟FAT系统有关系,是不是FAT12 16没有选好啊?需要在什么地方配置吗?簇的大小是否有限制呢?

dosfs根据你的块设备大小自动选择的。不需要配置。


4)另一个就是我的写函数中并没有对overwrite进行处理,上层传下来的overwrite是否表示我需要将整块的数据都读取出来然后在将数据修改后,擦块,然后再整块写入吗?还是这些机制都不用我来处理呢?

nor类型flash的overwrite不需要处理。


目前就是以上若干问题,谢谢版主赐教,不胜感激!


菜鸟
2007-06-21 08:28:00     打赏
3楼

谢谢版主回复:)

的确不是FAT的问题,我查看程序之后发现它会根据大小进行匹配。

下面是我的map函数的相关代码,请版主指教:

typedef struct {
unsigned short vendorID;
unsigned short chipID;
unsigned short pageSize ; /* all....................*/
unsigned short pageMask ; /* ...these...............*/
unsigned short pageAreaSize ; /* .......variables.......*/
unsigned short tailSize ; /* .............interleave*/
unsigned short noOfBlocks ; /* total erasable blocks in flash device*/
FLBuffer *buffer; /* buffer for map through buffer */
} Vars;

static Vars mtdVars[DRIVES];

#define thisVars ((Vars *) vol.mtdVars)
#define thisBuffer (thisVars->buffer->data)

static void FAR0 * NandMTDMap ( FLFlash vol,CardAddress Address,int length )
{
//unsigned int BlockNo=Address>>18;
NandMTDRead(&vol,Address,thisBuffer,length, 0);
vol.socket->remapped = TRUE;
return (void FAR0 *)thisBuffer;
}


菜鸟
2007-06-22 08:12:00     打赏
4楼

对了 在注册函数NandMTDIdentify中,有对window操作的语句,我也只是照搬过来,只对flSetWindowBusWidth改为了8,其他并没有动。不知道配置是否正确。

flSetWindowBusWidth(vol.socket,8);/* use 8-bits */
flSetWindowSpeed(vol.socket,120); /* 120 nsec. */
flSetWindowSize(vol.socket, 2); /* 4 KBytes unit*/

是不是flSetWindowSize()的参数给的不对啊,因为我同时在sysTffs.c中发现了

LOCAL void rfaSetWindow
(
FLSocket vol /* pointer identifying drive */
)
{
/* Physical base as a 4K page */

vol.window.baseAddress = FLASH_BASE_ADRS >> 12;

flSetWindowSize (&vol, FLASH_SIZE >> 12);
}

两者显然配置的不一样。不知道window是一个什么概念?是不是要将第一个的参数改为FLASH_SIZE >> 12


菜鸟
2007-06-22 23:02:00     打赏
5楼

jacin83 我也遇到了和你同样的问题

原以为能格式化,能加载就行了,今天上传了个文件就出现了数据异常,希望可以交流交流!

woodhead兄,麻烦你把nftllite.c邮一份给我,谢谢,已经发短信给你!


菜鸟
2007-07-12 00:05:00     打赏
6楼

版主您好:

冒昧打扰您一下,在下也遇到相同的问题向您请教,希望能不吝赐教,非常感谢!

我们想在系统中使用512M的NAND FLASH,初步拟采用三星公司的K9F1G08系列,我们采用平台如下:

CPU : ARM920T SAMSUNG S3C2410A

OS : VXWORKS 5.5 FOR ARM (TORNADO 2.2)

我们以前用TORNADO2.2自带的TFFS翻译层SSFDC用于16M以下的NAND时是可以的,但是大于16M时就出问题了,看了您的帖子后发现应该用NFTL翻译层,所以希望您能够把nftllite.c文件也能传给我一份,非常感谢,我的邮箱是:hbwqzl@sohu.com或hbwqzl@hotmail.com,谢谢.

  nftllite.c代码需要做那些修改呢,我的ARM采用的是小端模式,我曾把TORNADO2.0 FOR PPC的nftllite.o加入到我的库中,但是编译通不过,是不是要对该文件进行修改才可以移植呢?还有就是驱动中应该怎样对overwrite处理呢,我看参考驱动nfdc2048.c中没有该参数,所以不知道怎么处理,有没有什么参考代码呢,希望您能给点意见,非常感谢.

  问了您很多问题,再次向您表示感谢.谢谢!


菜鸟
2007-07-13 20:08:00     打赏
7楼

不好意思,这几天太忙了,刚刚出差回来。

调试过程中有什么问题请及时交流。谢谢!


菜鸟
2007-08-15 22:24:11     打赏
8楼

也请woodhead 把nftllite.c发给我一份吧,非常感谢
我的邮箱是polaris_dll@hotmail.com


菜鸟
2007-08-24 23:17:21     打赏
9楼
我也有同样的问题,也请woodhead 把nftllite.c发给我一份吧,非常感谢
originallovehome@163.com

菜鸟
2007-09-13 15:59:58     打赏
10楼
好贴,顶!

nftl层上实现大块nandflash是否可行?

共11条 1/2 1 2 跳转至

回复

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