Go to the source code of this file.
Functions | |
void | wait_idle (void) |
void | PrintChar (char msg) |
int | nand_block_checkbad_ll (unsigned long addr) |
int | nand_read_ll (unsigned char *buf, unsigned long start_addr, int size) |
int nand_block_checkbad_ll | ( | unsigned long | addr | ) |
Definition at line 119 of file nand_read.c.
00120 { 00121 int i; 00122 //char data; 00123 00124 /* READOOB */ 00125 NAND_CLEAR_RB; 00126 #ifndef LARGEPAGE_FLASH 00127 NFCMD = NAND_CMD_READOOB; 00128 #else 00129 NFCMD = NAND_CMD_READ0;../../include/ 00130 #endif 00131 00132 /* Write Address */ 00133 #ifndef LARGEPAGE_FLASH 00134 addr &= ~0x3fff; 00135 NFADDR = 5; 00136 NFADDR = (addr >> 9) & 0xff; 00137 NFADDR = (addr >> 17) & 0xff; 00138 NFADDR = (addr >> 25) & 0xff; 00139 #else 00140 addr &= ~0x1ffff; 00141 00142 NFADDR = 0; 00143 NFADDR = 0x08; 00144 NFADDR = (addr >> 11) & 0xff; 00145 NFADDR = (addr >> 19) & 0xff; 00146 NFADDR = (addr >> 27) & 0x3; 00147 00148 NFCMD = NAND_CMD_READSTART; 00149 #endif 00150 00151 NAND_DETECT_RB; 00152 for (i=0;i<1000;i++); 00153 00154 if ((NFDATA & 0xff)!=0xff) { 00155 return 1; 00156 } 00157 return 0; 00158 }
int nand_read_ll | ( | unsigned char * | buf, | |
unsigned long | start_addr, | |||
int | size | |||
) |
Definition at line 66 of file nand_read.c.
00067 { 00068 int j, n; 00069 unsigned long addr,baddr; 00070 00071 //PrintChar('r'); 00072 00073 if ((start_addr & NAND_BLOCK_MASK)/* || (size & NAND_BLOCK_MASK)*/) { 00074 return -1; /* invalid alignment */ 00075 } 00076 00077 NAND_CHIP_ENABLE; 00078 00079 baddr=start_addr; 00080 while(size>0) { 00081 if (!nand_block_checkbad_ll(baddr)) { 00082 for (j=0;j<size;j+=NAND_SECTOR_SIZE) { 00083 /* READ0 */ 00084 NAND_CLEAR_RB; 00085 NFCMD = NAND_CMD_READ0; 00086 00087 addr = baddr+j; 00088 /* Write Address */ 00089 #ifndef LARGEPAGE_FLASH 00090 NFADDR = addr & 0xff; 00091 NFADDR = (addr >> 9) & 0xff; 00092 NFADDR = (addr >> 17) & 0xff; 00093 NFADDR = (addr >> 25) & 0xff; 00094 #else 00095 NFADDR = addr & 0xff; 00096 NFADDR = (addr >> 8) & 0x07; 00097 NFADDR = (addr >> 11) & 0xff; 00098 NFADDR = (addr >> 19) & 0xff; 00099 NFADDR = (addr >> 27) & 0x3; 00100 00101 NFCMD = NAND_CMD_READSTART; 00102 #endif 00103 NAND_DETECT_RB; 00104 00105 for(n=0; n<NAND_SECTOR_SIZE; n++) { 00106 *buf = (NFDATA & 0xff); 00107 buf++; 00108 } 00109 } 00110 size -= j; 00111 } //else PrintChar('e'); 00112 baddr += (BYTESPERSPAGE*PAGESPERSBLOCK); 00113 } 00114 NAND_CHIP_DISABLE; 00115 return 0; 00116 }
void PrintChar | ( | char | msg | ) |
void wait_idle | ( | void | ) | [inline] |