struct nandflash_addrst
{
uint32_t Col_addr :12;// bit11:bit0
uint32_t Page_addr :6;// bit17:bit12
uint32_t Block_addr :11;// bit31:bit18
uint32_t Rsvd_addr :3; //±£Áô
};
typedef union AddrMore_st
{
uint32_t all;
struct nandflash_addrst bit;
} addr_more_t;
addr_more_t nand_flash_addr_convt(uint32_t addr) //物理地址转换
{
addr_more_t tempaddr;
addr_more_t flash_addr;
tempaddr.all = addr;
flash_addr.all =0;
flash_addr.bit.Block_addr = tempaddr.bit.Block_addr;
uint32_t temp = (2*tempaddr.bit.Page_addr);
flash_addr.all+=(temp<<12);
while(1)
{
if(tempaddr.bit.Col_addr>=nd_page_bytesize) //1 page
{
flash_addr.all+=0x1000;
tempaddr.bit.Col_addr-=nd_page_bytesize;
}
else
{
break;
}
}
flash_addr.bit.Col_addr = tempaddr.bit.Col_addr;
return flash_addr;
}