- Fixed bug in data type of NvmEraseHook return code (blt_bool should have been blt_int8u).

- Added support for additional NVM driver in LPC-L2294 Demo's allowing operations on the 2MB external Intel C3 flash.
- Corrected the names of some return values for the NMV hooks (BTL_NVM_xxx to BLT_NVM_xxx).
- Fixed problem with incorrect xcpInfo.mta value by changing the GCC/Crossworks linker optimazation from -Os to -O1.


git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@11 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2011-12-01 22:30:33 +00:00
parent 9d0f49c259
commit 59919c4fb9
40 changed files with 3627 additions and 1985 deletions

View File

@ -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

View File

@ -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

View File

@ -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 <http://www.gnu.org/licenses/>.
|
| 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 <license.html>.
|
****************************************************************************************/
/****************************************************************************************
* 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 *********************************/

View File

@ -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 <http://www.gnu.org/licenses/>.
|
| 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 <license.html>.
|
****************************************************************************************/
#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 *********************************/

View File

@ -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 */

View File

@ -1,7 +1,7 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="lpc2294_crossworks" target="8" version="2">
<project Name="openbtl_olimex_lpc_l2294_20mhz">
<configuration Name="Common" arm_library_optimization="Fast" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" arm_use_gcc_libraries="No" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="Reset_Handler" gcc_optimization_level="Optimize For Size" gcc_strip_symbols="No" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="No" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" project_directory="" project_type="Executable"/>
<configuration Name="Common" arm_library_optimization="Fast" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" arm_use_gcc_libraries="No" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="Reset_Handler" gcc_optimization_level="Level 1" gcc_strip_symbols="No" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="No" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" project_directory="" project_type="Executable"/>
<configuration Name="RAM" target_reset_script="RAMReset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(PackagesDir)/targets/Olimex_LPC_E2294/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" target_reset_script="FLASHReset()"/>
<folder Name="Source Files">
@ -12,6 +12,8 @@
<file file_name="../hooks.c"/>
<file file_name="../lpc2294.h"/>
<file file_name="../main.c"/>
<file file_name="../extflash.c"/>
<file file_name="../extflash.h"/>
</folder>
</folder>
<folder Name="Source">

View File

@ -9,7 +9,7 @@
</ETMWindow>
<ExecutionCountWindow/>
<Memory1>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
<MemoryWindow autoEvaluate="0" addressText="0x80000200" numColumns="8" sizeText="32" dataSize="1" radix="16" addressSpace="" />
</Memory1>
<Memory2>
<MemoryWindow autoEvaluate="0" addressText="" numColumns="8" sizeText="" dataSize="1" radix="16" addressSpace="" />
@ -55,6 +55,9 @@
<Watch4>
<Watches active="0" update="Never" />
</Watch4>
<Files/>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\main.c" y="53" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\main.c" left="0" selected="0" name="unnamed" top="47" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="12" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\config.h" y="76" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot\config.h" left="0" selected="1" name="unnamed" top="72" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_lpc_l2294_20mhz" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Boot" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388479" debugSearchPath="" buildConfiguration="ARM Flash Debug" />
</session>

View File

@ -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 */

View File

@ -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;

View File

@ -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

View File

@ -1,7 +1,7 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="lpc2294_crossworks" target="8" version="2">
<project Name="demoprog_olimex_lpc_l2294_20mhz">
<configuration Name="Common" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="_start" gcc_optimization_level="None" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="Yes" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg" linker_output_format="srec" project_directory="" project_type="Executable"/>
<configuration Name="Common" arm_simulator_memory_simulation_filename="$(PackagesDir)/targets/Philips_LPC210X/LPC2000SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="LPC22;0x20000;0x4000;0x400000;0x100000;0x0;0x0" arm_target_loader_parameter="20000000" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_preprocessor_definitions="__TARGET_PROCESSOR=LPC2294;OSCILLATOR_CLOCK_FREQUENCY=20000000" c_user_include_directories="$(ProjectDir)/..;$(ProjectDir)/../../../../Source;$(ProjectDir)/../../../../Source/ARM7_LPC2000;$(ProjectDir)/../../../../Source/ARM7_LPC2000/Crossworks" gcc_entry_point="_start" gcc_optimization_level="None" link_include_standard_libraries="Yes" link_include_startup_code="No" linker_DebugIO_enabled="Yes" linker_additional_files="$(PackagesDir)/lib/liblpc2000$(LibExt)$(LIB)" linker_additional_options="" linker_keep_symbols="_vectors;EntryFromProg;ExtFlashTestData" linker_output_format="srec" project_directory="" project_type="Executable"/>
<configuration Name="RAM" target_reset_script="RAMReset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(PackagesDir)/targets/Olimex_LPC_E2294/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" target_reset_script="FLASHReset()"/>
<folder Name="Source Files">

View File

@ -55,6 +55,9 @@
<Watch4>
<Watches active="0" update="Never" />
</Watch4>
<Files/>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\main.c" y="0" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\main.c" left="0" selected="1" name="unnamed" top="30" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.c" y="0" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog\boot.c" left="0" selected="0" name="unnamed" top="0" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_lpc_l2294_20mhz" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARM7_LPC2000_Olimex_LPC_L2294_Crossworks\Prog" fileDialogDefaultFilter="*.c" autoConnectCapabilities="388479" debugSearchPath="" buildConfiguration="ARM Flash Debug" />
</session>

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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 <http://www.gnu.org/licenses/>.
|
| 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 <license.html>.
|
****************************************************************************************/
/****************************************************************************************
* 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 *********************************/

View File

@ -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 <http://www.gnu.org/licenses/>.
|
| 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 <license.html>.
|
****************************************************************************************/
#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 *********************************/

View File

@ -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 */

View File

@ -47,6 +47,8 @@
<File Name="../hooks.c"/>
<File Name="../main.c"/>
<File Name="../lpc2294.h"/>
<File Name="../extflash.c"/>
<File Name="../extflash.h"/>
</VirtualDirectory>
</VirtualDirectory>
</VirtualDirectory>

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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 ***/

View File

@ -1,7 +1,7 @@
<!DOCTYPE CrossStudio_Project_File>
<solution Name="stm32f103_crossworks" target="8" version="2">
<project Name="openbtl_olimex_stm32p103">
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="-I./..;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../../../../Source;-I./../../../../Source/ARMCM3_STM32;-I./../../../../Source/ARMCM3_STM32/Crossworks" c_user_include_directories="$(TargetsDir)/STM32/include" gcc_optimization_level="Optimize For Size" link_include_standard_libraries="Yes" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Common" Placement="Flash" Target="STM32F103RB" arm_architecture="v7M" arm_core_type="Cortex-M3" arm_linker_heap_size="128" arm_linker_jtag_pad_pre_dr="1" arm_linker_jtag_pad_pre_ir="5" arm_linker_process_stack_size="0" arm_linker_stack_size="128" arm_simulator_memory_simulation_filename="$(TargetsDir)/STM32/STM32SimulatorMemory.dll" arm_simulator_memory_simulation_parameter="STM32F103RB;0x20000;0x5000" arm_target_debug_interface_type="ADIv5" arm_target_loader_applicable_loaders="Flash" arm_target_loader_default_loader="Flash" arm_target_loader_parameter="8000000" arm_use_gcc_libraries="Yes" build_intermediate_directory="$(Configuration)/../../obj" build_output_directory="$(ProjectDir)/../bin" c_only_additional_options="-I./..;-I./../lib/CMSIS/CM3/CoreSupport;-I./../lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x;-I./../../../../Source;-I./../../../../Source/ARMCM3_STM32;-I./../../../../Source/ARMCM3_STM32/Crossworks" c_user_include_directories="$(TargetsDir)/STM32/include" gcc_optimization_level="Level 1" link_include_standard_libraries="Yes" linker_memory_map_file="$(TargetsDir)/STM32/STM32F103RB_MemoryMap.xml" linker_output_format="srec" linker_printf_enabled="No" linker_printf_width_precision_supported="No" linker_scanf_enabled="No" linker_section_placement_file="$(StudioDir)/targets/Cortex_M/flash_placement.xml" oscillator_frequency="8MHz" project_directory="" project_type="Executable" property_groups_file_path="$(TargetsDir)/STM32/propertyGroups.xml" target_get_partname_script="GetPartName()" target_match_partname_script="MatchPartName(&quot;$(Target)&quot;)" target_reset_script="Reset()"/>
<configuration Name="Flash" arm_target_flash_loader_file_path="$(TargetsDir)/STM32/Release/Loader_rpc.elf" arm_target_flash_loader_type="LIBMEM RPC Loader" arm_target_loader_can_lock_all="No" arm_target_loader_can_lock_range="No" arm_target_loader_can_unlock_all="No" arm_target_loader_can_unlock_range="No" target_reset_script="FLASHReset()"/>
<folder Name="Source Files">
<configuration Name="Common" filter="c;cpp;cxx;cc;h;s;asm;inc"/>

View File

@ -60,7 +60,7 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="23" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\main.c" y="72" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\main.c" left="0" selected="1" name="unnamed" top="57" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="17" debugPath="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\main.c" y="79" path="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\main.c" left="0" selected="1" name="unnamed" top="72" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32p103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\lib\CMSIS\CM3\DeviceSupport\ST\STM32F10x" fileDialogDefaultFilter="" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32p103" autoConnectTarget="Olimex ARM-USB-TINY" debugSearchFileMap="" fileDialogInitialDirectory="D:\usr\feaser\software\OpenBLT\Target\Demo\ARMCM3_STM32_Olimex_STM32P103_Crossworks\Boot\lib\CMSIS\CM3\DeviceSupport\ST\STM32F10x" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -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

View File

@ -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

View File

@ -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 ***/

View File

@ -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

View File

@ -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 ***/

View File

@ -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 */

View File

@ -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 ***/

View File

@ -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 */