📄 k9k2g16.txt
字号:
;;;73 U16 *srcPt,*saveSrcPt; //for x16 *
;;;74 U16 *testdata;
;;;75 U32 blockIndex;
;;;76
;;;77 Uart_Printf("\n[ SOP(K9K2G16) NAND Flash writing program]\n");
000b90 e28f0f61 ADR r0,|L1.3356|
000b94 ebfffffe BL _printf
;;;78
;;;79 rNFCONT&=~(1<<2); // Lock disable
000b98 e51f0984 LDR r0,|L1.540|
000b9c e5900004 LDR r0,[r0,#4]
000ba0 e3c00004 BIC r0,r0,#4
000ba4 e51f1990 LDR r1,|L1.540|
000ba8 e5810004 STR r0,[r1,#4]
;;;80
;;;81 srcAddress=0x10300000;
000bac e1a00141 MOV r0,r1,ASR #2
000bb0 e59f1194 LDR r1,|L1.3404|
000bb4 e5810000 STR r0,[r1,#0] ; srcAddress
;;;82 /*
;;;83 // Initializing Buffer ----------------INIT
;;;84 testdata = (U16 *)(srcAddress);
;;;85 for(i=0;i<4096;i++)
;;;86 *(testdata++) = i;
;;;87 */
;;;88 Input_x16_TargetBlock();
000bb8 ebfffffe BL Input_x16_TargetBlock
;;;89
;;;90 Uart_Printf("source base address(0x1030000x)=0x%x\n",srcAddress);
000bbc e59f0188 LDR r0,|L1.3404|
000bc0 e5901000 LDR r1,[r0,#0] ; srcAddress
000bc4 e28f0f61 ADR r0,|L1.3408|
000bc8 ebfffffe BL _printf
;;;91 Uart_Printf("target start block number =%d\n",targetBlock);
000bcc e51f0078 LDR r0,|L1.2908|
000bd0 e5901000 LDR r1,[r0,#0] ; targetBlock
000bd4 e28f0f67 ADR r0,|L1.3448|
000bd8 ebfffffe BL _printf
;;;92 Uart_Printf("target size (0x20000*Block) =0x%x\n",targetSize);
000bdc e51f0060 LDR r0,|L1.2948|
000be0 e5901000 LDR r1,[r0,#0] ; targetSize
000be4 e28f0f6c ADR r0,|L1.3484|
000be8 ebfffffe BL _printf
;;;93
;;;94 srcPt=(U16 *)srcAddress; // for x16 *
000bec e59f0158 LDR r0,|L1.3404|
000bf0 e5905000 LDR r5,[r0,#0] ; srcAddress
;;;95 blockIndex=targetBlock;
000bf4 e51f00a0 LDR r0,|L1.2908|
000bf8 e5904000 LDR r4,[r0,#0] ; targetBlock
;;;96
;;;97 while(1)
000bfc e1a00000 NOP
|L1.3072|
000c00 e1a00000 NOP
;;;98 {
;;;99 saveSrcPt=srcPt;
000c04 e1a08005 MOV r8,r5
;;;100
;;;101 #if BAD_CHECK_x16
;;;102 if(NF16_IsBadBlock(blockIndex)) // 1:bad 0:good
000c08 e1a00004 MOV r0,r4
000c0c ebfffffe BL NF16_IsBadBlock
000c10 e3500000 CMP r0,#0
000c14 0a000001 BEQ |L1.3104|
;;;103 {
;;;104 blockIndex++; // for next block
000c18 e2844001 ADD r4,r4,#1
;;;105 continue;
000c1c eafffff7 B |L1.3072|
;;;106 }
;;;107 #endif
;;;108
;;;109 if(!NF16_EraseBlock(blockIndex))
|L1.3104|
000c20 e1a00004 MOV r0,r4
000c24 ebfffffe BL NF16_EraseBlock
000c28 e3500000 CMP r0,#0
000c2c 1a000001 BNE |L1.3128|
;;;110 {
;;;111 blockIndex++; // for next block
000c30 e2844001 ADD r4,r4,#1
;;;112 continue;
000c34 eafffff1 B |L1.3072|
;;;113 }
;;;114
;;;115 for(i=0;i<64;i++) //for advance ** page number
|L1.3128|
000c38 e3a06000 MOV r6,#0
|L1.3132|
000c3c e3560040 CMP r6,#0x40
000c40 aa000022 BGE |L1.3280|
000c44 ea000001 B |L1.3152|
|L1.3144|
000c48 e2866001 ADD r6,r6,#1
000c4c eafffffa B |L1.3132|
;;;116 {
;;;117 if(!NF16_WritePage(blockIndex,i,srcPt))// block num, page num, buffer
|L1.3152|
000c50 e1a02005 MOV r2,r5
000c54 e1a01006 MOV r1,r6
000c58 e1a00004 MOV r0,r4
000c5c ebfffffe BL NF16_WritePage
000c60 e3500000 CMP r0,#0
000c64 1a000005 BNE |L1.3200|
;;;118 {
;;;119 programError=1;
000c68 e3a07001 MOV r7,#1
;;;120 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000c6c e1a02006 MOV r2,r6
000c70 e1a01004 MOV r1,r4
000c74 e28f0f53 ADR r0,|L1.3528|
000c78 ebfffffe BL _printf
;;;121 break;
000c7c ea000013 B |L1.3280|
;;;122 }
;;;123
;;;124 #if ECC_CHECK_x16
;;;125 if(!NF16_ReadPage(blockIndex,i,srcPt))
|L1.3200|
000c80 e1a02005 MOV r2,r5
000c84 e1a01006 MOV r1,r6
000c88 e1a00004 MOV r0,r4
000c8c ebfffffe BL NF16_ReadPage
000c90 e3500000 CMP r0,#0
000c94 1a000003 BNE |L1.3240|
;;;126 {
;;;127 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000c98 e1a02006 MOV r2,r6
000c9c e1a01004 MOV r1,r4
000ca0 e28f0f48 ADR r0,|L1.3528|
000ca4 ebfffffe BL _printf
;;;128 }
;;;129 #endif
;;;130
;;;131 srcPt+=1024; // 1 page for advance ** for x16 *
|L1.3240|
000ca8 e2855e80 ADD r5,r5,#0x800
;;;132 //Increase buffer addr one page size
;;;133
;;;134
;;;135 if((U32)srcPt>=(srcAddress+targetSize)) // Check end of buffer
000cac e59f0098 LDR r0,|L1.3404|
000cb0 e5900000 LDR r0,[r0,#0] ; srcAddress
000cb4 e51f1138 LDR r1,|L1.2948|
000cb8 e5911000 LDR r1,[r1,#0] ; targetSize
000cbc e0800001 ADD r0,r0,r1
000cc0 e1500005 CMP r0,r5
000cc4 8a000000 BHI |L1.3276|
;;;136 break; // Exit for loop
000cc8 ea000000 B |L1.3280|
;;;137 }
|L1.3276|
000ccc eaffffdd B |L1.3144|
;;;138 Uart_Printf(".");
|L1.3280|
000cd0 e28f0f44 ADR r0,|L1.3560|
000cd4 ebfffffe BL _printf
;;;139 if(programError==1)
000cd8 e3570001 CMP r7,#1
000cdc 1a000003 BNE |L1.3312|
;;;140 {
;;;141 blockIndex++;
000ce0 e2844001 ADD r4,r4,#1
;;;142 srcPt=saveSrcPt;
000ce4 e1a05008 MOV r5,r8
;;;143 programError=0;
000ce8 e3a07000 MOV r7,#0
;;;144 continue;
000cec eaffffc3 B |L1.3072|
;;;145 }
;;;146
;;;147 if((U32)srcPt>=(srcAddress+targetSize))
|L1.3312|
000cf0 e59f0054 LDR r0,|L1.3404|
000cf4 e5900000 LDR r0,[r0,#0] ; srcAddress
000cf8 e51f117c LDR r1,|L1.2948|
000cfc e5911000 LDR r1,[r1,#0] ; targetSize
000d00 e0800001 ADD r0,r0,r1
000d04 e1500005 CMP r0,r5
000d08 8a000000 BHI |L1.3344|
;;;148 break; // Exit while loop
000d0c ea000001 B |L1.3352|
;;;149 blockIndex++;
|L1.3344|
000d10 e2844001 ADD r4,r4,#1
;;;150
;;;151
;;;152 }
000d14 eaffffb9 B |L1.3072|
;;;153
;;;154
;;;155 }
|L1.3352|
000d18 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.3356|
000d1c 53205b0a DCB "\n[ S"
000d20 4b28504f DCB "OP(K"
000d24 47324b39 DCB "9K2G"
000d28 20293631 DCB "16) "
000d2c 444e414e DCB "NAND"
000d30 616c4620 DCB " Fla"
000d34 77206873 DCB "sh w"
000d38 69746972 DCB "riti"
000d3c 7020676e DCB "ng p"
000d40 72676f72 DCB "rogr"
000d44 0a5d6d61 DCB "am]\n"
000d48 00000000 DCB "\0\0\0\0"
|L1.3404|
000d4c 00000000 DCD ||.bss$2||
|L1.3408|
000d50 72756f73 DCB "sour"
000d54 62206563 DCB "ce b"
000d58 20657361 DCB "ase "
000d5c 72646461 DCB "addr"
000d60 28737365 DCB "ess("
000d64 30317830 DCB "0x10"
000d68 30303033 DCB "3000"
000d6c 3d297830 DCB "0x)="
000d70 78257830 DCB "0x%x"
|L1.3444|
000d74 0000000a DCB "\n\0\0\0"
|L1.3448|
000d78 67726174 DCB "targ"
000d7c 73207465 DCB "et s"
000d80 74726174 DCB "tart"
000d84 6f6c6220 DCB " blo"
000d88 6e206b63 DCB "ck n"
000d8c 65626d75 DCB "umbe"
000d90 20202072 DCB "r "
000d94 3d202020 DCB " ="
000d98 000a6425 DCB "%d\n\0"
|L1.3484|
000d9c 67726174 DCB "targ"
000da0 73207465 DCB "et s"
000da4 20657a69 DCB "ize "
000da8 20202020 DCB " "
000dac 28202020 DCB " ("
000db0 30327830 DCB "0x20"
000db4 2a303030 DCB "000*"
000db8 636f6c42 DCB "Bloc"
000dbc 2020296b DCB "k) "
000dc0 2578303d DCB "=0x%"
000dc4 00000a78 DCB "x\n\0\0"
|L1.3528|
000dc8 20434345 DCB "ECC "
000dcc 6f727245 DCB "Erro"
000dd0 6c622872 DCB "r(bl"
000dd4 3d6b636f DCB "ock="
000dd8 702c6425 DCB "%d,p"
000ddc 3d656761 DCB "age="
000de0 21216425 DCB "%d!!"
000de4 00000a21 DCB "!\n\0\0"
|L1.3560|
000de8 0000002e DCB ".\0\0\0"
ENDP
K9k2g16_PrintBadBlockNum PROC
;;;157 void K9k2g16_PrintBadBlockNum(void)
;;;158 {
000dec e92d4010 STMFD sp!,{r4,lr}
;;;159 int i;
;;;160
;;;161 Uart_Printf("\n[ SOP(K9K2G16) NAND Flash bad block check]\n");
000df0 e28f0028 ADR r0,|L1.3616|
000df4 ebfffffe BL _printf
;;;162
;;;163 for(i=0;i<2048;i++) // Read [spre area of first page] per Block number(0~2047)
000df8 e3a04000 MOV r4,#0
|L1.3580|
000dfc e3540e80 CMP r4,#0x800
000e00 aa000005 BGE |L1.3612|
000e04 ea000001 B |L1.3600|
|L1.3592|
000e08 e2844001 ADD r4,r4,#1
000e0c eafffffa B |L1.3580|
;;;164 {
;;;165 NF16_IsBadBlock(i); // Print bad block
|L1.3600|
000e10 e1a00004 MOV r0,r4
000e14 ebfffffe BL NF16_IsBadBlock
;;;166 }
000e18 eafffffa B |L1.3592|
;;;167 }
|L1.3612|
000e1c e8bd8010 LDMFD sp!,{r4,pc}
|L1.3616|
000e20 53205b0a DCB "\n[ S"
000e24 4b28504f DCB "OP(K"
000e28 47324b39 DCB "9K2G"
000e2c 20293631 DCB "16) "
000e30 444e414e DCB "NAND"
000e34 616c4620 DCB " Fla"
000e38 62206873 DCB "sh b"
000e3c 62206461 DCB "ad b"
000e40 6b636f6c DCB "lock"
000e44 65686320 DCB " che"
000e48 0a5d6b63 DCB "ck]\n"
000e4c 00000000 DCB "\0\0\0\0"
ENDP
K9k2g16_PrintBlock PROC
;;;169 void K9k2g16_PrintBlock(void)// Printf one page
;;;170 {
000e50 e92d40f8 STMFD sp!,{r3-r7,lr}
;;;171 int i,j;
;;;172 U32 block,page;
;;;173 U16 * downPt; //for x16 ** for advance *
;;;174
;;;175 downPt=(U16 *)0x11000000;
000e54 e3a05544 MOV r5,#0x11000000
;;;176
;;;177 Uart_Printf("\n[ SOP(K9K2G16) NAND Flash block read]\n");
000e58 e28f0088 ADR r0,|L1.3816|
000e5c ebfffffe BL _printf
;;;178
;;;179
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -