📄 k9k2g16.txt
字号:
000598 e51f1380 LDR r1,|L1.544|
00059c e5810018 STR r0,[r1,#0x18]
;;;606
;;;607 // while(!(rNF_STAT&(1<<10)));
;;;608
;;;609 #elif 0
;;;610 __WrPage1024(bufPt);
;;;611 #endif
;;;612
;;;613 NF_MECC_Lock();
0005a0 e28005fb ADD r0,r0,#0x3ec00000
0005a4 e5900004 LDR r0,[r0,#4]
0005a8 e3800f80 ORR r0,r0,#0x200
0005ac e28118a0 ADD r1,r1,#0xa00000
0005b0 e5810004 STR r0,[r1,#4]
;;;614
;;;615
;;;616 #if ECC_CHECK_x16
;;;617 //ECC generation from main area ECC status.
;;;618 // Ecc lower
;;;619 se16Buf[0]=rNFMECC0&0xff;
0005b4 e1a00001 MOV r0,r1
0005b8 e5900038 LDR r0,[r0,#0x38]
0005bc e20000ff AND r0,r0,#0xff
0005c0 e51f139c LDR r1,|L1.556|
0005c4 e1c100b0 STRH r0,[r1,#0] ; se16Buf
;;;620 se16Buf[1]=(rNFMECC0>>8)&0xff;
0005c8 e51f03b4 LDR r0,|L1.540|
0005cc e5900038 LDR r0,[r0,#0x38]
0005d0 e1a00800 MOV r0,r0,LSL #16
0005d4 e1a00c20 MOV r0,r0,LSR #24
0005d8 e51f13b4 LDR r1,|L1.556|
0005dc e1c100b2 STRH r0,[r1,#2] ; se16Buf
;;;621 se16Buf[2]=(rNFMECC0>>16)&0xff;
0005e0 e51f03cc LDR r0,|L1.540|
0005e4 e5900038 LDR r0,[r0,#0x38]
0005e8 e1a00400 MOV r0,r0,LSL #8
0005ec e1a00c20 MOV r0,r0,LSR #24
0005f0 e51f13cc LDR r1,|L1.556|
0005f4 e1c100b4 STRH r0,[r1,#4] ; se16Buf
;;;622 se16Buf[3]=(rNFMECC0>>24)&0xff;
0005f8 e51f03e4 LDR r0,|L1.540|
0005fc e5900038 LDR r0,[r0,#0x38]
000600 e1a00c20 MOV r0,r0,LSR #24
000604 e51f13e0 LDR r1,|L1.556|
000608 e1c100b6 STRH r0,[r1,#6] ; se16Buf
;;;623 // Ecc higher
;;;624 se16Buf[0] |=(((rNFMECC1)&0xff)<<8);
00060c e51f03e8 LDR r0,|L1.556|
000610 e1d010b0 LDRH r1,[r0,#0] ; se16Buf
000614 e51f0400 LDR r0,|L1.540|
000618 e590003c LDR r0,[r0,#0x3c]
00061c e1810400 ORR r0,r1,r0,LSL #8
000620 e51f13fc LDR r1,|L1.556|
000624 e1c100b0 STRH r0,[r1,#0] ; se16Buf
;;;625 se16Buf[1] |=(((rNFMECC1>>8)&0xff)<<8);
000628 e51f0404 LDR r0,|L1.556|
00062c e1d000b2 LDRH r0,[r0,#2] ; se16Buf
000630 e51f141c LDR r1,|L1.540|
000634 e591103c LDR r1,[r1,#0x3c]
000638 e2011cff AND r1,r1,#0xff00
00063c e1800001 ORR r0,r0,r1
000640 e51f141c LDR r1,|L1.556|
000644 e1c100b2 STRH r0,[r1,#2] ; se16Buf
;;;626 se16Buf[2] |=(((rNFMECC1>>16)&0xff)<<8);
000648 e51f0424 LDR r0,|L1.556|
00064c e1d000b4 LDRH r0,[r0,#4] ; se16Buf
000650 e51f143c LDR r1,|L1.540|
000654 e591103c LDR r1,[r1,#0x3c]
000658 e3a02cff MOV r2,#0xff00
00065c e0021421 AND r1,r2,r1,LSR #8
000660 e1800001 ORR r0,r0,r1
000664 e51f1440 LDR r1,|L1.556|
000668 e1c100b4 STRH r0,[r1,#4] ; se16Buf
;;;627 se16Buf[3] |=(((rNFMECC1>>24)&0xff)<<8);
00066c e51f0448 LDR r0,|L1.556|
000670 e1d000b6 LDRH r0,[r0,#6] ; se16Buf
000674 e51f1460 LDR r1,|L1.540|
000678 e591103c LDR r1,[r1,#0x3c]
00067c e1a01c21 MOV r1,r1,LSR #24
000680 e1800401 ORR r0,r0,r1,LSL #8
000684 e51f1460 LDR r1,|L1.556|
000688 e1c100b6 STRH r0,[r1,#6] ; se16Buf
;;;628
;;;629
;;;630 se16Buf[5] =0xffff; // Marking good block
00068c e3e00000 MVN r0,#0
000690 e51f146c LDR r1,|L1.556|
000694 e1c100ba STRH r0,[r1,#0xa] ; se16Buf
;;;631
;;;632 /*
;;;633 // ECC generation from spare area ECC status.
;;;634 se16Buf[?]=rNFSECC&0xff;
;;;635 se16Buf[!]=(rNFSECC>>8)&0xff;
;;;636 se16Buf[?]|=(((rNFSECC>>16)&0xff)<<8);
;;;637 se16Buf[!]|=(((rNFSECC>>24)&0xff)<<8);
;;;638 se16Buf[5]=0xff; // Marking good block
;;;639
;;;640 //write spare ECC into another spare area
;;;641
;;;642 */
;;;643
;;;644 //write ECC into spare area
;;;645 //write spare ECC into another spare area
;;;646 for(i=0;i<32;i++)
000698 e3a04000 MOV r4,#0
|L1.1692|
00069c e3540020 CMP r4,#0x20
0006a0 aa000013 BGE |L1.1780|
0006a4 ea000001 B |L1.1712|
|L1.1704|
0006a8 e2844001 ADD r4,r4,#1
0006ac eafffffa B |L1.1692|
;;;647 {
;;;648 NF_WRDATA(se16Buf[i]); // Write spare array(ECC and Mark)
|L1.1712|
0006b0 e51f048c LDR r0,|L1.556|
0006b4 e0800084 ADD r0,r0,r4,LSL #1
0006b8 e1d000b0 LDRH r0,[r0,#0]
0006bc e51f14a8 LDR r1,|L1.540|
0006c0 e5810010 STR r0,[r1,#0x10]
;;;649
;;;650 if(page==0)
0006c4 e3570000 CMP r7,#0
0006c8 1a000008 BNE |L1.1776|
;;;651 {
;;;652 if(i%16==0)
0006cc e314000f TST r4,#0xf
0006d0 1a000001 BNE |L1.1756|
;;;653 Uart_Printf("\nW-SECC:");
0006d4 e28f00f8 ADR r0,|L1.2004|
0006d8 ebfffffe BL _printf
;;;654 Uart_Printf("%04x ",se16Buf[i]);
|L1.1756|
0006dc e51f04b8 LDR r0,|L1.556|
0006e0 e0800084 ADD r0,r0,r4,LSL #1
0006e4 e1d010b0 LDRH r1,[r0,#0]
0006e8 e28f00f0 ADR r0,|L1.2016|
0006ec ebfffffe BL _printf
;;;655 }
;;;656
;;;657 }
|L1.1776|
0006f0 eaffffec B |L1.1704|
;;;658
;;;659 #endif
;;;660
;;;661 NF_CMD(0x10); // Write 2nd command
|L1.1780|
0006f4 e3a00010 MOV r0,#0x10
0006f8 e51f14e4 LDR r1,|L1.540|
0006fc e5810008 STR r0,[r1,#8]
;;;662
;;;663 for(i=0;i<10;i++);
000700 e3a04000 MOV r4,#0
|L1.1796|
000704 e354000a CMP r4,#0xa
000708 aa000001 BGE |L1.1812|
00070c e2844001 ADD r4,r4,#1
000710 eafffffb B |L1.1796|
;;;664
;;;665 NF_TRANSRnB(); //wait tPROG 200~500us;
|L1.1812|
000714 e1a00000 NOP
|L1.1816|
000718 e51f0504 LDR r0,|L1.540|
00071c e590002c LDR r0,[r0,#0x2c]
000720 e3100d80 TST r0,#0x2000
000724 0afffffb BEQ |L1.1816|
;;;666
;;;667
;;;668 NF_CMD(0x70); // Read status command
000728 e3a00070 MOV r0,#0x70
00072c e51f1518 LDR r1,|L1.540|
000730 e5810008 STR r0,[r1,#8]
;;;669
;;;670 for(i=0;i<3;i++);
000734 e3a04000 MOV r4,#0
|L1.1848|
000738 e3540003 CMP r4,#3
00073c aa000001 BGE |L1.1864|
000740 e2844001 ADD r4,r4,#1
000744 eafffffb B |L1.1848|
;;;671
;;;672
;;;673 if (NF_RDDATA()&0x1) // Page write error
|L1.1864|
000748 e51f0534 LDR r0,|L1.540|
00074c e5900010 LDR r0,[r0,#0x10]
000750 e3100001 TST r0,#1
000754 0a000010 BEQ |L1.1948|
;;;674 {
;;;675 NF_nFCE_H();
000758 e51f0544 LDR r0,|L1.540|
00075c e5900004 LDR r0,[r0,#4]
000760 e3800080 ORR r0,r0,#0x80
000764 e51f1550 LDR r1,|L1.540|
000768 e5810004 STR r0,[r1,#4]
;;;676 Uart_Printf("[PROGRAM_ERROR:block#=%d]\n",block);
00076c e1a01005 MOV r1,r5
000770 e28f0070 ADR r0,|L1.2024|
000774 ebfffffe BL _printf
;;;677 NF16_MarkBadBlock(block);
000778 e1a00005 MOV r0,r5
00077c ebfffffe BL NF16_MarkBadBlock
;;;678 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x3<<2);
000780 e59f0044 LDR r0,|L1.1996|
000784 e5900008 LDR r0,[r0,#8]
000788 e380000c ORR r0,r0,#0xc
00078c e59f1038 LDR r1,|L1.1996|
000790 e5810008 STR r0,[r1,#8]
;;;679 return 0;
000794 e3a00000 MOV r0,#0
;;;680 }
;;;681 else
;;;682 {
;;;683
;;;684 NF_nFCE_H();
;;;685 //Uart_Printf("[PROGRAM_OK:block#=%d]\n",block);
;;;686 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x3<<2);
;;;687 return 1;
;;;688
;;;689 }
;;;690
;;;691 }
|L1.1944|
000798 e8bd83f8 LDMFD sp!,{r3-r9,pc}
|L1.1948|
00079c e51f0588 LDR r0,|L1.540| ;684
0007a0 e5900004 LDR r0,[r0,#4] ;684
0007a4 e3800080 ORR r0,r0,#0x80 ;684
0007a8 e51f1594 LDR r1,|L1.540| ;684
0007ac e5810004 STR r0,[r1,#4] ;684
0007b0 e28107f0 ADD r0,r1,#0x3c00000 ;686
0007b4 e5900008 LDR r0,[r0,#8] ;686
0007b8 e380000c ORR r0,r0,#0xc ;686
0007bc e28117f0 ADD r1,r1,#0x3c00000 ;686
0007c0 e5810008 STR r0,[r1,#8] ;686
0007c4 e3a00001 MOV r0,#1 ;687
0007c8 eafffff2 B |L1.1944| ;687
|L1.1996|
0007cc 44800000 DCD 0x44800000 ;687
|L1.2000|
0007d0 e8500400 DCD 0xe8500400 ;687
|L1.2004|
0007d4 532d570a DCB "\nW-S" ;687
0007d8 3a434345 DCB "ECC:" ;687
0007dc 00000000 DCB "\0\0\0\0" ;687
|L1.2016|
0007e0 78343025 DCB "%04x" ;687
0007e4 00000020 DCB " \0\0\0" ;687
|L1.2024|
0007e8 4f52505b DCB "[PRO" ;687
0007ec 4d415247 DCB "GRAM" ;687
0007f0 5252455f DCB "_ERR" ;687
0007f4 623a524f DCB "OR:b" ;687
0007f8 6b636f6c DCB "lock" ;687
0007fc 64253d23 DCB "#=%d" ;687
000800 00000a5d DCB "]\n\0\0" ;687
ENDP
NF16_EraseBlock PROC
;;;333 static int NF16_EraseBlock(U32 block)
;;;334 {
000804 e92d4070 STMFD sp!,{r4-r6,lr}
000808 e1a04000 MOV r4,r0
;;;335 U32 blockPage;
;;;336 int i;
;;;337
;;;338 // Port setting for SMC_WP
;;;339 rGPCON_L = (rGPCON_L & ~(0x3<<2))|(0x1<<2);
00080c e51f0048 LDR r0,|L1.1996|
000810 e5900008 LDR r0,[r0,#8]
000814 e3c0000c BIC r0,r0,#0xc
000818 e3800004 ORR r0,r0,#4
00081c e51f1058 LDR r1,|L1.1996|
000820 e5810008 STR r0,[r1,#8]
;;;340 rGPDAT |=(1<<1);
000824 e1a00001 MOV r0,r1
000828 e590000c LDR r0,[r0,#0xc]
00082c e3800002 ORR r0,r0,#2
000830 e581000c STR r0,[r1,#0xc]
;;;341
;;;342
;;;343 blockPage=(block<<6);
000834 e1a05304 MOV r5,r4,LSL #6
;;;344
;;;345
;;;346 NF_nFCE_L();
000838 e24107f0 SUB r0,r1,#0x3c00000
00083c e5900004 LDR r0,[r0,#4]
000840 e3c00080 BIC r0,r0,#0x80
000844 e24117f0 SUB r1,r1,#0x3c00000
000848 e5810004 STR r0,[r1,#4]
;;;347
;;;348 NF_CMD(0x60); // Erase one block 1st command
00084c e3a00060 MOV r0,#0x60
000850 e1c11000 BIC r1,r1,r0
000854 e5810008 STR r0,[r1,#8]
;;;349
;;;350 // Address 3-cycle
;;;351 NF_ADDR(blockPage&0xff); // A[18:11]
000858 e20500ff AND r0,r5,#0xff
00085c e581000c STR r0,[r1,#0xc]
;;;352 NF_ADDR((blockPage>>8)&0xff); // A[26:19]
000860 e1a00805 MOV r0,r5,LSL #16
000864 e1a00c20 MOV r0,r0,LSR #24
000868 e581000c STR r0,[r1,#0xc]
;;;353 NF_ADDR((blockPage>>16)&0xff); // A27
00086c e1a00405 MOV r0,r5,LSL #8
000870 e1a00c20 MOV r0,r0,LSR #24
000874 e581000c STR r0,[r1,#0xc]
;;;354
;;;355 NF_CLRRnB();
000878 e1a00001 MOV r0,r1
00087c e590002c LDR r0,[r0,#0x2c]
000880 e3800d80 ORR r0,r0,#0x2000
000884 e581002c STR r0,[r1,#0x2c]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -