📄 nandfls.cod
字号:
; 384 : goto WRITE_ERROR;
; 385 : }
; 386 :
; 387 : for(i = 0; i < dwNumSectors; i++)
00034 e3a09000 mov r9, #0
00038 e35a0000 cmp r10, #0
0003c 0a00004e beq |$L35658|
00040 e59f5160 ldr r5, [pc, #0x160]
00044 e3a0b080 mov r11, #0x80
00048 e5958044 ldr r8, [r5, #0x44]
0004c |$L35656|
; 388 : {
; 389 : memset(g_bSectorInfo, 0xff, 64);
0004c e3a02040 mov r2, #0x40
00050 e3a010ff mov r1, #0xFF
00054 e1a00005 mov r0, r5
00058 eb000000 bl memset
; 390 : if(pSectorBuff)
0005c e3570000 cmp r7, #0
00060 0a000022 beq |$L35659|
; 391 : {
; 392 : if(pSectorInfoBuff)
00064 e3540000 cmp r4, #0
; 393 : {
; 394 : g_bSectorInfo[0] = pSectorInfoBuff->bBadBlock;
00068 15d43005 ldrneb r3, [r4, #5]
; 395 : g_bSectorInfo[1] = pSectorInfoBuff->bOEMReserved;
; 396 : *((WORD*)g_bSectorInfo + 1) = pSectorInfoBuff->wReserved2;
; 397 : *((DWORD*)g_bSectorInfo + 1) = pSectorInfoBuff->dwReserved1;
; 398 : }
; 399 : #ifdef IMGENABLEECC
; 400 : bpEcc = (BYTE *)(g_bSectorInfo + 8);
; 401 : bpECCBuff = pSectorBuff;
; 402 : for( j = 0; j < ECC_CAL_TIMES; j++ )
; 403 : {
; 404 : NandCalECC(bpECCBuff, bpEcc);
; 405 : /*
; 406 : if(!Nand_ECC_ComputeECC(bpECCBuff, 512, bpEcc, ECC_BUFF_LEN))
; 407 : {
; 408 : RETAILMSG(1, (TEXT("Mass_FMD_WriteSector: Unable to compute ECC(sector 0x%x) !!!\r\n"), startSectorAddr));
; 409 : goto WRITE_ERROR;
; 410 : }
; 411 : */
; 412 : bpEcc += ECC_LEN;
; 413 : bpECCBuff += 512;
; 414 : }
; 415 : #endif
; 416 : PXANandInputCmd(CMD_WRITE);
; 417 : PXANandInputAdd(startSectorAddr, 0);
0006c e3a01000 mov r1, #0
00070 e1a00006 mov r0, r6
00074 15c53000 strneb r3, [r5]
00078 15d43004 ldrneb r3, [r4, #4]
0007c 15c53001 strneb r3, [r5, #1]
00080 11d430b6 ldrneh r3, [r4, #6]
00084 11c530b2 strneh r3, [r5, #2]
00088 15943000 ldrne r3, [r4]
0008c 15853004 strne r3, [r5, #4]
00090 e5c8b004 strb r11, [r8, #4]
00094 eb000000 bl |?PXANandInputAdd@@YAXKK@Z|
; 418 : PXANandInputData(sg_PXANandFlash.Info.wDataBytesPerSector, pSectorBuff);
00098 e1d535be ldrh r3, [r5, #0x5E]
0009c e3a01000 mov r1, #0
000a0 e1b00003 movs r0, r3
000a4 0a000005 beq |$L36138|
000a8 |$L36136|
000a8 e7d12007 ldrb r2, [r1, +r7]
000ac e5953044 ldr r3, [r5, #0x44]
000b0 e2811001 add r1, r1, #1
000b4 e1510000 cmp r1, r0
000b8 e5c32000 strb r2, [r3]
000bc 3afffff9 bcc |$L36136|
000c0 |$L36138|
; 419 : #ifdef IMGENABLEECC
; 420 : PXANandInputData(ECC_PLUS_SECTORINFO, g_bSectorInfo);
; 421 : pSectorInfoBuff++;
; 422 : #else
; 423 : if(pSectorInfoBuff)
000c0 e3540000 cmp r4, #0
000c4 0a000007 beq |$L35663|
; 424 : {
; 425 : PXANandInputData(8, g_bSectorInfo);
000c8 e3a01000 mov r1, #0
000cc |$L36144|
000cc e7d12005 ldrb r2, [r1, +r5]
000d0 e5953044 ldr r3, [r5, #0x44]
000d4 e2811001 add r1, r1, #1
000d8 e3510008 cmp r1, #8
000dc e5c32000 strb r2, [r3]
000e0 3afffff9 bcc |$L36144|
; 426 : pSectorInfoBuff++;
000e4 e2844008 add r4, r4, #8
000e8 |$L35663|
; 427 : }
; 428 : #endif
; 429 : pSectorBuff++;
000e8 e2877001 add r7, r7, #1
; 430 : }
; 431 : else
000ec ea000013 b |$L35664|
000f0 |$L35659|
; 432 : {
; 433 : g_bSectorInfo[0] = pSectorInfoBuff->bBadBlock;
000f0 e5d43005 ldrb r3, [r4, #5]
; 434 : g_bSectorInfo[1] = pSectorInfoBuff->bOEMReserved;
; 435 : *((WORD*)g_bSectorInfo + 1) = pSectorInfoBuff->wReserved2;
; 436 : *((DWORD*)g_bSectorInfo + 1) = pSectorInfoBuff->dwReserved1;
; 437 : PXANandInputCmd(CMD_WRITE);
; 438 : PXANandInputAdd(startSectorAddr, sg_PXANandFlash.Info.wDataBytesPerSector);
000f4 e1a00006 mov r0, r6
000f8 e5c53000 strb r3, [r5]
000fc e5d43004 ldrb r3, [r4, #4]
00100 e5c53001 strb r3, [r5, #1]
00104 e1d430b6 ldrh r3, [r4, #6]
00108 e1c530b2 strh r3, [r5, #2]
0010c e5943000 ldr r3, [r4]
00110 e5853004 str r3, [r5, #4]
00114 e5c8b004 strb r11, [r8, #4]
00118 e1d515be ldrh r1, [r5, #0x5E]
0011c eb000000 bl |?PXANandInputAdd@@YAXKK@Z|
; 439 : PXANandInputData(8, g_bSectorInfo);
00120 e3a01000 mov r1, #0
00124 |$L36151|
00124 e7d12005 ldrb r2, [r1, +r5]
00128 e5953044 ldr r3, [r5, #0x44]
0012c e2811001 add r1, r1, #1
00130 e3510008 cmp r1, #8
00134 e5c32000 strb r2, [r3]
00138 3afffff9 bcc |$L36151|
; 440 : pSectorInfoBuff++;
0013c e2844008 add r4, r4, #8
00140 |$L35664|
; 441 : }
; 442 : PXANandInputCmd(CMD_WRITE2);
00140 e5953044 ldr r3, [r5, #0x44]
00144 e3a02010 mov r2, #0x10
00148 e5c32004 strb r2, [r3, #4]
; 443 : NandDeviceReady();
0014c eb000000 bl |?NandDeviceReady@@YAXXZ|
; 444 : PXANandCheckStatus(&status);
00150 e5953044 ldr r3, [r5, #0x44]
00154 e3a02070 mov r2, #0x70
00158 e5c32004 strb r2, [r3, #4]
0015c e5958044 ldr r8, [r5, #0x44]
00160 e5d83000 ldrb r3, [r8]
; 445 :
; 446 : if(status & 0x01)
00164 e3130001 tst r3, #1
00168 1a000006 bne |$L36175|
0016c e2899001 add r9, r9, #1
00170 e159000a cmp r9, r10
; 449 : goto WRITE_ERROR;
; 450 : }
; 451 :
; 452 : startSectorAddr++;
00174 e2866001 add r6, r6, #1
00178 3affffb3 bcc |$L35656|
0017c |$L35658|
; 453 : }
; 454 :
; 455 : return TRUE;
0017c e3a00001 mov r0, #1
; 460 : }
00180 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00184 e12fff1e bx lr
00188 |$L36175|
; 447 : {
; 448 : RETAILMSG(1,(TEXT("FMD_WriteSector: Unable to FMD_WriteSector(sector 0x%x), status=0x%x !!!\r\n"), startSectorAddr, status));
00188 e59f0014 ldr r0, [pc, #0x14]
0018c e1a02003 mov r2, r3
00190 e1a01006 mov r1, r6
00194 eb000000 bl NKDbgPrintfW
; 456 :
; 457 : WRITE_ERROR:
; 458 :
; 459 : return FALSE;
00198 e3a00000 mov r0, #0
0019c |$WRITE_ERROR$35654|
; 460 : }
0019c e8bd4ff0 ldmia sp!, {r4 - r11, lr}
001a0 e12fff1e bx lr
001a4 |$L36198|
001a4 00000000 DCD |??_C@_1JG@PAJOOBDI@?$AAF?$AAM?$AAD?$AA_?$AAW?$AAr?$AAi?$AAt?$AAe?$AAS?$AAe?$AAc?$AAt?$AAo?$AAr?$AA?3?$AA?5?$AAU?$AAn?$AAa@|
001a8 00000000 DCD |g_bSectorInfo|
001ac 00000000 DCD |??_C@_1FG@IIEAIPBG@?$AAM?$AAa?$AAs?$AAs?$AA_?$AAF?$AAM?$AAD?$AA_?$AAW?$AAr?$AAi?$AAt?$AAe?$AAS?$AAe?$AAc?$AAt?$AAo?$AAr@|
001b0 |$M36194|
ENDP ; |Nand_FMD_WriteSector|
EXPORT |Nand_FMD_EraseBlock|
EXPORT |??_C@_1CC@OHMNCLGB@?$AAE?$AAr?$AAa?$AAs?$AAe?$AA?5?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6?$AA?$AA@| [ DATA ] ; `string'
00000 AREA |.text| { |Nand_FMD_EraseBlock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Nand_FMD_EraseBlock|, PDATA, SELECTION=5, ASSOC=|.text| { |Nand_FMD_EraseBlock| } ; comdat associative
|$T36240| DCD |$L36239|
DCD 0x40002a01
00000 AREA |.rdata| { |??_C@_1CC@OHMNCLGB@?$AAE?$AAr?$AAa?$AAs?$AAe?$AA?5?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1CC@OHMNCLGB@?$AAE?$AAr?$AAa?$AAs?$AAe?$AA?5?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6?$AA?$AA@| DCB "E"
DCB 0x0, "r", 0x0, "a", 0x0, "s", 0x0, "e", 0x0, " ", 0x0, "B"
DCB 0x0, "l", 0x0, "o", 0x0, "c", 0x0, "k", 0x0, " ", 0x0, "%"
DCB 0x0, "d", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |Nand_FMD_EraseBlock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Nand_FMD_EraseBlock| PROC
; 475 : {
00000 |$L36239|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M36237|
00004 e1a04000 mov r4, r0
; 476 : BYTE status;
; 477 :
; 478 : RETAILMSG(1, (TEXT("Erase Block %d\r\n"), blockID));
00008 e59f0094 ldr r0, [pc, #0x94]
0000c e1a01004 mov r1, r4
00010 eb000000 bl NKDbgPrintfW
; 479 :
; 480 : PXANandInputCmd(CMD_ERASE);
00014 e59f5084 ldr r5, [pc, #0x84]
00018 e3a02060 mov r2, #0x60
0001c e5953004 ldr r3, [r5, #4]
00020 e5c32004 strb r2, [r3, #4]
; 481 : PXANandInputRowAdd(blockID * sg_PXANandFlash.Info.wSectorsPerBlock);
00024 e1d521bc ldrh r2, [r5, #0x1C]
00028 e5953028 ldr r3, [r5, #0x28]
0002c e0000492 mul r0, r2, r4
00030 e3530000 cmp r3, #0
00034 0a00000a beq |$L36209|
00038 e3a01000 mov r1, #0
0003c |$L36207|
0003c e5952004 ldr r2, [r5, #4]
00040 e1a03181 mov r3, r1, lsl #3
00044 e1a03330 mov r3, r0, lsr r3
00048 e2811001 add r1, r1, #1
0004c e5c23008 strb r3, [r2, #8]
00050 e5953028 ldr r3, [r5, #0x28]
00054 e1a01801 mov r1, r1, lsl #16
00058 e1a01821 mov r1, r1, lsr #16
0005c e1510003 cmp r1, r3
00060 3afffff5 bcc |$L36207|
00064 |$L36209|
; 482 : PXANandInputCmd(CMD_ERASE2);
00064 e5953004 ldr r3, [r5, #4]
00068 e3a020d0 mov r2, #0xD0
0006c e5c32004 strb r2, [r3, #4]
; 483 : NandDeviceReady();
00070 eb000000 bl |?NandDeviceReady@@YAXXZ|
; 484 : PXANandCheckStatus(&status);
00074 e5953004 ldr r3, [r5, #4]
00078 e3a02070 mov r2, #0x70
0007c e5c32004 strb r2, [r3, #4]
00080 e5953004 ldr r3, [r5, #4]
00084 e5d33000 ldrb r3, [r3]
; 485 :
; 486 : if(status & 0x01)
00088 e3130001 tst r3, #1
; 487 : return FALSE;
0008c 13a00000 movne r0, #0
; 490 : }
00090 18bd4030 ldmneia sp!, {r4, r5, lr}
; 488 :
; 489 : return TRUE;
00094 03a00001 moveq r0, #1
; 490 : }
00098 08bd4030 ldmeqia sp!, {r4, r5, lr}
0009c e12fff1e bx lr
000a0 |$L36242|
000a0 00000000 DCD |?sg_PXANandFlash@@3UstPXANandFlash@@A|
000a4 00000000 DCD |??_C@_1CC@OHMNCLGB@?$AAE?$AAr?$AAa?$AAs?$AAe?$AA?5?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6?$AA?$AA@|
000a8 |$M36238|
ENDP ; |Nand_FMD_EraseBlock|
EXPORT |Nand_FMD_GetBlockStatus|
EXPORT |??_C@_1GK@NOOCEMEK@?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?3?$AA0?$AAx?$AA?$CF?$AAX?$AA?5?$AA?3?$AA?5?$AAV?$AAA?$AAL?$AAI?$AAD?$AAA?$AAD@| [ DATA ] ; `string'
EXPORT |??_C@_1HE@JEMHKBHM@?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?3?$AA0?$AAx?$AA?$CF?$AAX?$AA?5?$AAp?$AAa?$AAg?$AAe?$AA?3?$AA1?$AA?5?$AAV?$AAA@| [ DATA ] ; `string'
00000 AREA |.text| { |Nand_FMD_GetBlockStatus| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Nand_FMD_GetBlockStatus|, PDATA, SELECTION=5, ASSOC=|.text| { |Nand_FMD_GetBlockStatus| } ; comdat associative
|$T36259| DCD |$L36258|
DCD 0x40002d02
00000 AREA |.rdata| { |??_C@_1HE@JEMHKBHM@?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?3?$AA0?$AAx?$AA?$CF?$AAX?$AA?5?$AAp?$AAa?$AAg?$AAe?$AA?3?$AA1?$AA?5?$AAV?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -