3573|4

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TFFS文件系统~~建立起来感觉速度够慢的 [复制链接]

我用的FLASH型号是一个AMD兼容的NOR FLASH, 2M的,划入TFFS的是高1.5M,也就是FORMAT参数为:
tffsDevFormatParams myDefaultParams =
    {
        {
            0x80000L,
            99,
            1,
            0x10000l,
            NULL,
            {0,0,0,0},
            NULL,
            2,
            0,
            NULL
        },
        FTL_FORMAT
    };


MTD实际上我只挂了三个函数:
MAP,WRITE,ERASE
MAP就是计算地址了,WRITE的时候当参数REWRITE==1的时候先读出64k到BUFFER然后改写最后从新写回,如果不是rewrite就直接编程。

结果跑起来以后发现速度实在是慢的可以,下一个512K不到的文件,写到FLASH里需要将近30秒,自己在WRITE/ERASE的MTD函数中打印发现经常就些没几个BYTE但是整个一块64K的FLASH也要从写这样,速度超慢。remove一个文件也是如此。

我这还是修改过DOSFS里的sector_bit呢,原来dosfs的每个sector=512的时候下一个512K的东西反正10分钟我看还没有结束的迹象,SECTOR数目到300多了。。。。。。

我现在修改的sector大小为0x2000,也就是sector bit 13,还是感觉很慢。想问一下各位使用TFFS的状况。还有文件系统操作里比较耗时的还有哪些地方呢?

目前的速度是下一个472K的文件写到文件系统中需要大约37秒。



最后附上,当打开TFFS DEBUG和我自己的FLASHWRITE ERASE DEBUG 后的打印消息和部分代码



#define     FTP_ADDR            "192.168.1.181"
#define    FILE_NAME        "little.z"
#define    USER_NAME        "uboot"
#define    PASS_WORD        "uboot"

#define     IMAGE_NAME        "image.z"

void flashTest()
{
/*.......
变量声明啥的略
登陆FTP打开文件,DATAsocke为 DATA_SOCK
........这段没啥关系就略了
*/
    sprintf(fullname,"%s/%s",MY_TFFS_NAME,IMAGE_NAME);

    fd=    creat(fullname,O_RDWR);
/*创建文件~~之前做过format或者remove*/
    if(ERROR==fd)
    {
        printf("tffs create file error, exit\n");
        return;
    }
    totalLen=0;

    bufferLen=64*1024;
    bufferleft=bufferLen;
    readLen=0;
    offset=0;
    while(1)
    {
        do
        {
            readLen=read(DATA_SOCK,tempbuf+offset,bufferleft);
            totalLen+=readLen;
            offset+=readLen;
            bufferleft-=readLen;

        }while((0!=bufferleft)&&(0!=readLen)&&(ERROR!=readLen));
        printf("now read 0x%x\n",offset);
        written=write(fd,tempbuf,offset);
        if(written!=offset)
        {
            printf("write error, 0x%x should write to tffs but in fact 0x%x written\n",offset,written);
            goto error_out;
        }
        else
        {
            printf("write 0x%x bytes to tffs\n",written);
        }        
        
        bufferleft=bufferLen;
        offset=0;
        if(0==readLen)
        {
            break;
        }
    }
   
    printf("ftp read totalLen= 0x%x\n",totalLen);
error_out:
  /*
登出FTP,FREE掉BUFFER也略了~
*/

}

最新回复

TFFS的写入速度绝大部分取决于FLASH的驱动,建议你检查一下FLASH Write的程序代码 我用intel28f128,一开始速度只有大概4KBps,优化了FLASH部分代码后,可以到100KBps 用vxWorks的FTP Server测得。  详情 回复 发表于 2008-10-17 11:57
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
Falsh在写之前要先擦除,而NOR flash在擦之前还要先写0,NOR flash在写的时候就是很慢的。
擦除NOR器件时是以64~128KB的块进行的,就算你要改一个字节的内容,整个块都要重新擦除重新写的。执行一个写入/擦除操作的时间为5s左右。与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
两者写的速度差的不是一点半点。
 
 

回复

50

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的写速度可能就是这么慢的
不过你可以试一下读取的速度快不快,读取应该是比较快的。读取NOR的要比NAND的快一点。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
读取速度是可以忽略不计的。。。。。超快


另外,我还有一块SFLASH的板子,上面最小擦写块也是64K,貌似就必NOR的快上不少

似乎SFLASH擦写更快一些???
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
TFFS的写入速度绝大部分取决于FLASH的驱动,建议你检查一下FLASH Write的程序代码
我用intel28f128,一开始速度只有大概4KBps,优化了FLASH部分代码后,可以到100KBps
用vxWorks的FTP Server测得。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表