⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blcommon.cod

📁 Ep93XX TionProV2 BSP
💻 COD
📖 第 1 页 / 共 3 页
字号:
  00114	e59d3044	 ldr         r3, [sp, #0x44]
  00118	e3530000	 cmp         r3, #0
  0011c	1a000004	 bne         |$L38504|

; 229  :         EdbgOutputDebugString ("!OEMVERIFYMEMORY: Invalid image\r\n");

  00120	e59f0264	 ldr         r0, [pc, #0x264]
  00124	eb000000	 bl          EdbgOutputDebugString

; 230  :         return FALSE;

  00128	e3a03000	 mov         r3, #0
  0012c	e58d3030	 str         r3, [sp, #0x30]
  00130	ea00008c	 b           |$L38485|
  00134		 |$L38504|

; 231  :     }
; 232  : 
; 233  :     // check for flash image. Start erasing if it is.
; 234  :     if ((fIsFlash = OEMIsFlashAddr (*pdwImageStart))  ){

  00134	e59d3080	 ldr         r3, [sp, #0x80]
  00138	e5930000	 ldr         r0, [r3]
  0013c	eb000000	 bl          OEMIsFlashAddr
  00140	e58d0048	 str         r0, [sp, #0x48]
  00144	e59d3048	 ldr         r3, [sp, #0x48]
  00148	e58d3018	 str         r3, [sp, #0x18]
  0014c	e59d3018	 ldr         r3, [sp, #0x18]
  00150	e3530000	 cmp         r3, #0
  00154	0a00001b	 beq         |$L38506|

; 235  : 
; 236  : 		extern BOOL InitializeFlash( void );
; 237  : 		if(! InitializeFlash( ) ){

  00158	eb000000	 bl          InitializeFlash
  0015c	e58d004c	 str         r0, [sp, #0x4C]
  00160	e59d304c	 ldr         r3, [sp, #0x4C]
  00164	e3530000	 cmp         r3, #0
  00168	1a000004	 bne         |$L38509|

; 238  : 			EdbgOutputDebugString ("Flash can't be initialized\r\n");

  0016c	e59f0214	 ldr         r0, [pc, #0x214]
  00170	eb000000	 bl          EdbgOutputDebugString

; 239  : 			return FALSE;

  00174	e3a03000	 mov         r3, #0
  00178	e58d3030	 str         r3, [sp, #0x30]
  0017c	ea000079	 b           |$L38485|
  00180		 |$L38509|

; 240  : 		}
; 241  : 		EdbgOutputDebugString ("Image will put to 0x%x\r\n",*pdwImageStart);

  00180	e59d3080	 ldr         r3, [sp, #0x80]
  00184	e5931000	 ldr         r1, [r3]
  00188	e59f01f4	 ldr         r0, [pc, #0x1F4]
  0018c	eb000000	 bl          EdbgOutputDebugString

; 242  :         if( !OEMStartEraseFlash (*pdwImageStart, *pdwImageLength)) {

  00190	e59d3084	 ldr         r3, [sp, #0x84]
  00194	e5931000	 ldr         r1, [r3]
  00198	e59d3080	 ldr         r3, [sp, #0x80]
  0019c	e5930000	 ldr         r0, [r3]
  001a0	eb000000	 bl          OEMStartEraseFlash
  001a4	e58d0050	 str         r0, [sp, #0x50]
  001a8	e59d3050	 ldr         r3, [sp, #0x50]
  001ac	e3530000	 cmp         r3, #0
  001b0	1a000004	 bne         |$L38512|

; 243  : 
; 244  : 			EdbgOutputDebugString ("Invalid Flash Address/Length\r\n");

  001b4	e59f01c4	 ldr         r0, [pc, #0x1C4]
  001b8	eb000000	 bl          EdbgOutputDebugString

; 245  : 			return FALSE;

  001bc	e3a03000	 mov         r3, #0
  001c0	e58d3030	 str         r3, [sp, #0x30]
  001c4	ea000067	 b           |$L38485|
  001c8		 |$L38512|
  001c8		 |$L38506|
  001c8		 |$L38521|

; 246  : 		}
; 247  :     }
; 248  : 
; 249  :     // read records (start with address, length, and checksum)
; 250  :     while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
; 251  :         && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
; 252  :         && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {

  001c8	e28d1020	 add         r1, sp, #0x20
  001cc	e3a00004	 mov         r0, #4
  001d0	eb000000	 bl          OEMReadData
  001d4	e58d0054	 str         r0, [sp, #0x54]
  001d8	e59d3054	 ldr         r3, [sp, #0x54]
  001dc	e3530000	 cmp         r3, #0
  001e0	0a00005e	 beq         |$L38522|
  001e4	e28d1014	 add         r1, sp, #0x14
  001e8	e3a00004	 mov         r0, #4
  001ec	eb000000	 bl          OEMReadData
  001f0	e58d0058	 str         r0, [sp, #0x58]
  001f4	e59d3058	 ldr         r3, [sp, #0x58]
  001f8	e3530000	 cmp         r3, #0
  001fc	0a000057	 beq         |$L38522|
  00200	e28d101c	 add         r1, sp, #0x1C
  00204	e3a00004	 mov         r0, #4
  00208	eb000000	 bl          OEMReadData
  0020c	e58d005c	 str         r0, [sp, #0x5C]
  00210	e59d305c	 ldr         r3, [sp, #0x5C]
  00214	e3530000	 cmp         r3, #0
  00218	0a000050	 beq         |$L38522|

; 253  : 
; 254  :         // check for last record
; 255  :         if (!dwRecAddr && !dwRecChk) {

  0021c	e59d3020	 ldr         r3, [sp, #0x20]
  00220	e3530000	 cmp         r3, #0
  00224	1a00001f	 bne         |$L38523|
  00228	e59d301c	 ldr         r3, [sp, #0x1C]
  0022c	e3530000	 cmp         r3, #0
  00230	1a00001c	 bne         |$L38523|

; 256  : 
; 257  :             // update launch address
; 258  :             *pdwLaunchAddr = dwRecLen;

  00234	e59d2014	 ldr         r2, [sp, #0x14]
  00238	e59d3088	 ldr         r3, [sp, #0x88]
  0023c	e5832000	 str         r2, [r3]

; 259  : 
; 260  :             // write to flash if it's flash image
; 261  :             if (fIsFlash) {

  00240	e59d3018	 ldr         r3, [sp, #0x18]
  00244	e3530000	 cmp         r3, #0
  00248	0a000013	 beq         |$L38524|

; 262  :                 // finish the flash erase
; 263  :                 if (!OEMFinishEraseFlash ()) {

  0024c	eb000000	 bl          OEMFinishEraseFlash
  00250	e58d0060	 str         r0, [sp, #0x60]
  00254	e59d3060	 ldr         r3, [sp, #0x60]
  00258	e3530000	 cmp         r3, #0
  0025c	1a000002	 bne         |$L38525|

; 264  :                     return FALSE;

  00260	e3a03000	 mov         r3, #0
  00264	e58d3030	 str         r3, [sp, #0x30]
  00268	ea00003e	 b           |$L38485|
  0026c		 |$L38525|

; 265  :                 }
; 266  :                 if (!OEMWriteFlash (*pdwImageStart, *pdwImageLength)) {

  0026c	e59d3084	 ldr         r3, [sp, #0x84]
  00270	e5931000	 ldr         r1, [r3]
  00274	e59d3080	 ldr         r3, [sp, #0x80]
  00278	e5930000	 ldr         r0, [r3]
  0027c	eb000000	 bl          OEMWriteFlash
  00280	e58d0064	 str         r0, [sp, #0x64]
  00284	e59d3064	 ldr         r3, [sp, #0x64]
  00288	e3530000	 cmp         r3, #0
  0028c	1a000002	 bne         |$L38526|

; 267  :                     return FALSE;

  00290	e3a03000	 mov         r3, #0
  00294	e58d3030	 str         r3, [sp, #0x30]
  00298	ea000032	 b           |$L38485|
  0029c		 |$L38526|
  0029c		 |$L38524|

; 268  :                 }
; 269  :             }
; 270  :             return TRUE;

  0029c	e3a03001	 mov         r3, #1
  002a0	e58d3030	 str         r3, [sp, #0x30]
  002a4	ea00002f	 b           |$L38485|
  002a8		 |$L38523|

; 271  :         }
; 272  : 
; 273  :         // map the record address (FLASH data is cached, for example)
; 274  :         lpDest = OEMMapMemAddr (*pdwImageStart, dwRecAddr);

  002a8	e59d1020	 ldr         r1, [sp, #0x20]
  002ac	e59d3080	 ldr         r3, [sp, #0x80]
  002b0	e5930000	 ldr         r0, [r3]
  002b4	eb000000	 bl          OEMMapMemAddr
  002b8	e58d0068	 str         r0, [sp, #0x68]
  002bc	e59d3068	 ldr         r3, [sp, #0x68]
  002c0	e58d3010	 str         r3, [sp, #0x10]

; 275  : 
; 276  :         // read data block
; 277  :         if (!OEMReadData (dwRecLen, lpDest)) {

  002c4	e59d1010	 ldr         r1, [sp, #0x10]
  002c8	e59d0014	 ldr         r0, [sp, #0x14]
  002cc	eb000000	 bl          OEMReadData
  002d0	e58d006c	 str         r0, [sp, #0x6C]
  002d4	e59d306c	 ldr         r3, [sp, #0x6C]
  002d8	e3530000	 cmp         r3, #0
  002dc	1a000005	 bne         |$L38527|

; 278  :             EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);

  002e0	e59d1024	 ldr         r1, [sp, #0x24]
  002e4	e59f0090	 ldr         r0, [pc, #0x90]
  002e8	eb000000	 bl          EdbgOutputDebugString

; 279  :             return FALSE;

  002ec	e3a03000	 mov         r3, #0
  002f0	e58d3030	 str         r3, [sp, #0x30]
  002f4	ea00001b	 b           |$L38485|
  002f8		 |$L38527|

; 280  :         }
; 281  : 
; 282  :         if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {

  002f8	e59d201c	 ldr         r2, [sp, #0x1C]
  002fc	e59d1010	 ldr         r1, [sp, #0x10]
  00300	e59d0014	 ldr         r0, [sp, #0x14]
  00304	eb000000	 bl          VerifyChecksum
  00308	e58d0070	 str         r0, [sp, #0x70]
  0030c	e59d3070	 ldr         r3, [sp, #0x70]
  00310	e3530000	 cmp         r3, #0
  00314	1a000005	 bne         |$L38529|

; 283  :             EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);

  00318	e59d1024	 ldr         r1, [sp, #0x24]
  0031c	e59f0054	 ldr         r0, [pc, #0x54]
  00320	eb000000	 bl          EdbgOutputDebugString

; 284  :             return FALSE;

  00324	e3a03000	 mov         r3, #0
  00328	e58d3030	 str         r3, [sp, #0x30]
  0032c	ea00000d	 b           |$L38485|
  00330		 |$L38529|

; 285  :         }
; 286  :         // verify partial checksum
; 287  :         OEMShowProgress (nPkgNum ++);

  00330	e59d3024	 ldr         r3, [sp, #0x24]
  00334	e58d3074	 str         r3, [sp, #0x74]
  00338	e59d0074	 ldr         r0, [sp, #0x74]
  0033c	eb000000	 bl          OEMShowProgress
  00340	e59d3024	 ldr         r3, [sp, #0x24]
  00344	e2833001	 add         r3, r3, #1
  00348	e58d3024	 str         r3, [sp, #0x24]

; 288  :         if (fIsFlash) {

  0034c	e59d3018	 ldr         r3, [sp, #0x18]
  00350	e3530000	 cmp         r3, #0
  00354	0a000000	 beq         |$L38531|

; 289  :             OEMContinueEraseFlash ();

  00358	eb000000	 bl          OEMContinueEraseFlash
  0035c		 |$L38531|

; 290  :         }
; 291  :     }

  0035c	eaffff99	 b           |$L38521|
  00360		 |$L38522|

; 292  : 
; 293  :     return FALSE;

  00360	e3a03000	 mov         r3, #0
  00364	e58d3030	 str         r3, [sp, #0x30]
  00368		 |$L38485|

; 217  :         return FALSE;

  00368	e59d0030	 ldr         r0, [sp, #0x30]

; 294  : }

  0036c	e28dd078	 add         sp, sp, #0x78
  00370	e89d6000	 ldmia       sp, {sp, lr}
  00374	e12fff1e	 bx          lr
  00378		 |$L38587|
  00378	00000000	 DCD         |??_C@_0DI@FDIIHFBA@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@|
  0037c	00000000	 DCD         |??_C@_0DD@KHJBCIED@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@|
  00380	00000000	 DCD         |??_C@_0BP@OAODHDCP@Invalid?5Flash?5Address?1Length?$AN?6?$AA@|
  00384	00000000	 DCD         |??_C@_0BJ@CHJNPJCH@Image?5will?5put?5to?50x?$CFx?$AN?6?$AA@|
  00388	00000000	 DCD         |??_C@_0BN@FJFONPHK@Flash?5can?8t?5be?5initialized?$AN?6?$AA@|
  0038c	00000000	 DCD         |??_C@_0CC@DNECAMLM@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@|
  00390	00000000	 DCD         |g_pOEMVerifyMemory|
  00394	00000000	 DCD         |??_C@_0CE@NKAMCDHO@Unable?5to?5read?5image?5start?1lengt@|
  00398	00000000	 DCD         |??_C@_0DB@HGMOIJLD@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@|
  0039c	00000000	 DCD         |??_C@_07MMNKOBGG@B000FF?6?$AA@|
  003a0		 |$M38583|

			 ENDP  ; |DownloadImage|


  00000			 AREA	 |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$VerifyChecksum|, PDATA, SELECTION=5, ASSOC=|.text| { |VerifyChecksum| } ; comdat associative
|$T38596| DCD	|$L38595|
	DCD	0x40002804
; Function compile flags: /Ods

  00000			 AREA	 |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |VerifyChecksum| PROC

; 194  : {

  00000		 |$L38595|
  00000	e1a0c00d	 mov         r12, sp
  00004	e92d0007	 stmdb       sp!, {r0 - r2}
  00008	e92d5000	 stmdb       sp!, {r12, lr}
  0000c	e24dd010	 sub         sp, sp, #0x10
  00010		 |$M38593|

; 195  :     // Check the CRC
; 196  :     DWORD dwCRC = 0;

  00010	e3a03000	 mov         r3, #0
  00014	e58d3004	 str         r3, [sp, #4]

; 197  :     DWORD i;
; 198  :     for (i = 0; i < cbRecord; i++)

  00018	e3a03000	 mov         r3, #0
  0001c	e58d3000	 str         r3, [sp]
  00020	ea000002	 b           |$L38476|
  00024		 |$L38477|
  00024	e59d3000	 ldr         r3, [sp]
  00028	e2833001	 add         r3, r3, #1
  0002c	e58d3000	 str         r3, [sp]
  00030		 |$L38476|
  00030	e59d2000	 ldr         r2, [sp]
  00034	e59d3018	 ldr         r3, [sp, #0x18]
  00038	e1520003	 cmp         r2, r3
  0003c	2a000008	 bcs         |$L38478|

; 199  :         dwCRC += *pbRecord ++;

  00040	e59d301c	 ldr         r3, [sp, #0x1C]
  00044	e5d32000	 ldrb        r2, [r3]
  00048	e59d3004	 ldr         r3, [sp, #4]
  0004c	e0833002	 add         r3, r3, r2
  00050	e58d3004	 str         r3, [sp, #4]
  00054	e59d301c	 ldr         r3, [sp, #0x1C]
  00058	e2833001	 add         r3, r3, #1
  0005c	e58d301c	 str         r3, [sp, #0x1C]
  00060	eaffffef	 b           |$L38477|
  00064		 |$L38478|

; 200  :     return dwCRC == dwChksum;

  00064	e59d2004	 ldr         r2, [sp, #4]
  00068	e59d3020	 ldr         r3, [sp, #0x20]
  0006c	e1520003	 cmp         r2, r3
  00070	1a000002	 bne         |$L38590|
  00074	e3a03001	 mov         r3, #1
  00078	e58d300c	 str         r3, [sp, #0xC]
  0007c	ea000001	 b           |$L38591|
  00080		 |$L38590|
  00080	e3a03000	 mov         r3, #0
  00084	e58d300c	 str         r3, [sp, #0xC]
  00088		 |$L38591|
  00088	e59d300c	 ldr         r3, [sp, #0xC]
  0008c	e58d3008	 str         r3, [sp, #8]
  00090	e59d0008	 ldr         r0, [sp, #8]

; 201  : }

  00094	e28dd010	 add         sp, sp, #0x10
  00098	e89d6000	 ldmia       sp, {sp, lr}
  0009c	e12fff1e	 bx          lr
  000a0		 |$M38594|

			 ENDP  ; |VerifyChecksum|

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -