p; NFCONT &= (~(1<<1)) ;
int i;
for(i=10;i>0;i--);
}
void deselect_chip(void){
NFCONT |= (1<<1);
int i;
for(i=10;i>0;i--);
}
void write_command(unsigned char command){
NFCMMD = command;
int i;
for(i=10;i>0;i--);
}
/*
Õâ¿înand flash µÄÒ³´óСÊÇ 2K
Îå¸öµØÖ·ÖÜÆÚ (2¸öÁеØÖ· ºÍ3ºÍÐеØÖ·£¨Ò³µØÖ·£©)
*/
void write_address(unsigned int address){
unsigned int page = address/2048;
unsigned int col = address&2048;
int i;
NFADDR = col & 0xff;
for(i=5;i>0;i--);
NFADDR = (col >>8) & 0x0f;
for(i=5;i>0;i--);
NFADDR = page & 0xff;
for(i=5;i>0;i--);
NFADDR = (page >>8)& 0xff;
for(i=5;i>0;i--);
NFADDR = (page >>16)&0x01;
for(i=5;i>0;i--);
}
unsigned char read_one_data(void){
return NFDATA;
int i;
for(i=10;i>0;i--);
}
void wait_ready(void){
while(!(NFSTAT & 1));
int i;
for(i=10;i>0;i--);
}
static void nand_reset(void){
select_chip();
write_command(0xff);
wait_ready();
deselect_chip();
}
void nand_init(void){
NFCONF =0;
NFCONT = (1<<4) | (1<<1) | (1<<0);
nand_reset();
}
/*
nand flash µÄ¶Á²Ù×÷ÊÇÒÔҳΪµ¥Î»µÄ¡£
des: nand flashÖжÁ³öµÄÊý¾Ý·Åµ½ÄÄ
start_addr£º ´ÓÄÄÀ↑ʼ¶Á
size: ¶Á¶à´ó
*/
void nand_read(unsigned char *des,unsigned int start_addr,unsigned int size){
unsigned int col = start_addr & 2048;
select_chip();
&nb