改成总线方式,读ID,状态都正常,现在测试读写页面程序,遇到一些问题,请大家帮忙看看,谢谢<br /><br />unsigned char nandFlashPageRead( unsigned int NandAddr, unsigned char *Buffer )<br />{<br /><br /> unsigned char NandStatus;<br /> unsigned short i;<br /> // for x8 NAND flash device, one page = 512 + 16 Bytes<br /> // uint32 NandAddr = nPage * 512 + nBlock * ( 512 * 32 );<br /> uint32 StartColumn = 528 - (NandAddr & 0x1ff);<br /><br /> FIO2CLR1 |= (0x01 << 0);<br /> OS_ENTER_CRITICAL();<br /> NF_nCS_CLR;<br /> if ( ( NandAddr >> 8 ) & 0x1 )<br /> {<br /> NFWrCmd( NAND_CMD_AREA_B ); //begin from "B" half page<br /> }<br /> else<br /> {<br /> NFWrCmd( NAND_CMD_AREA_A ); //begin from "A" half page<br /> }<br /><br /> NFWrAddr( ( uint16 ) ( NandAddr & 0xff ) ); //column address<br /> NFWrAddr( ( uint16 ) ( ( NandAddr >> 9 ) & 0xff) ); //low block address<br /> NFWrAddr( ( uint16 ) ( ( NandAddr >> 17 ) & 0xff) ); //high block address<br /> //read NAND status register<br /> NFWrCmd( NAND_CMD_RD_STATUS );<br /><br /> //wait until write operation success<br /> do<br /> {<br /> NandStatus = NFRdDat();<br /> }<br /> while (!(NandStatus & 0x40));<br /> NFWrCmd( NAND_CMD_RD_DONE );<br /><br /> for ( i = 0; i < StartColumn; i++ )<br /> Buffer = NFRdDat();<br /><br /> NF_nCS_SET;<br /> OS_EXIT_CRITICAL();<br /> FIO2SET1 |= (0x01 << 0);<br /> return NandStatus;<br />}<br /><br /><br />unsigned char nandFlashPageWrite( unsigned int NandAddr , unsigned char *Buffer )<br />{<br /> unsigned char NandStatus = 0x0;<br /> unsigned int i;<br /> // for x8 NAND flash device, one page = 512 + 16 Bytes<br /> // uint32 NandAddr = nPage * 512 + nBlock * ( 512 * 32 );<br /><br /> unsigned short StartColumn = 528 - (NandAddr & 0x1ff);<br /><br /> OS_ENTER_CRITICAL();<br /> //NF_nCS_CLR;<br /> if ( ( NandAddr >> 8 ) & 0x1 )<br /> {<br /> NFWrCmd( NAND_CMD_AREA_B ); //begin from "B" half page<br /> }<br /> else<br /> {<br /> NFWrCmd( NAND_CMD_AREA_A ); //begin from "A" half page<br /> }<br /> NFWrCmd( NAND_CMD_PAGEPROG_I ); //program command 1st cycle with 80h<br /> NFWrAddr( ( uint16 ) ( NandAddr & 0xff ) ); //column address<br /> NFWrAddr( ( uint16 ) ( ( NandAddr >> 9 ) & 0xff) ); //low block address<br /> NFWrAddr( ( uint16 ) ( ( NandAddr >> 17 ) & 0xff) ); //high block address<br /><br /> for ( i = 0; i < StartColumn; i++ )<br /> NFWrDat( Buffer );<br /><br /> NFWrCmd( NAND_CMD_PAGEPROG_II );//confirm program with 10h<br /> //read NAND status register<br /> NFWrCmd( NAND_CMD_RD_STATUS );<br /> //wait until write operation success<br /> do<br /> {<br /> NandStatus = NFRdDat();<br /> }<br /> while (!(NandStatus & 0x40));<br /> NFWrCmd( NAND_CMD_RD_DONE );<br /> // NF_nCS_SET;<br /> OS_EXIT_CRITICAL();<br /><br /> return NandStatus;<br /><br />}<br /><br />void main()<br />{<br /> ....<br /> ....<br /> for ( i=0; i<512; i++ )<br /> inbuff = 0x59;<br /> NFlashState =nandFlashPageWrite(0,inbuff);<br /><br /> for (i =0; i<512; i++)<br /> { <br /> NFlashState = nandFlashPageRead(0, outbuff);<br /> sprintf(buf," %X ",outbuff);<br /> UART0WriteString((uint8 *) buf);<br /> }<br /> ....<br />}<br /><br />打印出来的结果如下:<br />Start testing NandFlash2....<br /><br />ID=EC73<br />lockEraseState=C0<br /> 0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF <br /><br /><br />现在我判断问题出在写页面出错,大家帮我看看,到底是什么原因出现这个问题的?如何解决,谢谢 |
|