📄 nand.txt
字号:
;;;251 static U8 NF_CheckId(void)
;;;252 {
00029c e92d4010 STMFD sp!,{r4,lr}
;;;253 int i;
;;;254 U8 id,id1, id2,id3,id4;
;;;255
;;;256 NF_nFCE_L();
0002a0 e51fe08c LDR lr,|L1.540|
0002a4 e59ee004 LDR lr,[lr,#4]
0002a8 e3cee080 BIC lr,lr,#0x80
0002ac e51f4098 LDR r4,|L1.540|
0002b0 e584e004 STR lr,[r4,#4]
;;;257
;;;258 NF_CMD(0x90);
0002b4 e3a0e090 MOV lr,#0x90
0002b8 e584e008 STR lr,[r4,#8]
;;;259 NF_ADDR(0x0);
0002bc e3a0e000 MOV lr,#0
0002c0 e584e00c STR lr,[r4,#0xc]
;;;260
;;;261 for(i=0;i<10;i++); //wait tWB(100ns)////?????
0002c4 e3a01000 MOV r1,#0
|L1.712|
0002c8 e351000a CMP r1,#0xa
0002cc aa000001 BGE |L1.728|
0002d0 e2811001 ADD r1,r1,#1
0002d4 eafffffb B |L1.712|
;;;262
;;;263 // id=NF_RDDATA()<<8; // Maker code(K9S1208V:0xec)
;;;264 // id|=NF_RDDATA(); // Devide code(K9S1208V:0x76)
;;;265
;;;266 id1=NF_RDDATA(); // Maker code(K9S1208V:0xec)
|L1.728|
0002d8 e51fe0c4 LDR lr,|L1.540|
0002dc e59ee010 LDR lr,[lr,#0x10]
0002e0 e20e20ff AND r2,lr,#0xff
;;;267 id2=NF_RDDATA(); // Devide code(K9S1208V:0x76)
0002e4 e51fe0d0 LDR lr,|L1.540|
0002e8 e59ee010 LDR lr,[lr,#0x10]
0002ec e20e00ff AND r0,lr,#0xff
;;;268 id3=NF_RDDATA();
0002f0 e51fe0dc LDR lr,|L1.540|
0002f4 e59ee010 LDR lr,[lr,#0x10]
0002f8 e20e30ff AND r3,lr,#0xff
;;;269 id4=NF_RDDATA();
0002fc e51fe0e8 LDR lr,|L1.540|
000300 e59ee010 LDR lr,[lr,#0x10]
000304 e20ec0ff AND r12,lr,#0xff
;;;270
;;;271 NF_nFCE_H();
000308 e51fe0f4 LDR lr,|L1.540|
00030c e59ee004 LDR lr,[lr,#4]
000310 e38ee080 ORR lr,lr,#0x80
000314 e51f4100 LDR r4,|L1.540|
000318 e584e004 STR lr,[r4,#4]
;;;272 //Uart_Printf("\n%x,%x,%x,%x\n ",id1,id2,id3,id4);
;;;273 return id2;
;;;274 }
00031c e8bd8010 LDMFD sp!,{r4,pc}
ENDP
NF_Init PROC
;;;321 static void NF_Init(void)
;;;322 {
000320 e51f0108 LDR r0,|L1.544|
;;;323 rSROM_BW|=(1<<9);
000324 e5900000 LDR r0,[r0,#0]
000328 e3800f80 ORR r0,r0,#0x200
00032c e51f1114 LDR r1,|L1.544|
000330 e5810000 STR r0,[r1,#0]
;;;324
;;;325 rNFCONF=(0<<22)|(TECH<<16)|(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<3)|(0<<2)|(1<<1)|(1<<0);
000334 e59f00f4 LDR r0,|L1.1072|
000338 e1c11000 BIC r1,r1,r0
00033c e5810000 STR r0,[r1,#0]
;;;326 // AdvFlash(R) [22] Advanced NAND, 0:256/512, 1:1024/2048
;;;327 // TCEH [21:16] nCE High hold time
;;;328 // TACLS [14:12] CLE&ALE duration = HCLK*TACLS.
;;;329 // TWRPH0 [10:8] TWRPH0 duration = HCLK*(TWRPH0+1)
;;;330 // TWRPH1 [6:4] TWRPH1 duration = HCLK*(TWRPH1+1)
;;;331 // HW_nCE [3] H/W nCE control
;;;332 // BusWidth(H/W set) [2] NAND bus width. 0:8-bit, 1:16-bit.
;;;333 // PageSize(H/W set) [1] NAND memory page size
;;;334 // when [22]==0, 0:256, 1:512 bytes/page.
;;;335 // when [22]==1, 0:1024, 1:2048 bytes/page.
;;;336 // AddrCycle(H/W set) [0] NAND flash addr size
;;;337 // when [22]==0, 0:3-addr, 1:4-addr.
;;;338 // when [22]==1, 0:4-addr, 1:5-addr.
;;;339 // Advance off,Not support nCE ctl, 8bit, 512B, 4step
;;;340 rNFCONT=(0<<16)|(0<<15)|(0<<14)|(0<<13)|(0<<12)|(0<<11)|(1<<10)|(1<<9)|(0<<8)|(1<<7)|(0<<4)|(0<<3)|(1<<2)|(0<<0);
000340 e51f0120 LDR r0,|L1.552|
000344 e1c11000 BIC r1,r1,r0
000348 e5810004 STR r0,[r1,#4]
;;;341 // LdStrAddr illegalAccINT LoadINT StoreINT RnBINT TransMode SpareECCLock MainECCLock
;;;342 // initECC Reg_nCE PageSie Lock-tight Lock Software mode
;;;343 // NF_Reset();
;;;344 }
00034c e12fff1e BX lr
ENDP
Test_K9D1G08 PROC
;;;174 void Test_K9D1G08(void)
;;;175 {
000350 e92d4038 STMFD sp!,{r3-r5,lr}
;;;176 int i,id;
;;;177
;;;178 Uart_Printf("====== K9D1G08 Test ======\n");
000354 e28f00d8 ADR r0,|L1.1076|
000358 ebfffffe BL _printf
;;;179
;;;180 while(1)
00035c e1a00000 NOP
|L1.864|
000360 e1a00000 NOP
;;;181 {
;;;182 i=0;
000364 e3a04000 MOV r4,#0
;;;183 //Uart_Printf("\n\n");
;;;184 NF_Init();
000368 ebfffffe BL NF_Init
;;;185 id=NF_CheckId();
00036c ebfffffe BL NF_CheckId
000370 e1a05000 MOV r5,r0
;;;186 if(id==0x79)
000374 e3550079 CMP r5,#0x79
000378 1a000003 BNE |L1.908|
;;;187 Uart_Printf("ID=%x(0x79)\n",id);
00037c e1a01005 MOV r1,r5
000380 e28f00c8 ADR r0,|L1.1104|
000384 ebfffffe BL _printf
000388 ea000003 B |L1.924|
;;;188 else {
;;;189 Uart_Printf("Selection fail : ID=%x\n",id);
|L1.908|
00038c e1a01005 MOV r1,r5
000390 e24f0f50 ADR r0,|L1.600|
000394 ebfffffe BL _printf
;;;190 return;
;;;191 }
;;;192 while(1)
;;;193 { //display menu
;;;194 Uart_Printf("%2d:%s",i,func_k9d1g08_test[i][1]);
;;;195 i++;
;;;196 if((int)(func_k9d1g08_test[i][0])==0)
;;;197 {
;;;198 Uart_Printf("\n");
;;;199 break;
;;;200 }
;;;201 if((i%4)==0)
;;;202 Uart_Printf("\n");
;;;203 }
;;;204
;;;205 Uart_Printf("\nPress Enter key to exit : ");
;;;206 i = Uart_GetIntNum();
;;;207 if(i==-1) break; // return.
;;;208 if(i>=0 && (i<((sizeof(func_k9d1g08_test)-1)/8)) ) // select and execute...
;;;209 ( (void (*)(void)) (func_k9d1g08_test[i][0]) )();
;;;210 }
;;;211 }
|L1.920|
000398 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.924|
00039c e1a00000 NOP ;192
|L1.928|
0003a0 e1a00000 NOP ;192
0003a4 e59f00b4 LDR r0,|L1.1120| ;194
0003a8 e0800184 ADD r0,r0,r4,LSL #3 ;194
0003ac e1a01004 MOV r1,r4 ;194
0003b0 e5902004 LDR r2,[r0,#4] ;194
0003b4 e24f0f52 ADR r0,|L1.628| ;194
0003b8 ebfffffe BL _printf ;194
0003bc e2844001 ADD r4,r4,#1 ;195
0003c0 e59f0098 LDR r0,|L1.1120| ;196
0003c4 e7900184 LDR r0,[r0,r4,LSL #3] ;196
0003c8 e3500000 CMP r0,#0 ;196
0003cc 1a000002 BNE |L1.988| ;196
0003d0 e24f0f57 ADR r0,|L1.636| ;198
0003d4 ebfffffe BL _printf ;198
0003d8 ea000004 B |L1.1008| ;199
|L1.988|
0003dc e3140003 TST r4,#3 ;201
0003e0 1a000001 BNE |L1.1004| ;201
0003e4 e24f0f5c ADR r0,|L1.636| ;202
0003e8 ebfffffe BL _printf ;202
|L1.1004|
0003ec eaffffeb B |L1.928| ;203
|L1.1008|
0003f0 e24f0f5e ADR r0,|L1.640| ;205
0003f4 ebfffffe BL _printf ;205
0003f8 ebfffffe BL Uart_GetIntNum ;206
0003fc e1a04000 MOV r4,r0 ;206
000400 e3740001 CMN r4,#1 ;207
000404 1a000000 BNE |L1.1036| ;207
000408 ea000007 B |L1.1068| ;207
|L1.1036|
00040c e3540000 CMP r4,#0 ;208
000410 ba000004 BLT |L1.1064| ;208
000414 e3540006 CMP r4,#6 ;208
000418 2a000002 BCS |L1.1064| ;208
00041c e59f103c LDR r1,|L1.1120| ;209
000420 e7910184 LDR r0,[r1,r4,LSL #3] ;209
000424 e12fff30 BLX r0 ;209
|L1.1064|
000428 eaffffcc B |L1.864| ;210
|L1.1068|
00042c eaffffd9 B |L1.920|
|L1.1072|
000430 003f7773 DCD 0x003f7773
|L1.1076|
000434 3d3d3d3d DCB "===="
000438 4b203d3d DCB "== K"
00043c 47314439 DCB "9D1G"
000440 54203830 DCB "08 T"
000444 20747365 DCB "est "
000448 3d3d3d3d DCB "===="
00044c 000a3d3d DCB "==\n\0"
|L1.1104|
000450 253d4449 DCB "ID=%"
000454 78302878 DCB "x(0x"
000458 0a293937 DCB "79)\n"
00045c 00000000 DCB "\0\0\0\0"
|L1.1120|
000460 00000000 DCD func_k9d1g08_test
ENDP
Test_K9S1208 PROC
;;;134 void Test_K9S1208(void)
;;;135 {
000464 e92d4038 STMFD sp!,{r3-r5,lr}
;;;136 int i,id;
;;;137
;;;138 Uart_Printf("====== K9S1208 Test ======\n");
000468 e28f00d4 ADR r0,|L1.1348|
00046c ebfffffe BL _printf
;;;139
;;;140 while(1)
000470 e1a00000 NOP
|L1.1140|
000474 e1a00000 NOP
;;;141 {
;;;142 i=0;
000478 e3a04000 MOV r4,#0
;;;143 //Uart_Printf("\n\n");
;;;144 NF_Init();
00047c ebfffffe BL NF_Init
;;;145 id=NF_CheckId();
000480 ebfffffe BL NF_CheckId
000484 e1a05000 MOV r5,r0
;;;146 if(id ==0x76)
000488 e3550076 CMP r5,#0x76
00048c 1a000003 BNE |L1.1184|
;;;147 Uart_Printf("ID=%x(0x76)\n",id);
000490 e1a01005 MOV r1,r5
000494 e28f00c4 ADR r0,|L1.1376|
000498 ebfffffe BL _printf
00049c ea000003 B |L1.1200|
;;;148 else {
;;;149 Uart_Printf("Selection fail : ID=%x\n",id);
|L1.1184|
0004a0 e1a01005 MOV r1,r5
0004a4 e24f0f95 ADR r0,|L1.600|
0004a8 ebfffffe BL _printf
;;;150 return;
;;;151 }
;;;152
;;;153 while(1)
;;;154 { //display menu
;;;155 Uart_Printf("%2d:%s",i,func_k9s1208_test[i][1]);
;;;156 i++;
;;;157 if((int)(func_k9s1208_test[i][0])==0)
;;;158 {
;;;159 Uart_Printf("\n");
;;;160 break;
;;;161 }
;;;162 if((i%4)==0)
;;;163 Uart_Printf("\n");
;;;164 }
;;;165
;;;166 Uart_Printf("\nPress Enter key to exit : ");
;;;167 i = Uart_GetIntNum();
;;;168 if(i==-1) break; // return.
;;;169 if(i>=0 && (i<((sizeof(func_k9s1208_test)-1)/8)) ) // select and execute...
;;;170 ( (void (*)(void)) (func_k9s1208_test[i][0]) )();
;;;171 }
;;;172 }
|L1.1196|
0004ac e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1200|
0004b0 e1a00000 NOP ;153
|L1.1204|
0004b4 e1a00000 NOP ;153
0004b8 e59f00b0 LDR r0,|L1.1392| ;155
0004bc e0800184 ADD r0,r0,r4,LSL #3 ;155
0004c0 e1a01004 MOV r1,r4 ;155
0004c4 e5902004 LDR r2,[r0,#4] ;155
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -