diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf index 7cfc9cc1..eb5e17c1 100644 Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf differ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map index 47af06a5..80493108 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map @@ -7,6 +7,9 @@ Discarded input sections .text 0x00000000 0x0 ARM Flash Debug/../../obj/main.o .data 0x00000000 0x0 ARM Flash Debug/../../obj/main.o .bss 0x00000000 0x0 ARM Flash Debug/../../obj/main.o + .text 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o + .data 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o + .bss 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o .text 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o .data 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o .bss 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o @@ -32,8 +35,6 @@ Discarded input sections .text 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o .data 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o .bss 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o - .text.TimerSet - 0x00000000 0x10 ARM Flash Debug/../../obj/timer.o .text 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o .data 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o .bss 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o @@ -179,131 +180,141 @@ Linker script and memory map 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .init is too large to fit in FLASH memory segment) 0x00000370 __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x00000370 0xef0 +.text 0x00000370 0x110c 0x00000370 __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) .glue_7 0x00000000 0x0 linker stubs .glue_7t 0x00000000 0x0 linker stubs - .text.startup.main - 0x00000370 0x104 ARM Flash Debug/../../obj/main.o + .text.main 0x00000370 0x98 ARM Flash Debug/../../obj/main.o 0x00000370 main .text.FlashGetSector - 0x00000474 0x60 ARM Flash Debug/../../obj/flash.o + 0x00000408 0x64 ARM Flash Debug/../../obj/flash.o .text.FlashWriteBlock - 0x000004d4 0xf0 ARM Flash Debug/../../obj/flash.o + 0x0000046c 0x110 ARM Flash Debug/../../obj/flash.o + .text.FlashInitBlock + 0x0000057c 0x38 ARM Flash Debug/../../obj/flash.o .text.FlashSwitchBlock - 0x000005c4 0x84 ARM Flash Debug/../../obj/flash.o + 0x000005b4 0x6c ARM Flash Debug/../../obj/flash.o .text.FlashAddToBlock - 0x00000648 0xc8 ARM Flash Debug/../../obj/flash.o + 0x00000620 0xdc ARM Flash Debug/../../obj/flash.o .text.FlashInit - 0x00000710 0x20 ARM Flash Debug/../../obj/flash.o - 0x00000710 FlashInit + 0x000006fc 0x20 ARM Flash Debug/../../obj/flash.o + 0x000006fc FlashInit .text.FlashWrite - 0x00000730 0x70 ARM Flash Debug/../../obj/flash.o - 0x00000730 FlashWrite + 0x0000071c 0x6c ARM Flash Debug/../../obj/flash.o + 0x0000071c FlashWrite .text.FlashErase - 0x000007a0 0x108 ARM Flash Debug/../../obj/flash.o - 0x000007a0 FlashErase + 0x00000788 0x130 ARM Flash Debug/../../obj/flash.o + 0x00000788 FlashErase .text.FlashVerifyChecksum - 0x000008a8 0x48 ARM Flash Debug/../../obj/flash.o - 0x000008a8 FlashVerifyChecksum + 0x000008b8 0x48 ARM Flash Debug/../../obj/flash.o + 0x000008b8 FlashVerifyChecksum .text.FlashWriteChecksum - 0x000008f0 0x6c ARM Flash Debug/../../obj/flash.o - 0x000008f0 FlashWriteChecksum + 0x00000900 0x74 ARM Flash Debug/../../obj/flash.o + 0x00000900 FlashWriteChecksum .text.FlashDone - 0x0000095c 0x50 ARM Flash Debug/../../obj/flash.o - 0x0000095c FlashDone + 0x00000974 0x5c ARM Flash Debug/../../obj/flash.o + 0x00000974 FlashDone .text.CpuMemCopy - 0x000009ac 0x40 ARM Flash Debug/../../obj/cpu.o - 0x000009ac CpuMemCopy + 0x000009d0 0x44 ARM Flash Debug/../../obj/cpu.o + 0x000009d0 CpuMemCopy .text.CpuStartUserProgram - 0x000009ec 0x44 ARM Flash Debug/../../obj/cpu.o - 0x000009ec CpuStartUserProgram + 0x00000a14 0x44 ARM Flash Debug/../../obj/cpu.o + 0x00000a14 CpuStartUserProgram .text.CpuReset - 0x00000a30 0x10 ARM Flash Debug/../../obj/cpu.o - 0x00000a30 CpuReset - .text.NvmInit 0x00000a40 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000a40 NvmInit + 0x00000a58 0x10 ARM Flash Debug/../../obj/cpu.o + 0x00000a58 CpuReset + .text.NvmInit 0x00000a68 0x10 ARM Flash Debug/../../obj/nvm.o + 0x00000a68 NvmInit .text.NvmWrite - 0x00000a50 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000a50 NvmWrite + 0x00000a78 0x10 ARM Flash Debug/../../obj/nvm.o + 0x00000a78 NvmWrite .text.NvmErase - 0x00000a60 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000a60 NvmErase + 0x00000a88 0x10 ARM Flash Debug/../../obj/nvm.o + 0x00000a88 NvmErase .text.NvmVerifyChecksum - 0x00000a70 0x10 ARM Flash Debug/../../obj/nvm.o - 0x00000a70 NvmVerifyChecksum - .text.NvmDone 0x00000a80 0x18 ARM Flash Debug/../../obj/nvm.o - 0x00000a80 NvmDone - .text.TimerInit - 0x00000a98 0x48 ARM Flash Debug/../../obj/timer.o - 0x00000a98 TimerInit + 0x00000a98 0x10 ARM Flash Debug/../../obj/nvm.o + 0x00000a98 NvmVerifyChecksum + .text.NvmDone 0x00000aa8 0x1c ARM Flash Debug/../../obj/nvm.o + 0x00000aa8 NvmDone .text.TimerReset - 0x00000ae0 0x20 ARM Flash Debug/../../obj/timer.o - 0x00000ae0 TimerReset + 0x00000ac4 0x20 ARM Flash Debug/../../obj/timer.o + 0x00000ac4 TimerReset .text.TimerUpdate - 0x00000b00 0x38 ARM Flash Debug/../../obj/timer.o - 0x00000b00 TimerUpdate + 0x00000ae4 0x38 ARM Flash Debug/../../obj/timer.o + 0x00000ae4 TimerUpdate + .text.TimerSet + 0x00000b1c 0x10 ARM Flash Debug/../../obj/timer.o + 0x00000b1c TimerSet + .text.TimerInit + 0x00000b2c 0x48 ARM Flash Debug/../../obj/timer.o + 0x00000b2c TimerInit .text.TimerGet - 0x00000b38 0x1c ARM Flash Debug/../../obj/timer.o - 0x00000b38 TimerGet + 0x00000b74 0x1c ARM Flash Debug/../../obj/timer.o + 0x00000b74 TimerGet + .text.UartReceiveByte + 0x00000b90 0x28 ARM Flash Debug/../../obj/uart.o + .text.UartTransmitByte + 0x00000bb8 0x54 ARM Flash Debug/../../obj/uart.o .text.UartInit - 0x00000b54 0x40 ARM Flash Debug/../../obj/uart.o - 0x00000b54 UartInit + 0x00000c0c 0x40 ARM Flash Debug/../../obj/uart.o + 0x00000c0c UartInit .text.UartTransmitPacket - 0x00000b94 0xc0 ARM Flash Debug/../../obj/uart.o - 0x00000b94 UartTransmitPacket + 0x00000c4c 0x84 ARM Flash Debug/../../obj/uart.o + 0x00000c4c UartTransmitPacket .text.UartReceivePacket - 0x00000c54 0xb8 ARM Flash Debug/../../obj/uart.o - 0x00000c54 UartReceivePacket + 0x00000cd0 0xc0 ARM Flash Debug/../../obj/uart.o + 0x00000cd0 UartReceivePacket .text.AssertFailure - 0x00000d0c 0x24 ARM Flash Debug/../../obj/assert.o - 0x00000d0c AssertFailure + 0x00000d90 0x24 ARM Flash Debug/../../obj/assert.o + 0x00000d90 AssertFailure .text.BackDoorCheck - 0x00000d30 0x48 ARM Flash Debug/../../obj/backdoor.o - 0x00000d30 BackDoorCheck + 0x00000db4 0x4c ARM Flash Debug/../../obj/backdoor.o + 0x00000db4 BackDoorCheck .text.BackDoorInit - 0x00000d78 0x20 ARM Flash Debug/../../obj/backdoor.o - 0x00000d78 BackDoorInit + 0x00000e00 0x24 ARM Flash Debug/../../obj/backdoor.o + 0x00000e00 BackDoorInit .text.BootInit - 0x00000d98 0x1c ARM Flash Debug/../../obj/boot.o - 0x00000d98 BootInit + 0x00000e24 0x1c ARM Flash Debug/../../obj/boot.o + 0x00000e24 BootInit .text.BootTask - 0x00000db4 0x18 ARM Flash Debug/../../obj/boot.o - 0x00000db4 BootTask - .text.ComInit 0x00000dcc 0x3c ARM Flash Debug/../../obj/com.o - 0x00000dcc ComInit - .text.ComTask 0x00000e08 0x24 ARM Flash Debug/../../obj/com.o - 0x00000e08 ComTask + 0x00000e40 0x18 ARM Flash Debug/../../obj/boot.o + 0x00000e40 BootTask + .text.ComInit 0x00000e58 0x44 ARM Flash Debug/../../obj/com.o + 0x00000e58 ComInit + .text.ComTask 0x00000e9c 0x24 ARM Flash Debug/../../obj/com.o + 0x00000e9c ComTask .text.ComTransmitPacket - 0x00000e2c 0x18 ARM Flash Debug/../../obj/com.o - 0x00000e2c ComTransmitPacket + 0x00000ec0 0x18 ARM Flash Debug/../../obj/com.o + 0x00000ec0 ComTransmitPacket .text.ComSetConnectEntryState - 0x00000e44 0x14 ARM Flash Debug/../../obj/com.o - 0x00000e44 ComSetConnectEntryState + 0x00000ed8 0x14 ARM Flash Debug/../../obj/com.o + 0x00000ed8 ComSetConnectEntryState .text.ComIsConnected - 0x00000e58 0x10 ARM Flash Debug/../../obj/com.o - 0x00000e58 ComIsConnected - .text.CopInit 0x00000e68 0x4 ARM Flash Debug/../../obj/cop.o - 0x00000e68 CopInit + 0x00000eec 0x10 ARM Flash Debug/../../obj/com.o + 0x00000eec ComIsConnected + .text.CopInit 0x00000efc 0x4 ARM Flash Debug/../../obj/cop.o + 0x00000efc CopInit .text.CopService - 0x00000e6c 0x4 ARM Flash Debug/../../obj/cop.o - 0x00000e6c CopService + 0x00000f00 0x4 ARM Flash Debug/../../obj/cop.o + 0x00000f00 CopService + .text.XcpProtectResources + 0x00000f04 0x14 ARM Flash Debug/../../obj/xcp.o .text.XcpSetCtoError - 0x00000e70 0x20 ARM Flash Debug/../../obj/xcp.o - .text.XcpInit 0x00000e90 0x28 ARM Flash Debug/../../obj/xcp.o - 0x00000e90 XcpInit + 0x00000f18 0x20 ARM Flash Debug/../../obj/xcp.o + .text.XcpInit 0x00000f38 0x28 ARM Flash Debug/../../obj/xcp.o + 0x00000f38 XcpInit .text.XcpIsConnected - 0x00000eb8 0x18 ARM Flash Debug/../../obj/xcp.o - 0x00000eb8 XcpIsConnected + 0x00000f60 0x18 ARM Flash Debug/../../obj/xcp.o + 0x00000f60 XcpIsConnected .text.XcpPacketTransmitted - 0x00000ed0 0x14 ARM Flash Debug/../../obj/xcp.o - 0x00000ed0 XcpPacketTransmitted + 0x00000f78 0x14 ARM Flash Debug/../../obj/xcp.o + 0x00000f78 XcpPacketTransmitted .text.XcpPacketReceived - 0x00000ee4 0x37c ARM Flash Debug/../../obj/xcp.o - 0x00000ee4 XcpPacketReceived - 0x00001260 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x00001260 __text_load_end__ = __text_end__ + 0x00000f8c 0x4f0 ARM Flash Debug/../../obj/xcp.o + 0x00000f8c XcpPacketReceived + 0x0000147c __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x0000147c __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs @@ -311,50 +322,45 @@ Linker script and memory map .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .text is too large to fit in FLASH memory segment) - 0x00001260 __dtors_load_start__ = ALIGN (__text_end__, 0x4) + 0x0000147c __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x00001260 0x0 - 0x00001260 __dtors_start__ = . +.dtors 0x0000147c 0x0 + 0x0000147c __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) - 0x00001260 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x00001260 __dtors_load_end__ = __dtors_end__ + 0x0000147c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x0000147c __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .dtors is too large to fit in FLASH memory segment) - 0x00001260 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x0000147c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x00001260 0x0 - 0x00001260 __ctors_start__ = . +.ctors 0x0000147c 0x0 + 0x0000147c __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) - 0x00001260 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x00001260 __ctors_load_end__ = __ctors_end__ + 0x0000147c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x0000147c __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .ctors is too large to fit in FLASH memory segment) - 0x00001260 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x0000147c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x00001260 0x1b8 - 0x00001260 __rodata_start__ = . +.rodata 0x0000147c 0x14c + 0x0000147c __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.pll_dividers.850 - 0x00001260 0x4 ARM Flash Debug/../../obj/main.o - .rodata.str1.1 - 0x00001264 0x67 ARM Flash Debug/../../obj/main.o - *fill* 0x000012cb 0x1 00 .rodata.flashLayout - 0x000012cc 0xc0 ARM Flash Debug/../../obj/flash.o - .rodata.str1.1 - 0x0000138c 0x84 ARM Flash Debug/../../obj/uart.o + 0x0000147c 0xc0 ARM Flash Debug/../../obj/flash.o + .rodata.str1.4 + 0x0000153c 0x84 ARM Flash Debug/../../obj/uart.o .rodata.xcpStationId - 0x00001410 0x8 ARM Flash Debug/../../obj/xcp.o - 0x00001418 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x00001418 __rodata_load_end__ = __rodata_end__ + 0x000015c0 0x8 ARM Flash Debug/../../obj/xcp.o + 0x000015c8 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x000015c8 __rodata_load_end__ = __rodata_end__ 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .rodata is too large to fit in FLASH memory segment) - 0x00001418 __data_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x000015c8 __data_load_start__ = ALIGN (__rodata_end__, 0x4) -.data 0x4000023c 0x0 load address 0x00001418 +.data 0x4000023c 0x0 load address 0x000015c8 0x4000023c __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) 0x4000023c __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x00001418 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x000015c8 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) 0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x40000))), error: .data is too large to fit in FLASH memory segment) .data_run 0x4000023c 0x0 @@ -365,7 +371,7 @@ Linker script and memory map 0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .data_run is too large to fit in SRAM memory segment) 0x4000023c __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x4000023c 0x4ec +.bss 0x4000023c 0x4f4 0x4000023c __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) .bss.bootBlockInfo @@ -378,122 +384,124 @@ Linker script and memory map 0x40000648 0x4 ARM Flash Debug/../../obj/timer.o .bss.xcpCtoRxLength.866 0x4000064c 0x1 ARM Flash Debug/../../obj/uart.o + *fill* 0x4000064d 0x3 00 .bss.xcpCtoReqPacket.865 - 0x4000064d 0x41 ARM Flash Debug/../../obj/uart.o + 0x40000650 0x44 ARM Flash Debug/../../obj/uart.o .bss.xcpCtoRxInProgress.867 - 0x4000068e 0x1 ARM Flash Debug/../../obj/uart.o - *fill* 0x4000068f 0x1 00 + 0x40000694 0x1 ARM Flash Debug/../../obj/uart.o + *fill* 0x40000695 0x3 00 .bss.assert_failure_file - 0x40000690 0x4 ARM Flash Debug/../../obj/assert.o + 0x40000698 0x4 ARM Flash Debug/../../obj/assert.o .bss.assert_failure_line - 0x40000694 0x4 ARM Flash Debug/../../obj/assert.o + 0x4000069c 0x4 ARM Flash Debug/../../obj/assert.o .bss.backdoorOpen - 0x40000698 0x1 ARM Flash Debug/../../obj/backdoor.o + 0x400006a0 0x1 ARM Flash Debug/../../obj/backdoor.o .bss.comEntryStateConnect - 0x40000699 0x1 ARM Flash Debug/../../obj/com.o + 0x400006a1 0x1 ARM Flash Debug/../../obj/com.o + *fill* 0x400006a2 0x2 00 .bss.xcpCtoReqPacket.855 - 0x4000069a 0x40 ARM Flash Debug/../../obj/com.o - *fill* 0x400006da 0x2 00 - .bss.xcpInfo 0x400006dc 0x4c ARM Flash Debug/../../obj/xcp.o + 0x400006a4 0x40 ARM Flash Debug/../../obj/com.o + .bss.xcpInfo 0x400006e4 0x4c ARM Flash Debug/../../obj/xcp.o *(COMMON) - 0x40000728 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x40000728 __bss_load_end__ = __bss_end__ + 0x40000730 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x40000730 __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .bss is too large to fit in SRAM memory segment) - 0x40000728 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x40000730 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x40000728 0x0 - 0x40000728 __non_init_start__ = . +.non_init 0x40000730 0x0 + 0x40000730 __non_init_start__ = . *(.non_init .non_init.*) - 0x40000728 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x40000728 __non_init_load_end__ = __non_init_end__ + 0x40000730 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x40000730 __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .non_init is too large to fit in SRAM memory segment) - 0x40000728 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x40000730 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x40000728 0x400 - 0x40000728 __heap_start__ = . +.heap 0x40000730 0x400 + 0x40000730 __heap_start__ = . *(.heap .heap.*) - 0x40000b28 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x40000728 0x400 00 - 0x40000b28 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x40000b28 __heap_load_end__ = __heap_end__ + 0x40000b30 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x40000730 0x400 00 + 0x40000b30 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x40000b30 __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .heap is too large to fit in SRAM memory segment) - 0x40000b28 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x40000b30 __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x40000b28 0x400 - 0x40000b28 __stack_start__ = . +.stack 0x40000b30 0x400 + 0x40000b30 __stack_start__ = . *(.stack .stack.*) - 0x40000f28 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x40000b28 0x400 00 - 0x40000f28 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x40000f28 __stack_load_end__ = __stack_end__ + 0x40000f30 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x40000b30 0x400 00 + 0x40000f30 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x40000f30 __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack is too large to fit in SRAM memory segment) - 0x40000f28 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4) + 0x40000f30 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_irq 0x40000f28 0x100 - 0x40000f28 __stack_irq_start__ = . +.stack_irq 0x40000f30 0x100 + 0x40000f30 __stack_irq_start__ = . *(.stack_irq .stack_irq.*) - 0x40001028 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4) - *fill* 0x40000f28 0x100 00 - 0x40001028 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq)) - 0x40001028 __stack_irq_load_end__ = __stack_irq_end__ + 0x40001030 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4) + *fill* 0x40000f30 0x100 00 + 0x40001030 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq)) + 0x40001030 __stack_irq_load_end__ = __stack_irq_end__ 0x00000001 . = ASSERT (((__stack_irq_end__ >= __SRAM_segment_start__) && (__stack_irq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_irq is too large to fit in SRAM memory segment) - 0x40001028 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4) + 0x40001030 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4) -.stack_fiq 0x40001028 0x100 - 0x40001028 __stack_fiq_start__ = . +.stack_fiq 0x40001030 0x100 + 0x40001030 __stack_fiq_start__ = . *(.stack_fiq .stack_fiq.*) - 0x40001128 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4) - *fill* 0x40001028 0x100 00 - 0x40001128 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq)) - 0x40001128 __stack_fiq_load_end__ = __stack_fiq_end__ + 0x40001130 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4) + *fill* 0x40001030 0x100 00 + 0x40001130 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq)) + 0x40001130 __stack_fiq_load_end__ = __stack_fiq_end__ 0x00000001 . = ASSERT (((__stack_fiq_end__ >= __SRAM_segment_start__) && (__stack_fiq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_fiq is too large to fit in SRAM memory segment) - 0x40001128 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4) + 0x40001130 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4) -.stack_svc 0x40001128 0x0 - 0x40001128 __stack_svc_start__ = . +.stack_svc 0x40001130 0x0 + 0x40001130 __stack_svc_start__ = . *(.stack_svc .stack_svc.*) - 0x40001128 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4) - 0x40001128 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc)) - 0x40001128 __stack_svc_load_end__ = __stack_svc_end__ + 0x40001130 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4) + 0x40001130 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc)) + 0x40001130 __stack_svc_load_end__ = __stack_svc_end__ 0x00000001 . = ASSERT (((__stack_svc_end__ >= __SRAM_segment_start__) && (__stack_svc_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_svc is too large to fit in SRAM memory segment) - 0x40001128 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4) + 0x40001130 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4) -.stack_abt 0x40001128 0x0 - 0x40001128 __stack_abt_start__ = . +.stack_abt 0x40001130 0x0 + 0x40001130 __stack_abt_start__ = . *(.stack_abt .stack_abt.*) - 0x40001128 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4) - 0x40001128 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt)) - 0x40001128 __stack_abt_load_end__ = __stack_abt_end__ + 0x40001130 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4) + 0x40001130 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt)) + 0x40001130 __stack_abt_load_end__ = __stack_abt_end__ 0x00000001 . = ASSERT (((__stack_abt_end__ >= __SRAM_segment_start__) && (__stack_abt_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_abt is too large to fit in SRAM memory segment) - 0x40001128 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4) + 0x40001130 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4) -.stack_und 0x40001128 0x0 - 0x40001128 __stack_und_start__ = . +.stack_und 0x40001130 0x0 + 0x40001130 __stack_und_start__ = . *(.stack_und .stack_und.*) - 0x40001128 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4) - 0x40001128 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und)) - 0x40001128 __stack_und_load_end__ = __stack_und_end__ + 0x40001130 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4) + 0x40001130 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und)) + 0x40001130 __stack_und_load_end__ = __stack_und_end__ 0x00000001 . = ASSERT (((__stack_und_end__ >= __SRAM_segment_start__) && (__stack_und_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_und is too large to fit in SRAM memory segment) - 0x00001418 __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x000015c8 __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.fast 0x40001128 0x0 load address 0x00001418 - 0x40001128 __fast_start__ = . +.fast 0x40001130 0x0 load address 0x000015c8 + 0x40001130 __fast_start__ = . *(.fast .fast.*) - 0x40001128 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x00001418 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) - 0x00001418 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast)) + 0x40001130 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) + 0x000015c8 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x000015c8 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast)) 0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x40000))), error: .fast is too large to fit in FLASH memory segment) -.fast_run 0x40001128 0x0 - 0x40001128 __fast_run_start__ = . - 0x40001128 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) - 0x40001128 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) - 0x40001128 __fast_run_load_end__ = __fast_run_end__ - 0x40001128 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run)) +.fast_run 0x40001130 0x0 + 0x40001130 __fast_run_start__ = . + 0x40001130 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .) + 0x40001130 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) + 0x40001130 __fast_run_load_end__ = __fast_run_end__ + 0x40001130 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run)) 0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .fast_run is too large to fit in SRAM memory segment) START GROUP LOAD ARM Flash Debug/../../obj/hooks.o LOAD ARM Flash Debug/../../obj/main.o +LOAD ARM Flash Debug/../../obj/extflash.o LOAD ARM Flash Debug/../../obj/cstart.o LOAD ARM Flash Debug/../../obj/flash.o LOAD ARM Flash Debug/../../obj/can.o @@ -518,91 +526,97 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib END GROUP OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/../bin/openbtl_olimex_lpc_l2294_20mhz.elf elf32-littlearm) -.debug_info 0x00000000 0x188c +.debug_info 0x00000000 0x1809 .debug_info 0x00000000 0x5a ARM Flash Debug/../../obj/hooks.o - .debug_info 0x0000005a 0x111 ARM Flash Debug/../../obj/main.o - .debug_info 0x0000016b 0x110 ARM Flash Debug/../../obj/cstart.o - .debug_info 0x0000027b 0x5b2 ARM Flash Debug/../../obj/flash.o - .debug_info 0x0000082d 0x5a ARM Flash Debug/../../obj/can.o - .debug_info 0x00000887 0x13a ARM Flash Debug/../../obj/cpu.o - .debug_info 0x000009c1 0x15e ARM Flash Debug/../../obj/nvm.o - .debug_info 0x00000b1f 0x143 ARM Flash Debug/../../obj/timer.o - .debug_info 0x00000c62 0x232 ARM Flash Debug/../../obj/uart.o - .debug_info 0x00000e94 0xe4 ARM Flash Debug/../../obj/assert.o - .debug_info 0x00000f78 0xa4 ARM Flash Debug/../../obj/backdoor.o - .debug_info 0x0000101c 0x88 ARM Flash Debug/../../obj/boot.o - .debug_info 0x000010a4 0x18b ARM Flash Debug/../../obj/com.o - .debug_info 0x0000122f 0x86 ARM Flash Debug/../../obj/cop.o - .debug_info 0x000012b5 0x5d7 ARM Flash Debug/../../obj/xcp.o + .debug_info 0x0000005a 0x116 ARM Flash Debug/../../obj/main.o + .debug_info 0x00000170 0x5a ARM Flash Debug/../../obj/extflash.o + .debug_info 0x000001ca 0x110 ARM Flash Debug/../../obj/cstart.o + .debug_info 0x000002da 0x539 ARM Flash Debug/../../obj/flash.o + .debug_info 0x00000813 0x5a ARM Flash Debug/../../obj/can.o + .debug_info 0x0000086d 0x13a ARM Flash Debug/../../obj/cpu.o + .debug_info 0x000009a7 0x15e ARM Flash Debug/../../obj/nvm.o + .debug_info 0x00000b05 0x119 ARM Flash Debug/../../obj/timer.o + .debug_info 0x00000c1e 0x1bf ARM Flash Debug/../../obj/uart.o + .debug_info 0x00000ddd 0xe4 ARM Flash Debug/../../obj/assert.o + .debug_info 0x00000ec1 0xa4 ARM Flash Debug/../../obj/backdoor.o + .debug_info 0x00000f65 0x88 ARM Flash Debug/../../obj/boot.o + .debug_info 0x00000fed 0x18b ARM Flash Debug/../../obj/com.o + .debug_info 0x00001178 0x86 ARM Flash Debug/../../obj/cop.o + .debug_info 0x000011fe 0x60b ARM Flash Debug/../../obj/xcp.o -.debug_abbrev 0x00000000 0xa94 +.debug_abbrev 0x00000000 0xa6c .debug_abbrev 0x00000000 0x28 ARM Flash Debug/../../obj/hooks.o - .debug_abbrev 0x00000028 0xaf ARM Flash Debug/../../obj/main.o - .debug_abbrev 0x000000d7 0x12 ARM Flash Debug/../../obj/cstart.o - .debug_abbrev 0x000000e9 0x21f ARM Flash Debug/../../obj/flash.o - .debug_abbrev 0x00000308 0x28 ARM Flash Debug/../../obj/can.o - .debug_abbrev 0x00000330 0xaf ARM Flash Debug/../../obj/cpu.o - .debug_abbrev 0x000003df 0xa3 ARM Flash Debug/../../obj/nvm.o - .debug_abbrev 0x00000482 0xd9 ARM Flash Debug/../../obj/timer.o - .debug_abbrev 0x0000055b 0x139 ARM Flash Debug/../../obj/uart.o - .debug_abbrev 0x00000694 0x7c ARM Flash Debug/../../obj/assert.o - .debug_abbrev 0x00000710 0x5b ARM Flash Debug/../../obj/backdoor.o - .debug_abbrev 0x0000076b 0x3f ARM Flash Debug/../../obj/boot.o - .debug_abbrev 0x000007aa 0xe0 ARM Flash Debug/../../obj/com.o - .debug_abbrev 0x0000088a 0x3f ARM Flash Debug/../../obj/cop.o - .debug_abbrev 0x000008c9 0x1cb ARM Flash Debug/../../obj/xcp.o + .debug_abbrev 0x00000028 0xc5 ARM Flash Debug/../../obj/main.o + .debug_abbrev 0x000000ed 0x28 ARM Flash Debug/../../obj/extflash.o + .debug_abbrev 0x00000115 0x12 ARM Flash Debug/../../obj/cstart.o + .debug_abbrev 0x00000127 0x21f ARM Flash Debug/../../obj/flash.o + .debug_abbrev 0x00000346 0x28 ARM Flash Debug/../../obj/can.o + .debug_abbrev 0x0000036e 0xaf ARM Flash Debug/../../obj/cpu.o + .debug_abbrev 0x0000041d 0xa3 ARM Flash Debug/../../obj/nvm.o + .debug_abbrev 0x000004c0 0xad ARM Flash Debug/../../obj/timer.o + .debug_abbrev 0x0000056d 0x110 ARM Flash Debug/../../obj/uart.o + .debug_abbrev 0x0000067d 0x7c ARM Flash Debug/../../obj/assert.o + .debug_abbrev 0x000006f9 0x5b ARM Flash Debug/../../obj/backdoor.o + .debug_abbrev 0x00000754 0x3f ARM Flash Debug/../../obj/boot.o + .debug_abbrev 0x00000793 0xe0 ARM Flash Debug/../../obj/com.o + .debug_abbrev 0x00000873 0x3f ARM Flash Debug/../../obj/cop.o + .debug_abbrev 0x000008b2 0x1ba ARM Flash Debug/../../obj/xcp.o -.debug_line 0x00000000 0x1277 +.debug_line 0x00000000 0x1245 .debug_line 0x00000000 0x1d ARM Flash Debug/../../obj/hooks.o - .debug_line 0x0000001d 0x14e ARM Flash Debug/../../obj/main.o - .debug_line 0x0000016b 0x19e ARM Flash Debug/../../obj/cstart.o - .debug_line 0x00000309 0x2e6 ARM Flash Debug/../../obj/flash.o - .debug_line 0x000005ef 0x1d ARM Flash Debug/../../obj/can.o - .debug_line 0x0000060c 0xf0 ARM Flash Debug/../../obj/cpu.o - .debug_line 0x000006fc 0x110 ARM Flash Debug/../../obj/nvm.o - .debug_line 0x0000080c 0x11b ARM Flash Debug/../../obj/timer.o - .debug_line 0x00000927 0x16a ARM Flash Debug/../../obj/uart.o - .debug_line 0x00000a91 0x139 ARM Flash Debug/../../obj/assert.o - .debug_line 0x00000bca 0x156 ARM Flash Debug/../../obj/backdoor.o - .debug_line 0x00000d20 0xbf ARM Flash Debug/../../obj/boot.o - .debug_line 0x00000ddf 0x192 ARM Flash Debug/../../obj/com.o - .debug_line 0x00000f71 0xb7 ARM Flash Debug/../../obj/cop.o - .debug_line 0x00001028 0x24f ARM Flash Debug/../../obj/xcp.o + .debug_line 0x0000001d 0x13a ARM Flash Debug/../../obj/main.o + .debug_line 0x00000157 0x1d ARM Flash Debug/../../obj/extflash.o + .debug_line 0x00000174 0x19e ARM Flash Debug/../../obj/cstart.o + .debug_line 0x00000312 0x2db ARM Flash Debug/../../obj/flash.o + .debug_line 0x000005ed 0x1d ARM Flash Debug/../../obj/can.o + .debug_line 0x0000060a 0xf6 ARM Flash Debug/../../obj/cpu.o + .debug_line 0x00000700 0x112 ARM Flash Debug/../../obj/nvm.o + .debug_line 0x00000812 0x113 ARM Flash Debug/../../obj/timer.o + .debug_line 0x00000925 0x15e ARM Flash Debug/../../obj/uart.o + .debug_line 0x00000a83 0x137 ARM Flash Debug/../../obj/assert.o + .debug_line 0x00000bba 0x150 ARM Flash Debug/../../obj/backdoor.o + .debug_line 0x00000d0a 0xbf ARM Flash Debug/../../obj/boot.o + .debug_line 0x00000dc9 0x192 ARM Flash Debug/../../obj/com.o + .debug_line 0x00000f5b 0xb7 ARM Flash Debug/../../obj/cop.o + .debug_line 0x00001012 0x233 ARM Flash Debug/../../obj/xcp.o -.debug_str 0x00000000 0xdaa +.debug_str 0x00000000 0xe15 .debug_str 0x00000000 0xb1 ARM Flash Debug/../../obj/hooks.o 0xcf (size before relaxing) .debug_str 0x000000b1 0xa4 ARM Flash Debug/../../obj/main.o 0x110 (size before relaxing) - .debug_str 0x00000155 0x24d ARM Flash Debug/../../obj/flash.o + .debug_str 0x00000155 0x6b ARM Flash Debug/../../obj/extflash.o + 0xd2 (size before relaxing) + .debug_str 0x000001c0 0x24d ARM Flash Debug/../../obj/flash.o 0x2d8 (size before relaxing) - .debug_str 0x000003a2 0x83 ARM Flash Debug/../../obj/can.o + .debug_str 0x0000040d 0x83 ARM Flash Debug/../../obj/can.o 0xea (size before relaxing) - .debug_str 0x00000425 0xc7 ARM Flash Debug/../../obj/cpu.o + .debug_str 0x00000490 0xc7 ARM Flash Debug/../../obj/cpu.o 0x157 (size before relaxing) - .debug_str 0x000004ec 0xb7 ARM Flash Debug/../../obj/nvm.o + .debug_str 0x00000557 0xb7 ARM Flash Debug/../../obj/nvm.o 0x14f (size before relaxing) - .debug_str 0x000005a3 0x10b ARM Flash Debug/../../obj/timer.o + .debug_str 0x0000060e 0x10b ARM Flash Debug/../../obj/timer.o 0x17d (size before relaxing) - .debug_str 0x000006ae 0x11f ARM Flash Debug/../../obj/uart.o + .debug_str 0x00000719 0x11f ARM Flash Debug/../../obj/uart.o 0x1b4 (size before relaxing) - .debug_str 0x000007cd 0xb8 ARM Flash Debug/../../obj/assert.o + .debug_str 0x00000838 0xb8 ARM Flash Debug/../../obj/assert.o 0x134 (size before relaxing) - .debug_str 0x00000885 0xa3 ARM Flash Debug/../../obj/backdoor.o + .debug_str 0x000008f0 0xa3 ARM Flash Debug/../../obj/backdoor.o 0x113 (size before relaxing) - .debug_str 0x00000928 0x89 ARM Flash Debug/../../obj/boot.o + .debug_str 0x00000993 0x89 ARM Flash Debug/../../obj/boot.o 0xf0 (size before relaxing) - .debug_str 0x000009b1 0x102 ARM Flash Debug/../../obj/com.o + .debug_str 0x00000a1c 0x102 ARM Flash Debug/../../obj/com.o 0x19c (size before relaxing) - .debug_str 0x00000ab3 0x89 ARM Flash Debug/../../obj/cop.o + .debug_str 0x00000b1e 0x89 ARM Flash Debug/../../obj/cop.o 0xf0 (size before relaxing) - .debug_str 0x00000b3c 0x26e ARM Flash Debug/../../obj/xcp.o + .debug_str 0x00000ba7 0x26e ARM Flash Debug/../../obj/xcp.o 0x312 (size before relaxing) .comment 0x00000000 0x11 .comment 0x00000000 0x11 ARM Flash Debug/../../obj/hooks.o 0x12 (size before relaxing) .comment 0x00000000 0x12 ARM Flash Debug/../../obj/main.o + .comment 0x00000000 0x12 ARM Flash Debug/../../obj/extflash.o .comment 0x00000000 0x12 ARM Flash Debug/../../obj/flash.o .comment 0x00000000 0x12 ARM Flash Debug/../../obj/can.o .comment 0x00000000 0x12 ARM Flash Debug/../../obj/cpu.o @@ -623,98 +637,100 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_ .ARM.attributes 0x00000010 0x10 ARM Flash Debug/../../obj/main.o .ARM.attributes - 0x00000020 0x10 ARM Flash Debug/../../obj/cstart.o + 0x00000020 0x10 ARM Flash Debug/../../obj/extflash.o .ARM.attributes - 0x00000030 0x10 ARM Flash Debug/../../obj/flash.o + 0x00000030 0x10 ARM Flash Debug/../../obj/cstart.o .ARM.attributes - 0x00000040 0x10 ARM Flash Debug/../../obj/can.o + 0x00000040 0x10 ARM Flash Debug/../../obj/flash.o .ARM.attributes - 0x00000050 0x10 ARM Flash Debug/../../obj/cpu.o + 0x00000050 0x10 ARM Flash Debug/../../obj/can.o .ARM.attributes - 0x00000060 0x10 ARM Flash Debug/../../obj/nvm.o + 0x00000060 0x10 ARM Flash Debug/../../obj/cpu.o .ARM.attributes - 0x00000070 0x10 ARM Flash Debug/../../obj/timer.o + 0x00000070 0x10 ARM Flash Debug/../../obj/nvm.o .ARM.attributes - 0x00000080 0x10 ARM Flash Debug/../../obj/uart.o + 0x00000080 0x10 ARM Flash Debug/../../obj/timer.o .ARM.attributes - 0x00000090 0x10 ARM Flash Debug/../../obj/assert.o + 0x00000090 0x10 ARM Flash Debug/../../obj/uart.o .ARM.attributes - 0x000000a0 0x10 ARM Flash Debug/../../obj/backdoor.o + 0x000000a0 0x10 ARM Flash Debug/../../obj/assert.o .ARM.attributes - 0x000000b0 0x10 ARM Flash Debug/../../obj/boot.o + 0x000000b0 0x10 ARM Flash Debug/../../obj/backdoor.o .ARM.attributes - 0x000000c0 0x10 ARM Flash Debug/../../obj/com.o + 0x000000c0 0x10 ARM Flash Debug/../../obj/boot.o .ARM.attributes - 0x000000d0 0x10 ARM Flash Debug/../../obj/cop.o + 0x000000d0 0x10 ARM Flash Debug/../../obj/com.o .ARM.attributes - 0x000000e0 0x10 ARM Flash Debug/../../obj/xcp.o + 0x000000e0 0x10 ARM Flash Debug/../../obj/cop.o + .ARM.attributes + 0x000000f0 0x10 ARM Flash Debug/../../obj/xcp.o -.debug_frame 0x00000000 0x548 +.debug_frame 0x00000000 0x5a8 .debug_frame 0x00000000 0x2c ARM Flash Debug/../../obj/main.o - .debug_frame 0x0000002c 0x14c ARM Flash Debug/../../obj/flash.o - .debug_frame 0x00000178 0x68 ARM Flash Debug/../../obj/cpu.o - .debug_frame 0x000001e0 0x9c ARM Flash Debug/../../obj/nvm.o - .debug_frame 0x0000027c 0x6c ARM Flash Debug/../../obj/timer.o - .debug_frame 0x000002e8 0x64 ARM Flash Debug/../../obj/uart.o - .debug_frame 0x0000034c 0x2c ARM Flash Debug/../../obj/assert.o - .debug_frame 0x00000378 0x48 ARM Flash Debug/../../obj/backdoor.o - .debug_frame 0x000003c0 0x48 ARM Flash Debug/../../obj/boot.o - .debug_frame 0x00000408 0xa0 ARM Flash Debug/../../obj/com.o - .debug_frame 0x000004a8 0x30 ARM Flash Debug/../../obj/cop.o - .debug_frame 0x000004d8 0x70 ARM Flash Debug/../../obj/xcp.o + .debug_frame 0x0000002c 0x160 ARM Flash Debug/../../obj/flash.o + .debug_frame 0x0000018c 0x68 ARM Flash Debug/../../obj/cpu.o + .debug_frame 0x000001f4 0x9c ARM Flash Debug/../../obj/nvm.o + .debug_frame 0x00000290 0x78 ARM Flash Debug/../../obj/timer.o + .debug_frame 0x00000308 0x90 ARM Flash Debug/../../obj/uart.o + .debug_frame 0x00000398 0x2c ARM Flash Debug/../../obj/assert.o + .debug_frame 0x000003c4 0x48 ARM Flash Debug/../../obj/backdoor.o + .debug_frame 0x0000040c 0x48 ARM Flash Debug/../../obj/boot.o + .debug_frame 0x00000454 0xa4 ARM Flash Debug/../../obj/com.o + .debug_frame 0x000004f8 0x30 ARM Flash Debug/../../obj/cop.o + .debug_frame 0x00000528 0x80 ARM Flash Debug/../../obj/xcp.o -.debug_loc 0x00000000 0xb3b - .debug_loc 0x00000000 0x99 ARM Flash Debug/../../obj/main.o - .debug_loc 0x00000099 0x4e7 ARM Flash Debug/../../obj/flash.o - .debug_loc 0x00000580 0xe2 ARM Flash Debug/../../obj/cpu.o - .debug_loc 0x00000662 0xff ARM Flash Debug/../../obj/nvm.o - .debug_loc 0x00000761 0x20 ARM Flash Debug/../../obj/timer.o - .debug_loc 0x00000781 0xd9 ARM Flash Debug/../../obj/uart.o - .debug_loc 0x0000085a 0x46 ARM Flash Debug/../../obj/assert.o - .debug_loc 0x000008a0 0x40 ARM Flash Debug/../../obj/backdoor.o - .debug_loc 0x000008e0 0x40 ARM Flash Debug/../../obj/boot.o - .debug_loc 0x00000920 0xa6 ARM Flash Debug/../../obj/com.o - .debug_loc 0x000009c6 0x175 ARM Flash Debug/../../obj/xcp.o +.debug_loc 0x00000000 0xb16 + .debug_loc 0x00000000 0x20 ARM Flash Debug/../../obj/main.o + .debug_loc 0x00000020 0x4a6 ARM Flash Debug/../../obj/flash.o + .debug_loc 0x000004c6 0x109 ARM Flash Debug/../../obj/cpu.o + .debug_loc 0x000005cf 0xff ARM Flash Debug/../../obj/nvm.o + .debug_loc 0x000006ce 0x40 ARM Flash Debug/../../obj/timer.o + .debug_loc 0x0000070e 0xe9 ARM Flash Debug/../../obj/uart.o + .debug_loc 0x000007f7 0x46 ARM Flash Debug/../../obj/assert.o + .debug_loc 0x0000083d 0x40 ARM Flash Debug/../../obj/backdoor.o + .debug_loc 0x0000087d 0x40 ARM Flash Debug/../../obj/boot.o + .debug_loc 0x000008bd 0xb2 ARM Flash Debug/../../obj/com.o + .debug_loc 0x0000096f 0x1a7 ARM Flash Debug/../../obj/xcp.o -.debug_aranges 0x00000000 0x2b0 +.debug_aranges 0x00000000 0x2d0 .debug_aranges 0x00000000 0x20 ARM Flash Debug/../../obj/main.o .debug_aranges 0x00000020 0x28 ARM Flash Debug/../../obj/cstart.o .debug_aranges - 0x00000048 0x68 ARM Flash Debug/../../obj/flash.o + 0x00000048 0x70 ARM Flash Debug/../../obj/flash.o .debug_aranges - 0x000000b0 0x30 ARM Flash Debug/../../obj/cpu.o + 0x000000b8 0x30 ARM Flash Debug/../../obj/cpu.o .debug_aranges - 0x000000e0 0x40 ARM Flash Debug/../../obj/nvm.o + 0x000000e8 0x40 ARM Flash Debug/../../obj/nvm.o .debug_aranges - 0x00000120 0x40 ARM Flash Debug/../../obj/timer.o + 0x00000128 0x40 ARM Flash Debug/../../obj/timer.o .debug_aranges - 0x00000160 0x30 ARM Flash Debug/../../obj/uart.o + 0x00000168 0x40 ARM Flash Debug/../../obj/uart.o .debug_aranges - 0x00000190 0x20 ARM Flash Debug/../../obj/assert.o + 0x000001a8 0x20 ARM Flash Debug/../../obj/assert.o .debug_aranges - 0x000001b0 0x28 ARM Flash Debug/../../obj/backdoor.o + 0x000001c8 0x28 ARM Flash Debug/../../obj/backdoor.o .debug_aranges - 0x000001d8 0x28 ARM Flash Debug/../../obj/boot.o + 0x000001f0 0x28 ARM Flash Debug/../../obj/boot.o .debug_aranges - 0x00000200 0x48 ARM Flash Debug/../../obj/com.o + 0x00000218 0x48 ARM Flash Debug/../../obj/com.o .debug_aranges - 0x00000248 0x28 ARM Flash Debug/../../obj/cop.o + 0x00000260 0x28 ARM Flash Debug/../../obj/cop.o .debug_aranges - 0x00000270 0x40 ARM Flash Debug/../../obj/xcp.o + 0x00000288 0x48 ARM Flash Debug/../../obj/xcp.o -.debug_ranges 0x00000000 0x308 - .debug_ranges 0x00000000 0x50 ARM Flash Debug/../../obj/main.o - .debug_ranges 0x00000050 0x20 ARM Flash Debug/../../obj/cstart.o - .debug_ranges 0x00000070 0x58 ARM Flash Debug/../../obj/flash.o - .debug_ranges 0x000000c8 0x20 ARM Flash Debug/../../obj/cpu.o - .debug_ranges 0x000000e8 0x30 ARM Flash Debug/../../obj/nvm.o - .debug_ranges 0x00000118 0x30 ARM Flash Debug/../../obj/timer.o - .debug_ranges 0x00000148 0x90 ARM Flash Debug/../../obj/uart.o - .debug_ranges 0x000001d8 0x10 ARM Flash Debug/../../obj/assert.o - .debug_ranges 0x000001e8 0x18 ARM Flash Debug/../../obj/backdoor.o - .debug_ranges 0x00000200 0x18 ARM Flash Debug/../../obj/boot.o - .debug_ranges 0x00000218 0x38 ARM Flash Debug/../../obj/com.o - .debug_ranges 0x00000250 0x18 ARM Flash Debug/../../obj/cop.o - .debug_ranges 0x00000268 0xa0 ARM Flash Debug/../../obj/xcp.o +.debug_ranges 0x00000000 0x208 + .debug_ranges 0x00000000 0x10 ARM Flash Debug/../../obj/main.o + .debug_ranges 0x00000010 0x20 ARM Flash Debug/../../obj/cstart.o + .debug_ranges 0x00000030 0x60 ARM Flash Debug/../../obj/flash.o + .debug_ranges 0x00000090 0x20 ARM Flash Debug/../../obj/cpu.o + .debug_ranges 0x000000b0 0x30 ARM Flash Debug/../../obj/nvm.o + .debug_ranges 0x000000e0 0x30 ARM Flash Debug/../../obj/timer.o + .debug_ranges 0x00000110 0x30 ARM Flash Debug/../../obj/uart.o + .debug_ranges 0x00000140 0x10 ARM Flash Debug/../../obj/assert.o + .debug_ranges 0x00000150 0x18 ARM Flash Debug/../../obj/backdoor.o + .debug_ranges 0x00000168 0x18 ARM Flash Debug/../../obj/boot.o + .debug_ranges 0x00000180 0x38 ARM Flash Debug/../../obj/com.o + .debug_ranges 0x000001b8 0x18 ARM Flash Debug/../../obj/cop.o + .debug_ranges 0x000001d0 0x38 ARM Flash Debug/../../obj/xcp.o diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec index 2c358d52..9d92f99a 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec @@ -38,7 +38,7 @@ S1130228280000EB2C019FE52C119FE5001041E00C S1130238080051E30020A0A3042080A4001080A596 S1130248E8009FE5E8109FE5010050E1BEFFFF0AC2 S1130258042090E403002DE90FE0A0E112FF2FE150 -S11302680300BDE8B0FFFFEAF30200EB0000A0E3DF +S11302680300BDE8B0FFFFEA180300EB0000A0E3B9 S11302780010A0E3E4209FE50FE0A0E112FF2FE1C6 S1130288010050E10EF0A001012052E00EF0A0019F S1130298013080E1023083E1030013E30400001A13 @@ -47,279 +47,306 @@ S11302B80EF0A0E10130D0E40130C1E4012052E2A3 S11302C8FBFFFF1A0EF0A0E1010050E10EF0A001BF S11302D80120C0E4FBFFFFEAFEFFFFEAFEFFFFEA9E S11302E8FEFFFFEAFEFFFFEAFEFFFFEA40C01FE051 -S11302F8281100402811004028100040281100400F -S113030828110040280F0040181400003C02004047 -S11303183C020040700300007003000060120000FB -S11303281814000028110040281100406012000031 -S113033860120000601200006012000060120000E9 -S1130348601200006012000060120000181400001F -S11303583C0200402807004028070040280B0040C2 +S11302F830110040301100403010004030110040EF +S113030830110040300F0040C81500003C02004086 +S11303183C02004070030000700300007C140000DD +S1130328C815000030110040301100407C14000052 +S11303387C1400007C1400007C1400007C14000071 +S11303487C1400007C1400007C140000C815000014 +S11303583C0200403007004030070040300B0040AA S10B0368700300000000A0E195 -S113037004E02DE5E4009FE5E4109FE5E4209FE51B -S11303800040A0E300C0D4E7910C0CE026CA4CE284 -S113039016CE4CE202005CE1FF3004E20300009A56 -S11303A0014084E2040054E3F5FFFF1A260000EA4A -S11303B08322A0E1022082E3AC309FE5FF2002E229 -S11303C08420C3E55510E0E35520A0E30100A0E339 -S11303D08C10C3E58C20C3E58000C3E58C10C3E515 -S11303E08C20C3E50320A0E1B818D2E1010B11E38E -S11303F074309FE5FBFFFF0A0320A0E38020C3E5E0 -S11304005520E0E38C20C3E55520A0E38C20C3E510 -S11304100020A0E30020C3E50420A0E30420C3E5FA -S11304200220A0E30020C3E50120A0E30021C3E5EE -S11304301D3843E2002093E5052082E3002083E594 -S1130440540200EB5A0200EBFDFFFFEA1C009FE59B -S11304507010A0E32C0200EB0430A0E1D3FFFFEA0C -S113046060120000C0D40100A080020000C01FE0A0 -S11304706412000070402DE950509FE50060A0E137 -S11304800040A0E3780200EB003095E5030056E15C -S11304900700003A042095E5023083E0030056E1AA -S11304A028309F350C20A033923424300800D435F2 -S11304B00400003A014084E2100054E30C5085E249 -S11304C0EFFFFF1AFF00A0E37040BDE81EFF2FE11D -S11304D0CC120000F0452DE90070A0E120D04DE2DF -S11304E0000090E5E2FFFFEBFF0050E32F00000A5D -S11304F03230A0E30160A0E300308DE504008DE517 -S113050008008DE514608DE53A51E0E3560200EBF6 -S11305100D00A0E114108DE20FE0A0E115FF2FE122 -S113052014809DE5000058E32000001A3330A0E356 -S11305300740A0E100308DE5043094E418008DE913 -S113054078309FE502ACA0E310308DE50CA08DE57A -S113055014608DE5440200EB0D00A0E114108DE25F -S11305600FE0A0E115FF2FE114309DE5000053E3F7 -S11305700800A0110E00001A3830A0E300308DE509 -S1130580003097E514608DE518048DE9360200EB20 -S11305900D00A0E114108DE20FE0A0E115FF2FE1A2 -S11305A014009DE5010070E20000A033000000EAA1 -S11305B00000A0E320D08DE2F045BDE81EFF2FE14E -S11305C060EA000074309FE5030050E130402DE9FB -S11305D00040A0E10150A0E10500000A020A51E335 -S11305E00500000ABAFFFFEB000050E30300001A05 -S11305F00E0000EA48409FE5000000EA0340A0E145 -S1130600853BB0E10040A0130900001A003094E5D6 -S1130610050053E10600000A0400A0E1045080E450 -S11306200510A0E1022CA0E3DF0000EB000000EACB -S11306300040A0E10400A0E13040BDE81EFF2FE12E -S11306403C02004040040040F0452DE90380A0E155 -S1130650003090E57F7FC1E3010073E30040A0E137 -S11306600150A0E10260A0E10370C7E304708004BC -S11306700710A001022CA003CB00000B003094E56E -S1130680070053E10400000A0400A0E10710A0E100 -S1130690CBFFFFEB004050E21800000A003094E565 -S11306A0055063E0045085E25CA09FE5055084E0BA -S11306B0027C87E2EC0100EB043084E2053063E065 -S11306C00A0053E10500009A0400A0E10710A0E12C -S11306D0BBFFFFEB004050E20800000A045084E234 -S11306E0018048E20130D6E40888A0E12888B0E11E -S11306F00130C5E4EEFFFF1A0100A0E3000000EAA8 -S11307000400A0E1F045BDE81EFF2FE1FF01000059 -S113071010209FE50030E0E3003082E508209FE5EB -S1130720003082E51EFF2FE1400400403C020040FF -S113073070402DE90040A0E10160A0E10250A0E179 -S11307404BFFFFEBFF0050E30F00000A010044E2FF -S1130750060080E046FFFFEBFF0050E30A00000ABA -S11307607F3FC4E30330C3E3020A53E324009F053D -S11307700638A0E120009F152338A0E10410A0E171 -S11307800520A0E17040BDE8AEFFFFEA0000A0E351 -S11307907040BDE81EFF2FE13C02004040040040D1 -S11307A0F0452DE920D04DE20160A0E10050A0E128 -S11307B02FFFFFEB0040A0E1010045E2060080E0CE -S11307C02BFFFFEBFF0054E3FF0050130060A01366 -S11307D00160A0030050A0E10060A0032C00000A07 -S11307E0000054E12A00008A000054E30460A001E0 -S11307F02700000A100050E32500008A3230A0E3ED -S11308000180A0E338008DE814808DE53A71E0E3BF -S1130810950100EB0D00A0E114108DE20FE0A0E1C2 -S113082017FF2FE114A09DE500005AE31800001AF9 -S11308303430A0E338008DE864309FE514808DE502 -S11308400C308DE5880100EB0D00A0E114108DE261 -S11308500FE0A0E117FF2FE114309DE5000053E302 -S11308600A60A0110A00001A3530A0E338008DE8B0 -S113087014808DE57C0100EB0D00A0E114108DE2E5 -S11308800FE0A0E117FF2FE114609DE5016076E21F -S11308900060A0330600A0E120D08DE2F045BDE861 -S11308A01EFF2FE160EA0000023AA0E3050093E88E -S11308B0000082E0082093E5020080E00C2093E52C -S11308C0020080E0102093E5020080E0142093E50C -S11308D0020080E0182093E51C3093E5020080E0DC -S11308E0030080E0010070E20000A0331EFF2FE14E -S11308F05C309FE511402DE9140093E9024084E047 -S11309000C2093E5024084E0102093E5024084E04B -S1130910142093E5024084E01C2093E5203093E505 -S1130920024084E0034084E0004064E200408DE53E -S1130930DCFFFFEB000054E10100A00314009F154D -S11309400410A0130D20A01178FFFF1B1840BDE870 -S11309501EFF2FE13C0200401420000040009FE5F0 -S1130960003090E5010073E304E02DE50200000A85 -S1130970D7FEFFEB000050E30700000A24009FE5C8 -S1130980003090E5010073E30100A0030200000AB7 -S1130990CFFEFFEB000090E20100A01304E09DE411 -S11309A01EFF2FE13C020040400400400228A0E169 -S11309B070402DE90140A0E12258A0E10060A0E1CF -S11309C0050000EA0130D4E40130C6E4260100EB5E -S11309D0015045E20558A0E12558A0E1000055E387 -S11309E0F7FFFF1A7040BDE81EFF2FE104E02DE57C -S11309F01E0000EB000050E30900000A4020A0E3C1 -S1130A000101A0E3021AA0E3E7FFFFEB18309FE522 -S1130A100220A0E3402083E50131A0E30FE0A0E140 -S1130A2013FF2FE104E09DE41EFF2FE100C01FE04F -S1130A3004E02DE585FDFFEB04E09DE41EFF2FE1BE -S1130A4004E02DE531FFFFEB04E09DE41EFF2FE100 -S1130A5004E02DE535FFFFEB04E09DE41EFF2FE1EC -S1130A6004E02DE54DFFFFEB04E09DE41EFF2FE1C4 -S1130A7004E02DE58BFFFFEB04E09DE41EFF2FE176 -S1130A8004E02DE599FFFFEB000050E3B2FFFF1BEC -S1130A9004E09DE41EFF2FE130309FE530109FE518 -S1130AA00020A0E3142083E5282083E50C1083E5CF -S1130AB00110A0E3041083E5081093E514309FE5CA -S1130AC0001083E510309FE5002083E51EFF2FE131 -S1130AD0004000E05FEA0000480600404406004091 -S1130AE014309FE50020A0E3042083E50C2083E577 -S1130AF0082083E5102083E51EFF2FE1004000E07D -S1130B0024309FE524109FE5082093E520309FE5DD -S1130B10000091E500C093E5000082E000006CE075 -S1130B20000081E5002083E51EFF2FE1004000E086 -S1130B30440600404806004004E02DE5EFFFFFEBCB -S1130B4008309FE5000093E504E09DE41EFF2FE1DB -S1130B504406004034309FE50020A0E37F10E0E32A -S1130B600420C3E50820C3E51420C3E50C10C3E545 -S1130B704110A0E30010C3E50420C3E50320A0E373 -S1130B800C20C3E50720A0E30820C3E51EFF2FE1E6 -S1130B9000C000E0F0412DE9FF6001E2400056E3AF -S1130BA00080A0E1A0009F858310A0835600008BE5 -S1130BB098409FE51430D4E5200013E30060C41589 -S1130BC00100001A040000EAA70000EB1430D4E589 -S1130BD0200013E3FBFFFF0A020000EA68009FE520 -S1130BE08610A0E3480000EB60509FE50040A0E3BE -S1130BF00570A0E10F0000EA9B0000EB1420D5E58E -S1130C000430D8E7200012E30030C5150100001AB3 -S1130C10040000EA940000EB1430D7E5200013E34D -S1130C20FBFFFF0A020000EA1C009FE58E10A0E310 -S1130C30350000EB014084E20438A0E1230856E1CA -S1130C40ECFFFF8AF041BDE81EFF2FE18C1300008A -S1130C5000C000E030402DE99C409FE50020D4E531 -S1130C60000052E394309FE50B00001A1410D3E502 -S1130C70011011E20120A0011C00000A0010D3E5BC -S1130C807C309FE50010C3E50130A0E30030C4E5EB -S1130C9070309FE50020C3E5140000EA1420D3E57A -S1130CA060C09FE5012012E20050DCE50F00000A5D -S1130CB04C109FE50020D3E5053081E00120C3E519 -S1130CC0013085E20020D1E5FF3003E2030052E168 -S1130CD00030CCE50020A0130400001A011081E2CA -S1130CE031FFFFEB0030A0E30030C4E50120A0E3B6 -S1130CF00200A0E13040BDE81EFF2FE18E06004057 -S1130D0000C000E04D0600404C06004014309FE552 -S1130D1004E02DE5000083E50C309FE5001083E539 -S1130D20510000EBFDFFFFEA9006004094060040EE -S1130D3010402DE9470000EB010050E30A00000ACF -S1130D402C409FE50030D4E5010053E30600001A6F -S1130D5078FFFFEB310050E30300009A0030A0E37A -S1130D600030C4E55DFFFFEB1FFFFFEB1040BDE863 -S1130D701EFF2FE19806004014309FE50120A0E3F8 -S1130D8004E02DE50020C3E542FFFFEB04E09DE411 -S1130D90E6FFFFEA9806004004E02DE5310000EB91 -S1130DA0F4FFFFEB25FFFFEB070000EB04E09DE4FD -S1130DB01EFF2FE104E02DE52B0000EB110000EBFA -S1130DC0DAFFFFEB04E09DE41EFF2FE101402DE973 -S1130DD00030E0E30030CDE50030A0E30130CDE5A4 -S1130DE02A0000EB5AFFFFEB14309FE50030D3E5F7 -S1130DF0010053E30D00A0013900000B0840BDE8D9 -S1130E001EFF2FE19906004004E02DE514009FE544 -S1130E108FFFFFEB010050E308009F053000000B3B -S1130E2004E09DE41EFF2FE19A06004004E02DE556 -S1130E30FF1001E256FFFFEB240000EB04E09DE409 -S1130E401EFF2FE108309FE50120A0E30020C3E549 -S1130E501EFF2FE19906004004E02DE5150000EB8C -S1130E6004E09DE41EFF2FE11EFF2FE11EFF2FE192 -S1130E7014309FE50120E0E30320C3E50220A0E352 -S1130E800400C3E5B424C3E11EFF2FE1DC060040E7 -S1130E901C309FE50020A0E30020C3E5482083E543 -S1130EA04320C3E5B424C3E10220C3E50120C3E524 -S1130EB01EFF2FE1DC0600400C309FE50000D3E567 -S1130EC0000090E20100A0131EFF2FE1DC060040A9 -S1130ED008309FE50020A0E34320C3E51EFF2FE177 -S1130EE0DC06004070402DE90030D0E5FF0053E3FC -S1130EF00050A0E158439FE50D00001A0010E0E304 -S1130F000310C4E51010A0E30020A0E30130A0E327 -S1130F100410C4E54010A0E30120C4E50030C4E59A -S1130F200520C4E50610C4E50710C4E50820C4E59F -S1130F30640000EA0060D4E5010056E3C200001A30 -S1130F40F30053E33900000A0D00008ACF0053E395 -S1130F50AA00000A0400008AC90053E36E00000AD4 -S1130F60CC0053E3AC00001AA90000EAD10053E31B -S1130F709C00000A7400003AD20053E3A600001A51 -S1130F808B0000EAFA0053E34300000A0500008ADC -S1130F90F50053E30A00000A0F00003AF60053E399 -S1130FA09D00001A1D0000EAFD0053E34B00000AF7 -S1130FB0FE0053E35400000AFC0053E39600001AB9 -S1130FC0440000EA0120D0E53F0052E3040084928B -S1130FD0481094950700009A5E0000EA0130D0E5BD -S1130FE03F0053E35B00008A041090E5481084E559 -S1130FF00120D5E5040084E26BFEFFEB0030E0E362 -S11310000330C4E5483094E50120D5E5033082E09F -S1131010483084E50130D5E5013083E26F0000EA11 -S11310200030E0E30330C4E5043090E5440000EA16 -S11310300030E0E30330C4E50030A0E3480094E569 -S1131040041095E50320A0E1030000EA00C0D3E703 -S11310500C2082E0FF2002E2013083E2010053E130 -S1131060F9FFFF1AE8319FE50720C3E5222CA0E130 -S11310700A20C3E50120A0E30010A0E30420C3E597 -S11310800820A0E30810C3E50910C3E50510C3E573 -S11310900610C3E5B424C3E1610000EA0030E0E3D4 -S11310A00330C4E5AC319FE50720A0E3483084E574 -S11310B00030A0E30430C4E50530C4E50630C4E5DF -S11310C00720C4E50830C4E50930C4E50A30C4E5A6 -S11310D00830A0E3410000EA0000A0E34F0000EA6A -S11310E00030E0E30120D4E50330C4E50030A0E3A0 -S11310F00430C4E50630C4E50730C4E50830C4E56F -S11311000520C4E50630A0E3340000EA0030A0E383 -S11311100030C4E50130C4E5390000EA480094E534 -S11311203F10A0E3012085E248FEFFEB000050E3FE -S11311303700000A0030E0E30330C4E5483094E5AA -S11311403F3083E2483084E52F0000EA0130D0E5E7 -S11311503E0053E30100009A2200A0E32F0000EABE -S11311600030E0E30330C4E5B464C4E10110D0E529 -S1131170000051E30300001A40FEFFEB000050E3BF -S11311802700001A220000EAC4409FE5022085E2FD -S1131190480094E52DFEFFEB000050E31C00000A1C -S11311A00120D5E5483094E5033082E0483084E5F9 -S11311B01B0000EA0030E0E34020A0E30330C4E574 -S11311C00620C4E50030A0E30430C4E50530C4E5DE -S11311D00730C4E50830C4E50930C4E50730A0E3AE -S11311E0B434C4E10E0000EA480094E5041095E527 -S11311F01AFEFFEB000050E30100001A040000EAAD -S11312000AFEFFEB0030E0E30330C4E5B464C4E15C -S1131210030000EA3100A0E3000000EA2000A0E39C -S113122012FFFFEB28409FE54330D4E5010053E370 -S11312301000A0030DFFFF0B0130A0E318009FE591 -S1131240B414D4E14330C4E5F7FEFFEB7040BDE8CD -S11312501EFF2FE1DC06004010140000DF060040F2 -S113126001020408443A2F7573722F666561736531 -S1131270722F736F6674776172652F4F70656E425B -S11312804C542F5461726765742F44656D6F2F4100 -S1131290524D375F4C5043323030305F4F6C696D84 -S11312A065785F4C50435F4C323239345F43726F20 -S11312B07373776F726B732F426F6F742F696465EA -S11312C02F2E2E2F6D61696E2E630000002000000A -S11312D00020000001000000004000000020000089 -S11312E00200000000600000002000000300000075 -S11312F000800000002000000400000000A00000A6 -S1131300002000000500000000C0000000200000D4 -S11313100600000000E000000020000007000000BC -S113132000000100000001000800000000000200AD -S1131330000001000900000000000300002000007C -S11313400A00000000200300002000000B00000041 -S113135000400300002000000C00000000600300B7 -S1131360002000000D0000000080030000200000A9 -S11313700E00000000A00300002000000F00000089 -S113138000C003000020000010000000443A2F7544 -S113139073722F6665617365722F736F66747761FC -S11313A072652F4F70656E424C542F54617267659D -S11313B0742F44656D6F2F41524D375F4C5043324B -S11313C03030305F4F6C696D65785F4C50435F4CD3 -S11313D0323239345F43726F7373776F726B732F6A -S11313E0426F6F742F6964652F2E2E2F2E2E2F2E91 -S11313F02E2F2E2E2F536F757263652F41524D374A -S11314005F4C5043323030302F756172742E63005C -S10B14104F70656E424C54005C +S113037004E02DE588309FE52220A0E38420C3E536 +S11303805510E0E38C10C3E55520A0E38C20C3E5B1 +S11303900100A0E38000C3E58C10C3E58C20C3E515 +S11303A0B828D3E1010B12E3FCFFFF0A50309FE5AC +S11303B00320A0E38020C3E55520E0E38C20C3E5BF +S11303C05520A0E38C20C3E50020A0E30020C3E572 +S11303D00420A0E30420C3E50220A0E30020C3E539 +S11303E00120A0E30021C3E51D3843E2002093E58A +S11303F0052082E3002083E5890200EB8F0200EBF5 +S1130400FDFFFFEA00C01FE070402DE90060A0E19D +S113041050509FE50040A0E3B80200EB003095E5A2 +S1130420060053E10800008A041095E5013083E0DA +S1130430030056E10400002A842084E024309FE570 +S1130440022183E00800D2E5040000EA014084E2CE +S11304500C5085E2100054E3EEFFFF1AFF00A0E306 +S11304607040BDE81EFF2FE17C14000030402DE9F0 +S113047020D04DE20040A0E1000090E5E1FFFFEB59 +S1130480FF0050E30000A0033700000A3230A0E36D +S11304900C308DE510008DE514008DE50130A0E3EE +S11304A000308DE5950200EB0C008DE20D10A0E10B +S11304B03A31E0E30FE0A0E113FF2FE100309DE5C6 +S11304C0000053E30000A0132700001A3330A0E318 +S11304D00C308DE50450A0E1043095E410308DE536 +S11304E014508DE5023CA0E318308DE584309FE57F +S11304F01C308DE50130A0E300308DE57F0200EB78 +S11305000C008DE20D10A0E13A31E0E30FE0A0E130 +S113051013FF2FE100309DE5000053E30000A0131A +S11305201100001A3830A0E30C308DE5003094E55A +S113053010308DE514508DE5023CA0E318308DE5B4 +S11305400130A0E300308DE56C0200EB0C008DE27D +S11305500D10A0E13A31E0E30FE0A0E113FF2FE139 +S113056000009DE5010070E20000A03320D08DE280 +S11305703040BDE81EFF2FE160EA000004E02DE5F5 +S1130580813BB0E10000A0130700001A003090E5A1 +S1130590010053E10100A0030300000A041080E4F9 +S11305A0022CA0E3090100EB0100A0E304E09DE4B8 +S11305B01EFF2FE130402DE90040A0E10150A0E1F1 +S11305C050309FE5030050E10500000A020A51E3A0 +S11305D00500000AA4FFFFEB000050E30300001A2B +S11305E0080000EA30409FE5000000EA24409FE54F +S11305F00400A0E10510A0E1DFFFFFEB000050E3E1 +S11306000040A003000000EA0040A0E30400A0E1D1 +S11306103040BDE81EFF2FE13C0200404004004092 +S1130620F0452DE90050A0E10140A0E10260A0E105 +S11306300370A0E1A1A4A0E18AA4A0E1003090E5A8 +S1130640010073E30400001A0A10A0E1CAFFFFEBE3 +S1130650000050E30000A0032400000A003095E5E8 +S11306600A0053E10500000A0500A0E10A10A0E118 +S1130670CFFFFFEB005050E20000A0031B00000A74 +S1130680003095E5044063E0044084E2044085E0E2 +S1130690013086E2018047E20888A0E1288883E0EF +S11306A050709FE502AC8AE2140200EB043085E24C +S11306B0043063E0070053E10500009A0500A0E15F +S11306C00A10A0E1BAFFFFEB005050E20600000A56 +S11306D0044085E20130D6E40130C4E4080056E168 +S11306E0F0FFFF1A0100A0E3000000EA0000A0E30D +S11306F0F045BDE81EFF2FE1FF0100000030E0E3FC +S11307000C209FE5003082E508209FE5003082E55B +S11307101EFF2FE1400400403C02004070402DE9E0 +S11307200040A0E10150A0E10260A0E135FFFFEB31 +S1130730FF0050E30000A0030E00000A010044E2A1 +S1130740050080E02FFFFFEBFF0050E30000A00353 +S11307500800000AA434A0E1100053E30538A0E126 +S113076018009F0518009F150410A0E10620A0E1C1 +S11307702338A0E1A9FFFFEB7040BDE81EFF2FE185 +S11307803C0200404004004070402DE920D04DE27E +S11307900050A0E10160A0E11AFFFFEB0040A0E1DE +S11307A0010045E2060080E016FFFFEB0050A0E1E7 +S11307B0FF0050E3FF0054130000A0033900000AB7 +S11307C0050054E10000A0833600008A000054E3D1 +S11307D00000A0033300000A100055E30000A083CA +S11307E03000008A3230A0E300308DE504408DE50E +S11307F008508DE50130A0E314308DE5BF0100EB16 +S11308000D00A0E114108DE23A31E0E30FE0A0E125 +S113081013FF2FE114309DE5000053E30000A01303 +S11308202000001A3430A0E300308DE504408DE54B +S113083008508DE578309FE50C308DE50130A0E35C +S113084014308DE5AD0100EB0D00A0E114108DE234 +S11308503A31E0E30FE0A0E113FF2FE114309DE50E +S1130860000053E30000A0130E00001A3530A0E38B +S113087000308DE504408DE508508DE50130A0E39E +S113088014308DE59D0100EB0D00A0E114108DE204 +S11308903A31E0E30FE0A0E113FF2FE114009DE5FE +S11308A0010070E20000A03320D08DE27040BDE86A +S11308B01EFF2FE160EA0000023AA0E3050093E87E +S11308C0000082E0082093E5020080E00C2093E51C +S11308D0020080E0102093E5020080E0142093E5FC +S11308E0020080E0182093E5020080E01C3093E5CC +S11308F0030080E0010070E20000A0331EFF2FE13E +S113090010402DE904D04DE25C309FE5140093E9DA +S1130910024084E00C2093E5024084E0102093E53B +S1130920024084E0142093E5024084E01C2093E517 +S1130930024084E0203093E5034084E0004064E218 +S113094000408DE5DBFFFFEB000054E10100A00354 +S113095018009F150410A0130D20A0116EFFFF1B9B +S113096004D08DE21040BDE81EFF2FE13C020040A0 +S11309701420000004E02DE548309FE5003093E5A5 +S1130980010073E30400000A38009FE5B6FEFFEBA4 +S1130990000050E30000A0030800000A28309FE58F +S11309A0003093E5010073E30100A0030300000A93 +S11309B014009FE5ACFEFFEB000090E20100A013E1 +S11309C004E09DE41EFF2FE13C020040400400408F +S11309D070402DE90160A0E10228A0E12228B0E1E5 +S11309E00900000A0040A0E1010080E2012042E287 +S11309F00258A0E1255880E00130D6E40130C4E477 +S1130A003E0100EB050054E1FAFFFF1A7040BDE817 +S1130A101EFF2FE104E02DE51E0000EB000050E373 +S1130A200900000A0101A0E3021AA0E34020A0E3A8 +S1130A30E6FFFFEB0220A0E314309FE5402083E5AE +S1130A400131A0E30FE0A0E113FF2FE104E09DE4F6 +S1130A501EFF2FE100C01FE004E02DE57BFDFFEB4E +S1130A6004E09DE41EFF2FE104E02DE522FFFFEBEF +S1130A7004E09DE41EFF2FE104E02DE526FFFFEBDB +S1130A8004E09DE41EFF2FE104E02DE53DFFFFEBB4 +S1130A9004E09DE41EFF2FE104E02DE585FFFFEB5C +S1130AA004E09DE41EFF2FE104E02DE593FFFFEB3E +S1130AB0000050E30000A003ADFFFF1B04E09DE431 +S1130AC01EFF2FE114309FE50020A0E3042083E5FE +S1130AD00C2083E5082083E5102083E51EFF2FE129 +S1130AE0004000E024309FE5082093E520109FE5B6 +S1130AF0000091E5000082E018309FE500C093E516 +S1130B0000006CE0000081E5002083E51EFF2FE17A +S1130B10004000E0440600404806004004309FE5E1 +S1130B20000083E51EFF2FE14406004004E02DE5AC +S1130B3030309FE50000A0E3140083E5280083E53E +S1130B4024209FE50C2083E50120A0E3042083E515 +S1130B50082093E514309FE5002083E5EEFFFFEBCA +S1130B6004E09DE41EFF2FE1004000E05FEA000086 +S1130B704806004004E02DE5D9FFFFEB08309FE56F +S1130B80000093E504E09DE41EFF2FE144060040CD +S1130B901C309FE51430D3E5010013E310309F159A +S1130BA00030D3150030C0150100A0130000A003CD +S1130BB01EFF2FE100C000E010402DE944309FE506 +S1130BC01430D3E5200013E30000A0030B00000A57 +S1130BD030309FE50000C3E51430D3E5200013E373 +S1130BE00100A0130500001A18409FE5C30000EBA4 +S1130BF01430D4E5200013E3FBFFFF0A0100A0E357 +S1130C001040BDE81EFF2FE100C000E034309FE536 +S1130C100020A0E30420C3E50820C3E51420C3E5B5 +S1130C207F10E0E30C10C3E54110A0E30010C3E51E +S1130C300420C3E50320A0E30C20C3E50720A0E3C0 +S1130C400820C3E51EFF2FE100C000E0F0412DE9BC +S1130C500050A0E1FF4001E2400054E368009F859A +S1130C608310A0834900008B0400A0E1D1FFFFEBB7 +S1130C70010050E350009F158610A0134300001B91 +S1130C800460A0E1000054E30D00000A0040A0E36A +S1130C9034709FE58E80A0E3980000EB0400D5E754 +S1130CA0C4FFFFEB010050E30700A0110810A011DE +S1130CB03600001B014084E20438A0E1230856E119 +S1130CC0F4FFFF8AF041BDE81EFF2FE13C15000050 +S1130CD030402DE90050A0E1A0309FE50030D3E57D +S1130CE0000053E30B00001A94009FE5A7FFFFEBFD +S1130CF0010050E30000A0131E00001A0120A0E32D +S1130D0078309FE50020C3E50000A0E374309FE540 +S1130D100000C3E5170000EA68309FE50040D3E512 +S1130D2064009FE5000084E098FFFFEB010050E3BE +S1130D300000A0130F00001A014084E2FF2004E227 +S1130D4040309FE50020C3E534309FE50030D3E513 +S1130D50020053E10000A0130600001A0500A0E100 +S1130D6024109FE519FFFFEB0020A0E30C309FE562 +S1130D700020C3E50100A0E33040BDE81EFF2FE1E1 +S1130D8094060040500600404C06004051060040C6 +S1130D9004E02DE510309FE5000083E50C309FE56D +S1130DA0001083E5550000EBFDFFFFEA98060040C4 +S1130DB09C06004004E02DE54B0000EB010050E3ED +S1130DC00B00000A30309FE50030D3E5010053E307 +S1130DD00700001A66FFFFEB310050E30400009A9D +S1130DE00020A0E310309FE50020C3E534FFFFEBB3 +S1130DF007FFFFEB04E09DE41EFF2FE1A006004087 +S1130E0004E02DE50120A0E310309FE50020C3E5B8 +S1130E1045FFFFEBE6FFFFEB04E09DE41EFF2FE13F +S1130E20A006004004E02DE5330000EBF3FFFFEBE8 +S1130E300CFFFFEB070000EB04E09DE41EFF2FE135 +S1130E4004E02DE52D0000EB130000EBD8FFFFEBD1 +S1130E5004E09DE41EFF2FE104E02DE504D04DE203 +S1130E600030E0E30030CDE50030A0E30130CDE513 +S1130E70300000EB64FFFFEB18309FE50030D3E552 +S1130E80010053E30D00A0013F00000B04D08DE2EC +S1130E9004E09DE41EFF2FE1A106004004E02DE5DF +S1130EA014009FE589FFFFEB010050E308009F0554 +S1130EB03500000B04E09DE41EFF2FE1A406004072 +S1130EC004E02DE5FF1001E25FFFFFEB290000EBDA +S1130ED004E09DE41EFF2FE10120A0E304309FE520 +S1130EE00020C3E51EFF2FE1A106004004E02DE52C +S1130EF01A0000EB04E09DE41EFF2FE11EFF2FE12A +S1130F001EFF2FE10020A0E304309FE50120C3E58C +S1130F101EFF2FE1E406004014309FE50120E0E3CA +S1130F200320C3E50400C3E50220A0E3B424C3E125 +S1130F301EFF2FE1E40600401C309FE50020A0E3E3 +S1130F400020C3E5482083E54320C3E5B424C3E17E +S1130F500220C3E50120C3E51EFF2FE1E4060040A3 +S1130F600C309FE50000D3E5000090E20100A013DF +S1130F701EFF2FE1E40600400020A0E304309FE5BB +S1130F804320C3E51EFF2FE1E406004030402DE975 +S1130F900040A0E10030D0E5FF0053E31200001A46 +S1130FA0D7FFFFEBC8349FE50120A0E30020C3E591 +S1130FB00010E0E30310C3E51010A0E30410C3E540 +S1130FC00010A0E30510C3E54000A0E30600C3E55C +S1130FD00700C3E50810C3E50920C3E50A20C3E5FB +S1130FE00820A0E3B424C3E1140100EA80249FE5AF +S1130FF00020D2E5010052E31B01001AC93043E28C +S1131000350053E303F19F970A0100EAC41200007C +S113101038140000381400002C14000038140000A8 +S1131020381400001014000010130000D413000042 +S11310309C13000038140000381400003814000019 +S1131040381400003814000038140000381400006C +S1131050381400003814000038140000381400005C +S1131060381400003814000038140000381400004C +S1131070381400003814000038140000381400003C +S1131080381400003814000038140000381400002C +S1131090381400003814000038140000381400001C +S11310A0381400003814000038140000381400000C +S11310B038140000AC11000034110000E4100000EA +S11310C08C1100003814000038140000381400009B +S11310D01C12000038140000601200006C120000A2 +S11310E0A01200000120D0E53F0052E30200009A64 +S11310F02200A0E387FFFFEBD00000EA70539FE5D6 +S1131100040085E2481095E530FEFFEB0030E0E393 +S11311100330C5E50120D4E5483095E5033082E08D +S1131120483085E50130D4E5013083E2B434C5E1CB +S1131130C20000EA0130D0E53F0053E30200009A08 +S11311402200A0E373FFFFEBBC0000EA041090E56B +S11311501C539FE5481085E5040085E20120D4E591 +S11311601AFEFFEB0030E0E30330C5E50120D4E5CF +S1131170483095E5033082E0483085E50130D4E518 +S1131180013083E2B434C5E1AC0000EAE0329FE50B +S11311900020E0E30320C3E5042090E5482083E534 +S11311A00120A0E3B424C3E1A40000EAC0329FE517 +S11311B00020E0E30320C3E5481093E5043090E504 +S11311C0000053E30020A0030500000A0020A0E370 +S11311D00100D1E4002082E0FF2002E2013053E26A +S11311E0FAFFFF1A88329FE50010A0E30720C3E549 +S11311F00810C3E50910C3E5222CA0E10A20C3E5C9 +S11312000120A0E30420C3E50510C3E50610C3E5EF +S11312100820A0E3B424C3E1880000EA50329FE52B +S11312200020E0E30320C3E548229FE5482083E54E +S11312300020A0E30420C3E50520C3E50620C3E5A0 +S11312400710A0E30710C3E50820C3E50920C3E5A0 +S11312500A20C3E50820A0E3B424C3E1770000EA30 +S11312600000A0E32BFFFFEB740000EA00329FE5CF +S11312700020E0E30320C3E50020A0E30420C3E54D +S11312800110D3E50510C3E50620C3E50720C3E537 +S11312900820C3E50620A0E3B424C3E1670000EA04 +S11312A0CC419FE50030A0E30030C4E514FFFFEB20 +S11312B00030E0E30330C4E50130A0E3B434C4E11A +S11312C05E0000EAA8319FE5480093E53F10A0E3E3 +S11312D0012084E2E7FDFFEB000050E30200001A66 +S11312E03100A0E30BFFFFEB540000EA80319FE5DF +S11312F00020E0E30320C3E5482093E53F2082E299 +S1131300482083E50120A0E3B424C3E14B0000EAB4 +S11313100130D0E53E0053E30200009A2200A0E32E +S1131320FCFEFFEB450000EA44319FE50020E0E3CA +S11313300320C3E50120A0E3B424C3E10110D0E5F8 +S1131340000051E30500001AD6FDFFEB000050E356 +S11313503A00001A3100A0E3EEFEFFEB370000EA8A +S11313600C319FE5480093E5022084E2C1FDFFEBC8 +S1131370000050E30200001A3100A0E3E5FEFFEB99 +S11313802E0000EAE8309FE50110D4E5482093E5FB +S1131390022081E0482083E5280000EAD0309FE560 +S11313A00020E0E30320C3E50020A0E30420C3E51C +S11313B00520C3E54010A0E30610C3E50720C3E5FC +S11313C00820C3E50920C3E50720A0E3B424C3E152 +S11313D01A0000EA98309FE5480093E5041094E56C +S11313E0A8FDFFEB000050E30200001A3100A0E367 +S11313F0C8FEFFEB110000EA74309FE50020E0E333 +S11314000320C3E50120A0E3B424C3E10B0000EAF8 +S113141090FDFFEB58309FE50020E0E30320C3E597 +S11314200120A0E3B424C3E1040000EA3100A0E3F6 +S1131430B8FEFFEB010000EA2000A0E3B5FEFFEBDD +S11314402C309FE54330D3E5010053E31000A003A3 +S1131450B0FEFF0B18309FE50120A0E34320C3E555 +S1131460030083E2B414D3E194FEFFEB3040BDE803 +S10F14701EFF2FE1E4060040C015000040 +S113147C00200000002000000100000000400000DB +S113148C00200000020000000060000000200000AA +S113149C0300000000800000002000000400000095 +S11314AC00A00000002000000500000000C00000A7 +S11314BC002000000600000000E0000000200000F6 +S11314CC07000000000001000000010008000000FB +S11314DC00000200000001000900000000000300ED +S11314EC002000000A00000000200300002000007F +S11314FC0B00000000400300002000000C00000062 +S113150C00600300002000000D00000000800300B8 +S113151C002000000E00000000A0030000200000CA +S113152C0F00000000C003000020000010000000A9 +S113153C443A2F7573722F6665617365722F736FDE +S113154C6674776172652F4F70656E424C542F54DC +S113155C61726765742F44656D6F2F41524D375F0F +S113156C4C5043323030305F4F6C696D65785F4C52 +S113157C50435F4C323239345F43726F7373776FFD +S113158C726B732F426F6F742F6964652F2E2E2F1D +S113159C2E2E2F2E2E2F2E2E2F536F757263652FFA +S11315AC41524D375F4C5043323030302F7561729D +S10F15BC742E63004F70656E424C5400A6 S9030050AC diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c new file mode 100644 index 00000000..beefab0b --- /dev/null +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c @@ -0,0 +1,643 @@ +/**************************************************************************************** +| Description: bootloader external flash driver source file +| File Name: extflash.c +| +|---------------------------------------------------------------------------------------- +| C O P Y R I G H T +|---------------------------------------------------------------------------------------- +| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved +| +|---------------------------------------------------------------------------------------- +| L I C E N S E +|---------------------------------------------------------------------------------------- +| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or +| modify it under the terms of the GNU General Public License as published by the Free +| Software Foundation, either version 3 of the License, or (at your option) any later +| version. +| +| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +| PURPOSE. See the GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License along with OpenBLT. +| If not, see . +| +| A special exception to the GPL is included to allow you to distribute a combined work +| that includes OpenBLT without being obliged to provide the source code for any +| proprietary components. The exception text is included at the bottom of the license +| file . +| +****************************************************************************************/ + +/**************************************************************************************** +* Include files +****************************************************************************************/ +#include "boot.h" /* bootloader generic header */ + + +#if (BOOT_NVM_HOOKS_ENABLE > 0) +/**************************************************************************************** +* Macro definitions +****************************************************************************************/ +#define FLASH_INVALID_SECTOR (0xff) +#define FLASH_INVALID_ADDRESS (0xffffffff) +#define FLASH_WRITE_BLOCK_SIZE (512) +#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0])) +/* C3 Intel flash commands */ +#define FLASH_CMD_READ_ARRAY_MODE (0xFF) +#define FLASH_CMD_READ_ID_MODE (0x90) +#define FLASH_CMD_ERASE_MODE (0x20) +#define FLASH_CMD_READ_STATUS_MODE (0x70) +#define FLASH_CMD_CHANGE_LOCK_MODE (0x60) +#define FLASH_CMD_UNLOCK_SECTOR (0xD0) +#define FLASH_CMD_LOCK_SECTOR (0x01) +#define FLASH_CMD_PROGRAM_MODE (0x40) +#define FLASH_CMD_ERASE_CONFIRM (0xD0) +#define FLASH_CMD_CLEAR_STATUS (0x50) +/* C3 Intel flash info bits */ +#define FLASH_LOCK_BIT (0x01) +#define FLASH_STATUS_READY_BIT (0x80) +/* C3 Intel flash error codes */ +#define FLASH_ERR_LOCKED (0x02) +#define FLASH_ERR_VPP_RANGE (0x08) +#define FLASH_ERR_PROGRAM (0x10) +#define FLASH_ERR_CMD_SEQ (0x10) +#define FLASH_ERR_ERASE (0x20) +/* flash operation timeout values */ +#define FLASH_ERASE_TIMEOUT ((blt_int32u)5000000) +#define FLASH_PROGRAM_TIMEOUT ((blt_int32u)1000000) +/* supported Intel C3 flash device */ +#define FLASH_DEV_MAN_ID ((blt_int16u)0x0089) +#define FLASH_DEV_ID ((blt_int16u)0x88c3) +/* address offsets for reading device information */ +#define FLASH_DEVINFO_MAN_ID ((blt_int16u)0x0000) +#define FLASH_DEVINFO_DEV_ID ((blt_int16u)0x0001) +#define FLASH_DEVINFO_LOCK_STATUS ((blt_int16u)0x0002) +/* functions implemented in a macro for run-time and codesize optimization */ +#define ExtFlashGetManID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ + FLASH_DEVINFO_MAN_ID)) +#define ExtFlashGetDevID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ + FLASH_DEVINFO_DEV_ID)) +#define ExtFlashGetLockStatus(base) (ExtFlashGetDeviceInfo(base, \ + FLASH_DEVINFO_LOCK_STATUS)) + + +/**************************************************************************************** +* Type definitions +****************************************************************************************/ +/* flash sector descriptor type */ +typedef struct +{ + blt_addr sector_start; /* sector start address */ + blt_int32u sector_size; /* sector size in bytes */ + blt_int8u sector_num; /* sector number */ +} tFlashSector; /* flash sector description */ + +/* programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a flash block + * manager is implemented in this driver. this flash block manager depends on this + * flash block info structure. It holds the base address of the flash block and the + * data that should be programmed into the flash block. + */ +typedef struct +{ + blt_addr base_addr; + blt_int8u data[FLASH_WRITE_BLOCK_SIZE]; +} tFlashBlockInfo; + + +/**************************************************************************************** +* Function prototypes +****************************************************************************************/ +static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address); +static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr); +static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, + blt_int8u *data, blt_int16u len); +static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block); +static blt_bool ExtFlashEraseSector(blt_addr sector_base); +static blt_int16u ExtFlashGetDeviceInfo(blt_addr block_base, blt_int16u info); +static void ExtFlashLockSector(blt_addr sector_base); +static void ExtFlashUnlockSector(blt_addr sector_base); +static blt_int8u ExtFlashGetSector(blt_addr address); + + +/**************************************************************************************** +* Local constant declarations +****************************************************************************************/ +/* The current layout supports the 2MB external C3 Intel flash: + * - manufacturer id = 0x0089 + * - device id = 0x88c3 (16 Mbit bottom boot device) + * Note that what Intel calls a block in the user manual, is called a sector in this + * driver. + */ +static const tFlashSector flashLayout[] = +{ + { 0x80000000, 0x02000, 0}, /* flash sector 0 - 8 kbyte */ + { 0x80002000, 0x02000, 1}, /* flash sector 1 - 8 kbyte */ + { 0x80004000, 0x02000, 2}, /* flash sector 2 - 8 kbyte */ + { 0x80006000, 0x02000, 3}, /* flash sector 3 - 8 kbyte */ + { 0x80008000, 0x02000, 4}, /* flash sector 4 - 8 kbyte */ + { 0x8000A000, 0x02000, 5}, /* flash sector 5 - 8 kbyte */ + { 0x8000C000, 0x02000, 6}, /* flash sector 6 - 8 kbyte */ + { 0x8000E000, 0x02000, 7}, /* flash sector 7 - 8 kbyte */ + { 0x80010000, 0x10000, 8}, /* flash sector 8 - 64 kbyte */ + { 0x80020000, 0x10000, 9}, /* flash sector 9 - 64 kbyte */ + { 0x80030000, 0x10000, 10}, /* flash sector 10 - 64 kbyte */ + { 0x80040000, 0x10000, 11}, /* flash sector 11 - 64 kbyte */ + { 0x80050000, 0x10000, 12}, /* flash sector 12 - 64 kbyte */ + { 0x80060000, 0x10000, 13}, /* flash sector 13 - 64 kbyte */ + { 0x80070000, 0x10000, 14}, /* flash sector 14 - 64 kbyte */ + { 0x80080000, 0x10000, 15}, /* flash sector 15 - 64 kbyte */ + { 0x80090000, 0x10000, 16}, /* flash sector 16 - 64 kbyte */ + { 0x800A0000, 0x10000, 17}, /* flash sector 17 - 64 kbyte */ + { 0x800B0000, 0x10000, 18}, /* flash sector 18 - 64 kbyte */ + { 0x800C0000, 0x10000, 19}, /* flash sector 19 - 64 kbyte */ + { 0x800D0000, 0x10000, 20}, /* flash sector 20 - 64 kbyte */ + { 0x800E0000, 0x10000, 21}, /* flash sector 21 - 64 kbyte */ + { 0x800F0000, 0x10000, 22}, /* flash sector 22 - 64 kbyte */ + { 0x80100000, 0x10000, 23}, /* flash sector 23 - 64 kbyte */ + { 0x80110000, 0x10000, 24}, /* flash sector 24 - 64 kbyte */ + { 0x80120000, 0x10000, 25}, /* flash sector 25 - 64 kbyte */ + { 0x80130000, 0x10000, 26}, /* flash sector 26 - 64 kbyte */ + { 0x80140000, 0x10000, 27}, /* flash sector 27 - 64 kbyte */ + { 0x80150000, 0x10000, 28}, /* flash sector 28 - 64 kbyte */ + { 0x80160000, 0x10000, 29}, /* flash sector 29 - 64 kbyte */ + { 0x80170000, 0x10000, 30}, /* flash sector 30 - 64 kbyte */ + { 0x80180000, 0x10000, 31}, /* flash sector 31 - 64 kbyte */ + { 0x80190000, 0x10000, 32}, /* flash sector 32 - 64 kbyte */ + { 0x801A0000, 0x10000, 33}, /* flash sector 33 - 64 kbyte */ + { 0x801B0000, 0x10000, 34}, /* flash sector 34 - 64 kbyte */ + { 0x801C0000, 0x10000, 35}, /* flash sector 35 - 64 kbyte */ + { 0x801D0000, 0x10000, 36}, /* flash sector 36 - 64 kbyte */ + { 0x801E0000, 0x10000, 37}, /* flash sector 37 - 64 kbyte */ + { 0x801F0000, 0x10000, 38} /* flash sector 38 - 64 kbyte */ +}; + + +/**************************************************************************************** +* Local data declarations +****************************************************************************************/ +/* The smallest amount of flash that can be programmed is FLASH_WRITE_BLOCK_SIZE. A flash + * block manager is implemented in this driver and stores info in this variable. Whenever + * new data should be flashed, it is first added to a RAM buffer, which is part of this + * variable. Whenever the RAM buffer, which has the size of a flash block, is full or + * data needs to be written to a different block, the contents of the RAM buffer are + * programmed to flash. The flash block manager requires some software overhead, yet + * results is faster flash programming because data is first harvested, ideally until + * there is enough to program an entire flash block, before the flash device is actually + * operated on. + */ +static tFlashBlockInfo blockInfo; + + +/**************************************************************************************** +** NAME: ExtFlashInit +** PARAMETER: none +** RETURN VALUE: none +** DESCRIPTION: Initializes the flash driver. +** +****************************************************************************************/ +void ExtFlashInit(void) +{ + /* init the flash block info struct by setting the address to an invalid address */ + blockInfo.base_addr = FLASH_INVALID_ADDRESS; + /* check the flash device identification */ + if ((ExtFlashGetManID() != FLASH_DEV_MAN_ID) || (ExtFlashGetDevID() != FLASH_DEV_ID)) + { + ASSERT_RT(BLT_FALSE); + } +} /*** end of ExtFlashInit ***/ + + +/**************************************************************************************** +** NAME: ExtFlashWrite +** PARAMETER: addr start address +** len length in bytes +** data pointer to the data buffer. +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write +** operation failed. +** DESCRIPTION: Writes the data to flash. +** +****************************************************************************************/ +blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data) +{ + /* make sure the addresses are within the flash device */ + if ( (ExtFlashGetSector(addr) == FLASH_INVALID_SECTOR) || \ + (ExtFlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR) ) + { + return BLT_NVM_NOT_IN_RANGE; + } + + /* let the block manager handle it */ + if (ExtFlashAddToBlock(&blockInfo, addr, data, len) == BLT_FALSE) + { + return BLT_NVM_ERROR; + } + return BLT_NVM_OKAY; +} /*** end of FlashWrite ***/ + + +/**************************************************************************************** +** NAME: ExtFlashErase +** PARAMETER: addr start address +** len length in bytes +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase +** operation failed. +** DESCRIPTION: Erases the flash memory. Note that this function also checks that no +** data is erased outside the flash memory region. +** +****************************************************************************************/ +blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len) +{ + blt_int8u first_sector; + blt_int8u last_sector; + blt_int8u sectorIdx; + + /* obtain the first and last sector number */ + first_sector = ExtFlashGetSector(addr); + last_sector = ExtFlashGetSector(addr+len-1); + /* check them */ + if ( (first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR) ) + { + return BLT_NVM_NOT_IN_RANGE; + } + /* erase the sectors one-by-one */ + for (sectorIdx = first_sector; sectorIdx <= last_sector; sectorIdx++) + { + /* keep the watchdog happy */ + CopService(); + /* erase the sector */ + if (ExtFlashEraseSector(flashLayout[sectorIdx].sector_start) == BLT_FALSE) + { + return BLT_NVM_ERROR; + } + } + /* done so return the result of the operation */ + return BLT_NVM_OKAY; +} /*** end of ExtFlashErase ***/ + + +/**************************************************************************************** +** NAME: ExtFlashDone +** PARAMETER: none +** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise. +** DESCRIPTION: Finilizes the flash driver operations. +** +****************************************************************************************/ +blt_bool ExtFlashDone(void) +{ + /* check if there is still data waiting to be programmed */ + if (blockInfo.base_addr != FLASH_INVALID_ADDRESS) + { + if (ExtFlashWriteBlock(&blockInfo) == BLT_FALSE) + { + return BLT_FALSE; + } + } + /* still here so all is okay */ + return BLT_TRUE; +} /*** end of ExtFlashDone ***/ + + +/**************************************************************************************** +** NAME: ExtFlashInitBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** address base address of the block data. +** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise. +** DESCRIPTION: Copies data currently in flash to the block->data and sets the +** base address. +** +****************************************************************************************/ +static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address) +{ + /* check address alignment */ + if ((address % FLASH_WRITE_BLOCK_SIZE) != 0) + { + return BLT_FALSE; + } + /* make sure that we are initializing a new block and not the same one */ + if (block->base_addr == address) + { + /* block already initialized, so nothing to do */ + return BLT_TRUE; + } + /* set the base address and copies the current data from flash */ + block->base_addr = address; + CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE); + return BLT_TRUE; +} /*** end of ExtFlashInitBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashSwitchBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** base_addr base address for the next block +** RETURN VALUE: the pointer of the block info struct that is no being used, or a NULL +** pointer in case of error. +** DESCRIPTION: Switches blocks by programming the current one and initializing the +** next. +** +****************************************************************************************/ +static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr) +{ + /* need to switch to a new block, so program the current one and init the next */ + if (ExtFlashWriteBlock(block) == BLT_FALSE) + { + return BLT_NULL; + } + /* initialize the new block when necessary */ + if (ExtFlashInitBlock(block, base_addr) == BLT_FALSE) + { + return BLT_NULL; + } + /* still here to all is okay */ + return block; +} /*** end of ExtFlashSwitchBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashAddToBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** address flash destination address +** data pointer to the byte array with data +** len number of bytes to add to the block +** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise. +** DESCRIPTION: Programming is done per block. This function adds data to the block +** that is currently collecting data to be written to flash. If the +** address is outside of the current block, the current block is written +** to flash an a new block is initialized. +** +****************************************************************************************/ +static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, + blt_int8u *data, blt_int16u len) +{ + blt_addr current_base_addr; + blt_int8u *dst; + blt_int8u *src; + + /* determine the current base address */ + current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE; + + /* make sure the blockInfo is not uninitialized */ + if (block->base_addr == FLASH_INVALID_ADDRESS) + { + /* initialize the blockInfo struct for the current block */ + if (ExtFlashInitBlock(block, current_base_addr) == BLT_FALSE) + { + return BLT_FALSE; + } + } + /* check if the new data fits in the current block */ + if (block->base_addr != current_base_addr) + { + /* need to switch to a new block, so program the current one and init the next */ + block = ExtFlashSwitchBlock(block, current_base_addr); + if (block == BLT_NULL) + { + return BLT_FALSE; + } + } + /* add the data to the current block, but check for block overflow */ + dst = &(block->data[address - block->base_addr]); + src = data; + do + { + /* keep the watchdog happy */ + CopService(); + /* buffer overflow? */ + if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE) + { + /* need to switch to a new block, so program the current one and init the next */ + block = ExtFlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE); + if (block == BLT_NULL) + { + return BLT_FALSE; + } + /* reset destination pointer */ + dst = &(block->data[0]); + } + /* write the data to the buffer */ + *dst = *src; + /* update pointers */ + dst++; + src++; + /* decrement byte counter */ + len--; + } + while (len > 0); + /* still here so all is good */ + return BLT_TRUE; +} /*** end of ExtFlashAddToBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashWriteBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise. +** DESCRIPTION: Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data +** array. +** +****************************************************************************************/ +static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block) +{ + volatile blt_int16u *pAddr; + volatile blt_int16u *pData; + blt_bool result = BLT_TRUE; + volatile blt_int32u timeout = 0; + + /* unlock the sector */ + ExtFlashUnlockSector(block->base_addr); + /* init pointer to valid address in the flash block */ + pAddr = (blt_int16u *)block->base_addr; + /* init pointer to start of block data */ + pData = (blt_int16u *)block->data; + /* program all block data 16-bits at a time */ + while ((blt_addr)pAddr < (block->base_addr+FLASH_WRITE_BLOCK_SIZE)) + { + /* keep the watchdog happy */ + CopService(); + /* issue program setup command */ + *pAddr = FLASH_CMD_PROGRAM_MODE; + /* write 16-bit data that is to be programmed to start programming operation */ + *pAddr = *pData; + /* check status register for completion */ + *pAddr = FLASH_CMD_READ_STATUS_MODE; + /* wait for completion or timeout */ + while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_PROGRAM_TIMEOUT) ) + { + timeout++; + } + /* check for possible errors */ + if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ + ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_PROGRAM))!= 0) ) + { + result = BLT_FALSE; + } + /* clear the status register */ + *pAddr = FLASH_CMD_CLEAR_STATUS; + /* increment address and data pointers */ + pAddr++; + pData++; + } + /* lock the sector. this also switches back to read array mode */ + ExtFlashLockSector(block->base_addr); + /* inform the caller about the result */ + return result; +} /*** end of ExtFlashWriteBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashEraseSector +** PARAMETER: sector_base base address of the sector to erase. +** RETURN VALUE: BLT_TRUE is erasure was successful, BLT_FALSE otherwise. +** DESCRIPTION: Erases the flash sector. +** +****************************************************************************************/ +static blt_bool ExtFlashEraseSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + blt_bool result = BLT_TRUE; + volatile blt_int32u timeout = 0; + + /* unlock the sector */ + ExtFlashUnlockSector(sector_base); + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* issue erase setup command */ + *pAddr = FLASH_CMD_ERASE_MODE; + /* issue erase confirm command */ + *pAddr = FLASH_CMD_ERASE_CONFIRM; + /* check status register for completion */ + *pAddr = FLASH_CMD_READ_STATUS_MODE; + /* wait for completion or timeout */ + while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_ERASE_TIMEOUT) ) + { + timeout++; + } + /* check for possible errors */ + if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ + ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_ERASE))!= 0) ) + { + result = BLT_FALSE; + } + /* clear the status register */ + *pAddr = FLASH_CMD_CLEAR_STATUS; + /* lock the sector. this also switches back to read array mode */ + ExtFlashLockSector(sector_base); + /* inform the caller about the result */ + return result; +} /*** end of ExtFlashEraseSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashLockSector +** PARAMETER: sector_base base address of the sector to lock. +** RETURN VALUE: none +** DESCRIPTION: Locks the flash sector. +** +****************************************************************************************/ +static void ExtFlashLockSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + + /* no need to lock a sector that is already locked */ + if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0) + { + return; + } + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* switch to change lock mode */ + *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; + /* unlock the sector */ + *pAddr = FLASH_CMD_LOCK_SECTOR; + /* check that the sector is now actually locked */ + ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0); +} /*** end of ExtFlashLockSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashUnlockSector +** PARAMETER: sector_base base address of the sector to unlock. +** RETURN VALUE: none +** DESCRIPTION: Unlocks the flash sector. +** +****************************************************************************************/ +static void ExtFlashUnlockSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + + /* no need to unlock a sector that is already unlocked */ + if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0) + { + return; + } + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* switch to change lock mode */ + *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; + /* unlock the sector */ + *pAddr = FLASH_CMD_UNLOCK_SECTOR; + /* check that the sector is now actually unlocked */ + ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0); +} /*** end of ExtFlashUnlockSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashGetDeviceInfo +** PARAMETER: sector_base base address of the sector to get the info from. +** info identifier to the type of info to obtain. +** RETURN VALUE: device info. +** DESCRIPTION: Obtains device information from the flash device. +** +****************************************************************************************/ +static blt_int16u ExtFlashGetDeviceInfo(blt_addr sector_base, blt_int16u info) +{ + volatile blt_int16u *pAddr; + blt_int16u readData; + + /* init pointer to any valid address in the flash device */ + pAddr = (blt_int16u *)sector_base + info; + /* switch to read identifier mode */ + *pAddr = FLASH_CMD_READ_ID_MODE; + /* read the info */ + readData = *pAddr; + /* switch back to reading mode */ + *pAddr = FLASH_CMD_READ_ARRAY_MODE; + /* return the result */ + return readData; +} /*** end of ExtFlashGetDeviceInfo ***/ + + +/**************************************************************************************** +** NAME: ExtFlashGetSector +** PARAMETER: address address in the flash sector +** RETURN VALUE: flash sector number or FLASH_INVALID_SECTOR +** DESCRIPTION: Determines the flash sector the address is in. +** +****************************************************************************************/ +static blt_int8u ExtFlashGetSector(blt_addr address) +{ + blt_int8u sectorIdx; + + /* search through the sectors to find the right one */ + for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++) + { + /* keep the watchdog happy */ + CopService(); + /* is the address in this sector? */ + if ( (address >= flashLayout[sectorIdx].sector_start) && \ + (address < (flashLayout[sectorIdx].sector_start + \ + flashLayout[sectorIdx].sector_size)) ) + { + /* return the sector number */ + return flashLayout[sectorIdx].sector_num; + } + } + /* still here so no valid sector found */ + return FLASH_INVALID_SECTOR; +} /*** end of ExtFlashGetSector ***/ +#endif + +/*********************************** end of extflash.c *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h new file mode 100644 index 00000000..bc8c4b15 --- /dev/null +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h @@ -0,0 +1,45 @@ +/**************************************************************************************** +| Description: bootloader external flash driver header file +| File Name: extflash.h +| +|---------------------------------------------------------------------------------------- +| C O P Y R I G H T +|---------------------------------------------------------------------------------------- +| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved +| +|---------------------------------------------------------------------------------------- +| L I C E N S E +|---------------------------------------------------------------------------------------- +| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or +| modify it under the terms of the GNU General Public License as published by the Free +| Software Foundation, either version 3 of the License, or (at your option) any later +| version. +| +| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +| PURPOSE. See the GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License along with OpenBLT. +| If not, see . +| +| A special exception to the GPL is included to allow you to distribute a combined work +| that includes OpenBLT without being obliged to provide the source code for any +| proprietary components. The exception text is included at the bottom of the license +| file . +| +****************************************************************************************/ +#ifndef EXTFLASH_H +#define EXTFLASH_H + +#if (BOOT_NVM_HOOKS_ENABLE > 0) +/**************************************************************************************** +* Function prototypes +****************************************************************************************/ +void ExtFlashInit(void); +blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data); +blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len); +blt_bool ExtFlashDone(void); +#endif + +#endif /* EXTFLASH_H */ +/*********************************** end of extflash.h *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c index e46906ec..8bbaedb6 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c @@ -80,6 +80,7 @@ blt_bool BackDoorEntryHook(void) ****************************************************************************************/ #if (BOOT_NVM_HOOKS_ENABLE > 0) +#include "extflash.h" /**************************************************************************************** ** NAME: NvmInitHook ** PARAMETER: none @@ -90,6 +91,8 @@ blt_bool BackDoorEntryHook(void) ****************************************************************************************/ void NvmInitHook(void) { + /* init the external flash driver */ + ExtFlashInit(); } /*** end of NvmInitHook ***/ @@ -98,20 +101,21 @@ void NvmInitHook(void) ** PARAMETER: addr start address ** len length in bytes ** data pointer to the data buffer. -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the write +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver write ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't ** been written yet. ** ** ****************************************************************************************/ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) { - return BTL_NVM_NOT_IN_RANGE; + /* attempt to write with the external flash driver */ + return ExtFlashWrite(addr, len, data); } /*** end of NvmWriteHook ***/ @@ -119,19 +123,20 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) ** NAME: NvmEraseHook ** PARAMETER: addr start address ** len length in bytes -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the erase +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver erase ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory ** hasn't been erased yet. ** ****************************************************************************************/ -blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) +blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) { - return BTL_NVM_NOT_IN_RANGE; + /* attempt to erase with the external flash driver */ + return ExtFlashErase(addr, len); } /*** end of NvmEraseHook ***/ @@ -144,7 +149,8 @@ blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) ****************************************************************************************/ blt_bool NvmDoneHook(void) { - return BLT_TRUE; + /* finish up the operations of the external flash driver */ + return ExtFlashDone(); } /*** end of NvmDoneHook ***/ #endif /* BOOT_NVM_HOOKS_ENABLE > 0 */ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp index cfbf6ba6..a36735fc 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp @@ -1,7 +1,7 @@ - + @@ -12,6 +12,8 @@ + + diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs index d6c8b5dd..ff30c1df 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs @@ -9,7 +9,7 @@ - + @@ -55,6 +55,9 @@ - + + + + diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h index 209015fb..b9d6766d 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h @@ -35,7 +35,7 @@ /**************************************************************************************** * Macro definitions ****************************************************************************************/ -/* EXTERNAL MEMORY CONTROLLER (EMC) */ +/* EXTERNAL MEMORY CONTROLLER (EMC) */ #define BCFG0 (*((volatile unsigned long *) 0xFFE00000)) /* lpc22xx only */ #define BCFG1 (*((volatile unsigned long *) 0xFFE00004)) /* lpc22xx only */ #define BCFG2 (*((volatile unsigned long *) 0xFFE00008)) /* lpc22xx only */ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c index fcd404b2..9452a520 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c @@ -144,6 +144,29 @@ static void Init(void) MAMCR = 0x2; /* setting peripheral Clock (pclk) to System Clock (cclk) */ VPBDIV = 0x1; +#if (BOOT_NVM_HOOKS_ENABLE > 0) + /* in this the external memory on the Olimex LPC-L2294 board is used so configure + * the memory banks for the external flash EEPROM and RAM + */ + /* external flash EEPROM: + * IDCY=3 (idle timing) + * WST1=4 (read timing) + * RBLE=1 + * WST2=6 (write timing) + * MW=1 (16-bit data bus) + */ + BCFG0 = (0x3 << 0) | (0x4 << 5) | (0x1 << 10) | (0x6 << 11) | (0x1 << 28); + /* external RAM: + * IDCY=0 (idle timing) + * WST1=0 (read timing) + * RBLE=1 + * WST2=0 (write timing) + * MW=2 (32-bit data bus) + */ + BCFG1 = (0x0 << 0) | (0x0 << 5) | (0x1 << 10) | (0x0 << 11) | (0x2 << 28); + /* configure use of data bus and strobe pins for the external memory */ + PINSEL2 = 0x0F000924; +#endif #if (BOOT_COM_UART_ENABLE > 0) /* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */ PINSEL0 |= 0x05; diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf index acbbbf4c..b034dc13 100644 Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf differ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map index 0c1b218b..b107bef2 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map @@ -785,7 +785,7 @@ VPB_Peripherals 0xe0000000 0x00200000 xw BANK3 0x83000000 0x01000000 xw BANK2 0x82000000 0x01000000 xw External_SRAM 0x81000000 0x00100000 xw -External_FLASH 0x80000000 0x00400000 xr +External_FLASH 0x80000000 0x00200000 xr SRAM 0x40000200 0x00003ce0 xw FLASH 0x00002000 0x0003e000 xr *default* 0x00000000 0xffffffff @@ -806,7 +806,7 @@ Linker script and memory map 0x81000000 __External_SRAM_segment_start__ = 0x81000000 0x81100000 __External_SRAM_segment_end__ = 0x81100000 0x80000000 __External_FLASH_segment_start__ = 0x80000000 - 0x80400000 __External_FLASH_segment_end__ = 0x80400000 + 0x80200000 __External_FLASH_segment_end__ = 0x80200000 0x40002000 __SRAM_segment_start__ = 0x40002000 0x40003ee0 __SRAM_segment_end__ = 0x40003ee0 0x00002000 __FLASH_segment_start__ = 0x2000 @@ -1310,20 +1310,20 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_ .debug_ranges 0x000007e0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o) .debug_ranges 0x00000830 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) -.debug_line 0x00000000 0x12a0 +.debug_line 0x00000000 0x12a1 .debug_line 0x00000000 0xec ARM Flash Debug/../../obj/boot.o .debug_line 0x000000ec 0x11e ARM Flash Debug/../../obj/cstart.o .debug_line 0x0000020a 0xe8 ARM Flash Debug/../../obj/irq.o .debug_line 0x000002f2 0xb6 ARM Flash Debug/../../obj/led.o - .debug_line 0x000003a8 0xe9 ARM Flash Debug/../../obj/main.o - .debug_line 0x00000491 0xd5 ARM Flash Debug/../../obj/timer.o - .debug_line 0x00000566 0x9d ARM Flash Debug/../../obj/vectors.o - .debug_line 0x00000603 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfprintf_int.o) - .debug_line 0x00000678 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfscanf_int.o) - .debug_line 0x000006ec 0x54f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(libc2.o) - .debug_line 0x00000c3b 0x56a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v4t_a_le.a(libdebugio.o) - .debug_line 0x000011a5 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o) - .debug_line 0x00001219 0x87 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) + .debug_line 0x000003a8 0xea ARM Flash Debug/../../obj/main.o + .debug_line 0x00000492 0xd5 ARM Flash Debug/../../obj/timer.o + .debug_line 0x00000567 0x9d ARM Flash Debug/../../obj/vectors.o + .debug_line 0x00000604 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfprintf_int.o) + .debug_line 0x00000679 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfscanf_int.o) + .debug_line 0x000006ed 0x54f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(libc2.o) + .debug_line 0x00000c3c 0x56a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v4t_a_le.a(libdebugio.o) + .debug_line 0x000011a6 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o) + .debug_line 0x0000121a 0x87 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o) .debug_str 0x00000000 0xfc6 .debug_str 0x00000000 0x132 ARM Flash Debug/../../obj/boot.o diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp index d502c976..4712f430 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp @@ -1,7 +1,7 @@ - + diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs index aeea24ef..76b2d7cb 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs @@ -55,6 +55,9 @@ - + + + + diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c index 59f19aa4..a5411907 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c @@ -41,6 +41,25 @@ static void Init(void); +/**************************************************************************************** +* Constant data declarations +****************************************************************************************/ +#if (BOOT_NVM_HOOKS_ENABLE > 0) +/* ROM data allocated to the external flash on the Olimex LPC-L2294 board to test the + * programming of data in external flash. To test programming with the additional + * external flash driver, build the bootloader and this program with configurable + * BOOT_NVM_HOOKS_ENABLE set to 1 in config.h + */ +__attribute__((section (".rodata2"))) const unsigned long ExtFlashTestData[] = +{ + 0x00000000, 0x11111111, 0x22222222, 0x33333333, + 0x44444444, 0x55555555, 0x66666666, 0x77777777, + 0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB, + 0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF +}; +#endif + + /**************************************************************************************** ** NAME: main ** PARAMETER: none diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x index cb5d5a1c..70cbf672 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x @@ -6,7 +6,7 @@ MEMORY BANK3 (wx) : ORIGIN = 0x83000000, LENGTH = 0x01000000 BANK2 (wx) : ORIGIN = 0x82000000, LENGTH = 0x01000000 External_SRAM (wx) : ORIGIN = 0x81000000, LENGTH = 0x00100000 - External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00400000 + External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00200000 SRAM (wx) : ORIGIN = 0x40000200, LENGTH = 0x00003CE0 FLASH (rx) : ORIGIN = 0x00002000, LENGTH = 0x0003E000 } @@ -25,7 +25,7 @@ SECTIONS __External_SRAM_segment_start__ = 0x81000000; __External_SRAM_segment_end__ = 0x81100000; __External_FLASH_segment_start__ = 0x80000000; - __External_FLASH_segment_end__ = 0x80400000; + __External_FLASH_segment_end__ = 0x80200000; __SRAM_segment_start__ = 0x40002000; __SRAM_segment_end__ = 0x40003EE0; __FLASH_segment_start__ = 0x00002000; diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf index d34a1d09..50b977eb 100644 Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf differ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex index 5adf7246..823edf49 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex @@ -1,7 +1,7 @@ :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE50000A0E118F09FE510F09FE5C3 -:100020005000000040150000A00000004015000036 -:1000300040150000F014000018150000000000003A +:10002000500000009C120000A00000009C12000084 +:100030009C1200006412000080120000000000000A :10004000E4009FE50110A0E3001080E5000000EF50 :10005000D8009FE5DBF021E300D0A0E1040040E2FE :10006000D7F021E300D0A0E1040040E2D1F021E389 @@ -12,351 +12,308 @@ :1000B000D7F021E300D0A0E1040040E2D1F021E339 :1000C00000D0A0E1040040E2D2F021E300D0A0E1A2 :1000D000040040E2D3F021E300D0A0E1040040E2BC -:1000E000DFF021E300D0A0E1010000EBB80000EB5D +:1000E000DFF021E300D0A0E1010000EB810000EB94 :1000F000140000EA38109FE538209FE538309FE56E :10010000030052E10400913404008234FBFFFF3A03 :100110000000A0E324109FE524209FE5020051E1A8 :1001200004008134FCFFFF3A1EFF2FE140C01FE0B6 -:10013000DC1E004088160000000200400002004063 -:1001400000020040F406004010402DE908D04DE2C6 -:10015000FC309FE5003093E504308DE503308DE2FF -:100160000040A0E3EC109FE5EC209FE50100F3E5E3 -:10017000910000E0260A40E2160E40E2020050E143 -:100180000800009A014084E2FF4004E2040054E3C6 -:10019000F5FFFF1AC4009FE57010A0E3C0309FE593 -:1001A0000FE0A0E113FF2FE18422A0E1022082E30F -:1001B000FF2002E2AC309FE58420C3E55510E0E368 -:1001C0008C10C3E55520A0E38C20C3E50100A0E31B -:1001D0008000C3E58C10C3E58C20C3E5B828D3E1CB -:1001E000010B12E3FCFFFF0A78309FE50320A0E338 -:1001F0008020C3E55520E0E38C20C3E5AB2082E2FC -:100200008C20C3E50020A0E30020C3E5042082E2A7 -:100210000420C3E50220A0E30020C3E50120A0E301 -:10022000013C83E20020C3E53C309FE5002093E5DC -:10023000052082E3002083E530309FE50FE0A0E158 -:1002400013FF2FE128409FE50FE0A0E114FF2FE10D -:10025000FCFFFFEA64150000C0D40100A08002008A -:10026000301600007C0A000000C01FE000C002E061 -:1002700078020000C402000008402DE930309FE5FC -:100280000FE0A0E113FF2FE128309FE50FE0A0E190 -:1002900013FF2FE120309FE50FE0A0E113FF2FE1D6 -:1002A00018309FE50FE0A0E113FF2FE10840BDE803 -:1002B0001EFF2FE1740A0000440A0000800D0000B8 -:1002C0000003000008402DE924309FE50FE0A0E185 -:1002D00013FF2FE11C309FE50FE0A0E113FF2FE19A -:1002E00014309FE50FE0A0E113FF2FE10840BDE8C7 -:1002F0001EFF2FE1780A000068030000C809000013 -:1003000004E02DE50CD04DE20030E0E30430CDE513 -:100310000030A0E30530CDE538309FE50FE0A0E1E7 -:1003200013FF2FE130309FE50FE0A0E113FF2FE135 -:1003300028309FE50030D3E5010053E304008D022F -:100340001C309F050FE0A00113FF2F010CD08DE2A0 -:1003500004E09DE41EFF2FE148040000DC0B0000D8 -:10036000000200409C04000008402DE924009FE5A5 -:1003700024309FE50FE0A0E113FF2FE1010050E3DF -:1003800010009F0514309F050FE0A00113FF2F01FF -:100390000840BDE81EFF2FE104020040C40C00002D -:1003A0009C04000008402DE9FF1001E218309FE591 -:1003B0000FE0A0E113FF2FE110309FE50FE0A0E177 -:1003C00013FF2FE10840BDE81EFF2FE11C0C0000C9 -:1003D000880400000120A0E304309FE50020C3E56D -:1003E0001EFF2FE10002004004309FE50000D3E52E -:1003F0001EFF2FE10002004008402DE90C309FE570 -:100400000FE0A0E113FF2FE10840BDE81EFF2FE140 -:10041000700400000020A0E304309FE50120C3E544 -:100420001EFF2FE14402004014309FE50120E0E36D -:100430000320C3E50400C3E50220A0E3B424C3E124 -:100440001EFF2FE1440200401C309FE50020A0E386 -:100450000020C3E5482083E54320C3E5B424C3E17D -:100460000220C3E50120C3E51EFF2FE14402004046 -:100470000C309FE50000D3E5000050E20100A0131E -:100480001EFF2FE1440200400020A0E304309FE55E -:100490004320C3E51EFF2FE14402004038402DE910 -:1004A0000040A0E10030D0E5FF0053E31200001A45 -:1004B000D7FFFFEBEC349FE50120A0E30020C3E56C -:1004C0000010E0E30310C3E51010A0E30410C3E53F -:1004D0000010A0E30510C3E54000A0E30600C3E55B -:1004E0000700C3E50810C3E50920C3E50A20C3E5FA -:1004F0000820A0E3B424C3E11B0100EAA4249FE583 -:100500000020D2E5010052E32401001AC93043E281 -:10051000350053E303F19F97110100EAC80700007B -:100520006409000064090000580900006409000023 -:1005300064090000340900001C080000F0080000F5 -:10054000B8080000640900006409000064090000A4 -:1005500064090000640900006409000064090000E7 -:1005600064090000640900006409000064090000D7 -:1005700064090000640900006409000064090000C7 -:1005800064090000640900006409000064090000B7 -:1005900064090000640900006409000064090000A7 -:1005A0006409000064090000640900006409000097 -:1005B0006409000064090000640900006409000087 -:1005C00064090000CC0600004C060000F4050000A1 -:1005D000AC06000064090000640900006409000022 -:1005E0002C07000064090000640700007007000089 -:1005F000A40700000120D0E53F0052E30200009A6A -:100600002200A0E387FFFFEBD70000EA94539FE5A9 -:10061000040085E2481095E58C339FE50FE0A0E1EA -:1006200013FF2FE10030E0E30330C5E50120D4E5FE -:10063000483095E5033082E0483085E50130D4E567 -:10064000013083E2B434C5E1C70000EA0130D0E5EF -:100650003F0053E30200009A2200A0E371FFFFEB8A -:10066000C10000EA041090E538539FE5481085E585 -:10067000040085E20120D4E52C339FE50FE0A0E1E2 -:1006800013FF2FE10030E0E30330C5E50120D4E59E -:10069000483095E5033082E0483085E50130D4E507 -:1006A000013083E2B434C5E1AF0000EAF4329FE5E3 -:1006B0000020E0E30320C3E5042090E5482083E523 -:1006C0000120A0E3B424C3E1A70000EAD4C29FE55F -:1006D0000030E0E30330CCE548109CE5043090E5C1 -:1006E000000053E30020A0030500000A0020A0E35F -:1006F0000100D1E4002082E0FF2002E2013053E259 -:10070000FAFFFF1A07208CE598329FE50120A0E34D -:100710000420C3E50020A0E30520C3E50620C3E5CF -:100720000820A0E3B424C3E18F0000EA74329FE5FF -:100730000020E0E30320C3E570229FE5482083E525 -:100740000020A0E30420C3E50520C3E50620C3E59F -:100750000720A0E3072083E50820A0E3B424C3E139 -:10076000810000EA0000A0E32EFFFFEB7E0000EA1C -:1007700030329FE50020E0E30320C3E50020A0E342 -:100780000420C3E50110D3E50510C3E50620C3E549 -:100790000720C3E50820C3E50620A0E3B424C3E195 -:1007A000710000EAFC419FE50030A0E30030C4E5A1 -:1007B00017FFFFEB0030E0E30330C4E50130A0E3B6 -:1007C000B434C4E1680000EAD8319FE5480093E5FD -:1007D0003F10A0E3012084E2D4319FE50FE0A0E1C7 -:1007E00013FF2FE1000050E30200001A3100A0E3E4 -:1007F0000CFFFFEB5C0000EAA8319FE50020E0E37E -:100800000320C3E5482093E53F2082E2482083E5AA -:100810000120A0E3B424C3E1530000EA0130D0E595 -:100820003E0053E30200009A2200A0E3FDFEFFEB2E -:100830004D0000EA6C319FE50020E0E30320C3E5B2 -:100840000120A0E3B424C3E10110D0E5000051E38E -:100850000700001A5C319FE50FE0A0E113FF2FE1D4 -:10086000000050E34000001A3100A0E3EDFEFFEB72 -:100870003D0000EA2C319FE5480093E5022084E228 -:100880002C319FE50FE0A0E113FF2FE1000050E3C2 -:100890000200001A3100A0E3E2FEFFEB320000EAA2 -:1008A00000319FE50110D4E5482093E5022081E066 -:1008B000482083E52C0000EAE8309FE50020E0E3D3 -:1008C0000320C3E50020A0E30420C3E50520C3E521 -:1008D0004010A0E30610C3E50720C3E50820C3E5E8 -:1008E0000920C3E50720A0E3B424C3E11E0000EA09 -:1008F000B0309FE5480093E5041094E5B8309FE5DB -:100900000FE0A0E113FF2FE1000050E30200001A06 -:100910003100A0E3C3FEFFEB130000EA84309FE543 -:100920000020E0E30320C3E50120A0E3B424C3E1F9 -:100930000D0000EA84309FE50FE0A0E113FF2FE1F6 -:1009400060309FE50020E0E30320C3E50120A0E341 -:10095000B424C3E1040000EA3100A0E3B1FEFFEBE0 -:10096000010000EA2000A0E3AEFEFFEB34309FE57B -:100970004330D3E5010053E31000A003A9FEFF0BB1 -:1009800020309FE50120A0E34320C3E5030083E27C -:10099000B414D3E128309FE50FE0A0E113FF2FE16D -:1009A0003840BDE81EFF2FE144020040A40A0000C9 -:1009B000681500009C0D0000F00D0000B80D00004F -:1009C000380B0000A403000008402DE95C309FE5CF -:1009D0000FE0A0E113FF2FE1010050E31100000A36 -:1009E0004C309FE50030D3E5010053E30D00001AC1 -:1009F00040309FE50FE0A0E113FF2FE1310050E30D -:100A00000800009A0020A0E324309FE50020C3E501 -:100A100024309FE50FE0A0E113FF2FE11C309FE59C -:100A20000FE0A0E113FF2FE10840BDE81EFF2FE11A -:100A3000F803000090020040C80E0000240E0000E1 -:100A4000E80A000008402DE90120A0E318309FE5E6 -:100A50000020C3E514309FE50FE0A0E113FF2FE174 -:100A6000D8FFFFEB0840BDE81EFF2FE190020040D9 -:100A7000800E00001EFF2FE11EFF2FE110402DE928 -:100A800014309FE5000083E5041083E50C409FE5EA -:100A90000FE0A0E114FF2FE1FCFFFFEA9402004009 -:100AA000780A0000F8402DE90140A0E1005052E230 -:100AB0000900000A0060A0E124709FE50130D4E441 -:100AC0000130C6E40FE0A0E117FF2FE1015045E23D -:100AD0000558A0E12558B0E1F7FFFF1AF840BDE83E -:100AE0001EFF2FE1780A000008402DE93C309FE509 -:100AF0000FE0A0E113FF2FE1000050E30900000A1E -:100B00000101A0E3021AA0E34020A0E3E4FFFFEB11 -:100B10000220A0E318309FE5402083E50131A0E3E7 -:100B20000FE0A0E113FF2FE10840BDE81EFF2FE119 -:100B3000D40D000000C01FE008402DE90C309FE5F7 -:100B40000FE0A0E113FF2FE10840BDE81EFF2FE1F9 -:100B5000500000001C309FE51430D3E5010013E382 -:100B600010309F150030D3150030C0150100A013C0 -:100B70000000A0031EFF2FE100C000E038402DE977 -:100B80004C309FE51430D3E5200013E30000A003B0 -:100B90000D00000A38309FE50000C3E51430D3E5AE -:100BA000200013E30100A0130700001A24509FE562 -:100BB0001C409FE50FE0A0E115FF2FE11430D4E5C4 -:100BC000200013E3FAFFFF0A0100A0E33840BDE86C -:100BD0001EFF2FE100C000E0780A000034309FE5DE -:100BE0000020A0E30420C3E50820C3E51420C3E5EA -:100BF0007F10E0E30C10C3E54110A0E30010C3E553 -:100C00000420C3E50320A0E30C20C3E50720A0E3F4 -:100C10000820C3E51EFF2FE100C000E0F8452DE9E4 -:100C20000050A0E10140A0E1400051E384009F8515 -:100C30008310A08380309F850FE0A08113FF2F8158 -:100C40000400A0E1CCFFFFEB010050E364009F151E -:100C50008610A01360309F150FE0A01113FF2F1115 -:100C60000460A0E1000054E31000000A0040A0E38B -:100C700048709FE53C809FE53CA09FE50FE0A0E128 -:100C800017FF2FE10400D5E7BBFFFFEB010050E3A6 -:100C90000800A0118E10A0130FE0A0111AFF2F1151 -:100CA000014084E20438A0E1230856E1F2FFFF8A04 -:100CB000F845BDE81EFF2FE1381600007C0A000051 -:100CC000780A000070402DE90050A0E1A0309FE5B7 -:100CD0000030D3E5000053E30A00001A94009FE5BA -:100CE0009BFFFFEB010050E30000A0131E00001A61 -:100CF0007C309FE50120A0E30020C3E50000A0E3D5 -:100D00004500C3E5180000EA64009FE54540D0E5D2 -:100D1000040080E0050080E28DFFFFEB010050E35E -:100D20000000A0131000001A014084E2FF2004E23A -:100D30003C309FE54520C3E50430D3E5020053E194 -:100D40000000A0130800001A24609FE50500A0E140 -:100D5000051086E220309FE50FE0A0E113FF2FE1B0 -:100D60000030A0E30030C6E50100A0E37040BDE81C -:100D70001EFF2FE19C020040A0020040A40A0000D8 -:100D800008402DE90C309FE50FE0A0E113FF2FE1B3 -:100D90000840BDE81EFF2FE11C12000008402DE9AD -:100DA0000C309FE50FE0A0E113FF2FE10840BDE804 -:100DB0001EFF2FE13412000008402DE90C309FE5A2 -:100DC0000FE0A0E113FF2FE10840BDE81EFF2FE177 -:100DD000A012000008402DE90C309FE50FE0A0E1D3 -:100DE00013FF2FE10840BDE81EFF2FE1D4130000E0 -:100DF00008402DE920309FE50FE0A0E113FF2FE12F -:100E0000000050E30000A00310309F150FE0A01178 -:100E100013FF2F110840BDE81EFF2FE11C14000036 -:100E20009414000014309FE50020A0E3042083E523 -:100E30000C2083E5082083E5102083E51EFF2FE1C9 -:100E4000004000E01C309FE5082093E518309FE546 -:100E5000001093E5011082E0040093E5011060E0CA -:100E6000060083E81EFF2FE1004000E0E40200409E -:100E700004309FE5000083E51EFF2FE1E4020040FF -:100E800008402DE930309FE50000A0E3140083E521 -:100E9000280083E524209FE50C2083E50120A0E3C2 -:100EA000042083E5082093E514309FE5042083E5C2 -:100EB000EEFFFFEB0840BDE81EFF2FE1004000E021 -:100EC0005FEA0000E402004008402DE9DCFFFFEB90 -:100ED00008309FE5000093E50840BDE81EFF2FE1C4 -:100EE000E4020040F0412DE90060A0E10040A0E3F1 -:100EF0000450A0E158809FE558709FE50FE0A0E105 -:100F000018FF2FE1043097E7060053E10900008A3B -:100F1000041087E0041091E5013083E0030056E1FE -:100F20000400002A852085E028309FE5023183E017 -:100F30000800D3E5040000EA015085E20C4084E299 -:100F4000C00054E3ECFFFF1AFF00A0E3F041BDE84E -:100F50001EFF2FE1780A00007015000030402DE9D7 -:100F600024D04DE20040A0E1000090E5DCFFFFEB63 -:100F7000FF0050E30000A0033D00000A3230A0E370 -:100F80000C308DE510008DE514008DE50130A0E3F7 -:100F900000308DE5E4309FE50FE0A0E113FF2FE185 -:100FA0000C008DE20D10A0E13A31E0E30FE0A0E18A -:100FB00013FF2FE100309DE5000053E30000A01374 -:100FC0002B00001A3330A0E30C308DE50450A0E173 -:100FD000043095E410308DE514508DE5023CA0E31B -:100FE00018308DE598309FE51C308DE50130A0E389 -:100FF00000308DE584309FE50FE0A0E113FF2FE185 -:101000000C008DE20D10A0E13A31E0E30FE0A0E129 -:1010100013FF2FE100309DE5000053E30000A01313 -:101020001300001A3830A0E30C308DE5003094E551 -:1010300010308DE514508DE5023CA0E318308DE5AD -:101040000130A0E300308DE530309FE50FE0A0E1F6 -:1010500013FF2FE10C008DE20D10A0E13A31E0E327 -:101060000FE0A0E113FF2FE100009DE5010070E219 -:101070000000A03324D08DE23040BDE81EFF2FE1F8 -:10108000780A000060EA000008402DE9813BB0E1E9 -:101090000000A0130900001A003090E5010053E1A0 -:1010A0000100A0030500000A041080E4022CA0E364 -:1010B00010309FE50FE0A0E113FF2FE10100A0E356 -:1010C0000840BDE81EFF2FE1A40A000038402DE9CA -:1010D0000040A0E10150A0E14C309FE5030050E149 -:1010E0000600000A020A51E30600000A9AFFFFEB1D -:1010F000000050E30040A0030800000A020000EADC -:1011000028409FE5000000EA1C409FE50400A0E1A4 -:101110000510A0E1DBFFFFEB000050E30040A0035F -:101120000400A0E13840BDE81EFF2FE1F0040040BC -:10113000EC020040F0472DE90050A0E10140A0E1A1 -:101140000270A0E10360A0E1A194A0E18994A0E174 -:10115000003090E5010073E30400001A0910A0E1DB -:10116000C8FFFFEB000050E30000A0032600000AC8 -:10117000003095E5090053E10500000A0500A0E1F3 -:101180000910A0E1D0FFFFEB005050E20000A003E7 -:101190001D00000A003095E5044063E0044085E04E -:1011A000044084E268809FE568A09FE5029C89E294 -:1011B0000FE0A0E118FF2FE1043085E2043063E086 -:1011C0000A0053E10500009A0500A0E10910A0E122 -:1011D000BDFFFFEB005050E20800000A044085E22A -:1011E0000130D7E40030C4E5016046E20668A0E1C2 -:1011F0002668B0E10300000A014084E2EBFFFFEA49 -:101200000000A0E3000000EA0100A0E3F047BDE811 -:101210001EFF2FE1780A0000FF0100000C309FE55F -:101220000020E0E3002083E5042283E51EFF2FE198 -:10123000EC02004070402DE90040A0E10150A0E127 -:101240000260A0E126FFFFEBFF0050E30000A003D7 -:101250000E00000A010044E2050080E020FFFFEBE1 -:10126000FF0050E30000A0030800000AA434A0E13E -:10127000100053E30538A0E118009F0518009F15E2 -:101280000410A0E10620A0E12338A0E1A8FFFFEBB5 -:101290007040BDE81EFF2FE1F0040040EC0200406A -:1012A00070402DE920D04DE20050A0E10160A0E1A6 -:1012B0000BFFFFEB0040A0E1010045E2060080E0EB -:1012C00007FFFFEB0050A0E1FF0050E3FF005413C5 -:1012D0000000A0033900000A050054E10000A083CB -:1012E0003600008A000054E30000A0033300000A27 -:1012F000100055E30000A0833000008A3230A0E3E4 -:1013000038008DE80130A0E314308DE5B8309FE55A -:101310000FE0A0E113FF2FE10D00A0E114108DE21A -:101320003A31E0E30FE0A0E113FF2FE114309DE537 -:10133000000053E30000A0132000001A3430A0E3A3 -:1013400038008DE884309FE50C308DE50130A0E356 -:1013500014308DE570309FE50FE0A0E113FF2FE121 -:101360000D00A0E114108DE23A31E0E30FE0A0E1BE -:1013700013FF2FE114309DE5000053E30000A0139C -:101380000E00001A3530A0E338008DE80130A0E3EC -:1013900014308DE530309FE50FE0A0E113FF2FE121 -:1013A0000D00A0E114108DE23A31E0E30FE0A0E17E -:1013B00013FF2FE114009DE5010070E20000A0334F -:1013C00020D08DE27040BDE81EFF2FE1780A0000BA -:1013D00060EA0000023AA0E3050093E8000082E022 -:1013E000082093E5020080E00C2093E5020080E0F5 -:1013F000102093E5020080E0142093E5020080E0D5 -:10140000182093E5020080E01C3093E5030080E0A3 -:10141000010070E20000A0331EFF2FE110402DE913 -:1014200008D04DE260209FE5823F82E2120093E9FE -:10143000044081E0082292E5024084E00C2093E51C -:10144000024084E0102093E5024084E0182093E5F8 -:10145000024084E01C3093E5034084E0004064E2F5 -:1014600004408DE5DAFFFFEB000054E10100A0032A -:1014700018009F150410A01301208D106CFFFF1B96 -:1014800008D08DE21040BDE81EFF2FE1EC020040C5 -:101490001420000008402DE948309FE5043293E510 -:1014A000010073E30400000A3C009FE5AAFEFFEB85 -:1014B000000050E30000A0030800000A24309FE56C -:1014C000003093E5010073E30100A0030300000A6C -:1014D00010009FE5A0FEFFEB000050E20100A0130A -:1014E0000840BDE81EFF2FE1EC020040F004004080 -:1014F00004E04EE21F402DE910009FE53810A0E304 -:101500000C309FE50FE0A0E113FF2FE11F80FDE805 -:101510005C1600007C0A000004E04EE20F502DE94A -:1015200010009FE54610A0E30C309FE50FE0A0E11E -:1015300013FF2FE10F90FDE85C1600007C0A00000D -:101540000F502DE910009FE55410A0E30C309FE5EB -:101550000FE0A0E113FF2FE10F90FDE85C16000003 -:101560007C0A0000010204084F70656E424C540072 -:1015700000200000002000000100000000400000EA -:1015800000200000020000000060000000200000B9 -:1015900003000000008000000020000004000000A4 -:1015A00000A00000002000000500000000C00000B6 -:1015B000002000000600000000E000000020000005 -:1015C000070000000000010000000100080000000A -:1015D00000000200000001000900000000000300FC -:1015E000002000000A00000000200300002000008E -:1015F0000B00000000400300002000000C00000071 -:1016000000600300002000000D00000000800300C7 -:10161000002000000E00000000A0030000200000D9 -:101620000F00000000C003000020000010000000B8 -:101630006D61696E2E6300002E2E2F2E2E2F2E2E02 -:101640002F536F757263652F41524D375F4C504376 -:10165000323030302F756172742E63002E2E2F2E93 -:101660002E2F2E2E2F536F757263652F41524D37DB -:101670005F4C5043323030302F4743432F76656301 -:08168000746F72732E63000009 +:10013000DC1E0040D8130000000200400002004016 +:1001400000020040F406004010402DE9D8309FE541 +:100150000040A0E3D4109FE5D4209FE50100F3E523 +:10016000910000E0260A40E2160E40E2020050E153 +:100170000600009A014084E2FF4004E2040054E3D8 +:10018000F5FFFF1AAC009FE57010A0E3DB0100EB68 +:100190008422A0E1022082E3FF2002E298309FE562 +:1001A0008420C3E55510E0E38C10C3E55520A0E39F +:1001B0008C20C3E50100A0E38000C3E58C10C3E5FB +:1001C0008C20C3E5B828D3E1010B12E3FCFFFF0A42 +:1001D00064309FE50320A0E38020C3E55520E0E3E1 +:1001E0008C20C3E5AB2082E28C20C3E50020A0E395 +:1001F0000020C3E5042082E20420C3E50220A0E33E +:100200000020C3E50120A0E3013C83E20020C3E518 +:1002100028309FE5002093E5052082E3002083E558 +:10022000070000EB0D0000EBFDFFFFEAB31200003A +:10023000C0D40100A08002008013000000C01FE0B5 +:1002400000C002E008402DE9AA0100EBA00100EB8C +:10025000500200EB070000EB0840BDE81EFF2FE155 +:1002600008402DE9A40100EB130000EB850100EB31 +:100270000840BDE81EFF2FE104E02DE50CD04DE263 +:100280000030E0E30430CDE50030A0E30530CDE5FB +:10029000320000EBE20100EB18309FE50030D3E5BF +:1002A000010053E304008D024100000B0CD08DE2ED +:1002B00004E09DE41EFF2FE10002004008402DE90C +:1002C00014009FE5070200EB010050E308009F05C2 +:1002D0003700000B0840BDE81EFF2FE1040200407C +:1002E00008402DE9FF1001E2DD0100EB2B0000EBDF +:1002F0000840BDE81EFF2FE10120A0E304309FE588 +:100300000020C3E51EFF2FE10002004004309FE5FE +:100310000000D3E51EFF2FE10002004008402DE958 +:10032000180000EB0840BDE81EFF2FE10020A0E30D +:1003300004309FE50120C3E51EFF2FE14402004089 +:1003400014309FE50120E0E30320C3E50400C3E58A +:100350000220A0E3B424C3E11EFF2FE144020040C9 +:100360001C309FE50020A0E30020C3E5482083E582 +:100370004320C3E5B424C3E10220C3E50120C3E563 +:100380001EFF2FE1440200400C309FE50000D3E542 +:10039000000050E20100A0131EFF2FE144020040C4 +:1003A0000020A0E304309FE54320C3E51EFF2FE1BA +:1003B0004402004038402DE90040A0E10030D0E583 +:1003C000FF0053E31200001AD7FFFFEBAC349FE5A8 +:1003D0000120A0E30020C3E50010E0E30310C3E523 +:1003E0001010A0E30410C3E50010A0E30510C3E55E +:1003F0004000A0E30600C3E50700C3E50810C3E51D +:100400000920C3E50A20C3E50820A0E3B424C3E122 +:100410000D0100EA64249FE50020D2E5010052E3CB +:100420001401001AC93043E2350053E303F19F97EA +:10043000030100EAD0060000440800004408000060 +:100440003808000044080000440800001C080000B0 +:100450001C070000E0070000A80700004408000097 +:10046000440800004408000044080000440800005C +:10047000440800004408000044080000440800004C +:10048000440800004408000044080000440800003C +:10049000440800004408000044080000440800002C +:1004A000440800004408000044080000440800001C +:1004B000440800004408000044080000440800000C +:1004C00044080000440800004408000044080000FC +:1004D000440800004408000044080000D40500005F +:1004E0005C0500000C050000B40500004408000095 +:1004F00044080000440800003406000044080000DE +:100500006C06000078060000AC0600000120D0E573 +:100510003F0052E30200009A2200A0E387FFFFEBB6 +:10052000C90000EA54539FE5040085E2481095E5B0 +:10053000F90000EB0030E0E30330C5E50120D4E52D +:10054000483095E5033082E0483085E50130D4E558 +:10055000013083E2B434C5E1BB0000EA0130D0E5EC +:100560003F0053E30200009A2200A0E373FFFFEB79 +:10057000B50000EA041090E500539FE5481085E5BA +:10058000040085E20120D4E5E30000EB0030E0E365 +:100590000330C5E50120D4E5483095E5033082E01D +:1005A000483085E50130D4E5013083E2B434C5E15B +:1005B000A50000EAC4329FE50020E0E30320C3E584 +:1005C000042090E5482083E50120A0E3B424C3E1A2 +:1005D0009D0000EAA4C29FE50030E0E30330CCE5D3 +:1005E00048109CE5043090E5000053E30020A00390 +:1005F0000500000A0020A0E30100D1E4002082E011 +:10060000FF2002E2013053E2FAFFFF1A07208CE5D7 +:1006100068329FE50120A0E30420C3E50020A0E3A9 +:100620000520C3E50620C3E50820A0E3B424C3E108 +:10063000850000EA44329FE50020E0E30320C3E5A3 +:100640003C229FE5482083E50020A0E30420C3E589 +:100650000520C3E50620C3E50720A0E3072083E5C6 +:100660000820A0E3B424C3E1770000EA0000A0E37F +:1006700032FFFFEB740000EA00329FE50020E0E368 +:100680000320C3E50020A0E30420C3E50110D3E567 +:100690000510C3E50620C3E50720C3E50820C3E530 +:1006A0000620A0E3B424C3E1670000EACC419FE543 +:1006B0000030A0E30030C4E51BFFFFEB0030E0E3B7 +:1006C0000330C4E50130A0E3B434C4E15E0000EAC5 +:1006D000A8319FE5480093E53F10A0E3012084E2A4 +:1006E000300100EB000050E30200001A3100A0E3EB +:1006F00012FFFFEB540000EA80319FE50020E0E3A9 +:100700000320C3E5482093E53F2082E2482083E5AB +:100710000120A0E3B424C3E14B0000EA0130D0E59E +:100720003E0053E30200009A2200A0E303FFFFEB28 +:10073000450000EA44319FE50020E0E30320C3E5E3 +:100740000120A0E3B424C3E10110D0E5000051E38F +:100750000500001A1F0100EB000050E33A00001AE8 +:100760003100A0E3F5FEFFEB370000EA0C319FE516 +:10077000480093E5022084E20A0100EB000050E308 +:100780000200001A3100A0E3ECFEFFEB2E0000EAAD +:10079000E8309FE50110D4E5482093E5022081E090 +:1007A000482083E5280000EAD0309FE50020E0E300 +:1007B0000320C3E50020A0E30420C3E50520C3E532 +:1007C0004010A0E30610C3E50720C3E50820C3E5F9 +:1007D0000920C3E50720A0E3B424C3E11A0000EA1E +:1007E00098309FE5480093E5041094E5F10000EB94 +:1007F000000050E30200001A3100A0E3CFFEFFEB3F +:10080000110000EA74309FE50020E0E30320C3E517 +:100810000120A0E3B424C3E10B0000EA5D0000EB7B +:1008200058309FE50020E0E30320C3E50120A0E36A +:10083000B424C3E1040000EA3100A0E3BFFEFFEBF3 +:10084000010000EA2000A0E3BCFEFFEB2C309FE596 +:100850004330D3E5010053E31000A003B7FEFF0BC4 +:1008600018309FE50120A0E34320C3E5030083E2A5 +:10087000B414D3E199FEFFEB3840BDE81EFF2FE131 +:1008800044020040B812000008402DE9A2FEFFEB30 +:10089000010050E30B00000A30309FE50030D3E543 +:1008A000010053E30700001AFA0000EB310050E3A7 +:1008B0000400009A0020A0E310309FE50020C3E56B +:1008C000CB0000EB220000EB0840BDE81EFF2FE14B +:1008D0009002004008402DE90120A0E310309FE580 +:1008E0000020C3E5D90000EBE6FFFFEB0840BDE8C0 +:1008F0001EFF2FE1900200401EFF2FE11EFF2FE19F +:1009000008402DE90C309FE5000083E5041083E5E5 +:10091000F9FFFFEBFDFFFFEA9402004070402DE974 +:100920000140A0E1005052E20700000A0060A0E18F +:100930000130D4E40130C6E4EFFFFFEB015045E2A3 +:100940000558A0E12558B0E1F8FFFF1A7040BDE856 +:100950001EFF2FE108402DE99A0000EB000050E354 +:100960000900000A0101A0E3021AA0E34020A0E36D +:10097000E9FFFFEB0220A0E314309FE5402083E570 +:100980000131A0E30FE0A0E113FF2FE10840BDE833 +:100990001EFF2FE100C01FE008402DE9ABFDFFEB7B +:1009A0000840BDE81EFF2FE11C309FE51430D3E561 +:1009B000010013E310309F150030D3150030C0152F +:1009C0000100A0130000A0031EFF2FE100C000E003 +:1009D00010402DE944309FE51430D3E5200013E3A7 +:1009E0000000A0030B00000A30309FE50000C3E5C3 +:1009F0001430D3E5200013E30100A0130500001A12 +:100A000018409FE5BCFFFFEB1430D4E5200013E352 +:100A1000FBFFFF0A0100A0E31040BDE81EFF2FE12D +:100A200000C000E034309FE50020A0E30420C3E5CF +:100A30000820C3E51420C3E57F10E0E30C10C3E5F4 +:100A40004110A0E30010C3E50420C3E50320A0E3A8 +:100A50000C20C3E50720A0E30820C3E51EFF2FE11B +:100A600000C000E0F0412DE90050A0E10140A0E10C +:100A7000400051E368009F858310A0839FFFFF8B98 +:100A80000400A0E1D1FFFFEB010050E350009F15EF +:100A90008610A01399FFFF1B0460A0E1000054E33F +:100AA0000D00000A0040A0E334709FE58E80A0E3B3 +:100AB00091FFFFEB0400D5E7C4FFFFEB010050E31B +:100AC0000700A0110810A0118CFFFF1B014084E259 +:100AD0000438A0E1230856E1F4FFFF8AF041BDE8A5 +:100AE0001EFF2FE18813000070402DE90050A0E1A7 +:100AF00098309FE50030D3E5000053E30A00001A68 +:100B00008C009FE5A7FFFFEB010050E30000A0135E +:100B10001C00001A74309FE50120A0E30020C3E50B +:100B20000000A0E34500C3E5160000EA5C009FE575 +:100B30004540D0E5040080E0050080E299FFFFEB2E +:100B4000010050E30000A0130E00001A014084E2EF +:100B5000FF2004E234309FE54520C3E50430D3E5AF +:100B6000020053E10000A0130600001A1C609FE57C +:100B70000500A0E1051086E267FFFFEB0030A0E36F +:100B80000030C6E50100A0E37040BDE81EFF2FE184 +:100B90009C020040A002004008402DE9020100EB49 +:100BA0000840BDE81EFF2FE108402DE9040100EBDD +:100BB0000840BDE81EFF2FE108402DE91B0100EBB6 +:100BC0000840BDE81EFF2FE108402DE95D0100EB64 +:100BD0000840BDE81EFF2FE108402DE96B0100EB46 +:100BE000000050E30000A0038601001B0840BDE8A0 +:100BF0001EFF2FE114309FE50020A0E3042083E5D1 +:100C00000C2083E5082083E5102083E51EFF2FE1FB +:100C1000004000E01C309FE5082093E518309FE578 +:100C2000001093E5011082E0040093E5011060E0FC +:100C3000060083E81EFF2FE1004000E0E4020040D0 +:100C400004309FE5000083E51EFF2FE1E402004031 +:100C500008402DE930309FE50000A0E3140083E553 +:100C6000280083E524209FE50C2083E50120A0E3F4 +:100C7000042083E5082093E514309FE5042083E5F4 +:100C8000EEFFFFEB0840BDE81EFF2FE1004000E053 +:100C90005FEA0000E402004008402DE9DCFFFFEBC2 +:100CA00008309FE5000093E50840BDE81EFF2FE1F6 +:100CB000E4020040F8402DE90060A0E10040A0E31C +:100CC0000450A0E150709FE50BFFFFEB043097E765 +:100CD000060053E10900008A041087E0041091E542 +:100CE000013083E0030056E10400002A852085E0FE +:100CF00024309FE5023183E00800D3E5040000EAD8 +:100D0000015085E20C4084E2C00054E3EDFFFF1A7D +:100D1000FF00A0E3F840BDE81EFF2FE1C012000075 +:100D200030402DE924D04DE20040A0E1000090E5E4 +:100D3000DFFFFFEBFF0050E30000A0033700000AD5 +:100D40003230A0E30C308DE510008DE514008DE508 +:100D50000130A0E300308DE5E7FEFFEB0C008DE2F3 +:100D60000D10A0E13A31E0E30FE0A0E113FF2FE125 +:100D700000309DE5000053E30000A0132700001A97 +:100D80003330A0E30C308DE50450A0E1043095E44D +:100D900010308DE514508DE5023CA0E318308DE550 +:100DA00084309FE51C308DE50130A0E300308DE5F7 +:100DB000D1FEFFEB0C008DE20D10A0E13A31E0E333 +:100DC0000FE0A0E113FF2FE100309DE5000053E3A9 +:100DD0000000A0131100001A3830A0E30C308DE59C +:100DE000003094E510308DE514508DE5023CA0E311 +:100DF00018308DE50130A0E300308DE5BEFEFFEB3D +:100E00000C008DE20D10A0E13A31E0E30FE0A0E12B +:100E100013FF2FE100009DE5010070E20000A03308 +:100E200024D08DE23040BDE81EFF2FE160EA0000D3 +:100E300008402DE9813BB0E10000A0130700001A33 +:100E4000003090E5010053E10100A0030300000A17 +:100E5000041080E4022CA0E3AFFEFFEB0100A0E34E +:100E60000840BDE81EFF2FE138402DE90040A0E119 +:100E70000150A0E14C309FE5030050E10600000A5C +:100E8000020A51E30600000AA4FFFFEB000050E352 +:100E90000040A0030800000A020000EA28409FE585 +:100EA000000000EA1C409FE50400A0E10510A0E15D +:100EB000DEFFFFEB000050E30040A0030400A0E1D0 +:100EC0003840BDE81EFF2FE1F0040040EC02004076 +:100ED000F8452DE90050A0E10140A0E10270A0E139 +:100EE0000360A0E1A1A4A0E18AA4A0E1003090E504 +:100EF000010073E30400001A0A10A0E1CBFFFFEB2E +:100F0000000050E30000A0032400000A003095E533 +:100F10000A0053E10500000A0500A0E10A10A0E163 +:100F2000D0FFFFEB005050E20000A0031B00000ABE +:100F3000003095E5044063E0044085E0044084E22D +:100F400060809FE502AC8AE26BFEFFEB043085E235 +:100F5000043063E0080053E10500009A0500A0E1B9 +:100F60000A10A0E1BFFFFFEB005050E20800000AAA +:100F7000044085E20130D7E40030C4E5016046E278 +:100F80000668A0E12668B0E10300000A014084E29F +:100F9000ECFFFFEA0000A0E3000000EA0100A0E38C +:100FA000F845BDE81EFF2FE1FF0100000C309FE572 +:100FB0000020E0E3002083E5042283E51EFF2FE10B +:100FC000EC02004070402DE90040A0E10150A0E19A +:100FD0000260A0E136FFFFEBFF0050E30000A0033A +:100FE0000E00000A010044E2050080E030FFFFEB44 +:100FF000FF0050E30000A0030800000AA434A0E1B1 +:10100000100053E30538A0E118009F0518009F1554 +:101010000410A0E10620A0E12338A0E1ABFFFFEB24 +:101020007040BDE81EFF2FE1F0040040EC020040DC +:1010300070402DE920D04DE20050A0E10160A0E118 +:101040001BFFFFEB0040A0E1010045E2060080E04D +:1010500017FFFFEB0050A0E1FF0050E3FF00541327 +:101060000000A0033300000A050054E10000A08343 +:101070003000008A000054E30000A0032D00000AA5 +:10108000100055E30000A0832A00008A3230A0E35C +:1010900038008DE80130A0E314308DE516FEFFEB3B +:1010A0000D00A0E114108DE23A31E0E30FE0A0E181 +:1010B00013FF2FE114309DE5000053E30000A0135F +:1010C0001C00001A3430A0E338008DE870309FE532 +:1010D0000C308DE50130A0E314308DE506FEFFEB0A +:1010E0000D00A0E114108DE23A31E0E30FE0A0E141 +:1010F00013FF2FE114309DE5000053E30000A0131F +:101100000C00001A3530A0E338008DE80130A0E370 +:1011100014308DE5F8FDFFEB0D00A0E114108DE219 +:101120003A31E0E30FE0A0E113FF2FE114009DE569 +:10113000010070E20000A03320D08DE27040BDE8D5 +:101140001EFF2FE160EA0000023AA0E3050093E8E9 +:10115000000082E0082093E5020080E00C2093E587 +:10116000020080E0102093E5020080E0142093E567 +:10117000020080E0182093E5020080E01C3093E537 +:10118000030080E0010070E20000A0331EFF2FE1A9 +:1011900010402DE908D04DE260209FE5823F82E2B9 +:1011A000120093E9044081E0082292E5024084E0C5 +:1011B0000C2093E5024084E0102093E5024084E097 +:1011C000182093E5024084E01C3093E5034084E05E +:1011D000004064E204408DE5DAFFFFEB000054E1DB +:1011E0000100A00318009F150410A01301208D100A +:1011F00073FFFF1B08D08DE21040BDE81EFF2FE1FA +:10120000EC0200401420000008402DE948309FE522 +:10121000043293E5010073E30400000A3C009FE5FB +:10122000BEFEFFEB000050E30000A0030800000A30 +:1012300024309FE5003093E5010073E30100A00333 +:101240000300000A10009FE5B4FEFFEB000050E22F +:101250000100A0130840BDE81EFF2FE1EC02004092 +:10126000F004004004E04EE21F402DE908009FE535 +:101270003810A0E3A1FDFFEB1F80FDE8AC130000D8 +:1012800004E04EE20F502DE908009FE54610A0E370 +:101290009AFDFFEB0F90FDE8AC1300000F502DE915 +:1012A00008009FE55410A0E394FDFFEB0F90FDE8CC +:1012B000AC130000010204084F70656E424C5400EC +:1012C000002000000020000001000000004000009D +:1012D000002000000200000000600000002000006C +:1012E0000300000000800000002000000400000057 +:1012F00000A00000002000000500000000C0000069 +:10130000002000000600000000E0000000200000B7 +:1013100007000000000001000000010008000000BC +:1013200000000200000001000900000000000300AE +:10133000002000000A000000002003000020000040 +:101340000B00000000400300002000000C00000023 +:1013500000600300002000000D000000008003007A +:10136000002000000E00000000A00300002000008C +:101370000F00000000C0030000200000100000006B +:101380006D61696E2E6300002E2E2F2E2E2F2E2EB5 +:101390002F536F757263652F41524D375F4C504329 +:1013A000323030302F756172742E63002E2E2F2E46 +:1013B0002E2F2E2E2F536F757263652F41524D378E +:1013C0005F4C5043323030302F4743432F766563B4 +:0813D000746F72732E630000BC :00000001FF diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map index d2e23625..cd698c0e 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map @@ -7,38 +7,38 @@ start address 0x00000000 Program Header: LOAD off 0x00008000 vaddr 0x00000000 paddr 0x00000000 align 2**15 - filesz 0x00001688 memsz 0x00001688 flags r-x - LOAD off 0x00010200 vaddr 0x40000200 paddr 0x00001688 align 2**15 + filesz 0x000013d8 memsz 0x000013d8 flags r-x + LOAD off 0x00010200 vaddr 0x40000200 paddr 0x000013d8 align 2**15 filesz 0x00000000 memsz 0x000004f4 flags rw- private flags = 5000000: [Version5 EABI] Sections: Idx Name Size VMA LMA File off Algn - 0 .text 00001688 00000000 00000000 00008000 2**2 + 0 .text 000013d8 00000000 00000000 00008000 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .bss 000004f4 40000200 00001688 00010200 2**2 + 1 .bss 000004f4 40000200 000013d8 00010200 2**2 ALLOC - 2 .ARM.attributes 00000030 00000000 00000000 00009688 2**0 + 2 .ARM.attributes 00000030 00000000 00000000 000093d8 2**0 CONTENTS, READONLY - 3 .comment 0000002a 00000000 00000000 000096b8 2**0 + 3 .comment 0000002a 00000000 00000000 00009408 2**0 CONTENTS, READONLY - 4 .debug_abbrev 00000a61 00000000 00000000 000096e2 2**0 + 4 .debug_abbrev 00000aa1 00000000 00000000 00009432 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_info 0000173c 00000000 00000000 0000a143 2**0 + 5 .debug_info 000017a7 00000000 00000000 00009ed3 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_line 00000878 00000000 00000000 0000b87f 2**0 + 6 .debug_line 0000088b 00000000 00000000 0000b67a 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_pubtypes 00000312 00000000 00000000 0000c0f7 2**0 + 7 .debug_pubtypes 00000324 00000000 00000000 0000bf05 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_str 000008fa 00000000 00000000 0000c409 2**0 + 8 .debug_str 00000905 00000000 00000000 0000c229 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_loc 00000bf9 00000000 00000000 0000cd03 2**0 + 9 .debug_loc 00000bed 00000000 00000000 0000cb2e 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_pubnames 000003af 00000000 00000000 0000d8fc 2**0 + 10 .debug_pubnames 000003af 00000000 00000000 0000d71b 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_aranges 000001a0 00000000 00000000 0000dcab 2**0 + 11 .debug_aranges 000001a0 00000000 00000000 0000daca 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_frame 0000063c 00000000 00000000 0000de4c 2**2 + 12 .debug_frame 0000062c 00000000 00000000 0000dc6c 2**2 CONTENTS, READONLY, DEBUGGING SYMBOL TABLE: 00000000 l d .text 00000000 .text @@ -80,15 +80,16 @@ e01fc040 l *ABS* 00000000 MEMMAP 000000a0 l .text 00000000 Reset_Handler_SWI 00000000 l df *ABS* 00000000 hooks.c 00000000 l df *ABS* 00000000 main.c -00001564 l O .text 00000004 C.0.2157 +000012b4 l O .text 00000004 pll_dividers.1366 +00000000 l df *ABS* 00000000 extflash.c 00000000 l df *ABS* 00000000 boot.c 00000000 l df *ABS* 00000000 com.c 40000200 l O .bss 00000001 comEntryStateConnect 40000204 l O .bss 00000040 xcpCtoReqPacket.1371 00000000 l df *ABS* 00000000 xcp.c -00000414 l F .text 00000014 XcpProtectResources -00000428 l F .text 00000020 XcpSetCtoError -00001568 l O .text 00000008 xcpStationId +0000032c l F .text 00000014 XcpProtectResources +00000340 l F .text 00000020 XcpSetCtoError +000012b8 l O .text 00000008 xcpStationId 40000244 l O .bss 0000004c xcpInfo 00000000 l df *ABS* 00000000 backdoor.c 40000290 l O .bss 00000001 backdoorOpen @@ -99,8 +100,8 @@ e01fc040 l *ABS* 00000000 MEMMAP 00000000 l df *ABS* 00000000 cpu.c 00000000 l df *ABS* 00000000 can.c 00000000 l df *ABS* 00000000 uart.c -00000b54 l F .text 00000028 UartReceiveByte -00000b7c l F .text 00000060 UartTransmitByte +000009a8 l F .text 00000028 UartReceiveByte +000009d0 l F .text 00000054 UartTransmitByte 4000029c l O .bss 00000001 xcpCtoRxInProgress.1383 400002a0 l O .bss 00000041 xcpCtoReqPacket.1381 400002e1 l O .bss 00000001 xcpCtoRxLength.1382 @@ -109,68 +110,68 @@ e01fc040 l *ABS* 00000000 MEMMAP 400002e4 l O .bss 00000004 millisecond_counter 400002e8 l O .bss 00000004 free_running_counter_last 00000000 l df *ABS* 00000000 flash.c -00000ee4 l F .text 00000078 FlashGetSector -00000f5c l F .text 0000012c FlashWriteBlock -00001088 l F .text 00000044 FlashInitBlock -000010cc l F .text 00000068 FlashSwitchBlock -00001134 l F .text 000000e8 FlashAddToBlock -00001570 l O .text 000000c0 flashLayout +00000cb4 l F .text 0000006c FlashGetSector +00000d20 l F .text 00000110 FlashWriteBlock +00000e30 l F .text 00000038 FlashInitBlock +00000e68 l F .text 00000068 FlashSwitchBlock +00000ed0 l F .text 000000dc FlashAddToBlock +000012c0 l O .text 000000c0 flashLayout 400002ec l O .bss 00000204 blockInfo 400004f0 l O .bss 00000204 bootBlockInfo 00000000 l df *ABS* 00000000 vectors.c -00000300 g F .text 00000068 ComInit -00001234 g F .text 0000006c FlashWrite -00000a7c g F .text 00000028 AssertFailure -00001518 g F .text 00000028 IRQ_ISR -00000e44 g F .text 0000002c TimerUpdate -00000488 g F .text 00000014 XcpPacketTransmitted -00000368 g F .text 0000003c ComTask -000003d4 g F .text 00000014 ComSetConnectEntryState -00000278 g F .text 0000004c BootInit -00000a44 g F .text 00000030 BackDoorInit -00000a78 g F .text 00000004 CopService -00001688 g .text 00000000 _etext -00000e24 g F .text 00000020 TimerReset -000002c4 g F .text 0000003c BootTask -0000141c g F .text 00000078 FlashWriteChecksum +00000278 g F .text 00000044 ComInit +00000fc4 g F .text 0000006c FlashWrite +00000900 g F .text 0000001c AssertFailure +00001280 g F .text 0000001c IRQ_ISR +00000c14 g F .text 0000002c TimerUpdate +000003a0 g F .text 00000014 XcpPacketTransmitted +000002bc g F .text 00000024 ComTask +000002f8 g F .text 00000014 ComSetConnectEntryState +00000244 g F .text 0000001c BootInit +000008d4 g F .text 00000024 BackDoorInit +000008fc g F .text 00000004 CopService +000013d8 g .text 00000000 _etext +00000bf4 g F .text 00000020 TimerReset +00000260 g F .text 00000018 BootTask +00001190 g F .text 00000078 FlashWriteChecksum 40000200 g .bss 00000000 _bss_start -000003a4 g F .text 00000030 ComTransmitPacket +000002e0 g F .text 00000018 ComTransmitPacket 00000000 g .text 00000000 _startup -00000470 g F .text 00000018 XcpIsConnected -00000d80 g F .text 0000001c NvmInit -0000121c g F .text 00000018 FlashInit +00000388 g F .text 00000018 XcpIsConnected +00000b98 g F .text 00000010 NvmInit +00000fac g F .text 00000018 FlashInit 400006f4 g *ABS* 00000000 _bss_end 00000050 g .text 00000000 Reset_Handler -00000bdc g F .text 00000040 UartInit -00000db8 g F .text 0000001c NvmErase -0000049c g F .text 0000052c XcpPacketReceived -00001494 g F .text 0000005c FlashDone +00000a24 g F .text 00000040 UartInit +00000bb8 g F .text 00000010 NvmErase +000003b4 g F .text 000004d4 XcpPacketReceived +00001208 g F .text 0000005c FlashDone 00000040 g .text 00000000 EntryFromProg -000003e8 g F .text 00000010 ComIsConnectEntryState -00000448 g F .text 00000028 XcpInit -000012a0 g F .text 00000134 FlashErase -00000148 g F .text 00000130 main -00000df0 g F .text 00000034 NvmDone -00000c1c g F .text 000000a8 UartTransmitPacket -00000dd4 g F .text 0000001c NvmVerifyChecksum -00000aa4 g F .text 00000044 CpuMemCopy +0000030c g F .text 00000010 ComIsConnectEntryState +00000360 g F .text 00000028 XcpInit +00001030 g F .text 00000118 FlashErase +00000148 g F .text 000000fc main +00000bd8 g F .text 0000001c NvmDone +00000a64 g F .text 00000084 UartTransmitPacket +00000bc8 g F .text 00000010 NvmVerifyChecksum +0000091c g F .text 00000038 CpuMemCopy 40001edc g *ABS* 00000000 _stack_end -00000e70 g F .text 00000010 TimerSet -000014f0 g F .text 00000028 FIQ_ISR -00000cc4 g F .text 000000bc UartReceivePacket +00000c40 g F .text 00000010 TimerSet +00001264 g F .text 0000001c FIQ_ISR +00000ae8 g F .text 000000b0 UartReceivePacket 40000200 g .text 00000000 _data -00000a74 g F .text 00000004 CopInit -00000b38 g F .text 0000001c CpuReset +000008f8 g F .text 00000004 CopInit +00000998 g F .text 00000010 CpuReset 000000f4 g .text 00000000 SetupRAM -00000d9c g F .text 0000001c NvmWrite -00000ae8 g F .text 00000050 CpuStartUserProgram -000013d4 g F .text 00000048 FlashVerifyChecksum +00000ba8 g F .text 00000010 NvmWrite +00000954 g F .text 00000044 CpuStartUserProgram +00001148 g F .text 00000048 FlashVerifyChecksum 40000200 g .text 00000000 _edata 400006f4 g *ABS* 00000000 _end -00001540 g F .text 00000024 UNDEF_ISR -000003f8 g F .text 0000001c ComIsConnected -000009c8 g F .text 0000007c BackDoorCheck -00000ec8 g F .text 0000001c TimerGet -00000e80 g F .text 00000048 TimerInit +0000129c g F .text 00000018 UNDEF_ISR +0000031c g F .text 00000010 ComIsConnected +00000888 g F .text 0000004c BackDoorCheck +00000c98 g F .text 0000001c TimerGet +00000c50 g F .text 00000048 TimerInit diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c new file mode 100644 index 00000000..beefab0b --- /dev/null +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c @@ -0,0 +1,643 @@ +/**************************************************************************************** +| Description: bootloader external flash driver source file +| File Name: extflash.c +| +|---------------------------------------------------------------------------------------- +| C O P Y R I G H T +|---------------------------------------------------------------------------------------- +| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved +| +|---------------------------------------------------------------------------------------- +| L I C E N S E +|---------------------------------------------------------------------------------------- +| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or +| modify it under the terms of the GNU General Public License as published by the Free +| Software Foundation, either version 3 of the License, or (at your option) any later +| version. +| +| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +| PURPOSE. See the GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License along with OpenBLT. +| If not, see . +| +| A special exception to the GPL is included to allow you to distribute a combined work +| that includes OpenBLT without being obliged to provide the source code for any +| proprietary components. The exception text is included at the bottom of the license +| file . +| +****************************************************************************************/ + +/**************************************************************************************** +* Include files +****************************************************************************************/ +#include "boot.h" /* bootloader generic header */ + + +#if (BOOT_NVM_HOOKS_ENABLE > 0) +/**************************************************************************************** +* Macro definitions +****************************************************************************************/ +#define FLASH_INVALID_SECTOR (0xff) +#define FLASH_INVALID_ADDRESS (0xffffffff) +#define FLASH_WRITE_BLOCK_SIZE (512) +#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0])) +/* C3 Intel flash commands */ +#define FLASH_CMD_READ_ARRAY_MODE (0xFF) +#define FLASH_CMD_READ_ID_MODE (0x90) +#define FLASH_CMD_ERASE_MODE (0x20) +#define FLASH_CMD_READ_STATUS_MODE (0x70) +#define FLASH_CMD_CHANGE_LOCK_MODE (0x60) +#define FLASH_CMD_UNLOCK_SECTOR (0xD0) +#define FLASH_CMD_LOCK_SECTOR (0x01) +#define FLASH_CMD_PROGRAM_MODE (0x40) +#define FLASH_CMD_ERASE_CONFIRM (0xD0) +#define FLASH_CMD_CLEAR_STATUS (0x50) +/* C3 Intel flash info bits */ +#define FLASH_LOCK_BIT (0x01) +#define FLASH_STATUS_READY_BIT (0x80) +/* C3 Intel flash error codes */ +#define FLASH_ERR_LOCKED (0x02) +#define FLASH_ERR_VPP_RANGE (0x08) +#define FLASH_ERR_PROGRAM (0x10) +#define FLASH_ERR_CMD_SEQ (0x10) +#define FLASH_ERR_ERASE (0x20) +/* flash operation timeout values */ +#define FLASH_ERASE_TIMEOUT ((blt_int32u)5000000) +#define FLASH_PROGRAM_TIMEOUT ((blt_int32u)1000000) +/* supported Intel C3 flash device */ +#define FLASH_DEV_MAN_ID ((blt_int16u)0x0089) +#define FLASH_DEV_ID ((blt_int16u)0x88c3) +/* address offsets for reading device information */ +#define FLASH_DEVINFO_MAN_ID ((blt_int16u)0x0000) +#define FLASH_DEVINFO_DEV_ID ((blt_int16u)0x0001) +#define FLASH_DEVINFO_LOCK_STATUS ((blt_int16u)0x0002) +/* functions implemented in a macro for run-time and codesize optimization */ +#define ExtFlashGetManID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ + FLASH_DEVINFO_MAN_ID)) +#define ExtFlashGetDevID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \ + FLASH_DEVINFO_DEV_ID)) +#define ExtFlashGetLockStatus(base) (ExtFlashGetDeviceInfo(base, \ + FLASH_DEVINFO_LOCK_STATUS)) + + +/**************************************************************************************** +* Type definitions +****************************************************************************************/ +/* flash sector descriptor type */ +typedef struct +{ + blt_addr sector_start; /* sector start address */ + blt_int32u sector_size; /* sector size in bytes */ + blt_int8u sector_num; /* sector number */ +} tFlashSector; /* flash sector description */ + +/* programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a flash block + * manager is implemented in this driver. this flash block manager depends on this + * flash block info structure. It holds the base address of the flash block and the + * data that should be programmed into the flash block. + */ +typedef struct +{ + blt_addr base_addr; + blt_int8u data[FLASH_WRITE_BLOCK_SIZE]; +} tFlashBlockInfo; + + +/**************************************************************************************** +* Function prototypes +****************************************************************************************/ +static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address); +static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr); +static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, + blt_int8u *data, blt_int16u len); +static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block); +static blt_bool ExtFlashEraseSector(blt_addr sector_base); +static blt_int16u ExtFlashGetDeviceInfo(blt_addr block_base, blt_int16u info); +static void ExtFlashLockSector(blt_addr sector_base); +static void ExtFlashUnlockSector(blt_addr sector_base); +static blt_int8u ExtFlashGetSector(blt_addr address); + + +/**************************************************************************************** +* Local constant declarations +****************************************************************************************/ +/* The current layout supports the 2MB external C3 Intel flash: + * - manufacturer id = 0x0089 + * - device id = 0x88c3 (16 Mbit bottom boot device) + * Note that what Intel calls a block in the user manual, is called a sector in this + * driver. + */ +static const tFlashSector flashLayout[] = +{ + { 0x80000000, 0x02000, 0}, /* flash sector 0 - 8 kbyte */ + { 0x80002000, 0x02000, 1}, /* flash sector 1 - 8 kbyte */ + { 0x80004000, 0x02000, 2}, /* flash sector 2 - 8 kbyte */ + { 0x80006000, 0x02000, 3}, /* flash sector 3 - 8 kbyte */ + { 0x80008000, 0x02000, 4}, /* flash sector 4 - 8 kbyte */ + { 0x8000A000, 0x02000, 5}, /* flash sector 5 - 8 kbyte */ + { 0x8000C000, 0x02000, 6}, /* flash sector 6 - 8 kbyte */ + { 0x8000E000, 0x02000, 7}, /* flash sector 7 - 8 kbyte */ + { 0x80010000, 0x10000, 8}, /* flash sector 8 - 64 kbyte */ + { 0x80020000, 0x10000, 9}, /* flash sector 9 - 64 kbyte */ + { 0x80030000, 0x10000, 10}, /* flash sector 10 - 64 kbyte */ + { 0x80040000, 0x10000, 11}, /* flash sector 11 - 64 kbyte */ + { 0x80050000, 0x10000, 12}, /* flash sector 12 - 64 kbyte */ + { 0x80060000, 0x10000, 13}, /* flash sector 13 - 64 kbyte */ + { 0x80070000, 0x10000, 14}, /* flash sector 14 - 64 kbyte */ + { 0x80080000, 0x10000, 15}, /* flash sector 15 - 64 kbyte */ + { 0x80090000, 0x10000, 16}, /* flash sector 16 - 64 kbyte */ + { 0x800A0000, 0x10000, 17}, /* flash sector 17 - 64 kbyte */ + { 0x800B0000, 0x10000, 18}, /* flash sector 18 - 64 kbyte */ + { 0x800C0000, 0x10000, 19}, /* flash sector 19 - 64 kbyte */ + { 0x800D0000, 0x10000, 20}, /* flash sector 20 - 64 kbyte */ + { 0x800E0000, 0x10000, 21}, /* flash sector 21 - 64 kbyte */ + { 0x800F0000, 0x10000, 22}, /* flash sector 22 - 64 kbyte */ + { 0x80100000, 0x10000, 23}, /* flash sector 23 - 64 kbyte */ + { 0x80110000, 0x10000, 24}, /* flash sector 24 - 64 kbyte */ + { 0x80120000, 0x10000, 25}, /* flash sector 25 - 64 kbyte */ + { 0x80130000, 0x10000, 26}, /* flash sector 26 - 64 kbyte */ + { 0x80140000, 0x10000, 27}, /* flash sector 27 - 64 kbyte */ + { 0x80150000, 0x10000, 28}, /* flash sector 28 - 64 kbyte */ + { 0x80160000, 0x10000, 29}, /* flash sector 29 - 64 kbyte */ + { 0x80170000, 0x10000, 30}, /* flash sector 30 - 64 kbyte */ + { 0x80180000, 0x10000, 31}, /* flash sector 31 - 64 kbyte */ + { 0x80190000, 0x10000, 32}, /* flash sector 32 - 64 kbyte */ + { 0x801A0000, 0x10000, 33}, /* flash sector 33 - 64 kbyte */ + { 0x801B0000, 0x10000, 34}, /* flash sector 34 - 64 kbyte */ + { 0x801C0000, 0x10000, 35}, /* flash sector 35 - 64 kbyte */ + { 0x801D0000, 0x10000, 36}, /* flash sector 36 - 64 kbyte */ + { 0x801E0000, 0x10000, 37}, /* flash sector 37 - 64 kbyte */ + { 0x801F0000, 0x10000, 38} /* flash sector 38 - 64 kbyte */ +}; + + +/**************************************************************************************** +* Local data declarations +****************************************************************************************/ +/* The smallest amount of flash that can be programmed is FLASH_WRITE_BLOCK_SIZE. A flash + * block manager is implemented in this driver and stores info in this variable. Whenever + * new data should be flashed, it is first added to a RAM buffer, which is part of this + * variable. Whenever the RAM buffer, which has the size of a flash block, is full or + * data needs to be written to a different block, the contents of the RAM buffer are + * programmed to flash. The flash block manager requires some software overhead, yet + * results is faster flash programming because data is first harvested, ideally until + * there is enough to program an entire flash block, before the flash device is actually + * operated on. + */ +static tFlashBlockInfo blockInfo; + + +/**************************************************************************************** +** NAME: ExtFlashInit +** PARAMETER: none +** RETURN VALUE: none +** DESCRIPTION: Initializes the flash driver. +** +****************************************************************************************/ +void ExtFlashInit(void) +{ + /* init the flash block info struct by setting the address to an invalid address */ + blockInfo.base_addr = FLASH_INVALID_ADDRESS; + /* check the flash device identification */ + if ((ExtFlashGetManID() != FLASH_DEV_MAN_ID) || (ExtFlashGetDevID() != FLASH_DEV_ID)) + { + ASSERT_RT(BLT_FALSE); + } +} /*** end of ExtFlashInit ***/ + + +/**************************************************************************************** +** NAME: ExtFlashWrite +** PARAMETER: addr start address +** len length in bytes +** data pointer to the data buffer. +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write +** operation failed. +** DESCRIPTION: Writes the data to flash. +** +****************************************************************************************/ +blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data) +{ + /* make sure the addresses are within the flash device */ + if ( (ExtFlashGetSector(addr) == FLASH_INVALID_SECTOR) || \ + (ExtFlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR) ) + { + return BLT_NVM_NOT_IN_RANGE; + } + + /* let the block manager handle it */ + if (ExtFlashAddToBlock(&blockInfo, addr, data, len) == BLT_FALSE) + { + return BLT_NVM_ERROR; + } + return BLT_NVM_OKAY; +} /*** end of FlashWrite ***/ + + +/**************************************************************************************** +** NAME: ExtFlashErase +** PARAMETER: addr start address +** len length in bytes +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase +** operation failed. +** DESCRIPTION: Erases the flash memory. Note that this function also checks that no +** data is erased outside the flash memory region. +** +****************************************************************************************/ +blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len) +{ + blt_int8u first_sector; + blt_int8u last_sector; + blt_int8u sectorIdx; + + /* obtain the first and last sector number */ + first_sector = ExtFlashGetSector(addr); + last_sector = ExtFlashGetSector(addr+len-1); + /* check them */ + if ( (first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR) ) + { + return BLT_NVM_NOT_IN_RANGE; + } + /* erase the sectors one-by-one */ + for (sectorIdx = first_sector; sectorIdx <= last_sector; sectorIdx++) + { + /* keep the watchdog happy */ + CopService(); + /* erase the sector */ + if (ExtFlashEraseSector(flashLayout[sectorIdx].sector_start) == BLT_FALSE) + { + return BLT_NVM_ERROR; + } + } + /* done so return the result of the operation */ + return BLT_NVM_OKAY; +} /*** end of ExtFlashErase ***/ + + +/**************************************************************************************** +** NAME: ExtFlashDone +** PARAMETER: none +** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise. +** DESCRIPTION: Finilizes the flash driver operations. +** +****************************************************************************************/ +blt_bool ExtFlashDone(void) +{ + /* check if there is still data waiting to be programmed */ + if (blockInfo.base_addr != FLASH_INVALID_ADDRESS) + { + if (ExtFlashWriteBlock(&blockInfo) == BLT_FALSE) + { + return BLT_FALSE; + } + } + /* still here so all is okay */ + return BLT_TRUE; +} /*** end of ExtFlashDone ***/ + + +/**************************************************************************************** +** NAME: ExtFlashInitBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** address base address of the block data. +** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise. +** DESCRIPTION: Copies data currently in flash to the block->data and sets the +** base address. +** +****************************************************************************************/ +static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address) +{ + /* check address alignment */ + if ((address % FLASH_WRITE_BLOCK_SIZE) != 0) + { + return BLT_FALSE; + } + /* make sure that we are initializing a new block and not the same one */ + if (block->base_addr == address) + { + /* block already initialized, so nothing to do */ + return BLT_TRUE; + } + /* set the base address and copies the current data from flash */ + block->base_addr = address; + CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE); + return BLT_TRUE; +} /*** end of ExtFlashInitBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashSwitchBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** base_addr base address for the next block +** RETURN VALUE: the pointer of the block info struct that is no being used, or a NULL +** pointer in case of error. +** DESCRIPTION: Switches blocks by programming the current one and initializing the +** next. +** +****************************************************************************************/ +static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr) +{ + /* need to switch to a new block, so program the current one and init the next */ + if (ExtFlashWriteBlock(block) == BLT_FALSE) + { + return BLT_NULL; + } + /* initialize the new block when necessary */ + if (ExtFlashInitBlock(block, base_addr) == BLT_FALSE) + { + return BLT_NULL; + } + /* still here to all is okay */ + return block; +} /*** end of ExtFlashSwitchBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashAddToBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** address flash destination address +** data pointer to the byte array with data +** len number of bytes to add to the block +** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise. +** DESCRIPTION: Programming is done per block. This function adds data to the block +** that is currently collecting data to be written to flash. If the +** address is outside of the current block, the current block is written +** to flash an a new block is initialized. +** +****************************************************************************************/ +static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address, + blt_int8u *data, blt_int16u len) +{ + blt_addr current_base_addr; + blt_int8u *dst; + blt_int8u *src; + + /* determine the current base address */ + current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE; + + /* make sure the blockInfo is not uninitialized */ + if (block->base_addr == FLASH_INVALID_ADDRESS) + { + /* initialize the blockInfo struct for the current block */ + if (ExtFlashInitBlock(block, current_base_addr) == BLT_FALSE) + { + return BLT_FALSE; + } + } + /* check if the new data fits in the current block */ + if (block->base_addr != current_base_addr) + { + /* need to switch to a new block, so program the current one and init the next */ + block = ExtFlashSwitchBlock(block, current_base_addr); + if (block == BLT_NULL) + { + return BLT_FALSE; + } + } + /* add the data to the current block, but check for block overflow */ + dst = &(block->data[address - block->base_addr]); + src = data; + do + { + /* keep the watchdog happy */ + CopService(); + /* buffer overflow? */ + if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE) + { + /* need to switch to a new block, so program the current one and init the next */ + block = ExtFlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE); + if (block == BLT_NULL) + { + return BLT_FALSE; + } + /* reset destination pointer */ + dst = &(block->data[0]); + } + /* write the data to the buffer */ + *dst = *src; + /* update pointers */ + dst++; + src++; + /* decrement byte counter */ + len--; + } + while (len > 0); + /* still here so all is good */ + return BLT_TRUE; +} /*** end of ExtFlashAddToBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashWriteBlock +** PARAMETER: block pointer to flash block info structure to operate on. +** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise. +** DESCRIPTION: Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data +** array. +** +****************************************************************************************/ +static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block) +{ + volatile blt_int16u *pAddr; + volatile blt_int16u *pData; + blt_bool result = BLT_TRUE; + volatile blt_int32u timeout = 0; + + /* unlock the sector */ + ExtFlashUnlockSector(block->base_addr); + /* init pointer to valid address in the flash block */ + pAddr = (blt_int16u *)block->base_addr; + /* init pointer to start of block data */ + pData = (blt_int16u *)block->data; + /* program all block data 16-bits at a time */ + while ((blt_addr)pAddr < (block->base_addr+FLASH_WRITE_BLOCK_SIZE)) + { + /* keep the watchdog happy */ + CopService(); + /* issue program setup command */ + *pAddr = FLASH_CMD_PROGRAM_MODE; + /* write 16-bit data that is to be programmed to start programming operation */ + *pAddr = *pData; + /* check status register for completion */ + *pAddr = FLASH_CMD_READ_STATUS_MODE; + /* wait for completion or timeout */ + while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_PROGRAM_TIMEOUT) ) + { + timeout++; + } + /* check for possible errors */ + if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ + ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_PROGRAM))!= 0) ) + { + result = BLT_FALSE; + } + /* clear the status register */ + *pAddr = FLASH_CMD_CLEAR_STATUS; + /* increment address and data pointers */ + pAddr++; + pData++; + } + /* lock the sector. this also switches back to read array mode */ + ExtFlashLockSector(block->base_addr); + /* inform the caller about the result */ + return result; +} /*** end of ExtFlashWriteBlock ***/ + + +/**************************************************************************************** +** NAME: ExtFlashEraseSector +** PARAMETER: sector_base base address of the sector to erase. +** RETURN VALUE: BLT_TRUE is erasure was successful, BLT_FALSE otherwise. +** DESCRIPTION: Erases the flash sector. +** +****************************************************************************************/ +static blt_bool ExtFlashEraseSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + blt_bool result = BLT_TRUE; + volatile blt_int32u timeout = 0; + + /* unlock the sector */ + ExtFlashUnlockSector(sector_base); + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* issue erase setup command */ + *pAddr = FLASH_CMD_ERASE_MODE; + /* issue erase confirm command */ + *pAddr = FLASH_CMD_ERASE_CONFIRM; + /* check status register for completion */ + *pAddr = FLASH_CMD_READ_STATUS_MODE; + /* wait for completion or timeout */ + while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_ERASE_TIMEOUT) ) + { + timeout++; + } + /* check for possible errors */ + if ( (timeout >= FLASH_ERASE_TIMEOUT) || \ + ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_ERASE))!= 0) ) + { + result = BLT_FALSE; + } + /* clear the status register */ + *pAddr = FLASH_CMD_CLEAR_STATUS; + /* lock the sector. this also switches back to read array mode */ + ExtFlashLockSector(sector_base); + /* inform the caller about the result */ + return result; +} /*** end of ExtFlashEraseSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashLockSector +** PARAMETER: sector_base base address of the sector to lock. +** RETURN VALUE: none +** DESCRIPTION: Locks the flash sector. +** +****************************************************************************************/ +static void ExtFlashLockSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + + /* no need to lock a sector that is already locked */ + if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0) + { + return; + } + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* switch to change lock mode */ + *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; + /* unlock the sector */ + *pAddr = FLASH_CMD_LOCK_SECTOR; + /* check that the sector is now actually locked */ + ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0); +} /*** end of ExtFlashLockSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashUnlockSector +** PARAMETER: sector_base base address of the sector to unlock. +** RETURN VALUE: none +** DESCRIPTION: Unlocks the flash sector. +** +****************************************************************************************/ +static void ExtFlashUnlockSector(blt_addr sector_base) +{ + volatile blt_int16u *pAddr; + + /* no need to unlock a sector that is already unlocked */ + if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0) + { + return; + } + /* init pointer to valid address in the flash sector */ + pAddr = (blt_int16u *)sector_base; + /* switch to change lock mode */ + *pAddr = FLASH_CMD_CHANGE_LOCK_MODE; + /* unlock the sector */ + *pAddr = FLASH_CMD_UNLOCK_SECTOR; + /* check that the sector is now actually unlocked */ + ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0); +} /*** end of ExtFlashUnlockSector ***/ + + +/**************************************************************************************** +** NAME: ExtFlashGetDeviceInfo +** PARAMETER: sector_base base address of the sector to get the info from. +** info identifier to the type of info to obtain. +** RETURN VALUE: device info. +** DESCRIPTION: Obtains device information from the flash device. +** +****************************************************************************************/ +static blt_int16u ExtFlashGetDeviceInfo(blt_addr sector_base, blt_int16u info) +{ + volatile blt_int16u *pAddr; + blt_int16u readData; + + /* init pointer to any valid address in the flash device */ + pAddr = (blt_int16u *)sector_base + info; + /* switch to read identifier mode */ + *pAddr = FLASH_CMD_READ_ID_MODE; + /* read the info */ + readData = *pAddr; + /* switch back to reading mode */ + *pAddr = FLASH_CMD_READ_ARRAY_MODE; + /* return the result */ + return readData; +} /*** end of ExtFlashGetDeviceInfo ***/ + + +/**************************************************************************************** +** NAME: ExtFlashGetSector +** PARAMETER: address address in the flash sector +** RETURN VALUE: flash sector number or FLASH_INVALID_SECTOR +** DESCRIPTION: Determines the flash sector the address is in. +** +****************************************************************************************/ +static blt_int8u ExtFlashGetSector(blt_addr address) +{ + blt_int8u sectorIdx; + + /* search through the sectors to find the right one */ + for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++) + { + /* keep the watchdog happy */ + CopService(); + /* is the address in this sector? */ + if ( (address >= flashLayout[sectorIdx].sector_start) && \ + (address < (flashLayout[sectorIdx].sector_start + \ + flashLayout[sectorIdx].sector_size)) ) + { + /* return the sector number */ + return flashLayout[sectorIdx].sector_num; + } + } + /* still here so no valid sector found */ + return FLASH_INVALID_SECTOR; +} /*** end of ExtFlashGetSector ***/ +#endif + +/*********************************** end of extflash.c *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h new file mode 100644 index 00000000..bc8c4b15 --- /dev/null +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h @@ -0,0 +1,45 @@ +/**************************************************************************************** +| Description: bootloader external flash driver header file +| File Name: extflash.h +| +|---------------------------------------------------------------------------------------- +| C O P Y R I G H T +|---------------------------------------------------------------------------------------- +| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved +| +|---------------------------------------------------------------------------------------- +| L I C E N S E +|---------------------------------------------------------------------------------------- +| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or +| modify it under the terms of the GNU General Public License as published by the Free +| Software Foundation, either version 3 of the License, or (at your option) any later +| version. +| +| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +| PURPOSE. See the GNU General Public License for more details. +| +| You should have received a copy of the GNU General Public License along with OpenBLT. +| If not, see . +| +| A special exception to the GPL is included to allow you to distribute a combined work +| that includes OpenBLT without being obliged to provide the source code for any +| proprietary components. The exception text is included at the bottom of the license +| file . +| +****************************************************************************************/ +#ifndef EXTFLASH_H +#define EXTFLASH_H + +#if (BOOT_NVM_HOOKS_ENABLE > 0) +/**************************************************************************************** +* Function prototypes +****************************************************************************************/ +void ExtFlashInit(void); +blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data); +blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len); +blt_bool ExtFlashDone(void); +#endif + +#endif /* EXTFLASH_H */ +/*********************************** end of extflash.h *********************************/ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c index e46906ec..8bbaedb6 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c @@ -80,6 +80,7 @@ blt_bool BackDoorEntryHook(void) ****************************************************************************************/ #if (BOOT_NVM_HOOKS_ENABLE > 0) +#include "extflash.h" /**************************************************************************************** ** NAME: NvmInitHook ** PARAMETER: none @@ -90,6 +91,8 @@ blt_bool BackDoorEntryHook(void) ****************************************************************************************/ void NvmInitHook(void) { + /* init the external flash driver */ + ExtFlashInit(); } /*** end of NvmInitHook ***/ @@ -98,20 +101,21 @@ void NvmInitHook(void) ** PARAMETER: addr start address ** len length in bytes ** data pointer to the data buffer. -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the write +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver write ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't ** been written yet. ** ** ****************************************************************************************/ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) { - return BTL_NVM_NOT_IN_RANGE; + /* attempt to write with the external flash driver */ + return ExtFlashWrite(addr, len, data); } /*** end of NvmWriteHook ***/ @@ -119,19 +123,20 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) ** NAME: NvmEraseHook ** PARAMETER: addr start address ** len length in bytes -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the erase +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver erase ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory ** hasn't been erased yet. ** ****************************************************************************************/ -blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) +blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) { - return BTL_NVM_NOT_IN_RANGE; + /* attempt to erase with the external flash driver */ + return ExtFlashErase(addr, len); } /*** end of NvmEraseHook ***/ @@ -144,7 +149,8 @@ blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) ****************************************************************************************/ blt_bool NvmDoneHook(void) { - return BLT_TRUE; + /* finish up the operations of the external flash driver */ + return ExtFlashDone(); } /*** end of NvmDoneHook ***/ #endif /* BOOT_NVM_HOOKS_ENABLE > 0 */ diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project index d496df15..23ad2541 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project @@ -47,6 +47,8 @@ + + diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c index 60596f77..ad2b0cb7 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c @@ -80,7 +80,7 @@ int main(void) static void Init(void) { blt_int8u m_sel; /* pll multiplier register value */ - blt_int8u pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */ + static blt_int8u pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */ blt_int8u p_sel_cnt; /* loop counter to find p_sel */ blt_int32u f_cco; /* current controller oscillator */ @@ -144,6 +144,29 @@ static void Init(void) MAMCR = 0x2; /* setting peripheral Clock (pclk) to System Clock (cclk) */ VPBDIV = 0x1; +#if (BOOT_NVM_HOOKS_ENABLE > 0) + /* in this the external memory on the Olimex LPC-L2294 board is used so configure + * the memory banks for the external flash EEPROM and RAM + */ + /* external flash EEPROM: + * IDCY=3 (idle timing) + * WST1=4 (read timing) + * RBLE=1 + * WST2=6 (write timing) + * MW=1 (16-bit data bus) + */ + BCFG0 = (0x3 << 0) | (0x4 << 5) | (0x1 << 10) | (0x6 << 11) | (0x1 << 28); + /* external RAM: + * IDCY=0 (idle timing) + * WST1=0 (read timing) + * RBLE=1 + * WST2=0 (write timing) + * MW=2 (32-bit data bus) + */ + BCFG1 = (0x0 << 0) | (0x0 << 5) | (0x1 << 10) | (0x0 << 11) | (0x2 << 28); + /* configure use of data bus and strobe pins for the external memory */ + PINSEL2 = 0x0F000924; +#endif #if (BOOT_COM_UART_ENABLE > 0) /* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */ PINSEL0 |= 0x05; diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile index 40744340..b510d89a 100644 --- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile +++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile @@ -38,6 +38,8 @@ PROJ_FILES= \ config.h \ hooks.c \ main.c \ +extflash.c \ +extflash.h \ lpc2294.h \ ../../../Source/boot.c \ ../../../Source/boot.h \ @@ -105,7 +107,7 @@ LIB_PATH = -L../../../Source/ARM7_LPC2000/GCC/ #| Options for compiler binaries | #|---------------------------------------------------------------------------------------| AFLAGS = -ahls -mapcs-32 -mcpu=arm7tdmi-s -mfpu=softfpa -CFLAGS = $(INC_PATH) -O1 -Wall -fmessage-length=0 -mcpu=arm7tdmi-s -g -mlong-calls +CFLAGS = $(INC_PATH) -O1 -Wall -fmessage-length=0 -mcpu=arm7tdmi-s -g CFLAGS += -Wa,-adhlns="$(OBJ_PATH)/$(subst .o,.lst,$@)" LFLAGS = $(LIB_PATH) -T"memory.x" -g -mcpu=arm7tdmi-s -nostartfiles OCFLAGS = -O ihex diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf index 048c3843..ccec1ad2 100644 Binary files a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf differ diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map index 8a34685c..a981dabf 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map @@ -19,50 +19,50 @@ Discarded input sections .text.__get_PSP 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_PSP - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__get_MSP 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_MSP - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__get_BASEPRI - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_BASEPRI - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__get_PRIMASK - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_PRIMASK - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__get_FAULTMASK - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_FAULTMASK - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__get_CONTROL - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__set_CONTROL - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__REV 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o .text.__REV16 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o .text.__REVSH 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o - .text.__RBIT 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + .text.__RBIT 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__LDREXB 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__LDREXH 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__LDREXW - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__STREXB - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__STREXH - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text.__STREXW - 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o + 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o .text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemInit - 0x00000000 0xf8 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0x130 THUMB Debug/../../obj/system_stm32f10x.o .text.SystemCoreClockUpdate - 0x00000000 0x64 THUMB Debug/../../obj/system_stm32f10x.o + 0x00000000 0xe0 THUMB Debug/../../obj/system_stm32f10x.o .data.AHBPrescTable 0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o .data.SystemCoreClock @@ -89,8 +89,6 @@ Discarded input sections .text 0x00000000 0x0 THUMB Debug/../../obj/timer.o .data 0x00000000 0x0 THUMB Debug/../../obj/timer.o .bss 0x00000000 0x0 THUMB Debug/../../obj/timer.o - .text.TimerSet - 0x00000000 0xc THUMB Debug/../../obj/timer.o .text 0x00000000 0x0 THUMB Debug/../../obj/uart.o .data 0x00000000 0x0 THUMB Debug/../../obj/uart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o @@ -164,7 +162,7 @@ CM3_System_Control_Space 0xe000e000 0x00001000 xw Linker script and memory map - 0x08000d70 __do_debug_operation = __do_debug_operation_bkpt + 0x0800122c __do_debug_operation = __do_debug_operation_bkpt 0x08000000 __FLASH_segment_start__ = 0x8000000 0x08004000 __FLASH_segment_end__ = 0x8004000 0x20000000 __RAM_segment_start__ = 0x20000000 @@ -213,146 +211,159 @@ Linker script and memory map 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .init is too large to fit in FLASH memory segment) 0x080002e8 __text_load_start__ = ALIGN (__init_end__, 0x4) -.text 0x080002e8 0xaa8 +.text 0x080002e8 0xf64 0x080002e8 __text_start__ = . *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) .glue_7 0x00000000 0x0 linker stubs .glue_7t 0x00000000 0x0 linker stubs - .text.startup.main - 0x080002e8 0x12c THUMB Debug/../../obj/main.o + .text.main 0x080002e8 0x170 THUMB Debug/../../obj/main.o 0x080002e8 main .text.UnusedISR - 0x08000414 0xc THUMB Debug/../../obj/vectors.o - 0x08000414 UnusedISR + 0x08000458 0x18 THUMB Debug/../../obj/vectors.o + 0x08000458 UnusedISR .text.CpuStartUserProgram - 0x08000420 0x24 THUMB Debug/../../obj/cpu.o - 0x08000420 CpuStartUserProgram + 0x08000470 0x28 THUMB Debug/../../obj/cpu.o + 0x08000470 CpuStartUserProgram .text.CpuMemCopy - 0x08000444 0x20 THUMB Debug/../../obj/cpu.o - 0x08000444 CpuMemCopy + 0x08000498 0x28 THUMB Debug/../../obj/cpu.o + 0x08000498 CpuMemCopy .text.CpuReset - 0x08000464 0x4 THUMB Debug/../../obj/cpu.o - 0x08000464 CpuReset - .text.NvmInit 0x08000468 0x4 THUMB Debug/../../obj/nvm.o - 0x08000468 NvmInit + 0x080004c0 0xc THUMB Debug/../../obj/cpu.o + 0x080004c0 CpuReset + .text.NvmInit 0x080004cc 0xc THUMB Debug/../../obj/nvm.o + 0x080004cc NvmInit .text.NvmWrite - 0x0800046c 0x4 THUMB Debug/../../obj/nvm.o - 0x0800046c NvmWrite + 0x080004d8 0xc THUMB Debug/../../obj/nvm.o + 0x080004d8 NvmWrite .text.NvmErase - 0x08000470 0x4 THUMB Debug/../../obj/nvm.o - 0x08000470 NvmErase + 0x080004e4 0xc THUMB Debug/../../obj/nvm.o + 0x080004e4 NvmErase .text.NvmVerifyChecksum - 0x08000474 0x4 THUMB Debug/../../obj/nvm.o - 0x08000474 NvmVerifyChecksum - .text.NvmDone 0x08000478 0x14 THUMB Debug/../../obj/nvm.o - 0x08000478 NvmDone - .text.TimerInit - 0x0800048c 0x24 THUMB Debug/../../obj/timer.o - 0x0800048c TimerInit + 0x080004f0 0xc THUMB Debug/../../obj/nvm.o + 0x080004f0 NvmVerifyChecksum + .text.NvmDone 0x080004fc 0x18 THUMB Debug/../../obj/nvm.o + 0x080004fc NvmDone .text.TimerReset - 0x080004b0 0xc THUMB Debug/../../obj/timer.o - 0x080004b0 TimerReset + 0x08000514 0x10 THUMB Debug/../../obj/timer.o + 0x08000514 TimerReset .text.TimerUpdate - 0x080004bc 0x1c THUMB Debug/../../obj/timer.o - 0x080004bc TimerUpdate + 0x08000524 0x24 THUMB Debug/../../obj/timer.o + 0x08000524 TimerUpdate + .text.TimerSet + 0x08000548 0xc THUMB Debug/../../obj/timer.o + 0x08000548 TimerSet + .text.TimerInit + 0x08000554 0x2c THUMB Debug/../../obj/timer.o + 0x08000554 TimerInit .text.TimerGet - 0x080004d8 0x14 THUMB Debug/../../obj/timer.o - 0x080004d8 TimerGet + 0x08000580 0x14 THUMB Debug/../../obj/timer.o + 0x08000580 TimerGet + .text.UartReceiveByte + 0x08000594 0x24 THUMB Debug/../../obj/uart.o + .text.UartTransmitByte + 0x080005b8 0x4c THUMB Debug/../../obj/uart.o .text.UartInit - 0x080004ec 0x28 THUMB Debug/../../obj/uart.o - 0x080004ec UartInit + 0x08000604 0x2c THUMB Debug/../../obj/uart.o + 0x08000604 UartInit .text.UartTransmitPacket - 0x08000514 0x7c THUMB Debug/../../obj/uart.o - 0x08000514 UartTransmitPacket + 0x08000630 0x70 THUMB Debug/../../obj/uart.o + 0x08000630 UartTransmitPacket .text.UartReceivePacket - 0x08000590 0x6c THUMB Debug/../../obj/uart.o - 0x08000590 UartReceivePacket + 0x080006a0 0xb0 THUMB Debug/../../obj/uart.o + 0x080006a0 UartReceivePacket + .text.FlashUnlock + 0x08000750 0x24 THUMB Debug/../../obj/flash.o .text.FlashLock - 0x080005fc 0x10 THUMB Debug/../../obj/flash.o + 0x08000774 0x14 THUMB Debug/../../obj/flash.o .text.FlashGetSector - 0x0800060c 0x38 THUMB Debug/../../obj/flash.o + 0x08000788 0x48 THUMB Debug/../../obj/flash.o .text.FlashWriteBlock - 0x08000644 0xa0 THUMB Debug/../../obj/flash.o + 0x080007d0 0xc4 THUMB Debug/../../obj/flash.o + .text.FlashGetSectorBaseAddr + 0x08000894 0x40 THUMB Debug/../../obj/flash.o + .text.FlashInitBlock + 0x080008d4 0x38 THUMB Debug/../../obj/flash.o .text.FlashSwitchBlock - 0x080006e4 0x54 THUMB Debug/../../obj/flash.o + 0x0800090c 0x50 THUMB Debug/../../obj/flash.o .text.FlashAddToBlock - 0x08000738 0x8a THUMB Debug/../../obj/flash.o - *fill* 0x080007c2 0x2 00 + 0x0800095c 0xa0 THUMB Debug/../../obj/flash.o .text.FlashInit - 0x080007c4 0x18 THUMB Debug/../../obj/flash.o - 0x080007c4 FlashInit + 0x080009fc 0x1c THUMB Debug/../../obj/flash.o + 0x080009fc FlashInit .text.FlashWrite - 0x080007dc 0x4c THUMB Debug/../../obj/flash.o - 0x080007dc FlashWrite + 0x08000a18 0x58 THUMB Debug/../../obj/flash.o + 0x08000a18 FlashWrite .text.FlashErase - 0x08000828 0x13c THUMB Debug/../../obj/flash.o - 0x08000828 FlashErase + 0x08000a70 0x144 THUMB Debug/../../obj/flash.o + 0x08000a70 FlashErase .text.FlashVerifyChecksum - 0x08000964 0x54 THUMB Debug/../../obj/flash.o - 0x08000964 FlashVerifyChecksum + 0x08000bb4 0x68 THUMB Debug/../../obj/flash.o + 0x08000bb4 FlashVerifyChecksum .text.FlashWriteChecksum - 0x080009b8 0x44 THUMB Debug/../../obj/flash.o - 0x080009b8 FlashWriteChecksum + 0x08000c1c 0x50 THUMB Debug/../../obj/flash.o + 0x08000c1c FlashWriteChecksum .text.FlashDone - 0x080009fc 0x34 THUMB Debug/../../obj/flash.o - 0x080009fc FlashDone + 0x08000c6c 0x58 THUMB Debug/../../obj/flash.o + 0x08000c6c FlashDone .text.AssertFailure - 0x08000a30 0x18 THUMB Debug/../../obj/assert.o - 0x08000a30 AssertFailure + 0x08000cc4 0x1c THUMB Debug/../../obj/assert.o + 0x08000cc4 AssertFailure .text.BackDoorCheck - 0x08000a48 0x30 THUMB Debug/../../obj/backdoor.o - 0x08000a48 BackDoorCheck + 0x08000ce0 0x3c THUMB Debug/../../obj/backdoor.o + 0x08000ce0 BackDoorCheck .text.BackDoorInit - 0x08000a78 0x18 THUMB Debug/../../obj/backdoor.o - 0x08000a78 BackDoorInit + 0x08000d1c 0x1c THUMB Debug/../../obj/backdoor.o + 0x08000d1c BackDoorInit .text.BootInit - 0x08000a90 0x16 THUMB Debug/../../obj/boot.o - 0x08000a90 BootInit + 0x08000d38 0x18 THUMB Debug/../../obj/boot.o + 0x08000d38 BootInit .text.BootTask - 0x08000aa6 0x12 THUMB Debug/../../obj/boot.o - 0x08000aa6 BootTask - .text.ComInit 0x08000ab8 0x2c THUMB Debug/../../obj/com.o - 0x08000ab8 ComInit - .text.ComTask 0x08000ae4 0x20 THUMB Debug/../../obj/com.o - 0x08000ae4 ComTask + 0x08000d50 0x14 THUMB Debug/../../obj/boot.o + 0x08000d50 BootTask + .text.ComInit 0x08000d64 0x34 THUMB Debug/../../obj/com.o + 0x08000d64 ComInit + .text.ComTask 0x08000d98 0x24 THUMB Debug/../../obj/com.o + 0x08000d98 ComTask .text.ComTransmitPacket - 0x08000b04 0x10 THUMB Debug/../../obj/com.o - 0x08000b04 ComTransmitPacket + 0x08000dbc 0x10 THUMB Debug/../../obj/com.o + 0x08000dbc ComTransmitPacket .text.ComSetConnectEntryState - 0x08000b14 0xc THUMB Debug/../../obj/com.o - 0x08000b14 ComSetConnectEntryState + 0x08000dcc 0x10 THUMB Debug/../../obj/com.o + 0x08000dcc ComSetConnectEntryState .text.ComIsConnected - 0x08000b20 0x4 THUMB Debug/../../obj/com.o - 0x08000b20 ComIsConnected - .text.CopInit 0x08000b24 0x2 THUMB Debug/../../obj/cop.o - 0x08000b24 CopInit + 0x08000ddc 0xc THUMB Debug/../../obj/com.o + 0x08000ddc ComIsConnected + .text.CopInit 0x08000de8 0x4 THUMB Debug/../../obj/cop.o + 0x08000de8 CopInit .text.CopService - 0x08000b26 0x2 THUMB Debug/../../obj/cop.o - 0x08000b26 CopService + 0x08000dec 0x4 THUMB Debug/../../obj/cop.o + 0x08000dec CopService + .text.XcpProtectResources + 0x08000df0 0x10 THUMB Debug/../../obj/xcp.o .text.XcpSetCtoError - 0x08000b28 0x14 THUMB Debug/../../obj/xcp.o - .text.XcpInit 0x08000b3c 0x1c THUMB Debug/../../obj/xcp.o - 0x08000b3c XcpInit + 0x08000e00 0x1c THUMB Debug/../../obj/xcp.o + .text.XcpInit 0x08000e1c 0x20 THUMB Debug/../../obj/xcp.o + 0x08000e1c XcpInit .text.XcpIsConnected - 0x08000b58 0x10 THUMB Debug/../../obj/xcp.o - 0x08000b58 XcpIsConnected + 0x08000e3c 0x14 THUMB Debug/../../obj/xcp.o + 0x08000e3c XcpIsConnected .text.XcpPacketTransmitted - 0x08000b68 0x10 THUMB Debug/../../obj/xcp.o - 0x08000b68 XcpPacketTransmitted + 0x08000e50 0x14 THUMB Debug/../../obj/xcp.o + 0x08000e50 XcpPacketTransmitted .text.XcpPacketReceived - 0x08000b78 0x1f8 THUMB Debug/../../obj/xcp.o - 0x08000b78 XcpPacketReceived + 0x08000e64 0x3c8 THUMB Debug/../../obj/xcp.o + 0x08000e64 XcpPacketReceived .text.libdebugio_bkpt.__do_debug_operation_bkpt - 0x08000d70 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o) - 0x08000d70 __do_debug_operation_bkpt + 0x0800122c 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o) + 0x0800122c __do_debug_operation_bkpt .text.libc.__debug_io_lock - 0x08000d88 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08000d88 __debug_io_lock + 0x08001244 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x08001244 __debug_io_lock .text.libc.__debug_io_unlock - 0x08000d8c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) - 0x08000d8c __debug_io_unlock - 0x08000d90 __text_end__ = (__text_start__ + SIZEOF (.text)) - 0x08000d90 __text_load_end__ = __text_end__ + 0x08001248 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x08001248 __debug_io_unlock + 0x0800124c __text_end__ = (__text_start__ + SIZEOF (.text)) + 0x0800124c __text_load_end__ = __text_end__ .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 linker stubs @@ -360,62 +371,65 @@ Linker script and memory map .v4_bx 0x00000000 0x0 .v4_bx 0x00000000 0x0 linker stubs 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .text is too large to fit in FLASH memory segment) - 0x08000d90 __dtors_load_start__ = ALIGN (__text_end__, 0x4) + 0x0800124c __dtors_load_start__ = ALIGN (__text_end__, 0x4) -.dtors 0x08000d90 0x0 - 0x08000d90 __dtors_start__ = . +.dtors 0x0800124c 0x0 + 0x0800124c __dtors_start__ = . *(SORT(.dtors.*)) *(.dtors) *(.fini_array .fini_array.*) - 0x08000d90 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) - 0x08000d90 __dtors_load_end__ = __dtors_end__ + 0x0800124c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) + 0x0800124c __dtors_load_end__ = __dtors_end__ 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .dtors is too large to fit in FLASH memory segment) - 0x08000d90 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) + 0x0800124c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) -.ctors 0x08000d90 0x0 - 0x08000d90 __ctors_start__ = . +.ctors 0x0800124c 0x0 + 0x0800124c __ctors_start__ = . *(SORT(.ctors.*)) *(.ctors) *(.init_array .init_array.*) - 0x08000d90 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) - 0x08000d90 __ctors_load_end__ = __ctors_end__ + 0x0800124c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) + 0x0800124c __ctors_load_end__ = __ctors_end__ 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ctors is too large to fit in FLASH memory segment) - 0x08000d90 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) + 0x0800124c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) -.rodata 0x08000d90 0x23c - 0x08000d90 __rodata_start__ = . +.rodata 0x0800124c 0x23c + 0x0800124c __rodata_start__ = . *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.str1.1 - 0x08000d90 0x67 THUMB Debug/../../obj/main.o - .rodata.str1.1 - 0x08000df7 0x92 THUMB Debug/../../obj/vectors.o - .rodata.str1.1 - 0x08000e89 0x84 THUMB Debug/../../obj/uart.o - *fill* 0x08000f0d 0x3 00 + .rodata.str1.4 + 0x0800124c 0x67 THUMB Debug/../../obj/main.o + 0x68 (size before relaxing) + *fill* 0x080012b3 0x1 00 + .rodata.str1.4 + 0x080012b4 0x92 THUMB Debug/../../obj/vectors.o + 0x94 (size before relaxing) + *fill* 0x08001346 0x2 00 + .rodata.str1.4 + 0x08001348 0x84 THUMB Debug/../../obj/uart.o .rodata.flashLayout - 0x08000f10 0xb4 THUMB Debug/../../obj/flash.o + 0x080013cc 0xb4 THUMB Debug/../../obj/flash.o .rodata.xcpStationId - 0x08000fc4 0x8 THUMB Debug/../../obj/xcp.o - 0x08000fcc __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) - 0x08000fcc __rodata_load_end__ = __rodata_end__ + 0x08001480 0x8 THUMB Debug/../../obj/xcp.o + 0x08001488 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) + 0x08001488 __rodata_load_end__ = __rodata_end__ 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .rodata is too large to fit in FLASH memory segment) - 0x08000fcc __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) + 0x08001488 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) -.ARM.exidx 0x08000fcc 0x0 - 0x08000fcc __ARM.exidx_start__ = . - 0x08000fcc __exidx_start = __ARM.exidx_start__ +.ARM.exidx 0x08001488 0x0 + 0x08001488 __ARM.exidx_start__ = . + 0x08001488 __exidx_start = __ARM.exidx_start__ *(.ARM.exidx .ARM.exidx.*) - 0x08000fcc __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) - 0x08000fcc __exidx_end = __ARM.exidx_end__ - 0x08000fcc __ARM.exidx_load_end__ = __ARM.exidx_end__ + 0x08001488 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) + 0x08001488 __exidx_end = __ARM.exidx_end__ + 0x08001488 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ARM.exidx is too large to fit in FLASH memory segment) - 0x08000fcc __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) + 0x08001488 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) -.fast 0x20000000 0x0 load address 0x08000fcc +.fast 0x20000000 0x0 load address 0x08001488 0x20000000 __fast_start__ = . *(.fast .fast.*) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) - 0x08000fcc __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) + 0x08001488 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x20000))), error: .fast is too large to fit in FLASH memory segment) .fast_run 0x20000000 0x0 @@ -424,13 +438,13 @@ Linker script and memory map 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .fast_run is too large to fit in RAM memory segment) - 0x08000fcc __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) + 0x08001488 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) -.data 0x20000000 0x0 load address 0x08000fcc +.data 0x20000000 0x0 load address 0x08001488 0x20000000 __data_start__ = . *(.data .data.* .gnu.linkonce.d.*) 0x20000000 __data_end__ = (__data_start__ + SIZEOF (.data)) - 0x08000fcc __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) + 0x08001488 __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) 0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x20000))), error: .data is too large to fit in FLASH memory segment) .data_run 0x20000000 0x0 @@ -441,99 +455,100 @@ Linker script and memory map 0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .data_run is too large to fit in RAM memory segment) 0x20000000 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) -.bss 0x20000000 0x4e8 +.bss 0x20000000 0x4ec 0x20000000 __bss_start__ = . *(.bss .bss.* .gnu.linkonce.b.*) .bss.millisecond_counter 0x20000000 0x2 THUMB Debug/../../obj/timer.o + *fill* 0x20000002 0x2 00 .bss.xcpCtoReqPacket.876 - 0x20000002 0x41 THUMB Debug/../../obj/uart.o + 0x20000004 0x44 THUMB Debug/../../obj/uart.o .bss.xcpCtoRxInProgress.878 - 0x20000043 0x1 THUMB Debug/../../obj/uart.o + 0x20000048 0x1 THUMB Debug/../../obj/uart.o .bss.xcpCtoRxLength.877 - 0x20000044 0x1 THUMB Debug/../../obj/uart.o - *fill* 0x20000045 0x3 00 + 0x20000049 0x1 THUMB Debug/../../obj/uart.o + *fill* 0x2000004a 0x2 00 .bss.bootBlockInfo - 0x20000048 0x204 THUMB Debug/../../obj/flash.o + 0x2000004c 0x204 THUMB Debug/../../obj/flash.o .bss.blockInfo - 0x2000024c 0x204 THUMB Debug/../../obj/flash.o + 0x20000250 0x204 THUMB Debug/../../obj/flash.o .bss.assert_failure_file - 0x20000450 0x4 THUMB Debug/../../obj/assert.o - .bss.assert_failure_line 0x20000454 0x4 THUMB Debug/../../obj/assert.o + .bss.assert_failure_line + 0x20000458 0x4 THUMB Debug/../../obj/assert.o .bss.backdoorOpen - 0x20000458 0x1 THUMB Debug/../../obj/backdoor.o + 0x2000045c 0x1 THUMB Debug/../../obj/backdoor.o .bss.comEntryStateConnect - 0x20000459 0x1 THUMB Debug/../../obj/com.o + 0x2000045d 0x1 THUMB Debug/../../obj/com.o + *fill* 0x2000045e 0x2 00 .bss.xcpCtoReqPacket.855 - 0x2000045a 0x40 THUMB Debug/../../obj/com.o - *fill* 0x2000049a 0x2 00 - .bss.xcpInfo 0x2000049c 0x4c THUMB Debug/../../obj/xcp.o + 0x20000460 0x40 THUMB Debug/../../obj/com.o + .bss.xcpInfo 0x200004a0 0x4c THUMB Debug/../../obj/xcp.o *(COMMON) - 0x200004e8 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) - 0x200004e8 __bss_load_end__ = __bss_end__ + 0x200004ec __bss_end__ = (__bss_start__ + SIZEOF (.bss)) + 0x200004ec __bss_load_end__ = __bss_end__ 0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .bss is too large to fit in RAM memory segment) - 0x200004e8 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) + 0x200004ec __non_init_load_start__ = ALIGN (__bss_end__, 0x4) -.non_init 0x200004e8 0x0 - 0x200004e8 __non_init_start__ = . +.non_init 0x200004ec 0x0 + 0x200004ec __non_init_start__ = . *(.non_init .non_init.*) - 0x200004e8 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) - 0x200004e8 __non_init_load_end__ = __non_init_end__ + 0x200004ec __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) + 0x200004ec __non_init_load_end__ = __non_init_end__ 0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= (__RAM_segment_start__ + 0x5000))), error: .non_init is too large to fit in RAM memory segment) - 0x200004e8 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) + 0x200004ec __heap_load_start__ = ALIGN (__non_init_end__, 0x4) -.heap 0x200004e8 0x80 - 0x200004e8 __heap_start__ = . +.heap 0x200004ec 0x80 + 0x200004ec __heap_start__ = . *(.heap .heap.*) - 0x20000568 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) - *fill* 0x200004e8 0x80 00 - 0x20000568 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) - 0x20000568 __heap_load_end__ = __heap_end__ + 0x2000056c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) + *fill* 0x200004ec 0x80 00 + 0x2000056c __heap_end__ = (__heap_start__ + SIZEOF (.heap)) + 0x2000056c __heap_load_end__ = __heap_end__ 0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= (__RAM_segment_start__ + 0x5000))), error: .heap is too large to fit in RAM memory segment) - 0x20000568 __stack_load_start__ = ALIGN (__heap_end__, 0x4) + 0x2000056c __stack_load_start__ = ALIGN (__heap_end__, 0x4) -.stack 0x20000568 0x100 - 0x20000568 __stack_start__ = . +.stack 0x2000056c 0x100 + 0x2000056c __stack_start__ = . *(.stack .stack.*) - 0x20000668 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) - *fill* 0x20000568 0x100 00 - 0x20000668 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) - 0x20000668 __stack_load_end__ = __stack_end__ + 0x2000066c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) + *fill* 0x2000056c 0x100 00 + 0x2000066c __stack_end__ = (__stack_start__ + SIZEOF (.stack)) + 0x2000066c __stack_load_end__ = __stack_end__ 0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack is too large to fit in RAM memory segment) - 0x20000668 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) + 0x2000066c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) -.stack_process 0x20000668 0x0 - 0x20000668 __stack_process_start__ = . +.stack_process 0x2000066c 0x0 + 0x2000066c __stack_process_start__ = . *(.stack_process .stack_process.*) - 0x20000668 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) - 0x20000668 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) - 0x20000668 __stack_process_load_end__ = __stack_process_end__ + 0x2000066c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) + 0x2000066c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) + 0x2000066c __stack_process_load_end__ = __stack_process_end__ 0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack_process is too large to fit in RAM memory segment) - 0x20000668 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) + 0x2000066c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) -.tbss 0x20000668 0x0 - 0x20000668 __tbss_start__ = . +.tbss 0x2000066c 0x0 + 0x2000066c __tbss_start__ = . *(.tbss .tbss.*) - 0x20000668 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) - 0x20000668 __tbss_load_end__ = __tbss_end__ + 0x2000066c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) + 0x2000066c __tbss_load_end__ = __tbss_end__ 0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tbss is too large to fit in RAM memory segment) - 0x08000fcc __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + 0x08001488 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) -.tdata 0x20000668 0x0 load address 0x08000fcc - 0x20000668 __tdata_start__ = . +.tdata 0x2000066c 0x0 load address 0x08001488 + 0x2000066c __tdata_start__ = . *(.tdata .tdata.*) - 0x20000668 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) - 0x08000fcc __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) - 0x08000fcc __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) + 0x2000066c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) + 0x08001488 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) + 0x08001488 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x00000001 . = ASSERT ((((__tdata_load_start__ + SIZEOF (.tdata)) >= __FLASH_segment_start__) && ((__tdata_load_start__ + SIZEOF (.tdata)) <= (__FLASH_segment_start__ + 0x20000))), error: .tdata is too large to fit in FLASH memory segment) -.tdata_run 0x20000668 0x0 - 0x20000668 __tdata_run_start__ = . - 0x20000668 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) - 0x20000668 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) - 0x20000668 __tdata_run_load_end__ = __tdata_run_end__ - 0x20000668 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) +.tdata_run 0x2000066c 0x0 + 0x2000066c __tdata_run_start__ = . + 0x2000066c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) + 0x2000066c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) + 0x2000066c __tdata_run_load_end__ = __tdata_run_end__ + 0x2000066c __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tdata_run is too large to fit in RAM memory segment) START GROUP LOAD THUMB Debug/../../obj/hooks.o @@ -563,28 +578,28 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib END GROUP OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/../bin/openbtl_olimex_stm32p103.elf elf32-littlearm) -.debug_info 0x00000000 0x29b6 +.debug_info 0x00000000 0x27fc .debug_info 0x00000000 0x5e THUMB Debug/../../obj/hooks.o .debug_info 0x0000005e 0x32a THUMB Debug/../../obj/main.o .debug_info 0x00000388 0x53d THUMB Debug/../../obj/core_cm3.o .debug_info 0x000008c5 0x4d9 THUMB Debug/../../obj/system_stm32f10x.o .debug_info 0x00000d9e 0x114 THUMB Debug/../../obj/cstart.o - .debug_info 0x00000eb2 0xf4 THUMB Debug/../../obj/vectors.o - .debug_info 0x00000fa6 0x5e THUMB Debug/../../obj/can.o - .debug_info 0x00001004 0x13d THUMB Debug/../../obj/cpu.o - .debug_info 0x00001141 0x15e THUMB Debug/../../obj/nvm.o - .debug_info 0x0000129f 0x187 THUMB Debug/../../obj/timer.o - .debug_info 0x00001426 0x300 THUMB Debug/../../obj/uart.o - .debug_info 0x00001726 0x7b4 THUMB Debug/../../obj/flash.o - .debug_info 0x00001eda 0xe8 THUMB Debug/../../obj/assert.o - .debug_info 0x00001fc2 0xa8 THUMB Debug/../../obj/backdoor.o - .debug_info 0x0000206a 0x8c THUMB Debug/../../obj/boot.o - .debug_info 0x000020f6 0x18e THUMB Debug/../../obj/com.o - .debug_info 0x00002284 0x8a THUMB Debug/../../obj/cop.o - .debug_info 0x0000230e 0x5db THUMB Debug/../../obj/xcp.o - .debug_info 0x000028e9 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_info 0x00000eb2 0xf5 THUMB Debug/../../obj/vectors.o + .debug_info 0x00000fa7 0x5e THUMB Debug/../../obj/can.o + .debug_info 0x00001005 0x13e THUMB Debug/../../obj/cpu.o + .debug_info 0x00001143 0x162 THUMB Debug/../../obj/nvm.o + .debug_info 0x000012a5 0x148 THUMB Debug/../../obj/timer.o + .debug_info 0x000013ed 0x28d THUMB Debug/../../obj/uart.o + .debug_info 0x0000167a 0x671 THUMB Debug/../../obj/flash.o + .debug_info 0x00001ceb 0xe8 THUMB Debug/../../obj/assert.o + .debug_info 0x00001dd3 0xa8 THUMB Debug/../../obj/backdoor.o + .debug_info 0x00001e7b 0x8c THUMB Debug/../../obj/boot.o + .debug_info 0x00001f07 0x18f THUMB Debug/../../obj/com.o + .debug_info 0x00002096 0x8a THUMB Debug/../../obj/cop.o + .debug_info 0x00002120 0x60f THUMB Debug/../../obj/xcp.o + .debug_info 0x0000272f 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) -.debug_abbrev 0x00000000 0xf0d +.debug_abbrev 0x00000000 0xe19 .debug_abbrev 0x00000000 0x2a THUMB Debug/../../obj/hooks.o .debug_abbrev 0x0000002a 0x109 THUMB Debug/../../obj/main.o .debug_abbrev 0x00000133 0xa9 THUMB Debug/../../obj/core_cm3.o @@ -593,38 +608,38 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_ .debug_abbrev 0x0000037c 0xc0 THUMB Debug/../../obj/vectors.o .debug_abbrev 0x0000043c 0x2a THUMB Debug/../../obj/can.o .debug_abbrev 0x00000466 0xb1 THUMB Debug/../../obj/cpu.o - .debug_abbrev 0x00000517 0xbc THUMB Debug/../../obj/nvm.o - .debug_abbrev 0x000005d3 0x13a THUMB Debug/../../obj/timer.o - .debug_abbrev 0x0000070d 0x16d THUMB Debug/../../obj/uart.o - .debug_abbrev 0x0000087a 0x279 THUMB Debug/../../obj/flash.o - .debug_abbrev 0x00000af3 0x7e THUMB Debug/../../obj/assert.o - .debug_abbrev 0x00000b71 0x5d THUMB Debug/../../obj/backdoor.o - .debug_abbrev 0x00000bce 0x41 THUMB Debug/../../obj/boot.o - .debug_abbrev 0x00000c0f 0xcb THUMB Debug/../../obj/com.o - .debug_abbrev 0x00000cda 0x41 THUMB Debug/../../obj/cop.o - .debug_abbrev 0x00000d1b 0x1cd THUMB Debug/../../obj/xcp.o - .debug_abbrev 0x00000ee8 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_abbrev 0x00000517 0xa5 THUMB Debug/../../obj/nvm.o + .debug_abbrev 0x000005bc 0xe1 THUMB Debug/../../obj/timer.o + .debug_abbrev 0x0000069d 0x133 THUMB Debug/../../obj/uart.o + .debug_abbrev 0x000007d0 0x229 THUMB Debug/../../obj/flash.o + .debug_abbrev 0x000009f9 0x7e THUMB Debug/../../obj/assert.o + .debug_abbrev 0x00000a77 0x5d THUMB Debug/../../obj/backdoor.o + .debug_abbrev 0x00000ad4 0x41 THUMB Debug/../../obj/boot.o + .debug_abbrev 0x00000b15 0xe2 THUMB Debug/../../obj/com.o + .debug_abbrev 0x00000bf7 0x41 THUMB Debug/../../obj/cop.o + .debug_abbrev 0x00000c38 0x1bc THUMB Debug/../../obj/xcp.o + .debug_abbrev 0x00000df4 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) -.debug_line 0x00000000 0x179e +.debug_line 0x00000000 0x177d .debug_line 0x00000000 0x1d THUMB Debug/../../obj/hooks.o - .debug_line 0x0000001d 0x1d6 THUMB Debug/../../obj/main.o - .debug_line 0x000001f3 0x295 THUMB Debug/../../obj/core_cm3.o - .debug_line 0x00000488 0x219 THUMB Debug/../../obj/system_stm32f10x.o - .debug_line 0x000006a1 0x15c THUMB Debug/../../obj/cstart.o - .debug_line 0x000007fd 0xf1 THUMB Debug/../../obj/vectors.o - .debug_line 0x000008ee 0x1d THUMB Debug/../../obj/can.o - .debug_line 0x0000090b 0x113 THUMB Debug/../../obj/cpu.o - .debug_line 0x00000a1e 0x133 THUMB Debug/../../obj/nvm.o - .debug_line 0x00000b51 0x140 THUMB Debug/../../obj/timer.o - .debug_line 0x00000c91 0x17d THUMB Debug/../../obj/uart.o - .debug_line 0x00000e0e 0x2aa THUMB Debug/../../obj/flash.o - .debug_line 0x000010b8 0xde THUMB Debug/../../obj/assert.o - .debug_line 0x00001196 0xfb THUMB Debug/../../obj/backdoor.o - .debug_line 0x00001291 0xbf THUMB Debug/../../obj/boot.o - .debug_line 0x00001350 0x138 THUMB Debug/../../obj/com.o - .debug_line 0x00001488 0xb7 THUMB Debug/../../obj/cop.o - .debug_line 0x0000153f 0x1eb THUMB Debug/../../obj/xcp.o - .debug_line 0x0000172a 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_line 0x0000001d 0x1d7 THUMB Debug/../../obj/main.o + .debug_line 0x000001f4 0x295 THUMB Debug/../../obj/core_cm3.o + .debug_line 0x00000489 0x217 THUMB Debug/../../obj/system_stm32f10x.o + .debug_line 0x000006a0 0x15c THUMB Debug/../../obj/cstart.o + .debug_line 0x000007fc 0xf0 THUMB Debug/../../obj/vectors.o + .debug_line 0x000008ec 0x1d THUMB Debug/../../obj/can.o + .debug_line 0x00000909 0x116 THUMB Debug/../../obj/cpu.o + .debug_line 0x00000a1f 0x133 THUMB Debug/../../obj/nvm.o + .debug_line 0x00000b52 0x131 THUMB Debug/../../obj/timer.o + .debug_line 0x00000c83 0x16b THUMB Debug/../../obj/uart.o + .debug_line 0x00000dee 0x2c8 THUMB Debug/../../obj/flash.o + .debug_line 0x000010b6 0xdc THUMB Debug/../../obj/assert.o + .debug_line 0x00001192 0xf4 THUMB Debug/../../obj/backdoor.o + .debug_line 0x00001286 0xbf THUMB Debug/../../obj/boot.o + .debug_line 0x00001345 0x136 THUMB Debug/../../obj/com.o + .debug_line 0x0000147b 0xb7 THUMB Debug/../../obj/cop.o + .debug_line 0x00001532 0x1d7 THUMB Debug/../../obj/xcp.o + .debug_line 0x00001709 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) .debug_str 0x00000000 0x13e2 .debug_str 0x00000000 0xfc THUMB Debug/../../obj/hooks.o @@ -728,41 +743,42 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_ .ARM.attributes 0x00000130 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) -.debug_frame 0x00000000 0x810 +.debug_frame 0x00000000 0x8fc .debug_frame 0x00000000 0x30 THUMB Debug/../../obj/main.o .debug_frame 0x00000030 0x170 THUMB Debug/../../obj/core_cm3.o .debug_frame 0x000001a0 0x38 THUMB Debug/../../obj/system_stm32f10x.o - .debug_frame 0x000001d8 0x20 THUMB Debug/../../obj/vectors.o - .debug_frame 0x000001f8 0x5c THUMB Debug/../../obj/cpu.o - .debug_frame 0x00000254 0x6c THUMB Debug/../../obj/nvm.o - .debug_frame 0x000002c0 0x6c THUMB Debug/../../obj/timer.o - .debug_frame 0x0000032c 0x64 THUMB Debug/../../obj/uart.o - .debug_frame 0x00000390 0x150 THUMB Debug/../../obj/flash.o - .debug_frame 0x000004e0 0x2c THUMB Debug/../../obj/assert.o - .debug_frame 0x0000050c 0x48 THUMB Debug/../../obj/backdoor.o - .debug_frame 0x00000554 0x48 THUMB Debug/../../obj/boot.o - .debug_frame 0x0000059c 0x94 THUMB Debug/../../obj/com.o - .debug_frame 0x00000630 0x30 THUMB Debug/../../obj/cop.o - .debug_frame 0x00000660 0x70 THUMB Debug/../../obj/xcp.o - .debug_frame 0x000006d0 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o) - .debug_frame 0x00000770 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_frame 0x000001d8 0x2c THUMB Debug/../../obj/vectors.o + .debug_frame 0x00000204 0x68 THUMB Debug/../../obj/cpu.o + .debug_frame 0x0000026c 0x9c THUMB Debug/../../obj/nvm.o + .debug_frame 0x00000308 0x78 THUMB Debug/../../obj/timer.o + .debug_frame 0x00000380 0x90 THUMB Debug/../../obj/uart.o + .debug_frame 0x00000410 0x19c THUMB Debug/../../obj/flash.o + .debug_frame 0x000005ac 0x2c THUMB Debug/../../obj/assert.o + .debug_frame 0x000005d8 0x48 THUMB Debug/../../obj/backdoor.o + .debug_frame 0x00000620 0x48 THUMB Debug/../../obj/boot.o + .debug_frame 0x00000668 0xa4 THUMB Debug/../../obj/com.o + .debug_frame 0x0000070c 0x30 THUMB Debug/../../obj/cop.o + .debug_frame 0x0000073c 0x80 THUMB Debug/../../obj/xcp.o + .debug_frame 0x000007bc 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o) + .debug_frame 0x0000085c 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) -.debug_loc 0x00000000 0x100c - .debug_loc 0x00000000 0x76 THUMB Debug/../../obj/main.o - .debug_loc 0x00000076 0x2ae THUMB Debug/../../obj/core_cm3.o - .debug_loc 0x00000324 0x10e THUMB Debug/../../obj/system_stm32f10x.o - .debug_loc 0x00000432 0xc1 THUMB Debug/../../obj/cpu.o - .debug_loc 0x000004f3 0x7f THUMB Debug/../../obj/nvm.o - .debug_loc 0x00000572 0x20 THUMB Debug/../../obj/timer.o - .debug_loc 0x00000592 0x105 THUMB Debug/../../obj/uart.o - .debug_loc 0x00000697 0x6b4 THUMB Debug/../../obj/flash.o - .debug_loc 0x00000d4b 0x46 THUMB Debug/../../obj/assert.o - .debug_loc 0x00000d91 0x40 THUMB Debug/../../obj/backdoor.o - .debug_loc 0x00000dd1 0x40 THUMB Debug/../../obj/boot.o - .debug_loc 0x00000e11 0x86 THUMB Debug/../../obj/com.o - .debug_loc 0x00000e97 0x175 THUMB Debug/../../obj/xcp.o +.debug_loc 0x00000000 0x11fe + .debug_loc 0x00000000 0x82 THUMB Debug/../../obj/main.o + .debug_loc 0x00000082 0x2ae THUMB Debug/../../obj/core_cm3.o + .debug_loc 0x00000330 0x165 THUMB Debug/../../obj/system_stm32f10x.o + .debug_loc 0x00000495 0x20 THUMB Debug/../../obj/vectors.o + .debug_loc 0x000004b5 0x111 THUMB Debug/../../obj/cpu.o + .debug_loc 0x000005c6 0xff THUMB Debug/../../obj/nvm.o + .debug_loc 0x000006c5 0x40 THUMB Debug/../../obj/timer.o + .debug_loc 0x00000705 0x115 THUMB Debug/../../obj/uart.o + .debug_loc 0x0000081a 0x6c5 THUMB Debug/../../obj/flash.o + .debug_loc 0x00000edf 0x46 THUMB Debug/../../obj/assert.o + .debug_loc 0x00000f25 0x40 THUMB Debug/../../obj/backdoor.o + .debug_loc 0x00000f65 0x40 THUMB Debug/../../obj/boot.o + .debug_loc 0x00000fa5 0xb2 THUMB Debug/../../obj/com.o + .debug_loc 0x00001057 0x1a7 THUMB Debug/../../obj/xcp.o -.debug_aranges 0x00000000 0x420 +.debug_aranges 0x00000000 0x450 .debug_aranges 0x00000000 0x20 THUMB Debug/../../obj/main.o .debug_aranges @@ -780,38 +796,38 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_ .debug_aranges 0x000001c0 0x40 THUMB Debug/../../obj/timer.o .debug_aranges - 0x00000200 0x30 THUMB Debug/../../obj/uart.o + 0x00000200 0x40 THUMB Debug/../../obj/uart.o .debug_aranges - 0x00000230 0x70 THUMB Debug/../../obj/flash.o + 0x00000240 0x88 THUMB Debug/../../obj/flash.o .debug_aranges - 0x000002a0 0x20 THUMB Debug/../../obj/assert.o + 0x000002c8 0x20 THUMB Debug/../../obj/assert.o .debug_aranges - 0x000002c0 0x28 THUMB Debug/../../obj/backdoor.o + 0x000002e8 0x28 THUMB Debug/../../obj/backdoor.o .debug_aranges - 0x000002e8 0x28 THUMB Debug/../../obj/boot.o + 0x00000310 0x28 THUMB Debug/../../obj/boot.o .debug_aranges - 0x00000310 0x48 THUMB Debug/../../obj/com.o + 0x00000338 0x48 THUMB Debug/../../obj/com.o .debug_aranges - 0x00000358 0x28 THUMB Debug/../../obj/cop.o + 0x00000380 0x28 THUMB Debug/../../obj/cop.o .debug_aranges - 0x00000380 0x40 THUMB Debug/../../obj/xcp.o + 0x000003a8 0x48 THUMB Debug/../../obj/xcp.o .debug_aranges - 0x000003c0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + 0x000003f0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) -.debug_ranges 0x00000000 0x420 +.debug_ranges 0x00000000 0x360 .debug_ranges 0x00000000 0x10 THUMB Debug/../../obj/main.o .debug_ranges 0x00000010 0xb8 THUMB Debug/../../obj/core_cm3.o .debug_ranges 0x000000c8 0x18 THUMB Debug/../../obj/system_stm32f10x.o .debug_ranges 0x000000e0 0x10 THUMB Debug/../../obj/vectors.o .debug_ranges 0x000000f0 0x20 THUMB Debug/../../obj/cpu.o .debug_ranges 0x00000110 0x30 THUMB Debug/../../obj/nvm.o - .debug_ranges 0x00000140 0x48 THUMB Debug/../../obj/timer.o - .debug_ranges 0x00000188 0xb0 THUMB Debug/../../obj/uart.o - .debug_ranges 0x00000238 0x78 THUMB Debug/../../obj/flash.o - .debug_ranges 0x000002b0 0x10 THUMB Debug/../../obj/assert.o - .debug_ranges 0x000002c0 0x18 THUMB Debug/../../obj/backdoor.o - .debug_ranges 0x000002d8 0x18 THUMB Debug/../../obj/boot.o - .debug_ranges 0x000002f0 0x38 THUMB Debug/../../obj/com.o - .debug_ranges 0x00000328 0x18 THUMB Debug/../../obj/cop.o - .debug_ranges 0x00000340 0x90 THUMB Debug/../../obj/xcp.o - .debug_ranges 0x000003d0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) + .debug_ranges 0x00000140 0x30 THUMB Debug/../../obj/timer.o + .debug_ranges 0x00000170 0x30 THUMB Debug/../../obj/uart.o + .debug_ranges 0x000001a0 0xa8 THUMB Debug/../../obj/flash.o + .debug_ranges 0x00000248 0x10 THUMB Debug/../../obj/assert.o + .debug_ranges 0x00000258 0x18 THUMB Debug/../../obj/backdoor.o + .debug_ranges 0x00000270 0x18 THUMB Debug/../../obj/boot.o + .debug_ranges 0x00000288 0x38 THUMB Debug/../../obj/com.o + .debug_ranges 0x000002c0 0x18 THUMB Debug/../../obj/cop.o + .debug_ranges 0x000002d8 0x38 THUMB Debug/../../obj/xcp.o + .debug_ranges 0x00000310 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o) diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec index d027013b..ebaebde5 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec @@ -1,25 +1,25 @@ S02B0000443A2F7573722F6665617365722F736F6674776172652F4F70656E424C542F5461726765742F44657D -S3150800000068060020DB01000815040008150400082E -S31508000010150400081504000815040008150400084E -S31508000020150400081504000815040008150400083E -S31508000030150400081504000815040008150400082E -S31508000040150400081504000815040008150400081E -S31508000050150400081504000815040008150400080E -S3150800006015040008150400081504000815040008FE -S3150800007015040008150400081504000815040008EE -S3150800008015040008150400081504000815040008DE -S3150800009015040008150400081504000815040008CE -S315080000A015040008150400081504000815040008BE -S315080000B015040008150400081504000815040008AE -S315080000C0150400081504000815040008150400089E -S315080000D0150400081504000815040008150400088E -S315080000E0150400081504000815040008150400087E -S315080000F0150400081504000815040008150400086E -S31508000100150400081504000815040008150400085D -S31508000110150400081504000815040008150400084D -S31508000120150400081504000815040008150400083D -S31508000130150400081504000815040008150400082D -S31508000140150400081504000815040008150400081D +S315080000006C060020DB0100085904000859040008A2 +S31508000010590400085904000859040008590400083E +S31508000020590400085904000859040008590400082E +S31508000030590400085904000859040008590400081E +S31508000040590400085904000859040008590400080E +S3150800005059040008590400085904000859040008FE +S3150800006059040008590400085904000859040008EE +S3150800007059040008590400085904000859040008DE +S3150800008059040008590400085904000859040008CE +S3150800009059040008590400085904000859040008BE +S315080000A059040008590400085904000859040008AE +S315080000B0590400085904000859040008590400089E +S315080000C0590400085904000859040008590400088E +S315080000D0590400085904000859040008590400087E +S315080000E0590400085904000859040008590400086E +S315080000F0590400085904000859040008590400085E +S31508000100590400085904000859040008590400084D +S31508000110590400085904000859040008590400083D +S31508000120590400085904000859040008590400082D +S31508000130590400085904000859040008590400081D +S31508000140590400085904000859040008590400080D S3150800015072B64B484B4901604B498D464B484C4952 S315080001604C4A00F07BF84C484C494D4A00F076F86A S315080001704C484D494D4A00F071F84D484D494E4A94 @@ -28,7 +28,7 @@ S315080001904E494F4A00F062F84E484F49002200F097 S315080001A068F84E484E49091A082903DB00220260FE S315080001B0043001603F484049884205D0026804304F S315080001C003B4904703BCF7E700208646EC4600F0E8 -S315080001D0A1FC00200021434A904772B62A498D4661 +S315080001D0FDFD00200021434A904772B62A498D4604 S315080001E02A482B492B4A00F039F82B482B492C4A28 S315080001F000F034F82B482C492C4A00F02FF82C48EC S315080002002C492D4A00F02AF82C482D492D4A00F091 @@ -39,218 +39,294 @@ S315080002400268043003B4904703BCF7E700208646EB S31508000250EC4600200021234A9047FEE7884207D053 S31508000260521A05D0037801300B700131013AF9D1E1 S315080002707047884202D002700130FAE770470000E2 -S3150800028008ED00E00000000868060020CC0F000812 +S3150800028008ED00E0000000086C060020881400084D S315080002900000002000000020E8020008E80200082C -S315080002A0900D0008CC0F0008000000200000002078 -S315080002B0900D0008900D0008900D0008900D00089C -S315080002C0900D0008900D0008900D0008900D00088C -S315080002D0CC0F000800000020E8040020E8040020F5 -S30D080002E068050020E902000888 -S315080002E803B5002300930193444B1A6842F00102B0 -S315080002F81A605968424A0A405A601A6822F0847293 -S3150800030822F480321A601A6822F480221A605A681F -S3150800031822F4FE025A604FF41F029A601A6842F4E1 -S3150800032880321A6040F2DC52196801F400310191F2 -S31508000338009901310091019911B900999142F3D1B7 -S315080003482E4B1B68980303D42E486F2100F06CFBCC -S315080003582D4B1A6842F010021A601A6822F0030236 -S315080003681A601A6842F002021A60A3F580535A689E -S315080003785A605A6842F400525A605A6842F48062CF -S315080003885A605A6822F47C125A605A6842F4E8128B -S315080003985A601A6842F080721A601968174A890101 -S315080003A8FBD5536823F003035360536843F00203ED -S315080003B853605168114B01F00C010829F9D1DA6923 -S315080003C842F40032DA619A6942F005029A61A3F5A5 -S315080003D884331A6822F470621A601A6842F4306222 -S315080003E81A601A6822F470421A601A6842F480423F -S315080003F81A6000F049FB00F052FBFCE700100240C7 -S315080004080000FFF8900D00080020024001483C2132 -S3150800041800F00ABBF70D000800B500F027F830B160 -S31508000428044B4FF400521A60034B1B6898475DF853 -S3150800043804FB00BF08ED00E00420000870B50C4670 -S3150800044895B2064607E014F8013B013D06F8013B5C -S3150800045800F065FBADB2002DF5D170BDFFF7B9BE4A -S3150800046800F0ACB900F0B6B900F0DAB900F076BA1F -S3150800047800B500F09DFA18B15DF804EB00F0BABAB9 -S315080004885DF804FB054B064900221A6059600521E8 -S315080004989A601960034B1A80704700BF10E000E0A5 -S315080004A83F19010000000020014B00221A6070471E -S315080004B810E000E0044B1B68DB0303D5034B1A88DE -S315080004C801321A80704700BF10E000E000000020E3 -S315080004D800B5FFF7EFFF024B18885DF804FB00BF6D -S315080004E800000020084B00221A819A811A829A82F3 -S315080004F81A8340F271221A819A8992B242F40052FA -S3150800050842F00C029A817047004400402DE9F041F8 -S31508000518CEB2402E804603D91948882100F084FABD -S31508000528184C2388180648BFA68002D405E000F0B0 -S31508000538F6FA23881906FAD503E011488B2100F044 -S3150800054873FA104D00242F4614E000F0E8FA2A88BA -S3150800055818F80430120648BFAB8002D405E000F04C -S31508000568DEFA3B881B06FAD503E00548932100F016 -S315080005785BFA0134A3B2B342E7D3BDE8F08100BF02 -S31508000588890E00080044004070B5164C164B2278B0 -S3150800059862B9188810F0200022D09988134B1046A3 -S315080005A8197001232370124B1A7070BD1988104AE6 -S315080005B811F02001157810D00C499E884B195E70E9 -S315080005C86B1CDBB213700A789A4208D10131FFF71F -S315080005D835FF00232370012070BD084670BD002032 -S315080005E870BD00BF43000020004400400200002000 -S315080005F844000020024B1A6942F080021A617047CB -S315080006080020024070B50C4D0646002400F087FA13 -S315080006182B689E4209D36A689B189E4205D2064BE8 -S315080006280C2202FB0434207A70BD01340C350F2CD9 -S31508000638ECD1FF2070BD00BF100F00082DE9F0436C -S3150800064804460068FFF7DEFFFF283ED0214F224BFD -S315080006587B6003F188337B603423FB60FD6815F003 -S31508000668010502D0FFF7C6FF2FE03B69B94643F0FC -S3150800067801033B612A1DA6582368B2B205EB030895 -S31508000688EA5201E000F04BFAFB68DB07FAD4330CB0 -S31508000698A8F8023001E000F042FAD9F80C3013F055 -S315080006A80103F8D1D8F80020B24205D10435B5F5CA -S315080006B8007FDFD1012400E01C46064B1A6922F0A8 -S315080006C801021A61FFF796FF00E000242046BDE8FC -S315080006D8F08300BF0020024023016745114B30B55F -S315080006E8984204460D4606D00F4A914205D0FFF7B0 -S315080006F8A5FF18B910E00D4C00E01C46EB050DD116 -S315080007082368AB420BD0204640F8045B29464FF4D1 -S315080007180072FFF793FE02E0044600E00024204634 -S3150800072830BD00BF48000020002000084C02002009 -S315080007382DE9F0431FFA83F8036821F4FE7701339D -S3150800074804460D46164627F0030706D140F8047BEB -S3150800075839464FF40072FFF771FE2368BB4205D08D -S3150800076820463946FFF7BAFF044610B3236840F215 -S31508000778FF19ED1A0435651907F5007700F0CFF962 -S31508000788231DEB1A4B4506D920463946FFF7A6FF1F -S31508000798044680B1051D16F8013B08F1FF381FFA13 -S315080007A888F805F8013BB8F1000FE7D10120BDE844 -S315080007B8F083BDE8F083BDE8F0830000034A4FF0F4 -S315080007C8FF331360024A1360704700BF4C020020CB -S315080007D84800002070B504460E461546FFF712FF76 -S315080007E8FF2815D0601E8019FFF70CFFFF280FD0C9 -S315080007F824F4FE73074A23F0030393420CBF064802 -S315080008080648B3B221462A46BDE87040FFF790BFAE -S31508000818002070BD00200008480000204C02002077 -S315080008282DE9F0410E460446FFF7ECFE013C054665 -S31508000838A019FFF7E7FEA5F1FF014C4244EB0104B6 -S31508000848FF2808BF44F001040646002C7DD18542DE -S3150800085878D8002D73D00F2874D83D4B3D4A5A6076 -S3150800086802F188325A603422DA60DA6812F0010234 -S3150800087802D0FFF7BFFE65E01969374F41F002015C -S315080008881961B846144600F04AF998F80830AB4298 -S3150800089804D10C235C43304B1C5906E001340F2C59 -S315080008A808F10C08EFD14FF0FF34DFF8AC800025CB -S315080008B800F035F998F80830B34205D10C235D43A2 -S315080008C8254B53F8058006E001350F2D08F10C086D -S315080008D8EED14FF0FF38002500F021F93B7AB342F4 -S315080008E805D11D4B0C2202FB05356B6804E0013562 -S315080008F80C370F2DF0D10023C4EB08089844C8F329 -S315080009088F280026124D0EE06C612B6943F04003D0 -S315080009182B6101E000F003F9EB68DA07FAD401362F -S31508000928B6B204F580644645094BEDD31A6922F038 -S3150800093802021A61FFF75EFE0120BDE8F08128462B -S31508000948BDE8F0812046BDE8F0810020BDE8F081C9 -S315080009580020024023016745100F00080D4B186850 -S31508000968043B1B68C0180C4B1B68C0180B4B1B684C -S31508000978C0180B4B1B68C0180A4B1B68C0180A4BD3 -S315080009881B68C018094B1B68C018D0F1010038BF8E -S315080009980020704704200008082000080C200008DA -S315080009A81020000814200008182000085021000804 -S315080009B80E4B11B55A689C68A418DA68A4181A69FF -S315080009C8A4185A69A4189A69DB69A418E418644231 -S315080009D80094FFF7C3FF844205D004216A460448F9 -S315080009E8FFF7F8FE00E0012018BD00BF4800002008 -S315080009F8502100080A4800B50368013302D0FFF7FA -S31508000A081DFE58B107480368013306D0FFF716FEDE -S31508000A18003018BF01205DF804FB01205DF804FBCF -S31508000A28480000204C020020034B00B51860034B11 -S31508000A38196000F074F8FCE75004002054040020FC -S31508000A4810B500F069F801280FD0084C2378012B57 -S31508000A580BD1FFF73DFD312807D900232370FFF78F -S31508000A6823FDBDE81040FFF7D7BC10BD5804002089 -S31508000A78044B012200B51A70FFF704FD5DF804EB74 -S31508000A88FFF7DEBF5804002000B500F047F8FFF767 -S31508000A98EFFFFFF7E5FC5DF804EB00F009B800B5D1 -S31508000AA800F03DF800F01AF85DF804EBFFF7C8BF48 -S31508000AB801B5FF238DF8003000238DF8013000F0CA -S31508000AC839F8FFF70FFD044B1B78012B02D168464E -S31508000AD800F04EF808BD00BF5904002000B50648C6 -S31508000AE8FFF752FD012804D103485DF804EB00F02E -S31508000AF83FB85DF804FB00BF5A04002000B5C9B228 -S31508000B08FFF704FD5DF804EB00F02AB8014B012253 -S31508000B181A7070475904002000F01AB870477047D1 -S31508000B28034BFE22DA7002221871A3F84420704794 -S31508000B389C040020054B00221A709A6483F8432007 -S31508000B48A3F844209A705A70704700BF9C04002086 -S31508000B58024B1878003018BF012070479C04002003 -S31508000B68024B002283F84320704700BF9C040020EC -S31508000B7870B503780546FF2B784C0FD1E370102320 -S31508000B88012200212371402322706272A2726170C9 -S31508000B986171A371E371217208227DE02678012E1E -S31508000BA840F0DB80F32B40D011D8CF2B00F0B7806C -S31508000BB805D8C92B77D0CC2B40F0BA80B6E0D12B14 -S31508000BC800F0A7807CD3D22B40F0B28093E0FA2BB2 -S31508000BD847D006D8F52B0CD011D3F62B40F0A880B1 -S31508000BE81FE0FD2B4ED0FE2B59D0FC2B40F0A080E1 -S31508000BF846E042783F2A66D8201DA16C06E043786D -S31508000C083F2B60D84168A1644278201DFFF716FC7F -S31508000C18FF23E3706A78A36CD318A3646B7801334F -S31508000C2874E0FF23E370436848E0FF23E37000237A -S31508000C38A06C69681A4603E01C5C01331219D2B223 -S31508000C488B42F9D1454B0021DA71120E9A720122AC -S31508000C581A7108221972597259719971A3F84420A0 -S31508000C6869E0FF23E3703E4B0722A3640023237140 -S31508000C786371A37123726372A372E271082345E054 -S31508000C88002056E0FF236278E3700023627123711F -S31508000C98A371E37123720622A4F844204BE00023CB -S31508000CA8237063703DE0421C3F21A06CFFF7DAFB16 -S31508000CB800283BD0FF23E370A36C3F33A36432E0DC -S31508000CC843783E2B01D9222033E0FF23E370A4F8AA -S31508000CD84460417821B9FFF7CBFB00282BD125E0E2 -S31508000CE81E4C821CA06CFFF7BDFBF8B16A78A36C92 -S31508000CF8D318A3641FE0FF23E3704022002323715F -S31508000D086371E37123726372A2710723A4F84430EE -S31508000D1811E0A06C6968FFF7A7FB10B906E0FFF7B2 -S31508000D289DFBFF23E370A4F8446004E0312000E04B -S31508000D382020FFF7F5FE094C94F84330012B02D121 -S31508000D481020FFF7EDFEB4F844100648012384F88E -S31508000D584330BDE87040FFF7D1BE70BD9C04002043 -S31508000D68C40F00089F04002000B503B400F008F873 -S31508000D7803BC02B4694609BE00F004F801BC00BD0C -S30D08000D88704700BF704700BF69 -S31508000D90443A2F7573722F6665617365722F736F88 -S31508000DA06674776172652F4F70656E424C542F5486 -S31508000DB061726765742F44656D6F2F41524D434DBF -S31508000DC0335F53544D33325F4F6C696D65785F53AB -S31508000DD0544D3332503130335F43726F7373776FCC -S31508000DE0726B732F426F6F742F6964652F2E2E2FC7 -S31508000DF06D61696E2E6300443A2F7573722F6665AE -S31508000E00617365722F736F6674776172652F4F70A1 -S31508000E10656E424C542F5461726765742F44656D34 -S31508000E206F2F41524D434D335F53544D33325F4F0D -S31508000E306C696D65785F53544D3332503130335F8A -S31508000E4043726F7373776F726B732F426F6F742F62 -S31508000E506964652F2E2E2F2E2E2F2E2E2F2E2E2FF7 -S31508000E60536F757263652F41524D434D335F53542B -S31508000E704D33322F43726F7373776F726B732F769E -S31508000E806563746F72732E6300443A2F7573722FFD -S31508000E906665617365722F736F6674776172652F05 -S31508000EA04F70656E424C542F5461726765742F44B7 -S31508000EB0656D6F2F41524D434D335F53544D333259 -S31508000EC05F4F6C696D65785F53544D3332503130DE -S31508000ED0335F43726F7373776F726B732F426F6FE3 -S31508000EE0742F6964652F2E2E2F2E2E2F2E2E2F2E21 -S31508000EF02E2F536F757263652F41524D434D335FE5 -S31508000F0053544D33322F756172742E6300000000FE -S31508000F100020000800200000010000000040000832 -S31508000F200020000002000000006000080020000009 -S31508000F3003000000008000080020000004000000F4 -S31508000F4000A00008002000000500000000C00008FE -S31508000F50002000000600000000E000080020000055 -S31508000F60070000000000010800200000080000003B -S31508000F7000200108002000000900000000400108C8 -S31508000F80002000000A0000000060010800200000A0 -S31508000F900B00000000800108002000000C00000083 -S31508000FA000A00108002000000D00000000C0010894 -S31508000FB0002000000E00000000E0010800200000EC -S31108000FC00F0000004F70656E424C540094 +S315080002A04C120008881400080000002000000020F6 +S315080002B04C1200084C1200084C1200084C12000898 +S315080002C04C1200084C1200084C1200084C12000888 +S315080002D08814000800000020EC040020EC0400202C +S30D080002E06C050020E902000884 +S315080002E800B582B04FF00003009301934FF4805392 +S315080002F8C4F202031A6842F001021A6059684FF0FC +S315080003080002CFF6FF020A405A601A6822F0847281 +S3150800031822F480321A601A6822F480221A605A680F +S3150800032822F4FE025A604FF41F029A601A6842F4D1 +S3150800033880321A604FF48053C4F2020340F2DC524A +S31508000348196801F400310191009901F10101009140 +S31508000358019911B900999142F2D14FF48053C4F228 +S3150800036802031B6813F4003F04D138484FF06F01A5 +S3150800037800F0A4FC4FF40053C4F202031A6842F0D2 +S3150800038810021A601A6822F003021A601A6842F004 +S3150800039802021A604FF48053C4F202035A685A607C +S315080003A85A6842F400525A605A6842F480625A609F +S315080003B85A6822F47C125A605A6842F4E8125A605B +S315080003C81A6842F080721A604FF48053C4F2020326 +S315080003D81A6812F0007FFBD04FF48053C4F2020368 +S315080003E85A6822F003025A605A6842F002025A60B2 +S315080003F84FF48053C4F202035A6802F00C02082A22 +S31508000408FAD14FF48053C4F20203DA6942F400328F +S31508000418DA619A6942F005029A614FF40063C4F2F8 +S3150800042801031A6822F470621A601A6842F4306284 +S315080004381A601A6822F470421A601A6842F48042EE +S315080004481A6000F075FC00F07FFCFCE74C12000807 +S3150800045800B541F2B420C0F600004FF03C0100F0A8 +S315080004682DFC5DF804FB00BF00B500F03DF860B14F +S315080004784EF60853CEF200034FF400521A6042F2C1 +S315080004880403C0F600031B6898475DF804FB00BF21 +S3150800049870B50E4692B272B1044600F1010002F137 +S315080004A8FF3292B2851816F8013B04F8013B00F0B2 +S315080004B899FCAC42F7D170BD00B5FFF78AFE5DF826 +S315080004C804FB00BF00B500F095FA5DF804FB00BF11 +S315080004D800B500F09DFA5DF804FB00BF00B500F012 +S315080004E8C3FA5DF804FB00BF00B500F05FFB5DF8D2 +S315080004F804FB00BF00B500F08DFB18B100F0B2FB95 +S315080005085DF804FB4FF000005DF804FB4EF210039B +S31508000518CEF200034FF000021A6070474EF210033D +S31508000528CEF200031B6813F4803F1FBF40F2000396 +S31508000538C2F200031A88013218BF1A80704700BF32 +S3150800054840F20003C2F200031880704700B5FFF7AF +S31508000558DDFF4EF21003CEF2000341F63F12C0F259 +S3150800056801025A604FF0000098604FF005021A60C1 +S31508000578FFF7E6FF5DF804FB00B5FFF7CFFF40F28B +S315080005880003C2F2000318885DF804FB4FF4884399 +S31508000598C4F200031B8813F0200F1FBF4FF48843CB +S315080005A8C4F200039B88037014BF0120002070471B +S315080005B810B5C0B24FF48843C4F200031B8813F081 +S315080005C8800F15D04FF48843C4F2000398801B881F +S315080005D813F0800F0FD14FF48844C4F2000400F0DA +S315080005E801FC238813F0800FF9D04FF0010010BDE5 +S315080005F84FF0000010BD4FF0010010BD4FF48843BE +S31508000608C4F200034FF000021A819A811A829A826C +S315080006181A8340F271221A819A8992B242F40052D8 +S3150800062842F00C029A8170472DE9F0410546CCB292 +S31508000638402C07D941F24830C0F600004FF088012F +S3150800064800F03CFB2046FFF7B3FF012807D041F22C +S315080006584830C0F600004FF08B0100F02FFB264605 +S31508000668BCB14FF0000441F24837C0F600074FF016 +S31508000678930800F0B7FB285DFFF79AFF012803D017 +S315080006883846414600F01AFB04F10104A3B2B34206 +S31508000698EFD3BDE8F08100BF30B5054640F2480300 +S315080006A8C2F200031B78B3B940F20400C2F2000094 +S315080006B8FFF76CFF01283BD140F24803C2F200035A +S315080006C84FF001021A7040F24903C2F200034FF0D4 +S315080006D80000187030BD40F24903C2F200031C78C6 +S315080006E840F20403C2F2000304F101001818FFF7E8 +S315080006F84DFF01281FD104F10104E2B240F2490373 +S31508000708C2F200031A7040F20403C2F200031B780F +S31508000718934213D128460B49FFF7BAFE40F248031D +S31508000728C2F200034FF000021A704FF0010030BD04 +S315080007384FF0000030BD4FF0000030BD4FF000000C +S3150800074830BD00BF050000204FF40053C4F2020371 +S3150800075840F22312C4F267525A6048F6AB12CCF636 +S31508000768EF525A604FF03402DA6070474FF400537C +S31508000778C4F202031A6942F080021A61704700BF80 +S3150800078870B5064641F2CC35C0F600054FF00004B0 +S3150800079800F028FB2B68B3420DD869685B189E429F +S315080007A809D241F2CC33C0F6000304EB440203EB4A +S315080007B88203187A70BD04F1010405F10C050F2CA3 +S315080007C8E6D14FF0FF0070BD2DE9F04107460068F5 +S315080007D8FFF7D6FFFF2808BF002454D0FFF7B4FF59 +S315080007E84FF40053C4F20203DB6813F0010F04D078 +S315080007F8FFF7BCFF4FF0000445E04FF40053C4F27E +S3150800080802031A6942F001021A614FF000054FF413 +S315080008180054C4F202043B6805EB030805F1040218 +S31508000828BE58B2B2EA52E36813F0010F05D000F0D9 +S31508000838D9FAE36813F0010FF9D14FEA1643A8F875 +S315080008480230E36813F0010F05D000F0CBFAE3682D +S3150800085813F0010FF9D1D8F80030B34207D105F1E2 +S315080008680405B5F5007FD6D14FF0010401E04FF035 +S3150800087800044FF40053C4F202031A6922F0010275 +S315080008881A61FFF773FF2046BDE8F08170B5C6B256 +S3150800089841F2CC35C0F600054FF0000400F0A2FA84 +S315080008A82B7AB34208D141F2CC33C0F6000304EBE5 +S315080008B8440253F8220070BD04F1010405F10C0541 +S315080008C80F2CEBD14FF0FF3070BD00BF00B54FEAD3 +S315080008D8C1534FEAD35363B903688B420DD040F826 +S315080008E8041B4FF40072FFF7D3FD4FF001005DF8C3 +S315080008F804FB4FF000005DF804FB4FF001005DF8BB +S3150800090804FB00BF30B504460D4640F24C03C2F25C +S315080009180003984209D04FF40053C0F600039942E1 +S3150800092808D0FFF751FF48B910E040F25024C2F248 +S31508000938000403E040F24C04C2F2000420462946AB +S31508000948FFF7C4FF002808BF002401E04FF00004A1 +S31508000958204630BD2DE9F04305460C4616469FB29B +S315080009684FEA51294FEA49290368B3F1FF3F04D1F1 +S315080009784946FFF7ABFF002830D02B684B4505D012 +S3150800098828464946FFF7BEFF054658B32B68E41ABA +S3150800099804F104042C1906F1010807F1FF37BFB260 +S315080009A8B84440F2FF1709F5007900F01BFA05F17B +S315080009B80403E31ABB4207D928464946FFF7A2FFAC +S315080009C8054698B100F1040416F8013B04F8013B02 +S315080009D84645EAD14FF00100BDE8F0834FF0000024 +S315080009E8BDE8F0834FF00000BDE8F0834FF0000043 +S315080009F8BDE8F08340F25023C2F200034FF0FF32FD +S31508000A081A6040F24C03C2F200031A60704700BF2E +S31508000A1870B504460D461646FFF7B2FEFF281DD0E8 +S31508000A2804F1FF304019FFF7ABFEFF2819D04FEA4B +S31508000A3854224FF40053C0F60003B3EB422F07BF06 +S31508000A4840F24C00C2F2000040F25020C2F2000008 +S31508000A58ABB221463246FFF77DFF70BD4FF0000066 +S31508000A6870BD4FF0000070BD2DE9F04104460E46F2 +S31508000A78FFF786FE054604F1FF34A019FFF780FE46 +S31508000A8804460646FF2814BF00230123FF2D08BF86 +S31508000A9843F00103002B40F08480854275D8002D69 +S31508000AA877D00F2879D8FFF74FFE4FF40053C4F2D2 +S31508000AB80203DB6813F0010F05D0FFF757FE4FF066 +S31508000AC80000BDE8F0814FF40053C4F202031A6926 +S31508000AD842F002021A612846FFF7D8FE0746204662 +S31508000AE8FFF7D4FE804641F2CC35C0F600054FF034 +S31508000AF8000400F077F92B7AB34209D141F2CC33D6 +S31508000B08C0F6000304EB440203EB82035B6807E0C4 +S31508000B1804F1010405F10C050F2CEAD14FF0000386 +S31508000B28C7EB08084344C3F38F2303B303F1FF3322 +S31508000B389EB206F101064FEA86264FF000054FF4E5 +S31508000B480054C4F20204EB196361236943F04003B5 +S31508000B582361E36813F0010F05D000F043F9E36851 +S31508000B6813F0010FF9D105F58065B542EBD14FF4BD +S31508000B780053C4F202031A6922F002021A61FFF747 +S31508000B88F5FD4FF00100BDE8F0814FF00000BDE823 +S31508000B98F0814FF00000BDE8F0814FF00000BDE895 +S31508000BA8F0814FF00000BDE8F08100BF42F2040270 +S31508000BB8C0F600024FF40053C0F6000310681B681D +S31508000BC8C01842F20803C0F600031B68C01842F2B0 +S31508000BD80C03C0F600031B68C01842F21003C0F6DF +S31508000BE800031B68C01842F21403C0F600031B680A +S31508000BF8C01842F21803C0F600031B68C01842F270 +S31508000C085013C0F600031B68C018D0F1010038BF9E +S31508000C180020704710B581B040F24C03C2F20003B9 +S31508000C289C685A68A418DA68A4181A69A4185A692C +S31508000C38A4189A69A418DB69E418C4F10004009496 +S31508000C48FFF7B4FF844208BF012008D042F25010CB +S31508000C58C0F600004FF004016A46FFF7D9FE01B056 +S31508000C6810BD00BF00B540F24C03C2F200031B6872 +S31508000C78B3F1FF3F06D040F24C00C2F20000FFF77E +S31508000C88A3FD90B140F25023C2F200031B68B3F1EA +S31508000C98FF3F0ED040F25020C2F20000FFF794FD45 +S31508000CA8003018BF01205DF804FB4FF000005DF81E +S31508000CB804FB4FF001005DF804FB00BF00B540F2E5 +S31508000CC85443C2F20003186040F25843C2F20003C4 +S31508000CD8196000F087F8FCE700B500F07BF80128F2 +S31508000CE815D040F25C43C2F200031B78012B0ED1E3 +S31508000CF8FFF742FC31280AD940F25C43C2F20003E6 +S31508000D084FF000021A70FFF701FCFFF7ADFB5DF81C +S31508000D1804FB00BF00B540F25C43C2F200034FF083 +S31508000D2801021A70FFF712FCFFF7D6FF5DF804FBFD +S31508000D3800B500F055F8FFF7EDFFFFF7C3FB00F025 +S31508000D480DF85DF804FB00BF00B500F04BF800F09D +S31508000D581FF8FFF7C1FF5DF804FB00BF00B581B0B7 +S31508000D684FF0FF038DF800304FF000038DF801307F +S31508000D7800F050F8FFF742FC40F25D43C2F2000368 +S31508000D881B78012B02D1684600F068F801B000BD4F +S31508000D9800B540F26040C2F20000FFF77DFC01286A +S31508000DA805D140F26040C2F2000000F057F85DF83D +S31508000DB804FB00BF00B5C9B2FFF736FC00F044F8DB +S31508000DC85DF804FB40F25D43C2F200034FF00102EE +S31508000DD81A70704700B500F02DF85DF804FB00BFDF +S31508000DE8704700BF704700BF40F2A043C2F2000335 +S31508000DF84FF000025A70704740F2A043C2F200034F +S31508000E084FF0FE02DA7018714FF00202A3F8442078 +S31508000E18704700BF40F2A043C2F200034FF0000239 +S31508000E281A709A6483F84320A3F844209A705A7073 +S31508000E38704700BF40F2A043C2F20003187800309A +S31508000E4818BF0120704700BF40F2A043C2F2000352 +S31508000E584FF0000283F84320704700BF30B50446B8 +S31508000E680278FF2A1DD1FFF7BFFF40F2A043C2F25E +S31508000E7800034FF001021A704FF0FF01D9704FF0C6 +S31508000E88100119714FF0000159714FF0400098711F +S31508000E98D87119725A729A724FF00802A3F8442048 +S31508000EA8A4E140F2A043C2F200031B78012B40F0EC +S31508000EB8B781A2F1C902352A00F29481DFE812F057 +S31508000EC8F800920192018D01920192017F011901A0 +S31508000ED865014F01920192019201920192019201D4 +S31508000EE89201920192019201920192019201920154 +S31508000EF89201920192019201920192019201920144 +S31508000F089201920192019201920192019201920133 +S31508000F1892019201820054003600740092019201EF +S31508000F289201B2009201CE00D300E70042783F2A28 +S31508000F3804D94FF02200FFF75FFF57E140F2A045BA +S31508000F48C2F2000505F10400A96CFFF7A1FA4FF0F3 +S31508000F58FF03EB706278AB6CD318AB64637803F164 +S31508000F680103A5F8443041E143783F2B04D94FF0F3 +S31508000F782200FFF741FF39E1416840F2A045C2F275 +S31508000F880005A96405F104006278FFF781FA4FF0B5 +S31508000F98FF03EB706278AB6CD318AB64637803F124 +S31508000FA80103A5F8443021E140F2A043C2F2000348 +S31508000FB84FF0FF02DA7042689A644FF00102A3F80C +S31508000FC8442013E140F2A043C2F200034FF0FF02A7 +S31508000FD8DA70996C43684FF000023BB14FF0000293 +S31508000FE811F8010B1218D2B2013BF9D140F2A0430D +S31508000FF8C2F200034FF00001DA714FEA1220C0B2BC +S3150800100818724FEA1240C0B258724FEA12629A72C0 +S315080010184FF001021A71597199714FF00802A3F835 +S315080010284420E3E040F2A043C2F200034FF0FF0277 +S31508001038DA7041F28042C0F600029A644FF0000264 +S315080010481A715A719A714FF00701D9711A725A7240 +S315080010589A724FF00802A3F84420C7E04FF0000040 +S31508001068FFF7CAFEC2E040F2A043C2F200034FF0FF +S31508001078FF02DA704FF000021A71597859719A719D +S31508001088DA711A724FF00602A3F84420AEE040F26D +S31508001098A044C2F200044FF000032370FFF7A4FE31 +S315080010A84FF0FF03E3704FF00103A4F844309DE0C6 +S315080010B840F2A043C2F20003986C04F101024FF013 +S315080010C83F01FFF705FA20B94FF03100FFF794FE04 +S315080010D88CE040F2A043C2F200034FF0FF02DA7038 +S315080010E89A6C02F13F029A644FF00102A3F8442071 +S315080010F87CE043783E2B04D94FF02200FFF77CFEAC +S3150800110874E040F2A043C2F200034FF0FF02DA701F +S315080011184FF00102A3F84420417841B9FFF7EAF9EC +S31508001128002863D14FF03100FFF766FE5EE040F213 +S31508001138A043C2F20003986C04F10202FFF7C8F94B +S3150800114820B94FF03100FFF757FE4FE040F2A043B1 +S31508001158C2F2000361789A6C8A189A6446E040F2EB +S31508001168A043C2F200034FF0FF02DA704FF0000204 +S315080011781A715A714FF040019971DA711A725A72D6 +S315080011884FF00702A3F8442030E040F2A043C2F229 +S315080011980003986C6168FFF7A1F920B94FF0310090 +S315080011A8FFF72AFE22E040F2A043C2F200034FF0FE +S315080011B8FF02DA704FF00102A3F8442016E0FFF7A1 +S315080011C87BF940F2A043C2F200034FF0FF02DA703F +S315080011D84FF00102A3F8442008E04FF03100FFF76A +S315080011E80BFE03E04FF02000FFF706FE40F2A0438F +S315080011F8C2F2000393F84330012B03D14FF01000D5 +S31508001208FFF7FAFD40F2A043C2F200034FF00102CD +S3150800121883F8432003F10300B3F84410FFF7CAFD27 +S3150800122830BD00BF00B503B400F008F803BC02B42B +S31508001238694609BE00F004F801BC00BD704700BF46 +S30908001248704700BF1E +S3150800124C443A2F7573722F6665617365722F736FC7 +S3150800125C6674776172652F4F70656E424C542F54C5 +S3150800126C61726765742F44656D6F2F41524D434DFE +S3150800127C335F53544D33325F4F6C696D65785F53EA +S3150800128C544D3332503130335F43726F7373776F0B +S3150800129C726B732F426F6F742F6964652F2E2E2F06 +S315080012AC6D61696E2E630000443A2F7573722F6652 +S315080012BC65617365722F736F6674776172652F4FEC +S315080012CC70656E424C542F5461726765742F446571 +S315080012DC6D6F2F41524D434D335F53544D33325F2F +S315080012EC4F6C696D65785F53544D333250313033DA +S315080012FC5F43726F7373776F726B732F426F6F7472 +S3150800130C2F6964652F2E2E2F2E2E2F2E2E2F2E2E36 +S3150800131C2F536F757263652F41524D434D335F538F +S3150800132C544D33322F43726F7373776F726B732FFF +S3150800133C766563746F72732E63000000443A2F75DA +S3150800134C73722F6665617365722F736F6674776136 +S3150800135C72652F4F70656E424C542F5461726765D7 +S3150800136C742F44656D6F2F41524D434D335F535463 +S3150800137C4D33325F4F6C696D65785F53544D33321C +S3150800138C503130335F43726F7373776F726B732F91 +S3150800139C426F6F742F6964652F2E2E2F2E2E2F2ECB +S315080013AC2E2F2E2E2F536F757263652F41524D4378 +S315080013BC4D335F53544D33322F756172742E63005F +S315080013CC0020000800200000010000000040000872 +S315080013DC0020000002000000006000080020000049 +S315080013EC0300000000800008002000000400000034 +S315080013FC00A00008002000000500000000C000083E +S3150800140C002000000600000000E000080020000094 +S3150800141C070000000000010800200000080000007A +S3150800142C0020010800200000090000000040010807 +S3150800143C002000000A0000000060010800200000DF +S3150800144C0B00000000800108002000000C000000C2 +S3150800145C00A00108002000000D00000000C00108D3 +S3150800146C002000000E00000000E00108002000002B +S3110800147C0F0000004F70656E424C5400D3 S705080001DB16 diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c index 5b31c733..85f88c6e 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c @@ -97,20 +97,20 @@ void NvmInitHook(void) ** PARAMETER: addr start address ** len length in bytes ** data pointer to the data buffer. -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the write +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver write ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't ** been written yet. ** ** ****************************************************************************************/ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) { - return BTL_NVM_NOT_IN_RANGE; + return BLT_NVM_NOT_IN_RANGE; } /*** end of NvmWriteHook ***/ @@ -118,19 +118,19 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) ** NAME: NvmEraseHook ** PARAMETER: addr start address ** len length in bytes -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the erase +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver erase ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory ** hasn't been erased yet. ** ****************************************************************************************/ -blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) +blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) { - return BTL_NVM_NOT_IN_RANGE; + return BLT_NVM_NOT_IN_RANGE; } /*** end of NvmEraseHook ***/ diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp index 4da11841..014e9b76 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp @@ -1,7 +1,7 @@ - + diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs index 4239ffbf..18ba1cfe 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs @@ -60,7 +60,7 @@ - + - + diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf index 96038d70..f8e0bc03 100644 Binary files a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf differ diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map index f15854ba..d0f4310f 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map @@ -7,42 +7,42 @@ start address 0x08000000 Program Header: LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15 - filesz 0x00000f87 memsz 0x00000f87 flags r-x - LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08000f87 align 2**15 + filesz 0x000014c8 memsz 0x000014c8 flags r-x + LOAD off 0x00010000 vaddr 0x20000000 paddr 0x080014c8 align 2**15 filesz 0x00000014 memsz 0x00000600 flags rw- private flags = 5000002: [Version5 EABI] [has entry point] Sections: Idx Name Size VMA LMA File off Algn - 0 .text 00000f87 08000000 08000000 00008000 2**2 + 0 .text 000014c8 08000000 08000000 00008000 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000014 20000000 08000f87 00010000 2**2 + 1 .data 00000014 20000000 080014c8 00010000 2**2 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 000005ec 20000014 08000f9b 00010014 2**2 + 2 .bss 000005ec 20000014 080014dc 00010014 2**2 ALLOC - 3 .debug_abbrev 00000ed3 00000000 00000000 00010014 2**0 + 3 .debug_abbrev 00000e79 00000000 00000000 00010014 2**0 CONTENTS, READONLY, DEBUGGING - 4 .debug_info 000026dd 00000000 00000000 00010ee7 2**0 + 4 .debug_info 0000273b 00000000 00000000 00010e8d 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_line 00001045 00000000 00000000 000135c4 2**0 + 5 .debug_line 00001000 00000000 00000000 000135c8 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubtypes 00000471 00000000 00000000 00014609 2**0 + 6 .debug_pubtypes 00000471 00000000 00000000 000145c8 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_str 00000cfa 00000000 00000000 00014a7a 2**0 + 7 .debug_str 00000cfa 00000000 00000000 00014a39 2**0 CONTENTS, READONLY, DEBUGGING - 8 .comment 0000002a 00000000 00000000 00015774 2**0 + 8 .comment 0000002a 00000000 00000000 00015733 2**0 CONTENTS, READONLY - 9 .ARM.attributes 00000031 00000000 00000000 0001579e 2**0 + 9 .ARM.attributes 00000031 00000000 00000000 0001575d 2**0 CONTENTS, READONLY - 10 .debug_loc 00000f72 00000000 00000000 000157cf 2**0 + 10 .debug_loc 00001163 00000000 00000000 0001578e 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_pubnames 00000593 00000000 00000000 00016741 2**0 + 11 .debug_pubnames 00000593 00000000 00000000 000168f1 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_aranges 000003f8 00000000 00000000 00016cd4 2**0 + 12 .debug_aranges 000003f8 00000000 00000000 00016e84 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000328 00000000 00000000 000170cc 2**0 + 13 .debug_ranges 000002f8 00000000 00000000 0001727c 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_frame 000007c0 00000000 00000000 000173f4 2**2 + 14 .debug_frame 0000080c 00000000 00000000 00017574 2**2 CONTENTS, READONLY, DEBUGGING SYMBOL TABLE: 08000000 l d .text 00000000 .text @@ -62,8 +62,8 @@ SYMBOL TABLE: 00000000 l d .debug_frame 00000000 .debug_frame 00000000 l df *ABS* 00000000 vectors.c 00000000 l df *ABS* 00000000 cstart.c -0800017a l F .text 00000000 zero_loop2 -08000e52 l F .text 00000000 zero_loop +0800019e l F .text 00000000 zero_loop2 +0800139c l F .text 00000000 zero_loop 00000000 l df *ABS* 00000000 hooks.c 00000000 l df *ABS* 00000000 main.c 00000000 l df *ABS* 00000000 core_cm3.c @@ -71,11 +71,11 @@ SYMBOL TABLE: 00000000 l df *ABS* 00000000 boot.c 00000000 l df *ABS* 00000000 com.c 20000014 l O .bss 00000001 comEntryStateConnect -20000015 l O .bss 00000040 xcpCtoReqPacket.1371 +20000018 l O .bss 00000040 xcpCtoReqPacket.1371 00000000 l df *ABS* 00000000 xcp.c -0800056c l F .text 0000000c XcpProtectResources -08000578 l F .text 00000014 XcpSetCtoError -08000e7b l O .text 00000008 xcpStationId +0800069c l F .text 00000010 XcpProtectResources +080006ac l F .text 0000001a XcpSetCtoError +080013bc l O .text 00000008 xcpStationId 20000058 l O .bss 0000004c xcpInfo 00000000 l df *ABS* 00000000 backdoor.c 200000a4 l O .bss 00000001 backdoorOpen @@ -86,103 +86,103 @@ SYMBOL TABLE: 00000000 l df *ABS* 00000000 cpu.c 00000000 l df *ABS* 00000000 can.c 00000000 l df *ABS* 00000000 uart.c -08000858 l F .text 0000001c UartReceiveByte -08000874 l F .text 0000002c UartTransmitByte +08000b88 l F .text 00000024 UartReceiveByte +08000bac l F .text 0000004a UartTransmitByte 200000b0 l O .bss 00000041 xcpCtoReqPacket.1392 -200000f1 l O .bss 00000001 xcpCtoRxLength.1393 -200000f2 l O .bss 00000001 xcpCtoRxInProgress.1394 +200000f4 l O .bss 00000001 xcpCtoRxLength.1393 +200000f5 l O .bss 00000001 xcpCtoRxInProgress.1394 00000000 l df *ABS* 00000000 nvm.c 00000000 l df *ABS* 00000000 timer.c -200000f4 l O .bss 00000002 millisecond_counter +200000f6 l O .bss 00000002 millisecond_counter 00000000 l df *ABS* 00000000 flash.c -08000a0c l F .text 0000001c FlashUnlock -08000a28 l F .text 00000010 FlashLock -08000a38 l F .text 00000038 FlashGetSector -08000a70 l F .text 0000008c FlashWriteBlock -08000afc l F .text 00000030 FlashGetSectorBaseAddr -08000b2c l F .text 00000026 FlashInitBlock -08000b54 l F .text 00000044 FlashSwitchBlock -08000b98 l F .text 00000080 FlashAddToBlock -08000ea8 l O .text 000000b4 flashLayout +08000dec l F .text 00000024 FlashUnlock +08000e10 l F .text 00000012 FlashLock +08000e24 l F .text 0000004c FlashGetSector +08000e70 l F .text 000000c2 FlashWriteBlock +08000f34 l F .text 0000003e FlashGetSectorBaseAddr +08000f74 l F .text 00000030 FlashInitBlock +08000fa4 l F .text 00000050 FlashSwitchBlock +08000ff4 l F .text 0000009a FlashAddToBlock +080013e8 l O .text 000000b4 flashLayout 200000f8 l O .bss 00000204 bootBlockInfo 200002fc l O .bss 00000204 blockInfo -080004f8 g F .text 0000002c ComInit -08000c30 g F .text 0000004c FlashWrite -08000312 g F .text 00000006 __set_PRIMASK -080007fc g F .text 00000018 AssertFailure -08000e34 g F .text 00000038 reset_handler -080009b0 g F .text 0000001c TimerUpdate -080005b8 g F .text 00000010 XcpPacketTransmitted -08000524 g F .text 0000001c ComTask -08000550 g F .text 0000000c ComSetConnectEntryState -08000318 g F .text 00000006 __get_FAULTMASK -08000330 g F .text 00000004 __REV -080004d0 g F .text 00000016 BootInit -080007e0 g F .text 00000018 BackDoorInit -08000364 g F .text 00000006 __STREXW -08000352 g F .text 00000006 __LDREXW -080007fa g F .text 00000002 CopService -08000f87 g .text 00000000 _etext -080009a4 g F .text 0000000c TimerReset +08000614 g F .text 00000034 ComInit +080010ac g F .text 00000058 FlashWrite +08000374 g F .text 00000006 __set_PRIMASK +08000b1c g F .text 0000001c AssertFailure +08001358 g F .text 00000054 reset_handler +08000d7c g F .text 00000022 TimerUpdate +080006fc g F .text 00000012 XcpPacketTransmitted +08000648 g F .text 00000020 ComTask +08000678 g F .text 00000010 ComSetConnectEntryState +0800037c g F .text 00000006 __get_FAULTMASK +0800039c g F .text 00000004 __REV +080005f0 g F .text 00000014 BootInit +08000af8 g F .text 0000001a BackDoorInit +080003d8 g F .text 00000006 __STREXW +080003c0 g F .text 00000006 __LDREXW +08000b18 g F .text 00000002 CopService +080014c8 g .text 00000000 _etext +08000d6c g F .text 00000010 TimerReset 20000010 g O .data 00000004 SystemCoreClock -0800033c g F .text 00000006 __RBIT -080004e6 g F .text 00000012 BootTask -08000dac g F .text 00000048 FlashWriteChecksum -0800031e g F .text 00000006 __set_FAULTMASK -08000540 g F .text 00000010 ComTransmitPacket -08000324 g F .text 00000006 __get_CONTROL -080005a8 g F .text 00000010 XcpIsConnected -08000980 g F .text 00000004 NvmInit -08000c18 g F .text 00000018 FlashInit -080002e4 g F .text 00000008 __get_PSP +080003a8 g F .text 00000006 __RBIT +08000604 g F .text 00000010 BootTask +080012a0 g F .text 00000054 FlashWriteChecksum +08000384 g F .text 00000006 __set_FAULTMASK +08000668 g F .text 0000000e ComTransmitPacket +0800038c g F .text 00000006 __get_CONTROL +080006e8 g F .text 00000012 XcpIsConnected +08000d38 g F .text 00000008 NvmInit +08001090 g F .text 0000001a FlashInit +0800033c g F .text 00000008 __get_PSP 20000500 g .bss 00000000 _ebss -080002ec g F .text 00000006 __set_PSP +08000344 g F .text 00000006 __set_PSP 00000100 g *ABS* 00000000 __STACKSIZE__ -08000e28 g F .text 0000000c UnusedISR -08000342 g F .text 00000008 __LDREXB -080008a0 g F .text 00000028 UartInit -08000988 g F .text 00000004 NvmErase +08001344 g F .text 00000014 UnusedISR +080003b0 g F .text 00000008 __LDREXB +08000bf8 g F .text 0000002c UartInit +08000d48 g F .text 00000008 NvmErase 20000014 g .bss 00000000 _bss -0800030c g F .text 00000006 __get_PRIMASK -080005c8 g F .text 000001e8 XcpPacketReceived +0800036c g F .text 00000006 __get_PRIMASK +08000710 g F .text 000003ae XcpPacketReceived 20000000 g O .data 00000010 AHBPrescTable -08000df4 g F .text 00000034 FlashDone -08000338 g F .text 00000004 __REVSH -08000150 g F .text 0000004c EntryFromProg -0800055c g F .text 0000000c ComIsConnectEntryState -0800058c g F .text 0000001c XcpInit -08000c7c g F .text 000000dc FlashErase -080001b0 g F .text 00000134 main -0800032a g F .text 00000006 __set_CONTROL -08000990 g F .text 00000012 NvmDone -080008c8 g F .text 00000050 UartTransmitPacket -0800098c g F .text 00000004 NvmVerifyChecksum -08000834 g F .text 00000020 CpuMemCopy -080009cc g F .text 0000000c TimerSet -080002f2 g F .text 00000008 __get_MSP -0800036c g F .text 000000fc SystemInit -08000918 g F .text 00000068 UartReceivePacket -08000334 g F .text 00000004 __REV16 +080012f4 g F .text 00000050 FlashDone +080003a4 g F .text 00000004 __REVSH +08000150 g F .text 00000062 EntryFromProg +08000688 g F .text 0000000c ComIsConnectEntryState +080006c8 g F .text 0000001e XcpInit +08001104 g F .text 00000134 FlashErase +080001c8 g F .text 00000174 main +08000394 g F .text 00000006 __set_CONTROL +08000d58 g F .text 00000014 NvmDone +08000c24 g F .text 0000006e UartTransmitPacket +08000d50 g F .text 00000008 NvmVerifyChecksum +08000b5c g F .text 00000022 CpuMemCopy +08000da0 g F .text 0000000c TimerSet +0800034c g F .text 00000008 __get_MSP +080003e0 g F .text 00000130 SystemInit +08000c94 g F .text 000000a4 UartReceivePacket +080003a0 g F .text 00000004 __REV16 20000000 g .data 00000000 _data -080002fa g F .text 00000006 __set_MSP -080007f8 g F .text 00000002 CopInit -08000854 g F .text 00000004 CpuReset -08000984 g F .text 00000004 NvmWrite -08000814 g F .text 00000020 CpuStartUserProgram +08000354 g F .text 00000006 __set_MSP +08000b14 g F .text 00000002 CopInit +08000b80 g F .text 00000008 CpuReset +08000d40 g F .text 00000008 NvmWrite +08000b38 g F .text 00000024 CpuStartUserProgram 20000600 g .bss 00000000 _estack -08000d58 g F .text 00000054 FlashVerifyChecksum -08000306 g F .text 00000006 __set_BASEPRI +08001238 g F .text 00000068 FlashVerifyChecksum +08000364 g F .text 00000006 __set_BASEPRI 20000014 g .data 00000000 _edata 08000000 g O .text 00000150 _vectab -0800035e g F .text 00000006 __STREXH -08000468 g F .text 00000068 SystemCoreClockUpdate -0800034a g F .text 00000008 __LDREXH -08000568 g F .text 00000004 ComIsConnected -08000300 g F .text 00000006 __get_BASEPRI -080007b0 g F .text 00000030 BackDoorCheck +080003d0 g F .text 00000006 __STREXH +08000510 g F .text 000000e0 SystemCoreClockUpdate +080003b8 g F .text 00000008 __LDREXH +08000694 g F .text 00000008 ComIsConnected +0800035c g F .text 00000006 __get_BASEPRI +08000ac0 g F .text 00000038 BackDoorCheck 20000500 g .bss 00000000 _stack -080009fc g F .text 00000010 TimerGet -08000358 g F .text 00000006 __STREXB -080009d8 g F .text 00000024 TimerInit +08000dd8 g F .text 00000012 TimerGet +080003c8 g F .text 00000006 __STREXB +08000dac g F .text 0000002a TimerInit diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec index 1034cb05..1a7015fa 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec @@ -1,253 +1,337 @@ S024000062696E2F6F70656E62746C5F6F6C696D65785F73746D3332703130332E737265639B -S3150800000000060020350E0008290E0008290E0008F3 -S31508000010290E0008290E0008290E0008290E0008D6 -S31508000020290E0008290E0008290E0008290E0008C6 -S31508000030290E0008290E0008290E0008290E0008B6 -S31508000040290E0008290E0008290E0008290E0008A6 -S31508000050290E0008290E0008290E0008290E000896 -S31508000060290E0008290E0008290E0008290E000886 -S31508000070290E0008290E0008290E0008290E000876 -S31508000080290E0008290E0008290E0008290E000866 -S31508000090290E0008290E0008290E0008290E000856 -S315080000A0290E0008290E0008290E0008290E000846 -S315080000B0290E0008290E0008290E0008290E000836 -S315080000C0290E0008290E0008290E0008290E000826 -S315080000D0290E0008290E0008290E0008290E000816 -S315080000E0290E0008290E0008290E0008290E000806 -S315080000F0290E0008290E0008290E0008290E0008F6 -S31508000100290E0008290E0008290E0008290E0008E5 -S31508000110290E0008290E0008290E0008290E0008D5 -S31508000120290E0008290E0008290E0008290E0008C5 -S31508000130290E0008290E0008290E0008290E0008B5 -S31508000140290E0008290E0008290E0008290E0008A5 -S3150800015010B572B611481249016012498D460C4A0B -S315080001600C4B03E052F8041B43F8041B0A498B4264 -S31508000170F8D30D480D494FF000028842B8BF40F841 -S31508000180042BFADB00F0E4F9BDE8104000F010B8E3 -S31508000190870F0008000000201400002008ED00E08A -S315080001A000000008000600201400002000050020BA -S315080001B007B5002301930093454B1A6842F00102E4 -S315080001C01A605968434A01EA02025A601A6822F01C -S315080001D0847222F480321A601A6822F480221A6025 -S315080001E05A6822F4FE025A604FF41F029A601A688F -S315080001F042F480321A60364B1B6803F400330093CE -S31508000200019B01330193009B23B9019A40F2DC5309 -S315080002109A42F0D12E4B1B6813F4003F03D12E48A7 -S315080002206F2100F0EBFA2D4B1A6842F010021A60A3 -S315080002301A6822F003021A601A6842F002021A606B -S31508000240234B5A685A605A6842F400525A605A68F0 -S3150800025042F480625A605A6822F47C125A605A68DC -S3150800026042F4E8125A601A6842F080721A60184B13 -S315080002701A6812F0007FFAD05A6822F003025A6010 -S315080002805A6842F002025A60114B5A6802F00C0290 -S31508000290082AF9D1DA6942F40032DA619A6942F039 -S315080002A005029A610E4B1A6822F470621A601A687F -S315080002B042F430621A601A6822F470421A601A68A8 -S315080002C042F480421A6000F003F900F00CF9FCE7EA -S315080002D0001002400000FFF8740E000800200240DB -S315080002E000080140EFF309800046704780F309884B -S315080002F07047EFF308800046704780F30888704718 -S31508000300EFF31280704780F311887047EFF310807F -S31508000310704780F310887047EFF31380704780F3B7 -S3150800032013887047EFF31480704780F3148870477A -S3150800033000BA704740BA7047C0BA704790FAA0F042 -S315080003407047D0E84F0FC0B27047D0E85F0F80B251 -S31508000350704750E8000F7047C1E8400F7047C1E882 -S31508000360500F704741E80000704700003A4B82B0D2 -S315080003701A6842F001021A605968384A01EA02020C -S315080003805A601A6822F0847222F480321A601A6857 -S3150800039022F480221A605A6822F4FE025A604FF448 -S315080003A01F029A600022019200921A6842F4803273 -S315080003B01A60294B1A6802F400320092019A013237 -S315080003C00192009A1AB9019AB2F5A06FF1D11B6889 -S315080003D013F4003318BF01230093009B012B34D17B -S315080003E01F4B1A6842F010021A601A6822F00302BC -S315080003F01A601A6842F002021A60174B5A685A6065 -S315080004005A685A605A6842F480625A605A6822F4F6 -S315080004107C125A605A6842F4E8125A601A6842F026 -S3150800042080721A600C4B1A6812F0007FFAD05A686C -S3150800043022F003025A605A6842F002025A60064BDA -S315080004405B6803F00C03082BF9D1064B4FF00062EA -S315080004509A6002B0704700BF001002400000FFF823 -S315080004600020024000ED00E0144A154B516801F0E7 -S315080004700C01042901D0082902D0124A1A6011E099 -S315080004805168506801F47011890C023110F4803FEC -S3150800049003D0526812F4003F01D00B4A00E0094A23 -S315080004A051431960054A0949526802F0F0021209D7 -S315080004B08A5C196831FA02F21A6070470010024025 -S315080004C01000002000127A0000093D0000000020FC -S315080004D010B500F091F900F083F900F051FABDE883 -S315080004E0104000F009B810B500F087F900F01AF8C6 -S315080004F0BDE8104000F05CB907B5FF238DF804305D -S31508000500FF3B8DF8053000F041F800F0C9F9044BBF -S315080005101B78012B02D101A800F056F80EBD00BFCA -S315080005201400002010B5054800F0F6F9012804D19A -S315080005300248BDE8104000F047B810BD150000207D -S3150800054010B5C9B200F0C0F9BDE8104000F034B8E3 -S31508000550014B01221A70704714000020014B1878CD -S31508000560704700BF1400002000F01EB8014B00229F -S315080005705A70704758000020034BFE22DA70022298 -S315080005801871A3F84420704758000020054B002234 -S315080005901A709A6483F84320A3F844209A705A7014 -S315080005A0704700BF58000020024B1878003818BF63 -S315080005B00120704758000020024B002283F8432090 -S315080005C0704700BF580000202DE9F041077805461E -S315080005D0FF2F744C0FD1FFF7C9FF102201234021CA -S315080005E02271103A2370E7706271A171E17122726B -S315080005F06372A3725AE026782046012E40F0D08016 -S31508000600F32F40D011D8CF2F00F0AD8005D8C92FD1 -S315080006106CD0CC2F40F0B080ACE0D12F00F09C809D -S3150800062071D3D22F40F0A88088E0FA2F40D006D8A0 -S31508000630F52F0CD011D3F62F40F09E801FE0FD2F2A -S3150800064044D0FE2F4DD0FC2F40F096803CE06A78CF -S315080006503F2A5BD8201DA16C06E06B783F2B55D846 -S315080006606968201DA1646A7800F0E4F8FF23E37046 -S315080006706A78A36CD318A3646B78013369E0FF2307 -S31508000680E3706B683DE0FF23E370A16C6B680022A2 -S3150800069004E011F8015B013B5219D2B2002BF8D1E4 -S315080006A0C0F80720012222716371A371082350E064 -S315080006B0FF23E3703C4BA364002323716371A3718A -S315080006C00733C4F80730F1E7002056E0FF236278C5 -S315080006D0E370FF3B2371A371E371237262710623F2 -S315080006E037E000232370FFF741FF3EE0A06C3F216F -S315080006F06A1C00F047F9002833D0FF23E370A36C87 -S315080007003F33A36433E06B783E2B01D9222034E0D3 -S31508000710FF23E370A4F84460697821B900F038F93A -S3150800072000282CD11DE0A06CAA1C1E4E00F02AF948 -S31508000730B8B16A78B36CD318B36420E0FF23E370CA -S315080007404022FF3B23716371E37123726372A271C6 -S315080007500723A4F8443012E0A06C696800F014F985 -S3150800076018B9313009E000F075F8FF23E370A4F8F2 -S31508000770446004E0312000E02020FFF7FDFE94F8F5 -S315080007804330012B02D11020FFF7F6FE0748B4F8D4 -S315080007904410012384F84330BDE8F041FFF7D0BE8A -S315080007A0BDE8F081580000207B0E00085B000020A1 -S315080007B010B5FFF7D9FE01280FD0084C2378012B76 -S315080007C00BD100F01BF9312807D90023237000F05C -S315080007D0E9F8BDE8104000F01DB810BDA4000020DF -S315080007E0044B012210B51A7000F0F6F8BDE8104067 -S315080007F0FFF7DEBFA40000207047704708B5034B1B -S315080008001860034B1960FFF7F8FFFCE7A800002003 -S31508000810AC00002008B500F0B9F830B1034B4FF42E -S3150800082000521A60024B1B68984708BD08ED00E0A5 -S315080008300420000870B50C461546064607E014F86D -S31508000840013B013D06F8013BFFF7D7FFADB2002D8E -S31508000850F5D170BD00F0EEBA054B1A8812F02002E9 -S3150800086003D09B880370012070471046704700BF6D -S315080008700044004008B5094B1A8812F080020AD0D5 -S31508000880988001E0FFF7B9FF044B1B8813F0800F2F -S31508000890F8D0012008BD104608BD00BF004400403E -S315080008A0084B00221A819A811A829A821A8340F288 -S315080008B071221A819A8992B242F4005242F00C02CD -S315080008C09A81704700440040402970B506460D4697 -S315080008D003D910488821FFF791FF2846FFF7CAFF7A -S315080008E0012803D00B488B21FFF788FF00240DE071 -S315080008F0FFF783FF16F8010BFFF7BCFF012803D0AB -S3150800090004489321FFF77AFF0134A4B2AC42EFD32F -S3150800091070BD00BF830E00082DE9F843154C8146CB -S31508000920257845B91448FFF797FF01281FD1134BBF -S3150800093020701D701BE0114F0F4E97F8008008F1CC -S31508000940010806EB0800FFF787FF012805460DD1C9 -S3150800095032785FFA88F8424587F8008006D148461B -S31508000960711CFFF767FF0023237000E00025284667 -S31508000970BDE8F883F2000020B0000020F100002056 -S3150800098000F04AB900F054B900F078B900F0E4B9BB -S3150800099010B500F00BFA18B1BDE8104000F02ABAFD -S315080009A010BD0000014B00221A60704710E000E0FD -S315080009B0044B1B6813F4803F03D0034B1A8801329B -S315080009C01A80704710E000E0F4000020014B188000 -S315080009D0704700BFF400002010B5FFF7E3FF054B92 -S315080009E0054A00205A60052298601A60BDE8104042 -S315080009F0FFF7ECBF10E000E03F19010008B5FFF76C -S31508000A00D7FF014B188808BDF4000020034B044AA1 -S31508000A105A60044A5A603422DA607047002002405D -S31508000A2023016745AB89EFCD024B1A6942F0800274 -S31508000A301A6170470020024070B500240646254614 -S31508000A40FFF7DBFE094B1A59964209D3191949686B -S31508000A505218964204D20C2202FB0533187A70BD4E -S31508000A600C340135B42CEBD1FF2070BDA80E00085C -S31508000A70F8B504460068FFF7DFFFFF2838D0FFF710 -S31508000A80C5FF1D4BDD6815F0010502D0FFF7CCFF49 -S31508000A902EE01A6942F001021A61234653F8042B24 -S31508000AA05E59AF18B3B2AB5201E0FFF7A6FE124B80 -S31508000AB0DB6813F0010FF8D1330C7B8001E0FFF7F8 -S31508000AC09CFE0D4BDB6813F00103F8D13A68B2427D -S31508000AD005D10435B5F5007FDFD1012400E01C46B9 -S31508000AE0054B1A6922F001021A61FFF79DFF00E023 -S31508000AF000242046F8BD00BF00200240F8B50A4D84 -S31508000B00074600242E46FFF778FE2B7ABB4203D110 -S31508000B100C235C433059F8BD01340C350F2CF2D147 -S31508000B204FF0FF30F8BD00BFA80E0008CA05D20D69 -S31508000B3008B552B902688A4209D040F8041B4FF436 -S31508000B400072FFF777FE012008BD002008BD0120CE -S31508000B5008BD000038B50D4B044698420D4606D030 -S31508000B600B4A914205D0FFF783FF58B102E0094CC2 -S31508000B7000E01C4620462946FFF7D8FF002808BF94 -S31508000B80002400E00446204638BD00BFF8000020D7 -S31508000B9000200008FC0200202DE9F0419846036871 -S31508000BA021F4FE77B3F1FF3F04460D46164627F0BB -S31508000BB0030703D13946FFF7B9FF58B32368BB4289 -S31508000BC005D020463946FFF7C5FF0446F0B123682D -S31508000BD0ED1A65190435FFF710FE231DEB1AB3F558 -S31508000BE0007F07D3204607F50071FFF7B3FF0446D9 -S31508000BF060B1051D16F8013B08F1FF381FFA88F8A1 -S31508000C002B70B8F1000F04D00135E4E72046BDE8A3 -S31508000C10F0810120BDE8F081034A4FF0FF331360ED -S31508000C20024A1360704700BFFC020020F80000204B -S31508000C3070B504460E461546FFF7FEFEFF2815D08A -S31508000C40601E8019FFF7F8FEFF280FD024F4FE7304 -S31508000C50074A23F0030393420CBF06480648B3B27B -S31508000C6021462A46BDE87040FFF796BF002070BDB2 -S31508000C7000200008F8000020FC0200202DE9F843B7 -S31508000C8004460E46FFF7D8FE0546601E8019FFF794 -S31508000C90D3FEFF2D044655D0FF2856D0854251D89D -S31508000CA0002D4CD00F284DD8FFF7B0FE284BDE6834 -S31508000CB016F0010602D0FFF7B7FE43E01A69284688 -S31508000CC042F002021A61FFF719FF05462046FFF7B0 -S31508000CD015FF204F8046B946FFF78FFD3B7AA342A2 -S31508000CE004D10C2303FB0696736804E001360C371F -S31508000CF00F2EF1D10023C5EB0806F618B60AB6B2D0 -S31508000D00002410E05D611A6942F040021A6101E0B0 -S31508000D10FFF773FD0E4BDB6813F0010FF8D10134B2 -S31508000D20A4B205F58065B442094BEBD31A6922F0E3 -S31508000D3002021A61FFF778FE0120BDE8F88328460B -S31508000D40BDE8F8830020BDE8F8830020BDE8F883F5 -S31508000D5000200240A80E00080D4B1868043B1B68CB -S31508000D60C0180C4B1B68C0180B4B1B68C0180B4BE4 -S31508000D701B68C0180A4B1B68C0180A4B1B68C018AA -S31508000D80094B1B68C018D0F1010038BF0020704716 -S31508000D9004200008082000080C200008102000087D -S31508000DA01420000818200008502100080F4A13B51F -S31508000DB0D1689468131D52686418A418DA68A418D0 -S31508000DC01A69A4185A699B69A418E418644201941C -S31508000DD0FFF7C2FF844206D004210DEB0102044846 -S31508000DE0FFF726FF00E001201CBD00BFF800002029 -S31508000DF0502100080A4808B50368B3F1FF3F02D03E -S31508000E00FFF736FE58B107480368B3F1FF3F05D030 -S31508000E10FFF72EFE003818BF012008BD012008BDC7 -S31508000E20F8000020FC02002001483621FFF7E6BC46 -S31508000E305C0F000872B60A4A0A4B03E052F8041B14 -S31508000E4043F8041B08498B42F8D3084808494FF071 -S31508000E5000028842B8BF40F8042BFADBFFF7A8B9AE -S31508000E60870F00080000002014000020140000204E -S31508000E70000500206D61696E2E63004F70656E4235 -S31508000E804C54002E2E2F2E2E2F2E2E2F536F75726A -S31508000E9063652F41524D434D335F53544D33322FC3 -S31508000EA0756172742E63000000200008002000009F -S31508000EB001000000004000080020000002000000B9 -S31508000EC00060000800200000030000000080000801 -S31508000ED0002000000400000000A000080020000018 -S31508000EE00500000000C00008002000000600000001 -S31508000EF000E00008002000000700000000000108CC -S31508000F000020000008000000002001080020000062 -S31508000F100900000000400108002000000A00000047 -S31508000F2000600108002000000B0000000080010896 -S31508000F30002000000C00000000A0010800200000AE -S31508000F400D00000000C00108002000000E0000008F -S31508000F5000E00108002000000F0000002E2E2F2EB2 -S31508000F602E2F2E2E2F536F757263652F41524D43C8 -S31508000F704D335F53544D33322F4743432F766563C2 -S30C08000F80746F72732E630003 -S31508000F870000000000000000010203040607080924 -S30908000F9700A24A0458 +S315080000000006002059130008451300084513000888 +S315080000104513000845130008451300084513000852 +S315080000204513000845130008451300084513000842 +S315080000304513000845130008451300084513000832 +S315080000404513000845130008451300084513000822 +S315080000504513000845130008451300084513000812 +S315080000604513000845130008451300084513000802 +S3150800007045130008451300084513000845130008F2 +S3150800008045130008451300084513000845130008E2 +S3150800009045130008451300084513000845130008D2 +S315080000A045130008451300084513000845130008C2 +S315080000B045130008451300084513000845130008B2 +S315080000C045130008451300084513000845130008A2 +S315080000D04513000845130008451300084513000892 +S315080000E04513000845130008451300084513000882 +S315080000F04513000845130008451300084513000872 +S315080001004513000845130008451300084513000861 +S315080001104513000845130008451300084513000851 +S315080001204513000845130008451300084513000841 +S315080001304513000845130008451300084513000831 +S315080001404513000845130008451300084513000821 +S3150800015008B572B617481849016018498D4640F225 +S315080001600002C2F2000240F21403C2F200039A42ED +S3150800017011D241F2C842C0F6000240F20003C2F2B0 +S31508000180000340F21400C2F2000052F8041B43F8C0 +S31508000190041B8342F9D30A480A494FF000028842F1 +S315080001A0B8BF40F8042BFADB00F066FA00F00CF84A +S315080001B008BD000008ED00E0000000080006002069 +S315080001C0140000200005002000B583B04FF000039E +S315080001D0019300934FF48053C4F202031A6842F065 +S315080001E001021A6059684FF00002CFF6FF0201EAD1 +S315080001F002025A601A6822F0847222F480321A6067 +S315080002001A6822F480221A605A6822F4FE025A609A +S315080002104FF41F029A601A6842F480321A604FF44B +S315080002208053C4F2020340F2DC52196801F400312B +S315080002300091019901F101010191009911B9019902 +S315080002409142F2D14FF48053C4F202031B6813F4AF +S31508000250003F07D141F2B430C0F600004FF06F01FD +S3150800026000F05CFC4FF40053C4F202031A6842F033 +S3150800027010021A601A6822F003021A601A6842F01D +S3150800028002021A604FF48053C4F202035A685A6095 +S315080002905A6842F400525A605A6842F480625A60B8 +S315080002A05A6822F47C125A605A6842F4E8125A6074 +S315080002B01A6842F080721A604FF48053C4F202033F +S315080002C01A6812F0007FFBD04FF48053C4F2020381 +S315080002D05A6822F003025A605A6842F002025A60CB +S315080002E04FF48053C4F202035A6802F00C02082A3B +S315080002F0FAD14FF48053C4F20203DA6942F40032A9 +S31508000300DA619A6942F005029A614FF40063C4F211 +S3150800031001031A6822F470621A601A6842F430629D +S315080003201A601A6822F470421A601A6842F4804207 +S315080003301A6000F05DF900F065F9FCE7EFF3098053 +S315080003400046704780F30988704700BFEFF30880BE +S315080003500046704780F30888704700BFEFF31280A5 +S31508000360704700BF80F31188704700BFEFF3108015 +S31508000370704700BF80F31088704700BFEFF3138003 +S31508000380704700BF80F31388704700BFEFF31480EF +S31508000390704700BF80F31488704700BF00BA7047E3 +S315080003A040BA7047C0BA704790FAA0F0704700BFCD +S315080003B0D0E84F0FC0B27047D0E85F0F80B27047E1 +S315080003C050E8000F704700BFC1E8400F704700BFF4 +S315080003D0C1E8500F704700BF41E80000704700BFF2 +S315080003E082B04FF48053C4F202031A6842F0010245 +S315080003F01A6059684FF00002CFF6FF0201EA0202BE +S315080004005A601A6822F0847222F480321A601A68D6 +S3150800041022F480221A605A6822F4FE025A604FF4C7 +S315080004201F029A604FF00002019200921A6842F485 +S3150800043080321A604FF48052C4F20202136803F441 +S3150800044000330093019B03F101030193009B1BB941 +S31508000450019BB3F5A06FF1D14FF48053C4F20203A8 +S315080004601B6813F4003F14BF012300230093009B6D +S31508000470012B44D14FF40053C4F202031A6842F028 +S3150800048010021A601A6822F003021A601A6842F00B +S3150800049002021A604FF48053C4F202035A685A6083 +S315080004A05A685A605A6842F480625A605A6822F456 +S315080004B07C125A605A6842F4E8125A601A6842F086 +S315080004C080721A604FF48052C4F20202136813F065 +S315080004D0007FFBD04FF48053C4F202035A6822F01F +S315080004E003025A605A6842F002025A604FF4805278 +S315080004F0C4F20202536803F00C03082BFAD14FF436 +S315080005006D43CEF200034FF000629A6002B0704766 +S315080005104FF48053C4F202035B6803F00C03042B08 +S315080005200DD0082B15D0002B44D140F21003C2F28F +S3150800053000034FF49052C0F27A021A6043E040F288 +S315080005401003C2F200034FF49052C0F27A021A6006 +S3150800055039E04FF48053C4F202035A685B68C2F369 +S31508000560834202F1020213F4803F0BD140F21003DA +S31508000570C2F200034FF41061C0F23D0101FB02F222 +S315080005801A6020E04FF48053C4F202035B6813F448 +S31508000590003F40F21003C2F2000319BF4FF4106186 +S315080005A0C0F23D014FF49051C0F27A0101FB02F20C +S315080005B01A6008E040F21003C2F200034FF49052AA +S315080005C0C0F27A021A604FF48053C4F202035A68E2 +S315080005D0C2F3031240F20003C2F200039A5C40F22F +S315080005E01003C2F20003196821FA02F21A60704772 +S315080005F008B500F08FFA00F07FFA00F09DFB00F0D6 +S3150800060009F808BD08B500F087FA00F01DF800F0F3 +S3150800061057FA08BD00B583B04FF0FF038DF80430D4 +S315080006204FF000038DF8053000F04EF800F0E4FABC +S3150800063040F21403C2F200031B78012B02D101A871 +S3150800064000F066F803B000BD08B540F21800C2F223 +S31508000650000000F01FFB012805D140F21800C2F285 +S31508000660000000F055F808BD08B5C9B200F0DAFA7E +S3150800067000F044F808BD00BF40F21403C2F20003BC +S315080006804FF001021A70704740F21403C2F20003D9 +S315080006901878704708B500F027F808BD40F25803E7 +S315080006A0C2F200034FF000025A70704740F2580336 +S315080006B0C2F200034FF0FE02DA7018714FF0020220 +S315080006C0A3F84420704700BF40F25803C2F2000363 +S315080006D04FF000021A709A6483F84320A3F8442066 +S315080006E09A705A70704700BF40F25803C2F200036E +S315080006F01878003818BF0120704700BF40F2580329 +S31508000700C2F200034FF0000283F84320704700BF8F +S3150800071038B504460278FF2A1DD1FFF7BFFF40F21D +S315080007205803C2F200034FF001021A704FF0FF019E +S31508000730D9704FF0100119714FF0000159714FF03F +S3150800074040009871D87119725A729A724FF008025D +S31508000750A3F8442098E140F25803C2F200031B783C +S31508000760012B40F0AB81A2F1C902352A00F288813B +S31508000770DFE812F0EC008601860181018601860118 +S3150800078073010D015901430186018601860186011F +S315080007908601860186018601860186018601860113 +S315080007A08601860186018601860186018601860103 +S315080007B086018601860186018601860186018601F3 +S315080007C0860186018601860182005400360074007F +S315080007D0860186018601A8008601C200C700DB00E3 +S315080007E042783F2A04D94FF02200FFF75FFF4BE11A +S315080007F040F25805C2F2000505F10400A96C00F0A4 +S31508000800ADF94FF0FF03EB706278AB6CD318AB64AD +S31508000810637803F10103A5F8443035E143783F2BAB +S3150800082004D94FF02200FFF741FF2DE1416840F25D +S315080008305805C2F20005A96405F10400627800F0C3 +S315080008408DF94FF0FF03EB706278AB6CD318AB648D +S31508000850637803F10103A5F8443015E140F2580323 +S31508000860C2F200034FF0FF02DA7042689A644FF052 +S315080008700102A3F8442007E140F25805C2F2000538 +S315080008804FF0FF03EB70A96C43684FF000023BB1D1 +S315080008904FF0000211F8010B1218D2B2013BF9D140 +S315080008A0C5F8072040F25803C2F200034FF00102D0 +S315080008B01A714FF000025A719A714FF00802A3F8A4 +S315080008C04420E1E040F25803C2F200034FF0FF0271 +S315080008D0DA7041F2BC32C0F600029A644FF00002A8 +S315080008E01A715A719A714FF00702C3F807204FF030 +S315080008F00802A3F84420C7E04FF00000FFF7D6FE31 +S31508000900C2E040F25803C2F200034FF0FF02DA7069 +S315080009104FF000021A71597859719A71DA711A7280 +S315080009204FF00602A3F84420AEE040F25804C2F2A3 +S3150800093000044FF000032370FFF7B0FE4FF0FF03EB +S31508000940E3704FF00103A4F844309DE040F25803E9 +S31508000950C2F20003986C4FF03F0104F1010200F067 +S31508000960EFF920B94FF03100FFF7A0FE8CE040F216 +S315080009705803C2F200034FF0FF02DA709A6C02F1D4 +S315080009803F029A644FF00102A3F844207CE04378C2 +S315080009903E2B04D94FF02200FFF788FE74E040F2A0 +S315080009A05803C2F200034FF0FF02DA704FF001025B +S315080009B0A3F84420417841B900F0CEF9002863D164 +S315080009C04FF03100FFF772FE5EE040F25803C2F2C4 +S315080009D00003986C04F1020200F0B2F920B94FF056 +S315080009E03100FFF763FE4FE040F25803C2F20003FE +S315080009F061789A6C8A189A6446E040F25803C2F203 +S31508000A0000034FF0FF02DA704FF000021A715A71B4 +S31508000A104FF040019971DA711A725A724FF0070253 +S31508000A20A3F8442030E040F25803C2F20003986C61 +S31508000A30616800F089F920B94FF03100FFF736FEFA +S31508000A4022E040F25803C2F200034FF0FF02DA70C8 +S31508000A504FF00102A3F8442016E000F091F840F2A6 +S31508000A605803C2F200034FF0FF02DA704FF001029A +S31508000A70A3F8442008E04FF03100FFF717FE03E023 +S31508000A804FF02000FFF712FE40F25803C2F20003AF +S31508000A9093F84330012B03D14FF01000FFF706FE01 +S31508000AA040F25803C2F200034FF0010283F84320D4 +S31508000AB003F10300B3F84410FFF7D6FD38BD00BFB5 +S31508000AC008B5FFF7E7FD012815D040F2A403C2F2E6 +S31508000AD000031B78012B0ED100F07EF931280AD9C4 +S31508000AE040F2A403C2F200034FF000021A7000F0AD +S31508000AF03DF900F021F808BD08B540F2A403C2F29A +S31508000B0000034FF001021A7000F050F9FFF7D8FF02 +S31508000B1008BD00BF704700BF704700BF08B540F268 +S31508000B20A803C2F20003186040F2AC03C2F2000345 +S31508000B301960FFF7F1FFFCE708B500F009F960B1A5 +S31508000B404EF60853CEF200034FF400521A6042F2F2 +S31508000B500403C0F600031B68984708BD70B50D4628 +S31508000B6014465AB1064615F8013B06F8013BFFF74D +S31508000B70D3FF04F1FF34A4B2002CF4D170BD00BF3A +S31508000B8008B500F0E9FB08BD4FF48843C4F200033A +S31508000B901B8813F0200F1FBF4FF48843C4F20003CD +S31508000BA09B88037014BF01200020704710B54FF4CE +S31508000BB08843C4F200031B8813F0800F15D04FF446 +S31508000BC08843C4F2000398801B8813F0800F0FD166 +S31508000BD04FF48844C4F20004FFF79EFF238813F0FD +S31508000BE0800FF9D04FF0010010BD4FF0000010BD86 +S31508000BF04FF0010010BD00BF4FF48843C4F2000354 +S31508000C004FF000021A819A811A829A821A8340F258 +S31508000C1071221A819A8992B242F4005242F00C0269 +S31508000C209A8170472DE9F04105460C46402907D9B7 +S31508000C3041F2C430C0F600004FF08801FFF76EFF9E +S31508000C402046FFF7B3FF012807D041F2C430C0F6AB +S31508000C5000004FF08B01FFF761FF2646BCB14FF04D +S31508000C60000441F2C437C0F600074FF09308FFF7B7 +S31508000C7053FF285DFFF79AFF012803D038464146FF +S31508000C80FFF74CFF04F10104A3B2B342EFD3BDE86A +S31508000C90F08100BF38B5054640F2F503C2F20003FD +S31508000CA01B78B3B940F2B000C2F20000FFF76CFF40 +S31508000CB0012836D140F2F503C2F200034FF00102D3 +S31508000CC01A7040F2F403C2F200034FF000001870E5 +S31508000CD038BD40F2F403C2F200031C781548201808 +S31508000CE0FFF752FF01281FD104F10104E2B240F2D6 +S31508000CF0F403C2F200031A7040F2B003C2F2000312 +S31508000D001B78934213D128460A49FFF727FF40F27A +S31508000D10F503C2F200034FF000021A704FF001000B +S31508000D2038BD4FF0000038BD4FF0000038BD4FF019 +S31508000D30000038BDB100002008B500F0A9F908BDCB +S31508000D4008B500F0B3F908BD08B500F0DBF908BD31 +S31508000D5008B500F071FA08BD08B500F0A1FA10B19F +S31508000D6000F0C8FA08BD4FF0000008BD4EF21003A7 +S31508000D70CEF200034FF000021A6070474EF21003DD +S31508000D80CEF200031B6813F4803F1FBF40F2F60340 +S31508000D90C2F200031A88013218BF1A80704700BFD2 +S31508000DA040F2F603C2F200031880704708B5FFF751 +S31508000DB0DDFF4EF21003CEF2000341F63F12C0F2F9 +S31508000DC001025A604FF0000098604FF005021A6061 +S31508000DD0FFF7E6FF08BD00BF08B5FFF7CFFF40F2F3 +S31508000DE0F603C2F20003188808BD00BF4FF400538B +S31508000DF0C4F2020340F22312C4F267525A6048F65C +S31508000E00AB12CCF6EF525A604FF03402DA607047F4 +S31508000E104FF40053C4F202031A6942F080021A61C1 +S31508000E20704700BFF8B507464FF00004254641F263 +S31508000E30E836C0F60006FFF76FFE3359BB420ED8F8 +S31508000E40311949685B189F4209D241F2E833C0F666 +S31508000E50000305EB450203EB8203187AF8BD05F19A +S31508000E60010504F10C04B42CE5D14FF0FF00F8BDE0 +S31508000E702DE9F84380460068FFF7D4FFFF2808BF2E +S31508000E80002453D0FFF7B2FF4FF40053C4F2020315 +S31508000E90DB6813F0010F04D0FFF7BAFF4FF0000428 +S31508000EA044E04FF40053C4F202031A6942F0010207 +S31508000EB01A614FF0000508F104094FF40054C4F212 +S31508000EC00204D8F80030EF1859F80560B2B2EA52B1 +S31508000ED0E36813F0010F05D0FFF71EFEE36813F071 +S31508000EE0010FF9D14FEA16437B80E36813F0010F2F +S31508000EF005D0FFF711FEE36813F0010FF9D13B683F +S31508000F00B34207D105F10405B5F5007FD9D14FF0F5 +S31508000F10010401E04FF000044FF40053C4F2020349 +S31508000F201A6922F001021A61FFF772FF2046BDE82E +S31508000F30F88300BF70B5064641F2E835C0F60005ED +S31508000F404FF00004FFF7E8FD2B7AB34208D141F2CF +S31508000F50E833C0F6000304EB440253F8220070BDE0 +S31508000F6004F1010405F10C050F2CEBD14FF0FF300D +S31508000F7070BD00BF08B54FEAC1534FEAD3535BB9FA +S31508000F8003688B420BD040F8041B4FF40072FFF73E +S31508000F90E5FD4FF0010008BD4FF0000008BD4FF019 +S31508000FA0010008BD38B504460D4640F2F803C2F202 +S31508000FB00003984209D04FF40053C0F60003994243 +S31508000FC008D0FFF755FF88B108E040F2FC24C2F2CA +S31508000FD0000403E040F2F804C2F200042046294661 +S31508000FE0FFF7C8FF002808BF002401E04FF00004FF +S31508000FF0204638BD2DE9F84305460C4617461E46D9 +S315080010004FEA51294FEA49290368B3F1FF3F03D153 +S315080010104946FFF7AFFF50B32B684B4505D0284626 +S315080010204946FFF7BFFF054628B32B68E41A2C1973 +S3150800103004F1040440F2FF1809F50079FFF76CFD86 +S3150800104005F10403E31A434507D928464946FFF73D +S31508001050A9FF054698B100F1040417F8013B23706F +S3150800106006F1FF36B6B276B104F10104E6E74FF0B1 +S315080010700000BDE8F8834FF00000BDE8F8834FF0A4 +S315080010800000BDE8F8834FF00100BDE8F88300BF13 +S3150800109040F2FC23C2F200034FF0FF321A6040F21E +S315080010A0F803C2F200031A60704700BF70B5044621 +S315080010B00D461646FFF7B6FEFF281DD004F1FF3091 +S315080010C04019FFF7AFFEFF2819D04FEA54224FF414 +S315080010D00053C0F60003B3EB422F07BF40F2F800F7 +S315080010E0C2F2000040F2FC20C2F20000214632465D +S315080010F0ABB2FFF77FFF70BD4FF0000070BD4FF039 +S31508001100000070BD2DE9F04105460E46FFF78AFE40 +S31508001110044605F1FF308019FFF784FE0546FF28CF +S3150800112014BF00230123FF2C08BF43F00103002B43 +S315080011307ED1844270D8002C72D00F2874D8FFF75D +S3150800114055FE4FF40053C4F20203DB6813F0010F97 +S3150800115005D0FFF75DFE4FF00000BDE8F0814FF4C3 +S315080011600053C4F202031A6942F002021A612046C9 +S31508001170FFF7E0FE07462846FFF7DCFE804641F209 +S31508001180E836C0F600064FF00004FFF7C5FC337AD0 +S31508001190AB4209D141F2E833C0F6000304EB44023E +S315080011A003EB82035E6807E004F1010406F10C060E +S315080011B00F2CEAD14FF00006C7EB08084644C6F3E1 +S315080011C08F26DEB14FF000054FF40054C4F2020436 +S315080011D06761236943F040032361E36813F0010F55 +S315080011E005D0FFF799FCE36813F0010FF9D105F173 +S315080011F00105ADB207F58067AE42E9D84FF4005352 +S31508001200C4F202031A6922F002021A61FFF700FE0D +S315080012104FF00100BDE8F0814FF00000BDE8F08115 +S315080012204FF00000BDE8F0814FF00000BDE8F08106 +S315080012304FF00000BDE8F08142F20402C0F6000259 +S315080012404FF40053C0F6000310681B68C01842F23A +S315080012500803C0F600031B68C01842F20C03C0F668 +S3150800126000031B68C01842F21003C0F600031B688F +S31508001270C01842F21403C0F600031B68C01842F2F5 +S315080012801803C0F600031B68C01842F25013C0F6D4 +S3150800129000031B68C018D0F1010038BF0020704752 +S315080012A010B582B040F2F802C2F2000202F104035D +S315080012B09468D16864185268A418DA68A4181A6978 +S315080012C0A4185A69A4189B69E418C4F10004019487 +S315080012D0FFF7B2FF844208BF012009D042F250103E +S315080012E0C0F600004FF004010DEB0102FFF7DEFE29 +S315080012F002B010BD08B540F2F803C2F200031B683D +S31508001300B3F1FF3F06D040F2F800C2F20000FFF743 +S31508001310AFFD88B140F2FC23C2F200031B68B3F1AB +S31508001320FF3F0CD040F2FC20C2F20000FFF7A0FD00 +S31508001330003818BF012008BD4FF0000008BD4FF067 +S31508001340010008BD08B541F29C40C0F600004FF008 +S315080013503601FFF7E3FB08BD08B572B640F2000296 +S31508001360C2F2000240F21403C2F200039A4211D2FA +S3150800137041F2C842C0F6000240F20003C2F200037E +S3150800138040F21400C2F2000052F8041B43F8041B92 +S315080013908342F9D3054806494FF000028842B8BF90 +S315080013A040F8042BFADBFEF70FFF08BD14000020F7 +S315080013B0000500206D61696E2E6300004F70656E32 +S315080013C0424C54002E2E2F2E2E2F2E2E2F536F7555 +S315080013D07263652F41524D434D335F53544D33323B +S315080013E02F756172742E630000200008002000002B +S315080013F00100000000400008002000000200000074 +S3150800140000600008002000000300000000800008BB +S31508001410002000000400000000A0000800200000D2 +S315080014200500000000C000080020000006000000BB +S3150800143000E0000800200000070000000000010886 +S31508001440002000000800000000200108002000001D +S315080014500900000000400108002000000A00000002 +S3150800146000600108002000000B0000000080010851 +S31508001470002000000C00000000A001080020000069 +S315080014800D00000000C00108002000000E0000004A +S3150800149000E00108002000000F0000002E2E2F2E6D +S315080014A02E2F2E2E2F536F757263652F41524D4383 +S315080014B04D335F53544D33322F4743432F7665637D +S30D080014C0746F72732E630000BD +S315080014C800000000000000000102030406070809DE +S309080014D800A24A0412 S70508000000F2 diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c index 5b31c733..85f88c6e 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c @@ -97,20 +97,20 @@ void NvmInitHook(void) ** PARAMETER: addr start address ** len length in bytes ** data pointer to the data buffer. -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the write +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the write ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver write ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't ** been written yet. ** ** ****************************************************************************************/ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) { - return BTL_NVM_NOT_IN_RANGE; + return BLT_NVM_NOT_IN_RANGE; } /*** end of NvmWriteHook ***/ @@ -118,19 +118,19 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data) ** NAME: NvmEraseHook ** PARAMETER: addr start address ** len length in bytes -** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is -** not within the supported memory range, or BTL_NVM_ERROR is the erase +** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is +** not within the supported memory range, or BLT_NVM_ERROR is the erase ** operation failed. ** DESCRIPTION: Callback that gets called at the start of the NVM driver erase ** routine. It allows additional memory to be operated on. If the address ** is not within the range of the additional memory, then -** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory +** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory ** hasn't been erased yet. ** ****************************************************************************************/ -blt_bool NvmEraseHook(blt_addr addr, blt_int32u len) +blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len) { - return BTL_NVM_NOT_IN_RANGE; + return BLT_NVM_NOT_IN_RANGE; } /*** end of NvmEraseHook ***/ diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile index a34626c0..b7977d1d 100644 --- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile +++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile @@ -108,7 +108,7 @@ LIB_PATH = -L../../../Source/ARMCM3_STM32/GCC/ #|---------------------------------------------------------------------------------------| #| Options for compiler binaries | #|---------------------------------------------------------------------------------------| -CFLAGS = -g -D inline= -mthumb -mcpu=cortex-m3 -Os -T memory.x +CFLAGS = -g -D inline= -mthumb -mcpu=cortex-m3 -O1 -T memory.x CFLAGS += -D PACK_STRUCT_END=__attribute\(\(packed\)\) -Wno-main CFLAGS += -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\) CFLAGS += -ffunction-sections -fdata-sections $(INC_PATH) -D STM32F10X_MD -D GCC_ARMCM3 diff --git a/Target/Source/ARM7_LPC2000/nvm.c b/Target/Source/ARM7_LPC2000/nvm.c index a6bc6040..7aaea39c 100644 --- a/Target/Source/ARM7_LPC2000/nvm.c +++ b/Target/Source/ARM7_LPC2000/nvm.c @@ -79,7 +79,7 @@ void NvmInit(void) blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) { #if (BOOT_NVM_HOOKS_ENABLE > 0) - blt_int8u result = BTL_NVM_NOT_IN_RANGE; + blt_int8u result = BLT_NVM_NOT_IN_RANGE; #endif #if (BOOT_NVM_HOOKS_ENABLE > 0) @@ -89,14 +89,14 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) result = NvmWriteHook(addr, len, data); /* process the return code */ - if (result == BTL_NVM_OKAY) + if (result == BLT_NVM_OKAY) { /* data was within range of the additionally supported memory and succesfully * programmed, so we are all done. */ return BLT_TRUE; } - else if (result == BTL_NVM_ERROR) + else if (result == BLT_NVM_ERROR) { /* data was within range of the additionally supported memory and attempted to be * programmed, but an error occurred, so we can't continue. @@ -105,7 +105,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) } #endif - /* still here to the internal driver should try and perform the program operation */ + /* still here so the internal driver should try and perform the program operation */ return FlashWrite(addr, len, data); } /*** end of NvmWrite ***/ @@ -121,7 +121,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) blt_bool NvmErase(blt_addr addr, blt_int32u len) { #if (BOOT_NVM_HOOKS_ENABLE > 0) - blt_int8u result = BTL_NVM_NOT_IN_RANGE; + blt_int8u result = BLT_NVM_NOT_IN_RANGE; #endif #if (BOOT_NVM_HOOKS_ENABLE > 0) @@ -131,14 +131,14 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len) result = NvmEraseHook(addr, len); /* process the return code */ - if (result == BTL_NVM_OKAY) + if (result == BLT_NVM_OKAY) { /* address was within range of the additionally supported memory and succesfully * erased, so we are all done. */ return BLT_TRUE; } - else if (result == BTL_NVM_ERROR) + else if (result == BLT_NVM_ERROR) { /* address was within range of the additionally supported memory and attempted to be * erased, but an error occurred, so we can't continue. @@ -147,7 +147,7 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len) } #endif - /* still here to the internal driver should try and perform the erase operation */ + /* still here so the internal driver should try and perform the erase operation */ return FlashErase(addr, len); } /*** end of NvmErase ***/ diff --git a/Target/Source/ARM7_LPC2000/nvm.h b/Target/Source/ARM7_LPC2000/nvm.h index 943ca0a2..c143d71a 100644 --- a/Target/Source/ARM7_LPC2000/nvm.h +++ b/Target/Source/ARM7_LPC2000/nvm.h @@ -51,9 +51,9 @@ blt_bool NvmDone(void); * Macro definitions ****************************************************************************************/ /* return codes for hook function NvmWrite/Erase */ -#define BTL_NVM_ERROR (0x00) /* return code for success */ -#define BTL_NVM_OKAY (0x01) /* return code for error */ -#define BTL_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */ +#define BLT_NVM_ERROR (0x00) /* return code for success */ +#define BLT_NVM_OKAY (0x01) /* return code for error */ +#define BLT_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */ #endif /* NVM_H */ diff --git a/Target/Source/ARMCM3_STM32/nvm.c b/Target/Source/ARMCM3_STM32/nvm.c index a6bc6040..7aaea39c 100644 --- a/Target/Source/ARMCM3_STM32/nvm.c +++ b/Target/Source/ARMCM3_STM32/nvm.c @@ -79,7 +79,7 @@ void NvmInit(void) blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) { #if (BOOT_NVM_HOOKS_ENABLE > 0) - blt_int8u result = BTL_NVM_NOT_IN_RANGE; + blt_int8u result = BLT_NVM_NOT_IN_RANGE; #endif #if (BOOT_NVM_HOOKS_ENABLE > 0) @@ -89,14 +89,14 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) result = NvmWriteHook(addr, len, data); /* process the return code */ - if (result == BTL_NVM_OKAY) + if (result == BLT_NVM_OKAY) { /* data was within range of the additionally supported memory and succesfully * programmed, so we are all done. */ return BLT_TRUE; } - else if (result == BTL_NVM_ERROR) + else if (result == BLT_NVM_ERROR) { /* data was within range of the additionally supported memory and attempted to be * programmed, but an error occurred, so we can't continue. @@ -105,7 +105,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) } #endif - /* still here to the internal driver should try and perform the program operation */ + /* still here so the internal driver should try and perform the program operation */ return FlashWrite(addr, len, data); } /*** end of NvmWrite ***/ @@ -121,7 +121,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data) blt_bool NvmErase(blt_addr addr, blt_int32u len) { #if (BOOT_NVM_HOOKS_ENABLE > 0) - blt_int8u result = BTL_NVM_NOT_IN_RANGE; + blt_int8u result = BLT_NVM_NOT_IN_RANGE; #endif #if (BOOT_NVM_HOOKS_ENABLE > 0) @@ -131,14 +131,14 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len) result = NvmEraseHook(addr, len); /* process the return code */ - if (result == BTL_NVM_OKAY) + if (result == BLT_NVM_OKAY) { /* address was within range of the additionally supported memory and succesfully * erased, so we are all done. */ return BLT_TRUE; } - else if (result == BTL_NVM_ERROR) + else if (result == BLT_NVM_ERROR) { /* address was within range of the additionally supported memory and attempted to be * erased, but an error occurred, so we can't continue. @@ -147,7 +147,7 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len) } #endif - /* still here to the internal driver should try and perform the erase operation */ + /* still here so the internal driver should try and perform the erase operation */ return FlashErase(addr, len); } /*** end of NvmErase ***/ diff --git a/Target/Source/ARMCM3_STM32/nvm.h b/Target/Source/ARMCM3_STM32/nvm.h index 943ca0a2..c143d71a 100644 --- a/Target/Source/ARMCM3_STM32/nvm.h +++ b/Target/Source/ARMCM3_STM32/nvm.h @@ -51,9 +51,9 @@ blt_bool NvmDone(void); * Macro definitions ****************************************************************************************/ /* return codes for hook function NvmWrite/Erase */ -#define BTL_NVM_ERROR (0x00) /* return code for success */ -#define BTL_NVM_OKAY (0x01) /* return code for error */ -#define BTL_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */ +#define BLT_NVM_ERROR (0x00) /* return code for success */ +#define BLT_NVM_OKAY (0x01) /* return code for error */ +#define BLT_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */ #endif /* NVM_H */