打印
[ZLG-ARM]

LPC2478 Nand Flash 问题

[复制链接]
2532|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mwm8412|  楼主 | 2008-11-14 10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在LPC2478芯片上实现NAND FLASH的读写。我现在已经可以将ID读出来,可是读写FLASH内的数据都是错的,不知道是哪里错了,还请高手帮忙解决
static U32 NFWaitBusy( void )
{
 U8 stat;

 NFWrCmd(QUERYCMD) ;
 do
 {
  stat = NFRdDat();
 }
 while ( !( stat & 0x40 ) ) ;

 NFWrCmd(READCMD0) ;
 return stat & 1 ;
}

static U32 NFReadID( void )
{
 U32 id, loop = 0;
 NFChipEn();
 NFWrCmd( RESETCMD );
 NFWrAddr( 0 );
 Delay( 2 );
 NFWrCmd( READIDCMD );
 NFWrAddr( 0 );
 while ( ( NFIsBusy() ) && ( loop < 10000 ) )
  loop++;
 if ( loop >= 10000 )
  return 0;
 id = NFRdDat() << 8;
 id |= NFRdDat();
 NFChipDs();

 return id;
}

U32 NFEraseBlock( U32 addr )
{
 U8 stat;

 addr &= NAND_BLOCK_MASK;

 NFChipEn(); 
 NFWrCmd( ERASECMD0 );  
 NFWrAddr( addr );
 NFWrAddr( addr >> 8 );
 if ( NandAddr )
  NFWrAddr( addr >> 16 );
 NFWrCmd( ERASECMD1 );  
 stat = NFWaitBusy();
 NFChipDs();

 //printf( "Erase block 0x%08x %s " , addr , stat ? "fail" : "ok" );

 return stat;
}

//addr = page address
void NFReadPage( U32 addr , U8* buf )
{
 U16 i;
 NFChipEn();
 NFWrCmd( READCMD0 );
 NFWrAddr( 0 );
 NFWrAddr( addr );
 NFWrAddr( addr >> 8 );
 if ( NandAddr )
  NFWrAddr( addr >> 16 );
 // InitEcc();
 NFWaitBusy();  
 for ( i = 0; i < NAND_SECTOR_LEN; i++ )
  buf = NFRdDat();  
 NFChipDs();
}
//addr = page address
U32 NFWritePage( U32 addr , U8* buf )
{
 U32 i = NAND_SECTOR_LEN, stat;
 while (NFIsBusy());
 NFChipEn();
 NFWrCmd( READCMD0 );
 NFWrCmd( PROGCMD0 );
 NFWrAddr( 0 );
 NFWrAddr( addr );
 NFWrAddr( addr >> 8 );
 if ( NandAddr )
  NFWrAddr( addr >> 16 );
 // InitEcc(); 
 while(i--)
  NFWrDat( *buf++ );

 NFWrCmd( PROGCMD1 );
 stat = NFWaitBusy();
 NFChipDs();
 return stat;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

10

帖子

0

粉丝