由于产品预算,从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]
一周热门 更多>