请问MT29F4G08改为MT29F1G08 除了读写的地址修改外,不知道还要修改什么参数

2019-07-20 09:27发布

由于产品预算,从4G改为1G. 在STM32F429开发板子的基础上,把4G NAND FLASH改为1G NAND FLASH..
如果沿用原子的nand flash驱动,除了修改发送地址为4个byte外.
如:
[mw_shl_code=c,true]    if(nand_dev.id==MT29F16G08ABABA)    //NAND为MT29F16G08ABABA
    {
        nand_dev.page_totalsize=4320;          //nand一个page的总大小(包括spare区)     
        nand_dev.page_mainsize=4096;           //nand一个page的有效数据区大小   
        nand_dev.page_sparesize=224;        //nand一个page的spare区大小
        nand_dev.block_pagenum=128;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=2048;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=4096;          //nand的总block数目  
    }
    else if(nand_dev.id==MT29F4G08ABADA)//NAND为MT29F4G08ABADA
    {
        nand_dev.page_totalsize=2112;        //nand一个page的总大小(包括spare区)
        nand_dev.page_mainsize=2048;         //nand一个page的有效数据区大小
        nand_dev.page_sparesize=64;                //nand一个page的spare区大小
        nand_dev.block_pagenum=64;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=2048;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=4096;         //nand的总block数目
    } else if(nand_dev.id==MT29F1G08ABADA)
    {
        nand_dev.page_totalsize=2048+64;        //nand一个page的总大小(包括spare区)
        nand_dev.page_mainsize=2048;         //nand一个page的有效数据区大小
        nand_dev.page_sparesize=64;                //nand一个page的spare区大小
        nand_dev.block_pagenum=64;                //nand一个block所包含的page数目
        nand_dev.plane_blocknum=1024;        //nand一个plane所包含的block数目
        nand_dev.block_totalnum=1024;         //nand的总block数目
   
    }[/mw_shl_code]

[mw_shl_code=c,true]    if(nand_dev.id!=MT29F1G08ABADA)
    {
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
    }
    else {
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)ColNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(ColNum>>8);
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)PageNum;
        *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>8);
        //*(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(PageNum>>16);
    }[/mw_shl_code]

除了上面这样修改外, 下面那一段如何.感觉跟官方提供的例程不太一样.
下面这段代码该如何修改
[mw_shl_code=c,true]u8 NAND_EraseBlock(u32 BlockNum)
{
        if(nand_dev.id==MT29F16G08ABABA)BlockNum<<=7;          //将块地址转换为页地址
    else if(nand_dev.id==MT29F4G08ABADA)BlockNum<<=6;
    else if(nand_dev.id==MT29F1G08ABADA)BlockNum<<=6;   //这里应该是多少好呢????????????????????????
    *(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE0;
    //发送块地址
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)BlockNum;
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>8);
    *(vu8*)(NAND_ADDRESS|NAND_ADDR)=(u8)(BlockNum>>16);
    *(vu8*)(NAND_ADDRESS|NAND_CMD)=NAND_ERASE1;
        if(NAND_WaitForReady()!=NSTA_READY)return NSTA_ERROR;//失败
    return 0;        //成功   
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。