|
我用的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也略了~
*/
}
|
|