📄 k9s1208.txt
字号:
Input_x8_TargetBlock PROC
;;;262 static void Input_x8_TargetBlock(void)
;;;263 {
0008a0 e92d4008 STMFD sp!,{r3,lr}
;;;264 Uart_Printf("\nAvailable target block number: 0~4095\n");
0008a4 e28f003c ADR r0,|L1.2280|
0008a8 ebfffffe BL _printf
;;;265 Uart_Printf("Input target start block number:");
0008ac e28f005c ADR r0,|L1.2320|
0008b0 ebfffffe BL _printf
;;;266 targetBlock=Uart_GetIntNum(); // Block number(0~4095)
0008b4 ebfffffe BL Uart_GetIntNum
0008b8 e59f1074 LDR r1,|L1.2356|
0008bc e5810000 STR r0,[r1,#0] ; targetBlock
;;;267 if(targetSize==0)
0008c0 e59f0070 LDR r0,|L1.2360|
0008c4 e5900000 LDR r0,[r0,#0] ; targetSize
0008c8 e3500000 CMP r0,#0
0008cc 1a000004 BNE |L1.2276|
;;;268 {
;;;269 // Uart_Printf("1,048,576 = 0x100000, 31,457,280 = 0x1e00000 \n");
;;;270 Uart_Printf("Input program file size(bytes): ");
0008d0 e28f0064 ADR r0,|L1.2364|
0008d4 ebfffffe BL _printf
;;;271 targetSize=Uart_GetIntNum(); // Total byte size
0008d8 ebfffffe BL Uart_GetIntNum
0008dc e59f1054 LDR r1,|L1.2360|
0008e0 e5810000 STR r0,[r1,#0] ; targetSize
;;;272 }
;;;273 }
|L1.2276|
0008e4 e8bd8008 LDMFD sp!,{r3,pc}
|L1.2280|
0008e8 6176410a DCB "\nAva"
0008ec 62616c69 DCB "ilab"
0008f0 7420656c DCB "le t"
0008f4 65677261 DCB "arge"
0008f8 6c622074 DCB "t bl"
0008fc 206b636f DCB "ock "
000900 626d756e DCB "numb"
000904 203a7265 DCB "er: "
000908 30347e30 DCB "0~40"
00090c 000a3539 DCB "95\n\0"
|L1.2320|
000910 75706e49 DCB "Inpu"
000914 61742074 DCB "t ta"
000918 74656772 DCB "rget"
00091c 61747320 DCB " sta"
000920 62207472 DCB "rt b"
000924 6b636f6c DCB "lock"
000928 6d756e20 DCB " num"
00092c 3a726562 DCB "ber:"
000930 00000000 DCB "\0\0\0\0"
|L1.2356|
000934 00000008 DCD ||.bss$2|| + 8
|L1.2360|
000938 0000000c DCD ||.bss$2|| + 12
|L1.2364|
00093c 75706e49 DCB "Inpu"
000940 72702074 DCB "t pr"
000944 6172676f DCB "ogra"
000948 6966206d DCB "m fi"
00094c 7320656c DCB "le s"
000950 28657a69 DCB "ize("
000954 65747962 DCB "byte"
000958 203a2973 DCB "s): "
00095c 00000000 DCB "\0\0\0\0"
ENDP
K9S1208_Program PROC
;;;64 void K9S1208_Program(void)
;;;65 {
000960 e92d41f0 STMFD sp!,{r4-r8,lr}
;;;66 int i,j;
;;;67 int programError=0;
000964 e3a07000 MOV r7,#0
;;;68 U8 *srcPt,*saveSrcPt;
;;;69 U32 blockIndex;
;;;70 U8 *testdata;
;;;71
;;;72 Uart_Printf("\n[ SMC(K9S1208V0M) NAND Flash writing program]\n");
000968 e28f0f59 ADR r0,|L1.2772|
00096c ebfffffe BL _printf
;;;73
;;;74 rNFCONT&=~(1<<2); // Lock disable
000970 e51f07e4 LDR r0,|L1.404|
000974 e5900004 LDR r0,[r0,#4]
000978 e3c00004 BIC r0,r0,#4
00097c e51f17f0 LDR r1,|L1.404|
000980 e5810004 STR r0,[r1,#4]
;;;75
;;;76 srcAddress=0x10300000;
000984 e1a00141 MOV r0,r1,ASR #2
000988 e59f1174 LDR r1,|L1.2820|
00098c e5810000 STR r0,[r1,#0] ; srcAddress
;;;77 Uart_Printf("source base address(0x10300000)=0x%x\n",srcAddress);
000990 e59f016c LDR r0,|L1.2820|
000994 e5901000 LDR r1,[r0,#0] ; srcAddress
000998 e28f0f5a ADR r0,|L1.2824|
00099c ebfffffe BL _printf
;;;78 /*
;;;79 // Initializing Buffer ----------------INIT
;;;80 testdata = (U8 *)(srcAddress);
;;;81 for(i=0;i<4096;i++)
;;;82 *(testdata++) = i;
;;;83
;;;84 */
;;;85
;;;86 Input_x8_TargetBlock();
0009a0 ebfffffe BL Input_x8_TargetBlock
;;;87
;;;88
;;;89 //Uart_Printf("target start block number =%d\n",targetBlock);
;;;90 //Uart_Printf("target size (0x4000*n) =0x%x\n",targetSize);
;;;91
;;;92 srcPt=(U8 *)srcAddress;
0009a4 e59f0158 LDR r0,|L1.2820|
0009a8 e5905000 LDR r5,[r0,#0] ; srcAddress
;;;93 blockIndex=targetBlock;
0009ac e51f0080 LDR r0,|L1.2356|
0009b0 e5904000 LDR r4,[r0,#0] ; targetBlock
;;;94
;;;95 while(1)
0009b4 e1a00000 NOP
|L1.2488|
0009b8 e1a00000 NOP
;;;96 {
;;;97 saveSrcPt=srcPt;
0009bc e1a08005 MOV r8,r5
;;;98
;;;99 #if BAD_CHECK
;;;100 if(NF_IsBadBlock(blockIndex)) // 1:bad 0:good
0009c0 e1a00004 MOV r0,r4
0009c4 ebfffffe BL NF_IsBadBlock
0009c8 e3500000 CMP r0,#0
0009cc 0a000001 BEQ |L1.2520|
;;;101 {
;;;102 blockIndex++; // for next block
0009d0 e2844001 ADD r4,r4,#1
;;;103 continue;
0009d4 eafffff7 B |L1.2488|
;;;104 }
;;;105 #endif
;;;106
;;;107 if(!NF_EraseBlock(blockIndex))
|L1.2520|
0009d8 e1a00004 MOV r0,r4
0009dc ebfffffe BL NF_EraseBlock
0009e0 e3500000 CMP r0,#0
0009e4 1a000001 BNE |L1.2544|
;;;108 {
;;;109 blockIndex++; // for next block
0009e8 e2844001 ADD r4,r4,#1
;;;110 continue;
0009ec eafffff1 B |L1.2488|
;;;111 }
;;;112
;;;113 for(i=0;i<32;i++)
|L1.2544|
0009f0 e3a06000 MOV r6,#0
|L1.2548|
0009f4 e3560020 CMP r6,#0x20
0009f8 aa000022 BGE |L1.2696|
0009fc ea000001 B |L1.2568|
|L1.2560|
000a00 e2866001 ADD r6,r6,#1
000a04 eafffffa B |L1.2548|
;;;114 {
;;;115 if(!NF_WritePage(blockIndex,i,srcPt))// block num, page num, buffer
|L1.2568|
000a08 e1a02005 MOV r2,r5
000a0c e1a01006 MOV r1,r6
000a10 e1a00004 MOV r0,r4
000a14 ebfffffe BL NF_WritePage
000a18 e3500000 CMP r0,#0
000a1c 1a000005 BNE |L1.2616|
;;;116 {
;;;117 programError=1;
000a20 e3a07001 MOV r7,#1
;;;118 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000a24 e1a02006 MOV r2,r6
000a28 e1a01004 MOV r1,r4
000a2c e28f00fc ADR r0,|L1.2864|
000a30 ebfffffe BL _printf
;;;119 break;
000a34 ea000013 B |L1.2696|
;;;120 }
;;;121
;;;122 #if ECC_CHECK
;;;123 if(!NF_ReadPage(blockIndex,i,srcPt))
|L1.2616|
000a38 e1a02005 MOV r2,r5
000a3c e1a01006 MOV r1,r6
000a40 e1a00004 MOV r0,r4
000a44 ebfffffe BL NF_ReadPage
000a48 e3500000 CMP r0,#0
000a4c 1a000003 BNE |L1.2656|
;;;124 {
;;;125 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000a50 e1a02006 MOV r2,r6
000a54 e1a01004 MOV r1,r4
000a58 e28f00d0 ADR r0,|L1.2864|
000a5c ebfffffe BL _printf
;;;126 }
;;;127 #endif
;;;128
;;;129 srcPt+=512; // Increase buffer addr one page size
|L1.2656|
000a60 e2855f80 ADD r5,r5,#0x200
;;;130
;;;131 if((U32)srcPt>=(srcAddress+targetSize)) // Check end of buffer
000a64 e59f0098 LDR r0,|L1.2820|
000a68 e5900000 LDR r0,[r0,#0] ; srcAddress
000a6c e51f113c LDR r1,|L1.2360|
000a70 e5911000 LDR r1,[r1,#0] ; targetSize
000a74 e0800001 ADD r0,r0,r1
000a78 e1500005 CMP r0,r5
000a7c 8a000000 BHI |L1.2692|
;;;132 break; // Exit for loop
000a80 ea000000 B |L1.2696|
;;;133 }
|L1.2692|
000a84 eaffffdd B |L1.2560|
;;;134 Uart_Printf(".");
|L1.2696|
000a88 e28f00c0 ADR r0,|L1.2896|
000a8c ebfffffe BL _printf
;;;135 if(programError==1)
000a90 e3570001 CMP r7,#1
000a94 1a000003 BNE |L1.2728|
;;;136 {
;;;137 blockIndex++;
000a98 e2844001 ADD r4,r4,#1
;;;138 srcPt=saveSrcPt;
000a9c e1a05008 MOV r5,r8
;;;139 programError=0;
000aa0 e3a07000 MOV r7,#0
;;;140 continue;
000aa4 eaffffc3 B |L1.2488|
;;;141 }
;;;142
;;;143 if((U32)srcPt>=(srcAddress+targetSize))
|L1.2728|
000aa8 e59f0054 LDR r0,|L1.2820|
000aac e5900000 LDR r0,[r0,#0] ; srcAddress
000ab0 e51f1180 LDR r1,|L1.2360|
000ab4 e5911000 LDR r1,[r1,#0] ; targetSize
000ab8 e0800001 ADD r0,r0,r1
000abc e1500005 CMP r0,r5
000ac0 8a000000 BHI |L1.2760|
;;;144 break; // Exit while loop
000ac4 ea000001 B |L1.2768|
;;;145 blockIndex++;
|L1.2760|
000ac8 e2844001 ADD r4,r4,#1
;;;146
;;;147
;;;148 }
000acc eaffffb9 B |L1.2488|
;;;149
;;;150
;;;151 }
|L1.2768|
000ad0 e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.2772|
000ad4 53205b0a DCB "\n[ S"
000ad8 4b28434d DCB "MC(K"
000adc 32315339 DCB "9S12"
000ae0 30563830 DCB "08V0"
000ae4 4e20294d DCB "M) N"
000ae8 20444e41 DCB "AND "
000aec 73616c46 DCB "Flas"
000af0 72772068 DCB "h wr"
000af4 6e697469 DCB "itin"
000af8 72702067 DCB "g pr"
000afc 6172676f DCB "ogra"
000b00 000a5d6d DCB "m]\n\0"
|L1.2820|
000b04 00000000 DCD ||.bss$2||
|L1.2824|
000b08 72756f73 DCB "sour"
000b0c 62206563 DCB "ce b"
000b10 20657361 DCB "ase "
000b14 72646461 DCB "addr"
000b18 28737365 DCB "ess("
000b1c 30317830 DCB "0x10"
000b20 30303033 DCB "3000"
000b24 3d293030 DCB "00)="
000b28 78257830 DCB "0x%x"
000b2c 0000000a DCB "\n\0\0\0"
|L1.2864|
000b30 20434345 DCB "ECC "
000b34 6f727245 DCB "Erro"
000b38 6c622872 DCB "r(bl"
000b3c 3d6b636f DCB "ock="
000b40 702c6425 DCB "%d,p"
000b44 3d656761 DCB "age="
000b48 21216425 DCB "%d!!"
000b4c 00000a21 DCB "!\n\0\0"
|L1.2896|
000b50 0000002e DCB ".\0\0\0"
ENDP
K9S1208_PrintBadBlockNum PROC
;;;153 void K9S1208_PrintBadBlockNum(void)
;;;154 {
000b54 e92d4010 STMFD sp!,{r4,lr}
;;;155 int i;
;;;156
;;;157 Uart_Printf("\n[SMC(K9S1208V0M) NAND Flash bad block check]\n");
000b58 e28f0028 ADR r0,|L1.2952|
000b5c ebfffffe BL _printf
;;;158
;;;159
;;;160 for(i=0;i<4096;i++)
000b60 e3a04000 MOV r4,#0
|L1.2916|
000b64 e3540d40 CMP r4,#0x1000
000b68 aa000005 BGE |L1.2948|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -