程序只是用来实验的,所以一些地方不规范, wait()是延时5个指令周期<br />写页之前已经将所在块擦除,返回信息是0xC0,但读出来的信息是全部为0x01<br /><br /><br />AT91F_NandWriteSector(unsigned int uSectorAddr, char *pOutBuffer)<br />{<br /> unsigned int i;<br /> unsigned char bRet=1;<br /><br /> NAND_ENABLE_CE();<br /> WRITE_NAND_COMMAND(CMD_WRITE_1);<br /> wait();<br /><br /> WRITE_NAND_ADDRESS(0x00);<br /> WRITE_NAND_ADDRESS((uSectorAddr >> 0) & 0xFF);<br /> WRITE_NAND_ADDRESS((uSectorAddr >> 8) & 0xFF);<br /> WRITE_NAND_ADDRESS((uSectorAddr >> 16) & 0xFF);<br /><br /> wait();<br /> for(i=0; i<512; i++)<br /> {<br /> WRITE_NAND(*(pOutBuffer++));<br /> }<br /> wait();<br /><br /> WRITE_NAND_COMMAND(CMD_WRITE_2);<br /> NAND_WAIT_READY();<br /> NAND_WAIT_READY();<br /> WRITE_NAND_COMMAND(CMD_STATUS);<br /> wait();<br /> NAND_WAIT_READY();<br /> NAND_WAIT_READY();<br /> bRet=READ_NAND();<br /><br /> NAND_DISABLE_CE();<br /> return(bRet);<br />}
|