主题 : S3C2440 nandflash读写操作的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 97947
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2013-11-10
最后登录: 2013-12-04
楼主  发表于: 2013-12-04 11:51

 S3C2440 nandflash读写操作的问题

//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该如何计算?谢谢~