📄 k9d1g08.txt
字号:
0008a8 62206120 DCB " a b" ;306
0008ac 62206461 DCB "ad b" ;306
0008b0 6b636f6c DCB "lock" ;306
0008b4 29782528 DCB "(%x)" ;306
0008b8 00000a5d DCB "]\n\0\0" ;306
ENDP
Input_x8_TargetBlock PROC
;;;261 static void Input_x8_TargetBlock(void)
;;;262 {
0008bc e92d4008 STMFD sp!,{r3,lr}
;;;263 Uart_Printf("\nAvailable target block number: 0~8191\n");
0008c0 e28f002c ADR r0,|L1.2292|
0008c4 ebfffffe BL _printf
;;;264 Uart_Printf("Input target start block number:");
0008c8 e28f004c ADR r0,|L1.2332|
0008cc ebfffffe BL _printf
;;;265 targetBlock=Uart_GetIntNum(); // Block number(0~8191)
0008d0 ebfffffe BL Uart_GetIntNum
0008d4 e59f1064 LDR r1,|L1.2368|
0008d8 e5810000 STR r0,[r1,#0] ; targetBlock
;;;266 // if(targetSize==0)
;;;267 {
;;;268 // Uart_Printf("1,048,576 = 0x100000, 31,457,280 = 0x1e00000 \n");
;;;269 Uart_Printf("Input program file size(bytes): ");
0008dc e28f0060 ADR r0,|L1.2372|
0008e0 ebfffffe BL _printf
;;;270 targetSize=Uart_GetIntNum(); // Total byte size
0008e4 ebfffffe BL Uart_GetIntNum
0008e8 e59f1078 LDR r1,|L1.2408|
0008ec e5810000 STR r0,[r1,#0] ; targetSize
;;;271 }
;;;272 }
0008f0 e8bd8008 LDMFD sp!,{r3,pc}
|L1.2292|
0008f4 6176410a DCB "\nAva"
0008f8 62616c69 DCB "ilab"
0008fc 7420656c DCB "le t"
000900 65677261 DCB "arge"
000904 6c622074 DCB "t bl"
000908 206b636f DCB "ock "
00090c 626d756e DCB "numb"
000910 203a7265 DCB "er: "
000914 31387e30 DCB "0~81"
000918 000a3139 DCB "91\n\0"
|L1.2332|
00091c 75706e49 DCB "Inpu"
000920 61742074 DCB "t ta"
000924 74656772 DCB "rget"
000928 61747320 DCB " sta"
00092c 62207472 DCB "rt b"
000930 6b636f6c DCB "lock"
000934 6d756e20 DCB " num"
000938 3a726562 DCB "ber:"
00093c 00000000 DCB "\0\0\0\0"
|L1.2368|
000940 00000008 DCD ||.bss$2|| + 8
|L1.2372|
000944 75706e49 DCB "Inpu"
000948 72702074 DCB "t pr"
00094c 6172676f DCB "ogra"
000950 6966206d DCB "m fi"
000954 7320656c DCB "le s"
000958 28657a69 DCB "ize("
00095c 65747962 DCB "byte"
000960 203a2973 DCB "s): "
000964 00000000 DCB "\0\0\0\0"
|L1.2408|
000968 0000000c DCD ||.bss$2|| + 12
ENDP
K9D1G08_Program PROC
;;;64 void K9D1G08_Program(void)
;;;65 {
00096c e92d41f0 STMFD sp!,{r4-r8,lr}
;;;66 int i,j;
;;;67 int programError=0;
000970 e3a07000 MOV r7,#0
;;;68 U8 *srcPt,*saveSrcPt;
;;;69 U32 blockIndex;
;;;70 U8 *testdata;
;;;71
;;;72 Uart_Printf("\n[ SMC(K9D1G08V0M) NAND Flash writing program]\n");
000974 e28f0f61 ADR r0,|L1.2816|
000978 ebfffffe BL _printf
;;;73
;;;74 rNFCONT&=~(1<<2); // Lock disable
00097c e51f07f4 LDR r0,|L1.400|
000980 e5900004 LDR r0,[r0,#4]
000984 e3c00004 BIC r0,r0,#4
000988 e51f1800 LDR r1,|L1.400|
00098c e5810004 STR r0,[r1,#4]
;;;75
;;;76 srcAddress=0x10300000;
000990 e1a00141 MOV r0,r1,ASR #2
000994 e59f1194 LDR r1,|L1.2864|
000998 e5810000 STR r0,[r1,#0] ; srcAddress
;;;77 Uart_Printf("source base address(0x10300000)=0x%x\n",srcAddress);
00099c e59f018c LDR r0,|L1.2864|
0009a0 e5901000 LDR r1,[r0,#0] ; srcAddress
0009a4 e28f0f62 ADR r0,|L1.2868|
0009a8 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();
0009ac ebfffffe BL Input_x8_TargetBlock
;;;87
;;;88
;;;89 Uart_Printf("target start block number =%d\n",targetBlock);
0009b0 e51f0078 LDR r0,|L1.2368|
0009b4 e5901000 LDR r1,[r0,#0] ; targetBlock
0009b8 e28f0f67 ADR r0,|L1.2908|
0009bc ebfffffe BL _printf
;;;90 Uart_Printf("target size (0x4000*n) =0x%x\n",targetSize);
0009c0 e51f0060 LDR r0,|L1.2408|
0009c4 e5901000 LDR r1,[r0,#0] ; targetSize
0009c8 e28f0f6c ADR r0,|L1.2944|
0009cc ebfffffe BL _printf
;;;91
;;;92 srcPt=(U8 *)srcAddress;
0009d0 e59f0158 LDR r0,|L1.2864|
0009d4 e5905000 LDR r5,[r0,#0] ; srcAddress
;;;93 blockIndex=targetBlock;
0009d8 e51f00a0 LDR r0,|L1.2368|
0009dc e5904000 LDR r4,[r0,#0] ; targetBlock
;;;94
;;;95 while(1)
0009e0 e1a00000 NOP
|L1.2532|
0009e4 e1a00000 NOP
;;;96 {
;;;97 saveSrcPt=srcPt;
0009e8 e1a08005 MOV r8,r5
;;;98
;;;99 #if BAD_CHECK
;;;100 if(NF_IsBadBlock(blockIndex)) // 1:bad 0:good
0009ec e1a00004 MOV r0,r4
0009f0 ebfffffe BL NF_IsBadBlock
0009f4 e3500000 CMP r0,#0
0009f8 0a000001 BEQ |L1.2564|
;;;101 {
;;;102 blockIndex++; // for next block
0009fc e2844001 ADD r4,r4,#1
;;;103 continue;
000a00 eafffff7 B |L1.2532|
;;;104 }
;;;105 #endif
;;;106
;;;107 if(!NF_EraseBlock(blockIndex))
|L1.2564|
000a04 e1a00004 MOV r0,r4
000a08 ebfffffe BL NF_EraseBlock
000a0c e3500000 CMP r0,#0
000a10 1a000001 BNE |L1.2588|
;;;108 {
;;;109 blockIndex++; // for next block
000a14 e2844001 ADD r4,r4,#1
;;;110 continue;
000a18 eafffff1 B |L1.2532|
;;;111 }
;;;112
;;;113 for(i=0;i<32;i++)
|L1.2588|
000a1c e3a06000 MOV r6,#0
|L1.2592|
000a20 e3560020 CMP r6,#0x20
000a24 aa000022 BGE |L1.2740|
000a28 ea000001 B |L1.2612|
|L1.2604|
000a2c e2866001 ADD r6,r6,#1
000a30 eafffffa B |L1.2592|
;;;114 {
;;;115 if(!NF_WritePage(blockIndex,i,srcPt))// block num, page num, buffer
|L1.2612|
000a34 e1a02005 MOV r2,r5
000a38 e1a01006 MOV r1,r6
000a3c e1a00004 MOV r0,r4
000a40 ebfffffe BL NF_WritePage
000a44 e3500000 CMP r0,#0
000a48 1a000005 BNE |L1.2660|
;;;116 {
;;;117 programError=1;
000a4c e3a07001 MOV r7,#1
;;;118 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000a50 e1a02006 MOV r2,r6
000a54 e1a01004 MOV r1,r4
000a58 e28f0f52 ADR r0,|L1.2984|
000a5c ebfffffe BL _printf
;;;119 break;
000a60 ea000013 B |L1.2740|
;;;120 }
;;;121
;;;122 #if ECC_CHECK
;;;123 if(!NF_ReadPage(blockIndex,i,srcPt))
|L1.2660|
000a64 e1a02005 MOV r2,r5
000a68 e1a01006 MOV r1,r6
000a6c e1a00004 MOV r0,r4
000a70 ebfffffe BL NF_ReadPage
000a74 e3500000 CMP r0,#0
000a78 1a000003 BNE |L1.2700|
;;;124 {
;;;125 Uart_Printf("ECC Error(block=%d,page=%d!!!\n",blockIndex,i);
000a7c e1a02006 MOV r2,r6
000a80 e1a01004 MOV r1,r4
000a84 e28f0f47 ADR r0,|L1.2984|
000a88 ebfffffe BL _printf
;;;126 }
;;;127 #endif
;;;128
;;;129 srcPt+=512; // Increase buffer addr one page size
|L1.2700|
000a8c e2855f80 ADD r5,r5,#0x200
;;;130
;;;131 if((U32)srcPt>=(srcAddress+targetSize)) // Check end of buffer
000a90 e59f0098 LDR r0,|L1.2864|
000a94 e5900000 LDR r0,[r0,#0] ; srcAddress
000a98 e51f1138 LDR r1,|L1.2408|
000a9c e5911000 LDR r1,[r1,#0] ; targetSize
000aa0 e0800001 ADD r0,r0,r1
000aa4 e1500005 CMP r0,r5
000aa8 8a000000 BHI |L1.2736|
;;;132 break; // Exit for loop
000aac ea000000 B |L1.2740|
;;;133 }
|L1.2736|
000ab0 eaffffdd B |L1.2604|
;;;134 Uart_Printf(".");
|L1.2740|
000ab4 e28f0f43 ADR r0,|L1.3016|
000ab8 ebfffffe BL _printf
;;;135 if(programError==1)
000abc e3570001 CMP r7,#1
000ac0 1a000003 BNE |L1.2772|
;;;136 {
;;;137 blockIndex++;
000ac4 e2844001 ADD r4,r4,#1
;;;138 srcPt=saveSrcPt;
000ac8 e1a05008 MOV r5,r8
;;;139 programError=0;
000acc e3a07000 MOV r7,#0
;;;140 continue;
000ad0 eaffffc3 B |L1.2532|
;;;141 }
;;;142
;;;143 if((U32)srcPt>=(srcAddress+targetSize))
|L1.2772|
000ad4 e59f0054 LDR r0,|L1.2864|
000ad8 e5900000 LDR r0,[r0,#0] ; srcAddress
000adc e51f117c LDR r1,|L1.2408|
000ae0 e5911000 LDR r1,[r1,#0] ; targetSize
000ae4 e0800001 ADD r0,r0,r1
000ae8 e1500005 CMP r0,r5
000aec 8a000000 BHI |L1.2804|
;;;144 break; // Exit while loop
000af0 ea000001 B |L1.2812|
;;;145 blockIndex++;
|L1.2804|
000af4 e2844001 ADD r4,r4,#1
;;;146
;;;147
;;;148 }
000af8 eaffffb9 B |L1.2532|
;;;149
;;;150
;;;151 }
|L1.2812|
000afc e8bd81f0 LDMFD sp!,{r4-r8,pc}
|L1.2816|
000b00 53205b0a DCB "\n[ S"
000b04 4b28434d DCB "MC(K"
000b08 47314439 DCB "9D1G"
000b0c 30563830 DCB "08V0"
000b10 4e20294d DCB "M) N"
000b14 20444e41 DCB "AND "
000b18 73616c46 DCB "Flas"
000b1c 72772068 DCB "h wr"
000b20 6e697469 DCB "itin"
000b24 72702067 DCB "g pr"
000b28 6172676f DCB "ogra"
000b2c 000a5d6d DCB "m]\n\0"
|L1.2864|
000b30 00000000 DCD ||.bss$2||
|L1.2868|
000b34 72756f73 DCB "sour"
000b38 62206563 DCB "ce b"
000b3c 20657361 DCB "ase "
000b40 72646461 DCB "addr"
000b44 28737365 DCB "ess("
000b48 30317830 DCB "0x10"
000b4c 30303033 DCB "3000"
000b50 3d293030 DCB "00)="
000b54 78257830 DCB "0x%x"
000b58 0000000a DCB "\n\0\0\0"
|L1.2908|
000b5c 67726174 DCB "targ"
000b60 73207465 DCB "et s"
000b64 74726174 DCB "tart"
000b68 6f6c6220 DCB " blo"
000b6c 6e206b63 DCB "ck n"
000b70 65626d75 DCB "umbe"
000b74 20202072 DCB "r "
000b78 3d202020 DCB " ="
000b7c 000a6425 DCB "%d\n\0"
|L1.2944|
000b80 67726174 DCB "targ"
000b84 73207465 DCB "et s"
000b88 20657a69 DCB "ize "
000b8c 20202020 DCB " "
000b90 28202020 DCB " ("
000b94 30347830 DCB "0x40"
000b98 6e2a3030 DCB "00*n"
000b9c 3d202029 DCB ") ="
000ba0 78257830 DCB "0x%x"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -