?? nand.c
字號(hào):
#include "uart.h"
#include "2410addr.h"
#include "nand.h"
#define chipen() (rNFCON&=~(1<<11))
#define chipdis() (rNFCON|=(1<<11))
#define block_size (512)
void wait()
{int k;
for(k=0;k<10;k++);
while(!(rNFSTAT&0x1));
}
int nand_read(unsigned int addr,unsigned char *buf,int len)
{int i,j,k;
unsigned char * wrbuf;
wrbuf=buf;
chipen();
for(k=0;k<10;k++);
uart_send("\n\rloading:");
for(i=addr;i<(addr+len);)
{uart_send(".");
rNFCMD=0x00;
rNFADD=i&0xff;
rNFADD=(i>>9)&0xff;
rNFADD=(i>>17)&0xff;
rNFADD=(i>>25)&0xff;
wait();
for(j=0;j<block_size;j++,i++)
{
*wrbuf=(rNFDATA&0xff);
wrbuf++;
}
}
chipdis();
return 0;
}
void nand_init()
{chipen();
rNFCMD=0xff;
wait();
chipdis();
}
int nand_earse(unsigned int addr)
{
chipen();
uart_send("Now Earse........\n\r");
rNFCMD=0x60;
rNFADD=(addr>>9)&0xff;
rNFADD=(addr>>17)&0xff;
rNFADD=(addr>>25)&0xff;
rNFCMD=0xD0;
wait();
rNFCMD=0x70;
if(rNFDATA&0xf)
{chipdis();
return 0;
}
chipdis();
return 1;
}
int page_write(unsigned int addr , unsigned char * buf)
{int i;
unsigned char *wrbuf;
wrbuf=buf;
chipen();
rNFCMD=0x0;
rNFCMD=0x80;
rNFADD=addr&0xff;
rNFADD=(addr>>9)&0xff;
rNFADD=(addr>>17)&0xff;
rNFADD=(addr>>25)&0xff;
for(i=0;i<block_size;i++)
{
rNFDATA=(*(wrbuf++)&0xff);
}
rNFCMD=0x10;
wait();
rNFCMD=0x70;
if(rNFDATA&0xf)
{chipdis();
return 0;
}
chipdis();
return 1;
}
int nand_write(unsigned int addr,unsigned char * buf,int len)
{unsigned int i,j;
unsigned char * wrbuf;
int wrlen;
i=addr;
wrbuf=buf;
wrlen=len;
uart_send("NOW PROGRAMMING.......\n\r");
while(i<(addr+len))
{if(nand_earse(i)==0)
uart_send("earse eorrer");
j=0;
while((j<32)&&(i<(addr+len)))
{uart_send(".");
if(page_write(i,wrbuf)==0)
uart_send("write eorror\n\r");
i+=512;
wrbuf+=512;
}
i+=512;
wrbuf+=512;
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -