打印

请教在nandflash上移植FAT文件系统

[复制链接]
3077|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a7208184|  楼主 | 2011-4-22 16:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好!目前我在做nandflash上移植FAT文件系统。
硬件坏境是:S3C2450的开发板,nandflash是128M,1个PAGE是2K,1个BLOCK有64个PAGE。
我现在nandflash的基础上做了一个适配层。适配层代码如下:
//uisectorStart--扇区起始地址;pWriteBuff--需要读出的数据;uiCount--需要读出扇区的个数
//返回值:实际写入的扇区数

U16 NFTL_ReadSector(U32 uisectorStart, U8 *pReadBuff, U32 uiCount)
{
U16 i = 0;
for(i = 0; i < uiCount; i++, uisectorStart++)
{
  NF_ReadPage(uisectorStart, 0, pReadBuff, SECTOR_SIZE); //读扇区
}
return i;
}

//uisectorStart--扇区起始地址;pWriteBuff--需要写入的数据;uiCount--需要写入扇区的个数
//返回值:实际写入的扇区数
U16 NFTL_WriteSector(U32 uisectorStart, const U8 *pWriteBuff, U32 uiCount)
{
U16 i = 0;
U32 uiBlockNum = 0;
U32 offPage = 0;
U32 uiAddr = 0x32000000;
U16 uiSectorCount = 0;
while(uiCount)
{  
  uiBlockNum = uisectorStart / BLOCK_SETOR_NUM; //扇区所在的块编号
  offPage = uisectorStart % BLOCK_SETOR_NUM;    //该扇区相对该块起始的偏移量
  for(i = 0; i < 64; i++)
  {
   NF_ReadPage(uiBlockNum * 64 + i, 0, (void *)uiAddr, SECTOR_SIZE); //先拷贝出该块
  }
  NF_EraseBlock(uiBlockNum);
  for(i = 0; i < 64; i++, uiAddr += SECTOR_SIZE)
  {
   if((i >= offPage) && (i <= offPage + uiCount))
   {  //将需要更改的数据拷到相应的nandflash中
    NF_WritePage(uiBlockNum * 64 + i, 0, pWriteBuff, SECTOR_SIZE);
    uisectorStart++;
    uiSectorCount++;
    uiCount--;
   }
   else
   { //将不需要更改的数据考回到flash中
    NF_WritePage(uiBlockNum * 64 + i, 0, (U8 *)uiAddr, SECTOR_SIZE);
   }
  }     
}
return uiSectorCount;
}


我所做的步骤是f_mount()->f_mkfs()->f_open->f_write()->f_lseek->f_read
f_mount和f_mkfs函数执行都没有问题。我还把引导扇区读了出来,也正确。但是在f_open函数时,返回值出现FR_NO_FILESYSTEM这个错误。调试发现时auto_mount函数出了问题。


不知道这样有没有吧问题说清楚,希望有这方面经验的朋友帮忙下,现在没有思路了。

相关帖子

沙发
nicholasldf| | 2011-4-23 22:02 | 只看该作者
干嘛不用yaffs2文件系统,,专门为nandflash设计的文件系统。。。
在nandflash上使用fat不好,,fat表被频繁的读写,,而nandflash的写次数是有寿命限制的,,
所以基于nandflash的fat文件系统很容易崩溃。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

76

帖子

1

粉丝