📄 nand.txt
字号:
;;;204 }
000258 e1a0f00e MOV pc,lr
ENDP
NF8_CheckId PROC
;;;951 static U16 NF8_CheckId(void)
;;;952 {
00025c e92d4038 STMFD sp!,{r3-r5,lr}
;;;953 int i;
;;;954 U16 id, id4th;
;;;955
;;;956 NF_nFCE_L();
000260 e3a0044e MOV r0,#0x4e000000
000264 e5900004 LDR r0,[r0,#4]
000268 e3c00002 BIC r0,r0,#2
00026c e3a0144e MOV r1,#0x4e000000
000270 e5810004 STR r0,[r1,#4]
;;;957 NF_CMD(0x90);
000274 e3a00090 MOV r0,#0x90
000278 e3a0144e MOV r1,#0x4e000000
00027c e5810008 STR r0,[r1,#8]
;;;958 NF_ADDR(0x0);
000280 e3a00000 MOV r0,#0
000284 e3a0144e MOV r1,#0x4e000000
000288 e581000c STR r0,[r1,#0xc]
;;;959 for (i=0; i<10; i++);
00028c e3a05000 MOV r5,#0
|L1.656|
000290 e355000a CMP r5,#0xa
000294 aa000001 BGE |L1.672|
000298 e2855001 ADD r5,r5,#1
00029c eafffffb B |L1.656|
;;;960 Uart_Printf("NFSTAT: 0x%x\n", rNFSTAT);
|L1.672|
0002a0 e3a0044e MOV r0,#0x4e000000
0002a4 e5900020 LDR r0,[r0,#0x20]
0002a8 e1a01000 MOV r1,r0
0002ac e28f0034 ADR r0,|L1.744|
0002b0 ebfffffe BL Uart_Printf
;;;961 id=NF_RDDATA8()<<8; // Maker code 0xec
0002b4 e3a0044e MOV r0,#0x4e000000
0002b8 e5d00010 LDRB r0,[r0,#0x10]
0002bc e1a04400 MOV r4,r0,LSL #8
;;;962 id|=NF_RDDATA8(); // Devide code(K9S1208V:0x76), (K9K2G16U0M:0xca)
0002c0 e3a0044e MOV r0,#0x4e000000
0002c4 e5d00010 LDRB r0,[r0,#0x10]
0002c8 e1804004 ORR r4,r0,r4
;;;963
;;;964 NF_nFCE_H();
0002cc e3a0044e MOV r0,#0x4e000000
0002d0 e5900004 LDR r0,[r0,#4]
0002d4 e3800002 ORR r0,r0,#2
0002d8 e3a0144e MOV r1,#0x4e000000
0002dc e5810004 STR r0,[r1,#4]
;;;965 return id;
0002e0 e1a00004 MOV r0,r4
;;;966 }
0002e4 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.744|
0002e8 5453464e DCB "NFST"
0002ec 203a5441 DCB "AT: "
0002f0 78257830 DCB "0x%x"
0002f4 0000000a DCB "\n\0\0\0"
ENDP
NF8_Print_Id PROC
;;;206 void NF8_Print_Id(void)
;;;207 {
0002f8 e92d4070 STMFD sp!,{r4-r6,lr}
;;;208 U16 id;
;;;209 U8 maker, device;
;;;210
;;;211 // NF8_Init();
;;;212 id = NF8_CheckId();
0002fc ebfffffe BL NF8_CheckId
000300 e1a04000 MOV r4,r0
;;;213
;;;214 device = (U8)id;
000304 e20460ff AND r6,r4,#0xff
;;;215 maker = (U8)(id>>8);
000308 e1a05424 MOV r5,r4,LSR #8
;;;216
;;;217 Uart_Printf("Maker:%x, Device:%x\n", maker, device);
00030c e1a02006 MOV r2,r6
000310 e1a01005 MOV r1,r5
000314 e28f0004 ADR r0,|L1.800|
000318 ebfffffe BL Uart_Printf
;;;218 }
00031c e8bd8070 LDMFD sp!,{r4-r6,pc}
|L1.800|
000320 656b614d DCB "Make"
000324 78253a72 DCB "r:%x"
000328 6544202c DCB ", De"
00032c 65636976 DCB "vice"
000330 0a78253a DCB ":%x\n"
000334 00000000 DCB "\0\0\0\0"
ENDP
NFCon_Int PROC
;;;626 void __irq NFCon_Int(void)
;;;627 {
000338 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;628 NFConDone=1;
00033c e3a00001 MOV r0,#1
000340 e59f1054 LDR r1,|L1.924|
000344 e5810000 STR r0,[r1,#0] ; NFConDone
;;;629 rINTMSK|=BIT_NFCON;
000348 e3a0044a MOV r0,#0x4a000000
00034c e5900008 LDR r0,[r0,#8]
000350 e3800740 ORR r0,r0,#0x1000000
000354 e3a0144a MOV r1,#0x4a000000
000358 e5810008 STR r0,[r1,#8]
;;;630 ClearPending(BIT_NFCON);
00035c e3a00740 MOV r0,#0x1000000
000360 e3a0144a MOV r1,#0x4a000000
000364 e5810000 STR r0,[r1,#0]
000368 e3a00740 MOV r0,#0x1000000
00036c e3a0144a MOV r1,#0x4a000000
000370 e5810010 STR r0,[r1,#0x10]
000374 e3a0044a MOV r0,#0x4a000000
000378 e5900010 LDR r0,[r0,#0x10]
;;;631 if(rNFSTAT&0x8) Uart_Printf("Illegal Access is detected!!!\n");
00037c e3a0044e MOV r0,#0x4e000000
000380 e5900020 LDR r0,[r0,#0x20]
000384 e3100008 TST r0,#8
000388 0a000001 BEQ |L1.916|
00038c e28f000c ADR r0,|L1.928|
000390 ebfffffe BL Uart_Printf
;;;632 // else Uart_Printf("RnB is Detected!!!\n");
;;;633 }
|L1.916|
000394 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000398 e25ef004 SUBS pc,lr,#4
|L1.924|
00039c 0000001c DCD ||.bss$2|| + 28
|L1.928|
0003a0 656c6c49 DCB "Ille"
0003a4 206c6167 DCB "gal "
0003a8 65636341 DCB "Acce"
0003ac 69207373 DCB "ss i"
0003b0 65642073 DCB "s de"
0003b4 74636574 DCB "tect"
0003b8 21216465 DCB "ed!!"
0003bc 00000a21 DCB "!\n\0\0"
ENDP
NF8_EraseBlock PROC
;;;575 static int NF8_EraseBlock(U32 block)
;;;576 {
0003c0 e92d4038 STMFD sp!,{r3-r5,lr}
0003c4 e1a05000 MOV r5,r0
;;;577 U32 blockPage=(block<<5);
0003c8 e1a04285 MOV r4,r5,LSL #5
;;;578 int i;
;;;579
;;;580 NFConDone=0;
0003cc e3a00000 MOV r0,#0
0003d0 e51f103c LDR r1,|L1.924|
0003d4 e5810000 STR r0,[r1,#0] ; NFConDone
;;;581 rNFCONT|=(1<<9);
0003d8 e3a0044e MOV r0,#0x4e000000
0003dc e5900004 LDR r0,[r0,#4]
0003e0 e3800f80 ORR r0,r0,#0x200
0003e4 e3a0144e MOV r1,#0x4e000000
0003e8 e5810004 STR r0,[r1,#4]
;;;582 rNFCONT|=(1<<10);
0003ec e3a0044e MOV r0,#0x4e000000
0003f0 e5900004 LDR r0,[r0,#4]
0003f4 e3800e40 ORR r0,r0,#0x400
0003f8 e3a0144e MOV r1,#0x4e000000
0003fc e5810004 STR r0,[r1,#4]
;;;583 pISR_NFCON= (unsigned)NFCon_Int;
000400 e59f013c LDR r0,|L1.1348|
000404 e59f113c LDR r1,|L1.1352|
000408 e5810f80 STR r0,[r1,#0xf80]
;;;584 rSRCPND=BIT_NFCON;
00040c e3a00740 MOV r0,#0x1000000
000410 e3a0144a MOV r1,#0x4a000000
000414 e5810000 STR r0,[r1,#0]
;;;585 rINTMSK=~(BIT_NFCON);
000418 e3e00740 MVN r0,#0x1000000
00041c e3a0144a MOV r1,#0x4a000000
000420 e5810008 STR r0,[r1,#8]
;;;586
;;;587 #if BAD_CHECK
;;;588 if(NF8_IsBadBlock(block))
;;;589 return FAIL;
;;;590 #endif
;;;591
;;;592 NF_nFCE_L();
000424 e3a0044e MOV r0,#0x4e000000
000428 e5900004 LDR r0,[r0,#4]
00042c e3c00002 BIC r0,r0,#2
000430 e3a0144e MOV r1,#0x4e000000
000434 e5810004 STR r0,[r1,#4]
;;;593
;;;594 NF_CMD(0x60); // Erase one block 1st command, Block Addr:A9-A25
000438 e3a00060 MOV r0,#0x60
00043c e3a0144e MOV r1,#0x4e000000
000440 e5810008 STR r0,[r1,#8]
;;;595 // Address 3-cycle
;;;596 NF_ADDR(blockPage&0xff); // Page number=0
000444 e20400ff AND r0,r4,#0xff
000448 e3a0144e MOV r1,#0x4e000000
00044c e581000c STR r0,[r1,#0xc]
;;;597 NF_ADDR((blockPage>>8)&0xff);
000450 e1a00804 MOV r0,r4,LSL #16
000454 e1a00c20 MOV r0,r0,LSR #24
000458 e3a0144e MOV r1,#0x4e000000
00045c e581000c STR r0,[r1,#0xc]
;;;598 NF_ADDR((blockPage>>16)&0xff);
000460 e1a00404 MOV r0,r4,LSL #8
000464 e1a00c20 MOV r0,r0,LSR #24
000468 e3a0144e MOV r1,#0x4e000000
00046c e581000c STR r0,[r1,#0xc]
;;;599
;;;600
;;;601 NF_CLEAR_RB();
000470 e3a0044e MOV r0,#0x4e000000
000474 e5900020 LDR r0,[r0,#0x20]
000478 e3800004 ORR r0,r0,#4
00047c e3a0144e MOV r1,#0x4e000000
000480 e5810020 STR r0,[r1,#0x20]
;;;602 NF_CMD(0xd0); // Erase one blcok 2nd command
000484 e3a000d0 MOV r0,#0xd0
000488 e3a0144e MOV r1,#0x4e000000
00048c e5810008 STR r0,[r1,#8]
;;;603 // NF_DETECT_RB();
;;;604 while(NFConDone==0);
000490 e1a00000 NOP
|L1.1172|
000494 e51f0100 LDR r0,|L1.924|
000498 e5900000 LDR r0,[r0,#0] ; NFConDone
00049c e3500000 CMP r0,#0
0004a0 0afffffb BEQ |L1.1172|
;;;605 rNFCONT&=~(1<<9);
0004a4 e3a0044e MOV r0,#0x4e000000
0004a8 e5900004 LDR r0,[r0,#4]
0004ac e3c00f80 BIC r0,r0,#0x200
0004b0 e3a0144e MOV r1,#0x4e000000
0004b4 e5810004 STR r0,[r1,#4]
;;;606 rNFCONT&=~(1<<10); // Disable Illegal Access Interrupt
0004b8 e3a0044e MOV r0,#0x4e000000
0004bc e5900004 LDR r0,[r0,#4]
0004c0 e3c00e40 BIC r0,r0,#0x400
0004c4 e3a0144e MOV r1,#0x4e000000
0004c8 e5810004 STR r0,[r1,#4]
;;;607 if(rNFSTAT&0x8) return FAIL;
0004cc e3a0044e MOV r0,#0x4e000000
0004d0 e5900020 LDR r0,[r0,#0x20]
0004d4 e3100008 TST r0,#8
0004d8 0a000001 BEQ |L1.1252|
0004dc e3a00000 MOV r0,#0
;;;608
;;;609 NF_CMD(0x70); // Read status command
;;;610
;;;611 if (NF_RDDATA()&0x1) // Erase error
;;;612 {
;;;613 NF_nFCE_H();
;;;614 Uart_Printf("[ERASE_ERROR:block#=%d]\n",block);
;;;615 // NF8_MarkBadBlock(block);
;;;616 return FAIL;
;;;617 }
;;;618 else
;;;619 {
;;;620 NF_nFCE_H();
;;;621 return OK;
;;;622 }
;;;623 }
|L1.1248|
0004e0 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1252|
0004e4 e3a00070 MOV r0,#0x70 ;609
0004e8 e3a0144e MOV r1,#0x4e000000 ;609
0004ec e5810008 STR r0,[r1,#8] ;609
0004f0 e3a0044e MOV r0,#0x4e000000 ;611
0004f4 e5900010 LDR r0,[r0,#0x10] ;611
0004f8 e3100001 TST r0,#1 ;611
0004fc 0a000009 BEQ |L1.1320| ;611
000500 e3a0044e MOV r0,#0x4e000000 ;613
000504 e5900004 LDR r0,[r0,#4] ;613
000508 e3800002 ORR r0,r0,#2 ;613
00050c e3a0144e MOV r1,#0x4e000000 ;613
000510 e5810004 STR r0,[r1,#4] ;613
000514 e1a01005 MOV r1,r5 ;614
000518 e28f002c ADR r0,|L1.1356| ;614
00051c ebfffffe BL Uart_Printf ;614
000520 e3a00000 MOV r0,#0 ;616
000524 eaffffed B |L1.1248| ;616
|L1.1320|
000528 e3a0044e MOV r0,#0x4e000000 ;620
00052c e5900004 LDR r0,[r0,#4] ;620
000530 e3800002 ORR r0,r0,#2 ;620
000534 e3a0144e MOV r1,#0x4e000000 ;620
000538 e5810004 STR r0,[r1,#4] ;620
00053c e3a00001 MOV r0,#1 ;621
000540 eaffffe6 B |L1.1248| ;621
|L1.1348|
000544 00000000 DCD NFCon_Int ;621
|L1.1352|
000548 31fff000 DCD 0x31fff000 ;621
|L1.1356|
00054c 4152455b DCB "[ERA" ;621
000550 455f4553 DCB "SE_E" ;621
000554 524f5252 DCB "RROR" ;621
000558 6f6c623a DCB ":blo" ;621
00055c 3d236b63 DCB "ck#=" ;621
000560 0a5d6425 DCB "%d]\n" ;621
000564 00000000 DCB "\0\0\0\0" ;621
ENDP
Test_NF8_Block_Erase PROC
;;;221 void Test_NF8_Block_Erase(void)
;;;222 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -