金牌会员
 
- 积分
- 2374
- 金钱
- 2374
- 注册时间
- 2017-8-7
- 在线时间
- 207 小时
|

楼主 |
发表于 2018-3-20 10:07:40
|
显示全部楼层
原子哥,再问个问题,这个函数,数据传输是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] |
|