2013年9月6日金曜日

flash_lpc11u24.pyを調べる(2/3)

pyOCDのflash_lpc11u24.py のFlashアルゴリズムの消去ルーチンを逆アセンブルしてみた。
セクター0から7をPrepareして、Eraseコマンドで全消去しています。
pc_eraseAll
0x1000006A B5F8      PUSH     {r3-r7,lr}
0x1000006C 4C45      LDR      r4,[pc,#276]  ; @0x10000184 =8
0x1000006E 2032      MOVS     r0,#0x32      ; Prepare Sector for Erase
0x10000070 444C      ADD      r4,r4,r9
0x10000072 2500      MOVS     r5,#0x00      ; Start Sector
0x10000074 2607      MOVS     r6,#0x07      ; End Sector
0x10000076 4622      MOV      r2,r4
0x10000078 C261      STM      r2!,{r0,r5-r6}
0x1000007A 4621      MOV      r1,r4
0x1000007C 3114      ADDS     r1,r1,#0x14
0x1000007E 4F42      LDR      r7,[pc,#264]  ; @0x10000188 =0x1fff1ff1
0x10000080 4620      MOV      r0,r4
0x10000082 9100      STR      r1,[sp,#0x00]
0x10000084 47B8      BLX      r7            ; Call IAP Command
0x10000086 6960      LDR      r0,[r4,#0x14]
0x10000088 2800      CMP      r0,#0x00
0x1000008A D10C      BNE      0x100000A6
0x1000008C 2034      MOVS     r0,#0x34      ; Erase Sector
0x1000008E 4621      MOV      r1,r4
0x10000090 C161      STM      r1!,{r0,r5-r6}
0x10000092 483A      LDR      r0,[pc,#232]  ; @0x1000017C =4
0x10000094 4448      ADD      r0,r0,r9
0x10000096 6800      LDR      r0,[r0,#0x00]
0x10000098 60E0      STR      r0,[r4,#0x0C] ; CCLK in kHz
0x1000009A 4620      MOV      r0,r4
0x1000009C 9900      LDR      r1,[sp,#0x00]
0x1000009E 47B8      BLX      r7            ; Call IAP Command
0x100000A0 6960      LDR      r0,[r4,#0x14]
0x100000A2 2800      CMP      r0,#0x00
0x100000A4 D000      BEQ      0x100000A8
0x100000A6 2001      MOVS     r0,#0x01
0x100000A8 BDF8      POP      {r3-r7,pc}


(2013/9/6)
---

0 件のコメント: