📄 k9f1g08.txt
字号:
;;;585 if(NF1G08_IsBadBlock(block))
;;;586 return FAIL;
;;;587 #endif
;;;588
;;;589 NF_nFCE_L();
000288 e3a0044e MOV r0,#0x4e000000
00028c e5900004 LDR r0,[r0,#4]
000290 e3c00002 BIC r0,r0,#2
000294 e3a0144e MOV r1,#0x4e000000
000298 e5810004 STR r0,[r1,#4]
;;;590
;;;591 NF_CMD(0x60); // Erase one block 1st command, Block Addr:A9-A25
00029c e3a00060 MOV r0,#0x60
0002a0 e3a0144e MOV r1,#0x4e000000
0002a4 e5810008 STR r0,[r1,#8]
;;;592 // Address 2-cycle
;;;593 NF_ADDR(blockPage&0xff); // Page number=0
0002a8 e20500ff AND r0,r5,#0xff
0002ac e3a0144e MOV r1,#0x4e000000
0002b0 e581000c STR r0,[r1,#0xc]
;;;594 NF_ADDR((blockPage>>8)&0xff);
0002b4 e1a00805 MOV r0,r5,LSL #16
0002b8 e1a00c20 MOV r0,r0,LSR #24
0002bc e3a0144e MOV r1,#0x4e000000
0002c0 e581000c STR r0,[r1,#0xc]
;;;595
;;;596
;;;597
;;;598 NF_CLEAR_RB();
0002c4 e3a0044e MOV r0,#0x4e000000
0002c8 e5900020 LDR r0,[r0,#0x20]
0002cc e3800004 ORR r0,r0,#4
0002d0 e3a0144e MOV r1,#0x4e000000
0002d4 e5810020 STR r0,[r1,#0x20]
;;;599 NF_CMD(0xd0); // Erase one blcok 2nd command
0002d8 e3a000d0 MOV r0,#0xd0
0002dc e3a0144e MOV r1,#0x4e000000
0002e0 e5810008 STR r0,[r1,#8]
;;;600 // NF_DETECT_RB();
;;;601 while(NFConDone_1G08==0);
0002e4 e1a00000 NOP
|L1.744|
0002e8 e51f00f0 LDR r0,|L1.512|
0002ec e5900000 LDR r0,[r0,#0] ; NFConDone_1G08
0002f0 e3500000 CMP r0,#0
0002f4 0afffffb BEQ |L1.744|
;;;602 rNFCONT&=~(1<<9);
0002f8 e3a0044e MOV r0,#0x4e000000
0002fc e5900004 LDR r0,[r0,#4]
000300 e3c00f80 BIC r0,r0,#0x200
000304 e3a0144e MOV r1,#0x4e000000
000308 e5810004 STR r0,[r1,#4]
;;;603 rNFCONT&=~(1<<10); // Disable Illegal Access Interrupt
00030c e3a0044e MOV r0,#0x4e000000
000310 e5900004 LDR r0,[r0,#4]
000314 e3c00e40 BIC r0,r0,#0x400
000318 e3a0144e MOV r1,#0x4e000000
00031c e5810004 STR r0,[r1,#4]
;;;604 if(rNFSTAT&0x8) return FAIL;
000320 e3a0044e MOV r0,#0x4e000000
000324 e5900020 LDR r0,[r0,#0x20]
000328 e3100008 TST r0,#8
00032c 0a000001 BEQ |L1.824|
000330 e3a00000 MOV r0,#0
;;;605
;;;606 NF_CMD(0x70); // Read status command
;;;607
;;;608 if (NF_RDDATA()&0x1) // Erase error
;;;609 {
;;;610 EXT_NF_nFCE_H();
;;;611 Uart_Printf("[ERASE_ERROR:block#=%d]\n",block);
;;;612 // NF8_MarkBadBlock(block);
;;;613 return FAIL;
;;;614 }
;;;615 else
;;;616 {
;;;617 NF_nFCE_H();
;;;618 return OK;
;;;619 }
;;;620 }
|L1.820|
000334 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.824|
000338 e3a00070 MOV r0,#0x70 ;606
00033c e3a0144e MOV r1,#0x4e000000 ;606
000340 e5810008 STR r0,[r1,#8] ;606
000344 e3a0044e MOV r0,#0x4e000000 ;608
000348 e5900010 LDR r0,[r0,#0x10] ;608
00034c e3100001 TST r0,#1 ;608
000350 0a000009 BEQ |L1.892| ;608
000354 e3a00456 MOV r0,#0x56000000 ;610
000358 e5900004 LDR r0,[r0,#4] ;610
00035c e3800b40 ORR r0,r0,#0x10000 ;610
000360 e3a01456 MOV r1,#0x56000000 ;610
000364 e5810004 STR r0,[r1,#4] ;610
000368 e1a01004 MOV r1,r4 ;611
00036c e28f002c ADR r0,|L1.928| ;611
000370 ebfffffe BL Uart_Printf ;611
000374 e3a00000 MOV r0,#0 ;613
000378 eaffffed B |L1.820| ;613
|L1.892|
00037c e3a0044e MOV r0,#0x4e000000 ;617
000380 e5900004 LDR r0,[r0,#4] ;617
000384 e3800002 ORR r0,r0,#2 ;617
000388 e3a0144e MOV r1,#0x4e000000 ;617
00038c e5810004 STR r0,[r1,#4] ;617
000390 e3a00001 MOV r0,#1 ;618
000394 eaffffe6 B |L1.820| ;618
|L1.920|
000398 00000000 DCD NFCon_Int_1G08 ;618
|L1.924|
00039c 31fff000 DCD 0x31fff000 ;618
|L1.928|
0003a0 4152455b DCB "[ERA" ;618
0003a4 455f4553 DCB "SE_E" ;618
0003a8 524f5252 DCB "RROR" ;618
0003ac 6f6c623a DCB ":blo" ;618
0003b0 3d236b63 DCB "ck#=" ;618
0003b4 0a5d6425 DCB "%d]\n" ;618
0003b8 00000000 DCB "\0\0\0\0" ;618
ENDP
Test_NF1G08_Block_Erase PROC
;;;212 void Test_NF1G08_Block_Erase(void)
;;;213 {
0003bc e92d4010 STMFD sp!,{r4,lr}
;;;214 U32 block=0;
0003c0 e3a04000 MOV r4,#0
;;;215
;;;216 Uart_Printf("(K9F1G08) NAND Block erase\n");
0003c4 e28f004c ADR r0,|L1.1048|
0003c8 ebfffffe BL Uart_Printf
;;;217
;;;218 if((Read_Status()&0x80)==0) {
0003cc ebfffffe BL Read_Status
0003d0 e3100080 TST r0,#0x80
0003d4 1a000002 BNE |L1.996|
;;;219 Uart_Printf("Write protected.\n");
0003d8 e28f0054 ADR r0,|L1.1076|
0003dc ebfffffe BL Uart_Printf
;;;220 return;
;;;221 }
;;;222
;;;223 Uart_Printf("Block # to erase: ");
;;;224 block = Uart_GetIntNum();
;;;225
;;;226 // NF8_Init();
;;;227
;;;228 if(NF1G08_EraseBlock(block)==FAIL) return;
;;;229
;;;230 Uart_Printf("%d-block erased.\n", block);
;;;231
;;;232 }
|L1.992|
0003e0 e8bd8010 LDMFD sp!,{r4,pc}
|L1.996|
0003e4 e28f005c ADR r0,|L1.1096| ;223
0003e8 ebfffffe BL Uart_Printf ;223
0003ec ebfffffe BL Uart_GetIntNum ;224
0003f0 e1a04000 MOV r4,r0 ;224
0003f4 e1a00004 MOV r0,r4 ;228
0003f8 ebfffffe BL NF1G08_EraseBlock ;228
0003fc e3500000 CMP r0,#0 ;228
000400 1a000000 BNE |L1.1032| ;228
000404 eafffff5 B |L1.992| ;228
|L1.1032|
000408 e1a01004 MOV r1,r4 ;230
00040c e28f0048 ADR r0,|L1.1116| ;230
000410 ebfffffe BL Uart_Printf ;230
000414 eafffff1 B |L1.992|
|L1.1048|
000418 46394b28 DCB "(K9F"
00041c 38304731 DCB "1G08"
000420 414e2029 DCB ") NA"
000424 4220444e DCB "ND B"
000428 6b636f6c DCB "lock"
00042c 61726520 DCB " era"
000430 000a6573 DCB "se\n\0"
|L1.1076|
000434 74697257 DCB "Writ"
000438 72702065 DCB "e pr"
00043c 6365746f DCB "otec"
000440 2e646574 DCB "ted."
000444 0000000a DCB "\n\0\0\0"
|L1.1096|
000448 636f6c42 DCB "Bloc"
00044c 2023206b DCB "k # "
000450 65206f74 DCB "to e"
000454 65736172 DCB "rase"
000458 0000203a DCB ": \0\0"
|L1.1116|
00045c 622d6425 DCB "%d-b"
000460 6b636f6c DCB "lock"
000464 61726520 DCB " era"
000468 2e646573 DCB "sed."
00046c 0000000a DCB "\n\0\0\0"
ENDP
NF1G08_ReadPage PROC
;;;725 static int NF1G08_ReadPage(U32 block,U32 page,U8 *buffer)
;;;726 {
000470 e92d47f0 STMFD sp!,{r4-r10,lr}
000474 e1a07000 MOV r7,r0
000478 e1a08001 MOV r8,r1
00047c e1a09002 MOV r9,r2
;;;727 int i;
;;;728 unsigned int blockPage;
;;;729 U32 Mecc, Secc;
;;;730 U8 *bufPt=buffer;
000480 e1a0a009 MOV r10,r9
;;;731
;;;732 blockPage=(block<<6)+page;
000484 e0886307 ADD r6,r8,r7,LSL #6
;;;733 NF_RSTECC(); // Initialize ECC
000488 e3a0044e MOV r0,#0x4e000000
00048c e5900004 LDR r0,[r0,#4]
000490 e3800010 ORR r0,r0,#0x10
000494 e3a0144e MOV r1,#0x4e000000
000498 e5810004 STR r0,[r1,#4]
;;;734 NF_MECC_UnLock();
00049c e3a0044e MOV r0,#0x4e000000
0004a0 e5900004 LDR r0,[r0,#4]
0004a4 e3c00020 BIC r0,r0,#0x20
0004a8 e3a0144e MOV r1,#0x4e000000
0004ac e5810004 STR r0,[r1,#4]
;;;735
;;;736 NF_nFCE_L();
0004b0 e3a0044e MOV r0,#0x4e000000
0004b4 e5900004 LDR r0,[r0,#4]
0004b8 e3c00002 BIC r0,r0,#2
0004bc e3a0144e MOV r1,#0x4e000000
0004c0 e5810004 STR r0,[r1,#4]
;;;737
;;;738 NF_CLEAR_RB();
0004c4 e3a0044e MOV r0,#0x4e000000
0004c8 e5900020 LDR r0,[r0,#0x20]
0004cc e3800004 ORR r0,r0,#4
0004d0 e3a0144e MOV r1,#0x4e000000
0004d4 e5810020 STR r0,[r1,#0x20]
;;;739 NF_CMD(0x00); // Read command
0004d8 e3a00000 MOV r0,#0
0004dc e3a0144e MOV r1,#0x4e000000
0004e0 e5810008 STR r0,[r1,#8]
;;;740 NF_ADDR(0); // Column (A[7:0]) = 0
0004e4 e3a00000 MOV r0,#0
0004e8 e3a0144e MOV r1,#0x4e000000
0004ec e581000c STR r0,[r1,#0xc]
;;;741 NF_ADDR(0); // A[11:8]
0004f0 e3a00000 MOV r0,#0
0004f4 e3a0144e MOV r1,#0x4e000000
0004f8 e581000c STR r0,[r1,#0xc]
;;;742 NF_ADDR((blockPage)&0xff); // A[19:12]
0004fc e20600ff AND r0,r6,#0xff
000500 e3a0144e MOV r1,#0x4e000000
000504 e581000c STR r0,[r1,#0xc]
;;;743 NF_ADDR((blockPage>>8)&0xff); // A[27:20]
000508 e1a00806 MOV r0,r6,LSL #16
00050c e1a00c20 MOV r0,r0,LSR #24
000510 e3a0144e MOV r1,#0x4e000000
000514 e581000c STR r0,[r1,#0xc]
;;;744
;;;745 NF_CMD(0x30); // 2'nd command
000518 e3a00030 MOV r0,#0x30
00051c e3a0144e MOV r1,#0x4e000000
000520 e5810008 STR r0,[r1,#8]
;;;746 NF_DETECT_RB();
000524 e1a00000 NOP
|L1.1320|
000528 e3a0044e MOV r0,#0x4e000000
00052c e5900020 LDR r0,[r0,#0x20]
000530 e3100004 TST r0,#4
000534 0afffffb BEQ |L1.1320|
;;;747
;;;748 #if TRANS_MODE==C_LANG
;;;749 for(i=0;i<2048;i++) {
;;;750 *bufPt++=NF_RDDATA8(); // Read one page
;;;751 }
;;;752 #elif TRANS_MODE==DMA
;;;753 // Nand to memory dma setting
;;;754 rSRCPND=BIT_DMA0; // Init DMA src pending.
000538 e3a00b80 MOV r0,#0x20000
00053c e3a0144a MOV r1,#0x4a000000
000540 e5810000 STR r0,[r1,#0]
;;;755 rDISRC0=NFDATA; // Nand flash data register
000544 e59f015c LDR r0,|L1.1704|
000548 e3a0144b MOV r1,#0x4b000000
00054c e5810000 STR r0,[r1,#0]
;;;756 rDISRCC0=(0<<1) | (1<<0); //arc=AHB,src_addr=fix
000550 e3a00001 MOV r0,#1
000554 e3a0144b MOV r1,#0x4b000000
000558 e5810004 STR r0,[r1,#4]
;;;757 rDIDST0=(unsigned)bufPt;
00055c e3a0044b MOV r0,#0x4b000000
000560 e580a008 STR r10,[r0,#8]
;;;758 rDIDSTC0=(0<<1) | (0<<0); //dst=AHB,dst_addr=inc;
000564 e3a00000 MOV r0,#0
000568 e3a0144b MOV r1,#0x4b000000
00056c e581000c STR r0,[r1,#0xc]
;;;759 rDCON0=(1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(0<<23)|(1<<22)|(2<<20)|(2048/4/4);
000570 e59f0134 LDR r0,|L1.1708|
000574 e3a0144b MOV r1,#0x4b000000
000578 e5810010 STR r0,[r1,#0x10]
;;;760 //Handshake,AHB,interrupt,(4-burst),whole,S/W,no_autoreload,word,count=128;
;;;761
;;;762 // DMA on and start.
;;;763 rDMASKTRIG0=(1<<1)|(1<<0);
00057c e3a00003 MOV r0,#3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -