nand flash 块擦除 ???

2019-07-20 09:05发布



根据 资料 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;        //成功   
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。