大家好!目前我在做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函数出了问题。
不知道这样有没有吧问题说清楚,希望有这方面经验的朋友帮忙下,现在没有思路了。 |