.text @ 11800A80 sub_11800A80: MOV R0, #0xFFFFFFFF B sub_1181ACB8 @ 1181ACB8 sub_1181ACB8: MRS R3, CPSR AND R1, R0, #0xC0 BIC R2, R3, #0xC0 ORR R2, R2, R1 MSR CPSR_cxsf, R2 ANDS R0, R3, #0xC0 MOVNE R0, #0xFFFFFFFF MOVEQ R0, #0 BX LR @ 1181766C .globl software_ID_entry_SST39WF400_nor_flash software_ID_entry_SST39WF400_nor_flash: var_20 = -0x20 var_1C = -0x1C var_18 = -0x18 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x18 STR R0, [R11,#var_10] STR R1, [R11,#var_14] BL sub_11800A80 MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_18] @MOV R3, #0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_18] ADD R2, R3, R2 @MOV R3, # 0xFFFFAAAA MVN R3, #0x5500 @<--------- sub R3, R3, #0x55 @<------ STRH R3, [R2] @ Write AA to address 5555 @MOV R3, #0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_18] ADD R2, R3, R2 @MOV R3, #0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, #0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_18] ADD R2, R3, R2 @MOV R3, #0xffff9090 <-------------------- 3c4 MVN R3, #0x6F00 sub R3, R3, #0x6F STRH R3, [R2] @ Write 90 to address 5555 MOV R0, #0x46 BL sub_11817074 MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_1C] LDR R2, [R11,#var_10] LDR R3, [R11,#var_1C] LDRH R3, [R3] STRH R3, [R2] LDR R3, [R11,#var_10] LDRH R3, [R3] CMP R3, #0xBF BNE loc_11817788 LDR R1, [R11,#var_14] MOV R2, #2 LDR R3, [R11,#var_1C] ADD R3, R2, R3 LDRH R3, [R3] STRH R3, [R1] LDR R3, [R11,#var_14] LDRH R3, [R3] CMP R3, #0x2780 @MOV R3, #0x2700 @ADD R3, R3, #0x80 MOVNE R1, #0 MOVEQ R1, #1 LDR R3, [R11,#var_14] LDRH R2, [R3] @MOV R3, #0x272F MOV R3, #0x2700 ADD R3, R3, #0x2F CMP R2, R3 MOVNE R3, #0 MOVEQ R3, #1 ORR R3, R1, R3 CMP R3, #0 BEQ loc_11817778 BL software_or_CFI_exit_SST39WF400_nor_flash MOV R3, #2 STR R3, [R11,#var_20] B loc_11817794 @ --------------------------------------------------------------------------- loc_11817778: BL software_or_CFI_exit_SST39WF400_nor_flash MOV R3, #1 STR R3, [R11,#var_20] B loc_11817794 @ --------------------------------------------------------------------------- loc_11817788: BL software_or_CFI_exit_SST39WF400_nor_flash MOV R3, #1 STR R3, [R11,#var_20] loc_11817794: LDR R0, [R11,#var_20] SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} @ 118177A0 .globl software_or_CFI_exit_SST39WF400_nor_flash software_or_CFI_exit_SST39WF400_nor_flash: var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #8 MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_10] @MOV R3, #0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_10] ADD R2, R3, R2 MOV R3, #0xAA STRH R3, [R2] @ Write AA to address 5555 @MOV R3, #0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_10] ADD R2, R3, R2 MOV R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, #0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_10] ADD R2, R3, R2 MOV R3, #0xF0 STRH R3, [R2] @ Write F0 to address 5555 MOV R0, #0x96 BL sub_11817074 MOV R3, #1 MOV R0, R3 SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} sub_11817074: var_18 = -0x18 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x10 STR R0, [R11,#var_10] LDR R2, [R11,#var_10] MOV R3, R2 MOV R3, R3,LSL#1 ADD R3, R3, R2 MOV R3, R3,LSL#3 RSB R3, R2, R3 MOV R3, R3,LSL#1 MOV R3, R3,LSR#5 STR R3, [R11,#var_18] MOV R3, #0 STR R3, [R11,#var_14] loc_118170B4: LDR R2, [R11,#var_14] LDR R3, [R11,#var_18] CMP R2, R3 BHI loc_118170D4 LDR R3, [R11,#var_14] ADD R3, R3, #1 STR R3, [R11,#var_14] B loc_118170B4 @ --------------------------------------------------------------------------- loc_118170D4: SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} @ 118170DC .globl block_erase_SST39WF400_nor_flash block_erase_SST39WF400_nor_flash: var_1C = -0x1C var_18 = -0x18 var_16 = -0x16 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP @ Erase the given block in NOR Flash. STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x10 STR R0, [R11,#var_10] @MOV R3, 0x2710 MOV R3, #0x2700 ADD R3, R3, #0x10 STRH R3, [R11,#var_18] MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_14] @MOV R3, 0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA mvn r3,#0x00005500 sub r3,r3,#0x00000055 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, 0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFF8080 mvn r3,#0x00007f00 sub r3,r3,#0x0000007f STRH R3, [R2] @ Write 80 to address 5555 @MOV R3, 0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA mvn r3,#0x00005500 sub r3,r3,#0x00000055 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA LDR R3, [R11,#var_10] MOV R3, R3,LSR#1 MOV R2, R3,LSL#1 LDR R3, [R11,#var_14] ADD R2, R2, R3 @MOV R3, 0x5050 @ Write 50 to block address r2-r3 MOV R3, #0x5000 ADD R3, R3, #0x50 STRH R3, [R2] loc_118171B0: MOV R0, #0x1E BL sub_11817818 LDR R3, [R11,#var_10] MOV R3, R3,LSR#1 MOV R2, R3,LSL#1 LDR R3, [R11,#var_14] ADD R3, R2, R3 LDRH R3, [R3] STRH R3, [R11,#var_16] LDRH R3, [R11,#var_18] SUB R3, R3, #1 STRH R3, [R11,#var_18] MOV R3, R3,LSL#16 MOV R2, R3,LSR#16 @MOV R3, 0xFFFF mov r3,#0x0000ff00 add r3,r3,#0x000000ff CMP R2, R3 BNE loc_11817204 MOV R3, #1 STR R3, [R11,#var_1C] B loc_11817224 loc_11817204: LDRH R3, [R11,#var_16] MOV R3, R3,LSR#7 AND R3, R3, #1 CMP R3, #0 BNE loc_1181721C B loc_118171B0 loc_1181721C: MOV R3, #2 STR R3, [R11,#var_1C] loc_11817224: LDR R0, [R11,#var_1C] SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} @ 11817230 .globl sector_erase_SST39WF400_nor_flash sector_erase_SST39WF400_nor_flash: var_1C = -0x1C var_18 = -0x18 var_16 = -0x16 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x10 STR R0, [R11,#var_10] @MOV R3, 0x2710 MOV R3, #0x2700 ADD R3, R3, #0x10 STRH R3, [R11,#var_18] MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_14] @MOV R3, 0xAAAA MOV R3, #0xAA00 ADD R3, R3, #0xAA LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA mvn r3,#0x00005500 sub r3,r3,#0x00000055 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFF8080 MVN R3, #0x7f00 SUB R3, R3, #0x7f STRH R3, [R2] @ Write 80 to address 5555 @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA MVN R3, #0x5500 SUB R3, R3, #0x55 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA LDR R3, [R11,#var_10] MOV R3, R3,LSR#1 MOV R2, R3,LSL#1 LDR R3, [R11,#var_14] ADD R2, R2, R3 @MOV R3, 0x3030 MOV R3, #0x3000 ADD R3, R3, #0x30 STRH R3, [R2] @ Write 30 to sector address r2-r3 loc_11817304: MOV R0, #0x1E BL sub_11817818 LDR R3, [R11,#var_10] MOV R3, R3,LSR#1 MOV R2, R3,LSL#1 LDR R3, [R11,#var_14] ADD R3, R2, R3 LDRH R3, [R3] STRH R3, [R11,#var_16] LDRH R3, [R11,#var_18] SUB R3, R3, #1 STRH R3, [R11,#var_18] MOV R3, R3,LSL#16 MOV R2, R3,LSR#16 @MOV R3, 0xFFFF MOV R3, #0xff00 ADD R3, R3, #0xff CMP R2, R3 BNE loc_11817358 MOV R3, #1 STR R3, [R11,#var_1C] B loc_11817378 loc_11817358: LDRH R3, [R11,#var_16] MOV R3, R3,LSR#7 AND R3, R3, #1 CMP R3, #0 BNE loc_11817370 B loc_11817304 loc_11817370: MOV R3, #2 STR R3, [R11,#var_1C] loc_11817378: LDR R0, [R11,#var_1C] SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} @ 11817384 .globl chip_erase_SST39WF400_nor_flash chip_erase_SST39WF400_nor_flash: var_1C = -0x1C var_18 = -0x18 var_16 = -0x16 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x10 STR R0, [R11,#var_10] @MOV R3, 0x2710 MOV R3, #0x2700 ADD R3, R3, #0x10 STRH R3, [R11,#var_18] MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_14] @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA MVN R3, #0x5500 sub R3, R3, #0x55 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x05500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFF8080 MVN R3, #0x7f00 sub R3, R3, #0x7f STRH R3, [R2] @ Write 80 to address 5555 @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA MVN R3, #0x5500 sub R3, R3, #0x55 STRH R3, [R2] @ Write AA to address 5555 @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @ Write 55 to address 2AAA @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_14] ADD R2, R3, R2 @MOV R3, 0x1010 MOV R3, #0x1000 ADD R3, R3, #0x10 STRH R3, [R2] @ Write 10 to address 5555 loc_11817454: MOV R0, #0x96 BL sub_11817818 LDR R3, [R11,#var_14] LDRH R3, [R3] STRH R3, [R11,#var_16] LDRH R3, [R11,#var_18] SUB R3, R3, #1 STRH R3, [R11,#var_18] MOV R3, R3,LSL#16 MOV R2, R3,LSR#16 @MOV R3, 0xFFFF MOV R3, #0xff00 ADD R3, R3, #0xff CMP R2, R3 BNE loc_11817498 MOV R3, #1 STR R3, [R11,#var_1C] B loc_118174BC loc_11817498: LDRH R3, [R11,#var_16] MOV R3, R3,LSR#7 AND R3, R3, #1 CMP R3, #0 @ Test bit #7 BNE loc_118174B0 B loc_11817454 loc_118174B0: BL software_or_CFI_exit_SST39WF400_nor_flash MOV R3, #2 STR R3, [R11,#var_1C] loc_118174BC: LDR R0, [R11,#var_1C] SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} @ 118174C8 .globl program_word_SST39WF400_nor_flash program_word_SST39WF400_nor_flash: var_24 = -0x24 var_1E = -0x1E var_1C = -0x1C var_18 = -0x18 var_12 = -0x12 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x18 STR R0, [R11,#var_10] MOV R3, R1 STR R2, [R11,#var_18] STRH R3, [R11,#var_12] @MOV R3, 0x2710 MOV R3, #0x2700 ADD R3, R3, #0x10 STRH R3, [R11,#var_1E] MOV R3, #0xD4000000 @ Start of NOR Flash (virtual address) STR R3, [R11,#var_1C] @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_1C] ADD R2, R3, R2 @MOV R3, 0xFFFFAAAA MVN R3, #0x5500 sub R3, R3, #0x55 STRH R3, [R2] @MOV R3, 0x5554 MOV R3, #0x5500 ADD R3, R3, #0x54 LDR R2, [R11,#var_1C] ADD R2, R3, R2 @MOV R3, 0x5555 MOV R3, #0x5500 ADD R3, R3, #0x55 STRH R3, [R2] @MOV R3, 0xAAAA MOV R3, #0xaa00 ADD R3, R3, #0xaa LDR R2, [R11,#var_1C] ADD R2, R3, R2 @MOV R3, 0xFFFFA0A0 MVN R3, #0x5f00 sub R3, R3, #0x5f STRH R3, [R2] LDR R3, [R11,#var_10] MOV R2, R3,LSL#1 LDR R3, [R11,#var_1C] ADD R2, R2, R3 LDRH R3, [R11,#var_12] STRH R3, [R2] loc_11817568: LDR R3, [R11,#var_10] MOV R2, R3,LSL#1 LDR R3, [R11,#var_1C] ADD R3, R2, R3 LDRH R3, [R3] AND R2, R3, #0x80 LDRH R3, [R11,#var_12] AND R3, R3, #0x80 CMP R2, R3 BEQ loc_118175C0 LDRH R3, [R11,#var_1E] SUB R3, R3, #1 STRH R3, [R11,#var_1E] MOV R3, R3,LSL#16 MOV R2, R3,LSR#16 @MOV R3, 0xFFFF MOV R3, #0xff00 ADD R3, R3, #0xff CMP R2, R3 BNE loc_11817568 MOV R3, #1 STR R3, [R11,#var_24] B loc_118175C8 loc_118175C0: MOV R3, #2 STR R3, [R11,#var_24] loc_118175C8: LDR R0, [R11,#var_24] SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC} sub_11817818: var_18 = -0x18 var_14 = -0x14 var_10 = -0x10 oldR11 = -0xC oldSP = -8 oldLR = -4 MOV R12, SP STMFD SP!, {R11,R12,LR,PC} SUB R11, R12, #4 SUB SP, SP, #0x10 STR R0, [R11,#var_10] MOV R3, #0 STR R3, [R11,#var_14] loc_11817834: LDR R2, [R11,#var_14] LDR R3, [R11,#var_10] CMP R2, R3 BCS loc_11817878 MOV R3, #0 STR R3, [R11,#var_18] loc_1181784C: LDR R3, [R11,#var_18] CMP R3, #0x3B BHI loc_11817868 LDR R3, [R11,#var_18] ADD R3, R3, #1 STR R3, [R11,#var_18] B loc_1181784C loc_11817868: LDR R3, [R11,#var_14] ADD R3, R3, #1 STR R3, [R11,#var_14] B loc_11817834 loc_11817878: SUB SP, R11, #0xC LDMFD SP, {R11,SP,PC}