我在LPC2478芯片上实现NAND FLASH的读写。我现在已经可以将ID读出来,可是读写FLASH内的数据都是错的,不知道是哪里错了,还请高手帮忙解决<br />static U32 NFWaitBusy( void )<br />{<br /> U8 stat;<br /><br /> NFWrCmd(QUERYCMD) ;<br /> do<br /> {<br /> stat = NFRdDat();<br /> }<br /> while ( !( stat & 0x40 ) ) ;<br /><br /> NFWrCmd(READCMD0) ;<br /> return stat & 1 ;<br />}<br /><br />static U32 NFReadID( void )<br />{<br /> U32 id, loop = 0;<br /> NFChipEn();<br /> NFWrCmd( RESETCMD );<br /> NFWrAddr( 0 );<br /> Delay( 2 );<br /> NFWrCmd( READIDCMD );<br /> NFWrAddr( 0 );<br /> while ( ( NFIsBusy() ) && ( loop < 10000 ) )<br /> loop++;<br /> if ( loop >= 10000 )<br /> return 0;<br /> id = NFRdDat() << 8;<br /> id |= NFRdDat();<br /> NFChipDs();<br /><br /> return id;<br />}<br /><br />U32 NFEraseBlock( U32 addr )<br />{<br /> U8 stat;<br /><br /> addr &= NAND_BLOCK_MASK;<br /><br /> NFChipEn(); <br /> NFWrCmd( ERASECMD0 ); <br /> NFWrAddr( addr );<br /> NFWrAddr( addr >> 8 );<br /> if ( NandAddr )<br /> NFWrAddr( addr >> 16 );<br /> NFWrCmd( ERASECMD1 ); <br /> stat = NFWaitBusy();<br /> NFChipDs();<br /><br /> //printf( "Erase block 0x%08x %s
" , addr , stat ? "fail" : "ok" );<br /><br /> return stat;<br />}<br /><br />//addr = page address<br />void NFReadPage( U32 addr , U8* buf )<br />{<br /> U16 i;<br /> NFChipEn();<br /> NFWrCmd( READCMD0 );<br /> NFWrAddr( 0 );<br /> NFWrAddr( addr );<br /> NFWrAddr( addr >> 8 );<br /> if ( NandAddr )<br /> NFWrAddr( addr >> 16 );<br /> // InitEcc();<br /> NFWaitBusy(); <br /> for ( i = 0; i < NAND_SECTOR_LEN; i++ )<br /> buf = NFRdDat(); <br /> NFChipDs();<br />}<br />//addr = page address<br />U32 NFWritePage( U32 addr , U8* buf )<br />{<br /> U32 i = NAND_SECTOR_LEN, stat;<br /> while (NFIsBusy());<br /> NFChipEn();<br /> NFWrCmd( READCMD0 );<br /> NFWrCmd( PROGCMD0 );<br /> NFWrAddr( 0 );<br /> NFWrAddr( addr );<br /> NFWrAddr( addr >> 8 );<br /> if ( NandAddr )<br /> NFWrAddr( addr >> 16 );<br /> // InitEcc(); <br /> while(i--)<br /> NFWrDat( *buf++ );<br /><br /> NFWrCmd( PROGCMD1 );<br /> stat = NFWaitBusy();<br /> NFChipDs();<br /> return stat;<br />}<br /> |
|