根据 资料 MT29F4G08ABADA 这个介绍,每页是 2048 字节,
每个块包含 64页,那么每个块的地址应该就是 2048*64的倍数,
下面的<<=7、<<=6 转换为页地址,意思是不是这样的:
如果我想擦除块2,那 BlockNum 这个变量的值是2, <<=6的话结果是 128,那这个擦除块的地址 不是 2048*64的倍数啊,
该如何理解啊 ???????????????
或者是芯片内部自动会吧 这个 也地址转换为 扇区的地址 (也就是芯片内部会将 BlockNum * 2048) ? ????
u8 NAND_EraseBlock(u32 BlockNum)
{
if(nand_dev.id==MT29F16G08ABABA)
BlockNum<<=7; //将块地址转换为页地址
else if(nand_dev.id==MT29F4G08ABADA)
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(0x2FFFFFF)!=NSTA_READY)
return NSTA_ERROR;//失败
return 0; //成功
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>