//read
void nandflash_read(U32 page_number,char *data)
{
unsigned int i;
NF_CE_L();
NF_CLEAR_RB();
NF_CMD(cmd_read1); //写入命令1
NF_ADDR(0x00) ; //连续写入五个周期的地址
NF_ADDR(0x00);
NF_ADDR(page_number&0xff);
NF_ADDR((page_number>>8)&0xff);
NF_ADDR((page_number>>16)&0xff);
NF_CMD(cmd_read2); //写入命令2
dely(1);
NF_DETECT_RB(); //等待RNB变高
for(i=0;i<2048;i++)
{
data=rNFDATA8; //读出
}
NF_CE_H();
}
//write
void nandflash_write(U32 page_number, char *data)
{
U32 i;
unsigned char stat;
NF_CE_L();
NF_CLEAR_RB();
NF_CMD(cmd_page_write1);
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR(page_number&0xff);
NF_ADDR((page_number>>8)&0xff);
NF_ADDR((page_number>>16)&0xff);
for(i=0;i<2048;i++)
{
rNFDATA8=data;
}
NF_CE_H();
}
//块擦除
unsigned char nandflash_erase(unsigned int block_number)
{
unsigned char stat;
NF_CE_L();
NF_CLEAR_RB();
NF_CMD(cmd_block_erase1);
NF_ADDR((block_number<<6)&0xff);
NF_ADDR((block_number>>2)&0xff);
NF_ADDR((block_number>>10)&0xff);
NF_CMD(cmd_block_erase2);
dely(1);
NF_DETECT_RB();
NF_CMD(cmd_readstatus);
stat=rNFDATA8;
NF_CE_H();
if((stat&0x01)==0)
{
return 0x01;
}
else
{
return 0x02;
}
}
我的板子是micro2440,想进行一些用户数据的保存,读取操作。请问上述的读写操作的page_number可以为哪些值?以及如果我想对该page_number进行块擦除操作时,其对应的block_number该如何计算?谢谢~