如题哦,从ucos,到lwip,到摄像头,到指纹,到sdram,一步步的太艰苦,现在到了nandflash这块,之后还有emwin,回归主题,问如何用FATFS管理nandflash存储图片,我获得的图片方式是一行一行的缓存在sdram,sdram中有完整的图片,这个管理系统麻烦大神告诉我一下大概怎么使用就行啦,详细的我会继续研究,就是第一次接触,想听听大神建议及思路,如果不用文件管理系统,我的图片每行是480个字节,分辨率是480*320,用的是原子的f767核心板上的nandflash,29f4g一页flash是2k+64字节,那样一页存4行数据,用80页就能存一张图,但是擦除只能按block擦除,咦有点不对劲,不必担心多余擦除的问题,我用2个block存一张图片,擦除也就擦除2个block,这样空间虽然浪费太多,不知可行不可行。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原子哥,再问个问题,这个函数,数据传输是8位额,可不可以改成16位传输的[mw_shl_code=c,true]u8 FTL_WriteSectors(u8 *pBuffer,u32 SectorNo,u16 SectorSize,u32 SectorCount)
{
u8 flag=0;
u16 temp;
u32 i=0;
u16 wsecs; //D′ò3′óD¡
u32 wlen; //D′èë3¤¶è
u32 LBNNo; //Âß¼-¿éoÅ
u32 PBNNo; //Îïàí¿éoÅ
u32 PhyPageNo; //Îïàíò3oÅ
u32 PageOffset; //ò3ÄúÆ«òÆμØÖ·
u32 BlockOffset;//¿éÄúÆ«òÆμØÖ·
u32 markdpbn=0XFFFFFFFF; //±ê¼ÇáËμÄÎïàí¿é±àoÅ
for(i=0;i<SectorCount;i++)
{
LBNNo=(SectorNo+i)/(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize));//¸ù¾YÂß¼-éèÇøoÅoíéèÇø′óD¡¼ÆËã3öÂß¼-¿éoÅ
PBNNo=FTL_LBNToPBN(LBNNo); //½«Âß¼-¿é×a»»ÎaÎïàí¿é
if(PBNNo>=nand_dev.block_totalnum)return 1; //Îïàí¿éoÅ′óóúNAND FLASHμÄ×ü¿éêy,Ôò꧰ü.
BlockOffset=((SectorNo+i)%(nand_dev.block_pagenum*(nand_dev.page_mainsize/SectorSize)))*SectorSize;//¼ÆËã¿éÄúÆ«òÆ
PhyPageNo=PBNNo*nand_dev.block_pagenum+BlockOffset/nand_dev.page_mainsize; //¼ÆËã3öÎïàíò3oÅ
PageOffset=BlockOffset%nand_dev.page_mainsize; //¼ÆËã3öò3ÄúÆ«òÆμØÖ·
temp=nand_dev.page_mainsize-PageOffset; //pageÄúê£óà×Ö½úêy
temp/=SectorSize; //¿éòÔá¬DøD′èëμÄsectorêy
wsecs=SectorCount-i; //»1ꣶàéù¸ösectoròaD′
if(wsecs>=temp)wsecs=temp; //′óóú¿éá¬DøD′èëμÄsectorêy,ÔòD′èëtemp¸öéèÇø
wlen=wsecs*SectorSize; //ÿ′ÎD′wsecs¸ösector
//¶á3öD′èë′óD¡μÄÄúèYÅD¶ÏêÇ·ñè«Îa0XFF
flag=NAND_ReadPageComp(PhyPageNo,PageOffset,0XFFFFFFFF,wlen/4,&temp); //¶áò»¸öwlen/4′óD¡¸öêy¾Y,2¢óë0XFFFFFFFF¶Ô±è
if(flag)return 2; //¶áD′′íÎ󣬻μ¿é
if(temp==(wlen/4)) flag=NAND_WritePage(PhyPageNo,PageOffset,pBuffer,wlen); //è«Îa0XFF,¿éòÔÖ±½óD′êy¾Y
else flag=1; //2»è«êÇ0XFF,Ôòáí×÷′|àí
if(flag==0&&(markdpbn!=PBNNo)) //è«êÇ0XFF,ÇòD′èë3é1|,Çò±ê¼ÇáËμÄÎïàí¿éóëμ±Ç°Îïàí¿é2»í¬
{
flag=FTL_UsedBlockMark(PBNNo); //±ê¼Ç′Ë¿éòѾ-ê1óÃ
markdpbn=PBNNo; //±ê¼Çíê3é,±ê¼Ç¿é=μ±Ç°¿é,·àÖ1Öظ′±ê¼Ç
}
if(flag)//2»è«Îa0XFF/±ê¼Ç꧰ü£¬½«êy¾YD′μ½áíò»¸ö¿é
{
temp=((u32)nand_dev.block_pagenum*nand_dev.page_mainsize-BlockOffset)/SectorSize;//¼ÆËãÕû¸öblock»1ê£϶àéù¸öSECTOR¿éòÔD′èë
wsecs=SectorCount-i; //»1ꣶàéù¸ösectoròaD′
if(wsecs>=temp)wsecs=temp; //′óóú¿éá¬DøD′èëμÄsectorêy,ÔòD′èëtemp¸öéèÇø
wlen=wsecs*SectorSize; //ÿ′ÎD′wsecs¸ösector
flag=FTL_CopyAndWriteToBlock(PhyPageNo,PageOffset,pBuffer,wlen);//¿½±′μ½áííaò»¸öblock,2¢D′èëêy¾Y
if(flag)return 3;//꧰ü
}
i+=wsecs-1;
pBuffer+=wlen;//êy¾Y»o3åÇøÖ¸ÕëÆ«òÆ
}
return 0;
}[/mw_shl_code]
原子哥,现在又遇到一个问题,就是在使用块擦除的时候,存nandflash里的数据复位在读就没有了,这么情况不知原子哥遇到过没@正点原子
一周热门 更多>