- added support for CAN1 and CAN2 on the STM32CM4 target.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@57 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2013-08-15 14:20:46 +00:00
parent 4b214120a8
commit 02be6fef95
41 changed files with 3999 additions and 2827 deletions

View File

@ -1,5 +1,5 @@
[sci]
port=7
port=3
baudrate=8
[xcp]
seedkey=

View File

@ -706,7 +706,7 @@ S31508002BF009480068401C08490860704780B5FFF717
S31508002C00F3FF0548006802BD14E000E03F19010023
S31508002C1018E000E010E000E03C0F002080B5DFF887
S31508002C20780600210170DFF874160020FEF707FD0C
S31508002C30C0B2002804D09E21DFF8640600F0C0FB6D
S31508002C30C0B2002804D07C21DFF8640600F0C0FB8F
S31508002C4001BDDFF854060078002801D1012000E014
S31508002C500020704780B500F0F1FB012801D1002063
S31508002C6011E0DFF834060078002801D000200AE0D9
@ -785,8 +785,8 @@ S315080030E0A41C200000F047F90500AE19A41C200016
S315080030F000F041F986196D1EA41CADB2022DF6DA50
S31508003100F6B2F643200000F036F9F6B2864201D050
S31508003110002000E0012070BD2DE9F04105000E00F9
S3150800312014005FF00008002E01D0002D04D14FF4E2
S3150800313016715B4800F044F92800FFF7AFFF070057
S3150800312014005FF00008002E01D0002D04D140F2F3
S3150800313036215B4800F044F92800FFF7AFFF070087
S31508003140FFB2032F01D10020A3E02800FFF7C5FF37
S31508003150002802D15FF0FF309BE0FFB2002F03D0BA
S31508003160022F5AD028D392E0AD1C280000F003F9AC

View File

@ -12,12 +12,12 @@
<Column0>214</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
<Column0>287</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1059</ColumnWidth1><ColumnWidth2>282</ColumnWidth2><ColumnWidth3>70</ColumnWidth3></Build><Debug-Log><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1413</ColumnWidth1></Debug-Log><TerminalIO/><Find-in-Files><ColumnWidth0>664</ColumnWidth0><ColumnWidth1>94</ColumnWidth1><ColumnWidth2>1138</ColumnWidth2></Find-in-Files></Static>
<Windows>
<Wnd1>
<Wnd0>
<Tabs>
<Tab>
<Identity>TabID-32216-31616</Identity>
@ -29,20 +29,20 @@
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd1><Wnd3><Tabs><Tab><Identity>TabID-13144-32069</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-25023-6652</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-18334-26223</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<SelectedTab>0</SelectedTab></Wnd0><Wnd2><Tabs><Tab><Identity>TabID-13144-32069</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-25023-6652</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-18334-26223</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>16</YPos2><SelStart2>2198</SelStart2><SelEnd2>2198</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>266</YPos2><SelStart2>13853</SelStart2><SelEnd2>13853</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>109</YPos2><SelStart2>4648</SelStart2><SelEnd2>4670</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>16</YPos2><SelStart2>2198</SelStart2><SelEnd2>2198</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>266</YPos2><SelStart2>13853</SelStart2><SelEnd2>13853</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>109</YPos2><SelStart2>4648</SelStart2><SelEnd2>4670</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>72</YPos2><SelStart2>4701</SelStart2><SelEnd2>4701</SelEnd2></Tab><ActiveTab>3</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM3_STM32\can.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>310</YPos2><SelStart2>14069</SelStart2><SelEnd2>14069</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-0131cf20><key>iaridepm.enu1</key></Toolbar-0131cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>617</Bottom><Right>305</Right><x>-2</x><y>-2</y><xscreen>176</xscreen><yscreen>166</yscreen><sizeHorzCX>136012</sizeHorzCX><sizeHorzCY>201701</sizeHorzCY><sizeVertCX>237249</sizeVertCX><sizeVertCY>752126</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>161</Bottom><Right>1296</Right><x>-2</x><y>-2</y><xscreen>1298</xscreen><yscreen>163</yscreen><sizeHorzCX>1003091</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>104328</sizeVertCX><sizeVertCY>198056</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-02afeb38><key>iaridepm.enu1</key></Toolbar-02afeb38></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>621</Bottom><Right>378</Right><x>-2</x><y>-2</y><xscreen>218</xscreen><yscreen>167</yscreen><sizeHorzCX>136250</sizeHorzCX><sizeHorzCY>201691</sizeHorzCY><sizeVertCX>237500</sizeVertCX><sizeVertCY>752415</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>162</Bottom><Right>1602</Right><x>-2</x><y>-2</y><xscreen>1604</xscreen><yscreen>164</yscreen><sizeHorzCX>1002500</sizeHorzCX><sizeHorzCY>198068</sizeHorzCY><sizeVertCX>104375</sizeVertCX><sizeVertCY>198068</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

View File

@ -1633,6 +1633,18 @@ Discarded input sections
.text 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.data 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.text 0x00000000 0x0 THUMB Debug/../../obj/can.o
.data 0x00000000 0x0 THUMB Debug/../../obj/can.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/can.o
.debug_info 0x00000000 0x64 THUMB Debug/../../obj/can.o
.debug_abbrev 0x00000000 0x26 THUMB Debug/../../obj/can.o
.debug_aranges
0x00000000 0x18 THUMB Debug/../../obj/can.o
.debug_line 0x00000000 0x1d THUMB Debug/../../obj/can.o
.debug_str 0x00000000 0x18a THUMB Debug/../../obj/can.o
.comment 0x00000000 0x4f THUMB Debug/../../obj/can.o
.ARM.attributes
0x00000000 0x33 THUMB Debug/../../obj/can.o
.text 0x00000000 0x0 THUMB Debug/../../obj/assert.o
.data 0x00000000 0x0 THUMB Debug/../../obj/assert.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/assert.o
@ -2449,7 +2461,7 @@ CM3_System_Control_Space 0xe000e000 0x00001000 xw
Linker script and memory map
0x08006624 __do_debug_operation = __do_debug_operation_mempoll
0x08006648 __do_debug_operation = __do_debug_operation_mempoll
0x08000000 __FLASH_segment_start__ = 0x8000000
0x08008000 __FLASH_segment_end__ = 0x8008000
0x10000000 __DATA_SRAM_segment_start__ = 0x10000000
@ -2534,7 +2546,7 @@ Linker script and memory map
0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment)
0x08000328 __text_load_start__ = ALIGN (__init_end__, 0x4)
.text 0x08000328 0x6340
.text 0x08000328 0x6364
0x08000328 __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
@ -2932,43 +2944,50 @@ Linker script and memory map
0x08005df0 0x1c THUMB Debug/../../obj/file.o
.text.FileLibByteToHexString
0x08005e0c 0x24 THUMB Debug/../../obj/file.o
.text.SrecParseLine
0x08005e30 0x258 THUMB Debug/../../obj/file.o
.text.FileInit
0x08006088 0x30 THUMB Debug/../../obj/file.o
0x08006088 FileInit
0x08005e30 0x30 THUMB Debug/../../obj/file.o
0x08005e30 FileInit
.text.FileIsIdle
0x080060b8 0x14 THUMB Debug/../../obj/file.o
0x080060b8 FileIsIdle
0x08005e60 0x14 THUMB Debug/../../obj/file.o
0x08005e60 FileIsIdle
.text.FileHandleFirmwareUpdateRequest
0x080060cc 0x3c THUMB Debug/../../obj/file.o
0x080060cc FileHandleFirmwareUpdateRequest
0x08005e74 0x3c THUMB Debug/../../obj/file.o
0x08005e74 FileHandleFirmwareUpdateRequest
.text.FileSrecGetLineType
0x08005eb0 0x44 THUMB Debug/../../obj/file.o
0x08005eb0 FileSrecGetLineType
.text.FileSrecVerifyChecksum
0x08005ef4 0x94 THUMB Debug/../../obj/file.o
0x08005ef4 FileSrecVerifyChecksum
.text.FileSrecParseLine
0x08005f88 0x1a4 THUMB Debug/../../obj/file.o
0x08005f88 FileSrecParseLine
.text.FileTask
0x08006108 0x4b4 THUMB Debug/../../obj/file.o
0x08006108 FileTask
0x0800612c 0x4b4 THUMB Debug/../../obj/file.o
0x0800612c FileTask
.text.libc.isdigit
0x080065bc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065bc isdigit
0x080065e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065e0 isdigit
.text.libc.toupper
0x080065cc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065cc toupper
0x080065f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065f0 toupper
.text.libc.memcpy
0x080065dc 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
0x080065dc __aeabi_memcpy
0x080065dc __aeabi_memcpy4
0x080065dc __aeabi_memcpy8
0x080065dc memcpy
0x08006600 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
0x08006600 __aeabi_memcpy
0x08006600 __aeabi_memcpy4
0x08006600 __aeabi_memcpy8
0x08006600 memcpy
.text.libdebugio.__do_debug_operation_mempoll
0x08006624 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x08006624 __do_debug_operation_mempoll
0x08006648 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x08006648 __do_debug_operation_mempoll
.text.libc.__debug_io_lock
0x08006660 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006660 __debug_io_lock
0x08006684 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006684 __debug_io_lock
.text.libc.__debug_io_unlock
0x08006664 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006664 __debug_io_unlock
0x08006668 __text_end__ = (__text_start__ + SIZEOF (.text))
0x08006668 __text_load_end__ = __text_end__
0x08006688 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006688 __debug_io_unlock
0x0800668c __text_end__ = (__text_start__ + SIZEOF (.text))
0x0800668c __text_load_end__ = __text_end__
.vfp11_veneer 0x00000000 0x0
.vfp11_veneer 0x00000000 0x0 linker stubs
@ -2979,87 +2998,87 @@ Linker script and memory map
.iplt 0x00000000 0x0
.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment)
0x08006668 __dtors_load_start__ = ALIGN (__text_end__, 0x4)
0x0800668c __dtors_load_start__ = ALIGN (__text_end__, 0x4)
.dtors 0x08006668 0x0
0x08006668 __dtors_start__ = .
.dtors 0x0800668c 0x0
0x0800668c __dtors_start__ = .
*(SORT(.dtors.*))
*(.dtors)
*(.fini_array .fini_array.*)
0x08006668 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
0x08006668 __dtors_load_end__ = __dtors_end__
0x0800668c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
0x0800668c __dtors_load_end__ = __dtors_end__
0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment)
0x08006668 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
0x0800668c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
.ctors 0x08006668 0x0
0x08006668 __ctors_start__ = .
.ctors 0x0800668c 0x0
0x0800668c __ctors_start__ = .
*(SORT(.ctors.*))
*(.ctors)
*(.init_array .init_array.*)
0x08006668 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
0x08006668 __ctors_load_end__ = __ctors_end__
0x0800668c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
0x0800668c __ctors_load_end__ = __ctors_end__
0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment)
0x08006668 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
0x0800668c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
.rodata 0x08006668 0x96c
0x08006668 __rodata_start__ = .
.rodata 0x0800668c 0x96c
0x0800668c __rodata_start__ = .
*(.rodata .rodata.* .gnu.linkonce.r.*)
.rodata.firmwareFilename
0x08006668 0x20 THUMB Debug/../../obj/hooks.o
0x0800668c 0x20 THUMB Debug/../../obj/hooks.o
.rodata.str1.4
0x08006688 0xd THUMB Debug/../../obj/hooks.o
0x080066ac 0xd THUMB Debug/../../obj/hooks.o
0x10 (size before relaxing)
*fill* 0x08006695 0x3 00
*fill* 0x080066b9 0x3 00
.rodata.str1.4
0x08006698 0x8c THUMB Debug/../../obj/vectors.o
0x080066bc 0x8c THUMB Debug/../../obj/vectors.o
.rodata.flashSectorNumToMask
0x08006724 0x30 THUMB Debug/../../obj/flash.o
0x08006748 0x30 THUMB Debug/../../obj/flash.o
.rodata.flashLayout
0x08006754 0x78 THUMB Debug/../../obj/flash.o
0x08006778 0x78 THUMB Debug/../../obj/flash.o
.rodata.str1.4
0x080067cc 0x7e THUMB Debug/../../obj/uart.o
0x080067f0 0x7e THUMB Debug/../../obj/uart.o
0x80 (size before relaxing)
*fill* 0x0800684a 0x2 00
*fill* 0x0800686e 0x2 00
.rodata.xcpStationId
0x0800684c 0x8 THUMB Debug/../../obj/xcp.o
0x08006870 0x8 THUMB Debug/../../obj/xcp.o
.rodata.str1.4
0x08006854 0x13 THUMB Debug/../../obj/ff.o
0x08006878 0x13 THUMB Debug/../../obj/ff.o
0x14 (size before relaxing)
*fill* 0x08006867 0x1 00
.rodata.ExCvt 0x08006868 0x80 THUMB Debug/../../obj/ff.o
*fill* 0x0800688b 0x1 00
.rodata.ExCvt 0x0800688c 0x80 THUMB Debug/../../obj/ff.o
.rodata.LfnOfs
0x080068e8 0x10 THUMB Debug/../../obj/ff.o
0x0800690c 0x10 THUMB Debug/../../obj/ff.o
.rodata.tbl_lower.3809
0x080068f8 0x1e0 THUMB Debug/../../obj/unicode.o
.rodata.Tbl 0x08006ad8 0x100 THUMB Debug/../../obj/unicode.o
0x0800691c 0x1e0 THUMB Debug/../../obj/unicode.o
.rodata.Tbl 0x08006afc 0x100 THUMB Debug/../../obj/unicode.o
.rodata.tbl_upper.3810
0x08006bd8 0x1e0 THUMB Debug/../../obj/unicode.o
0x08006bfc 0x1e0 THUMB Debug/../../obj/unicode.o
.rodata.str1.4
0x08006db8 0x21c THUMB Debug/../../obj/file.o
0x08006ddc 0x21c THUMB Debug/../../obj/file.o
0x220 (size before relaxing)
0x08006fd4 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
0x08006fd4 __rodata_load_end__ = __rodata_end__
0x08006ff8 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
0x08006ff8 __rodata_load_end__ = __rodata_end__
.rel.dyn 0x08000000 0x0
.rel.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment)
0x08006fd4 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4)
0x08006ff8 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4)
.ARM.exidx 0x08006fd4 0x0
0x08006fd4 __ARM.exidx_start__ = .
0x08006fd4 __exidx_start = __ARM.exidx_start__
.ARM.exidx 0x08006ff8 0x0
0x08006ff8 __ARM.exidx_start__ = .
0x08006ff8 __exidx_start = __ARM.exidx_start__
*(.ARM.exidx .ARM.exidx.*)
0x08006fd4 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx))
0x08006fd4 __exidx_end = __ARM.exidx_end__
0x08006fd4 __ARM.exidx_load_end__ = __ARM.exidx_end__
0x08006ff8 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx))
0x08006ff8 __exidx_end = __ARM.exidx_end__
0x08006ff8 __ARM.exidx_load_end__ = __ARM.exidx_end__
0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment)
0x08006fd4 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4)
0x08006ff8 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4)
.fast 0x20000000 0x0 load address 0x08006fd4
.fast 0x20000000 0x0 load address 0x08006ff8
0x20000000 __fast_start__ = .
*(.fast .fast.*)
0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast))
0x08006fd4 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
0x08006ff8 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment)
.fast_run 0x20000000 0x0
@ -3068,9 +3087,9 @@ 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_end__)), error: .fast_run is too large to fit in RAM memory segment)
0x08006fd4 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4)
0x08006ff8 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4)
.data 0x20000000 0x18 load address 0x08006fd4
.data 0x20000000 0x18 load address 0x08006ff8
0x20000000 __data_start__ = .
*(.data .data.* .gnu.linkonce.d.*)
.data.DMAEndOfTransfer
@ -3080,13 +3099,13 @@ Linker script and memory map
.data.APBAHBPrescTable
0x20000008 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o
0x20000018 __data_end__ = (__data_start__ + SIZEOF (.data))
0x08006fec __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
0x08007010 __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
.igot.plt 0x00000000 0x0
.igot.plt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment)
.data_run 0x20000000 0x18 load address 0x08006fd4
.data_run 0x20000000 0x18 load address 0x08006ff8
0x20000000 __data_run_start__ = .
0x20000018 . = MAX ((__data_run_start__ + SIZEOF (.data)), .)
*fill* 0x20000000 0x18 00
@ -3095,7 +3114,7 @@ Linker script and memory map
0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= __RAM_segment_end__)), error: .data_run is too large to fit in RAM memory segment)
0x20000018 __bss_load_start__ = ALIGN (__data_run_end__, 0x4)
.bss 0x20000018 0x1028
.bss 0x20000018 0x1024
0x20000018 __bss_start__ = .
*(.bss .bss.* .gnu.linkonce.b.*)
.bss.TransferError
@ -3124,115 +3143,114 @@ Linker script and memory map
0x20000514 0x204 THUMB Debug/../../obj/flash.o
.bss.millisecond_counter
0x20000718 0x4 THUMB Debug/../../obj/timer.o
.bss.xcpCtoRxInProgress.7303
0x2000071c 0x1 THUMB Debug/../../obj/uart.o
*fill* 0x2000071d 0x3 00
.bss.xcpCtoReqPacket.7301
0x20000720 0x44 THUMB Debug/../../obj/uart.o
.bss.xcpCtoRxLength.7302
0x20000764 0x1 THUMB Debug/../../obj/uart.o
*fill* 0x20000765 0x3 00
.bss.xcpCtoReqPacket.7320
0x2000071c 0x44 THUMB Debug/../../obj/uart.o
.bss.xcpCtoRxLength.7321
0x20000760 0x1 THUMB Debug/../../obj/uart.o
.bss.xcpCtoRxInProgress.7322
0x20000761 0x1 THUMB Debug/../../obj/uart.o
*fill* 0x20000762 0x2 00
.bss.assert_failure_file
0x20000768 0x4 THUMB Debug/../../obj/assert.o
0x20000764 0x4 THUMB Debug/../../obj/assert.o
.bss.assert_failure_line
0x2000076c 0x4 THUMB Debug/../../obj/assert.o
0x20000768 0x4 THUMB Debug/../../obj/assert.o
.bss.backdoorOpen
0x20000770 0x1 THUMB Debug/../../obj/backdoor.o
*fill* 0x20000771 0x3 00
0x2000076c 0x1 THUMB Debug/../../obj/backdoor.o
*fill* 0x2000076d 0x3 00
.bss.backdoorOpenTime
0x20000774 0x4 THUMB Debug/../../obj/backdoor.o
0x20000770 0x4 THUMB Debug/../../obj/backdoor.o
.bss.comEntryStateConnect
0x20000778 0x1 THUMB Debug/../../obj/com.o
*fill* 0x20000779 0x3 00
.bss.xcpCtoReqPacket.3915
0x2000077c 0x40 THUMB Debug/../../obj/com.o
.bss.xcpInfo 0x200007bc 0x4c THUMB Debug/../../obj/xcp.o
.bss.LfnBuf 0x20000808 0x200 THUMB Debug/../../obj/ff.o
.bss.Fsid 0x20000a08 0x2 THUMB Debug/../../obj/ff.o
*fill* 0x20000a0a 0x2 00
.bss.FatFs 0x20000a0c 0x4 THUMB Debug/../../obj/ff.o
0x20000774 0x1 THUMB Debug/../../obj/com.o
*fill* 0x20000775 0x3 00
.bss.xcpCtoReqPacket.3934
0x20000778 0x40 THUMB Debug/../../obj/com.o
.bss.xcpInfo 0x200007b8 0x4c THUMB Debug/../../obj/xcp.o
.bss.LfnBuf 0x20000804 0x200 THUMB Debug/../../obj/ff.o
.bss.Fsid 0x20000a04 0x2 THUMB Debug/../../obj/ff.o
*fill* 0x20000a06 0x2 00
.bss.FatFs 0x20000a08 0x4 THUMB Debug/../../obj/ff.o
.bss.loggingStr
0x20000a10 0x40 THUMB Debug/../../obj/file.o
0x20000a0c 0x40 THUMB Debug/../../obj/file.o
.bss.firmwareUpdateState
0x20000a50 0x1 THUMB Debug/../../obj/file.o
*fill* 0x20000a51 0x3 00
0x20000a4c 0x1 THUMB Debug/../../obj/file.o
*fill* 0x20000a4d 0x3 00
.bss.eraseInfo
0x20000a54 0x8 THUMB Debug/../../obj/file.o
0x20000a50 0x8 THUMB Debug/../../obj/file.o
.bss.fatFsObjects
0x20000a5c 0x458 THUMB Debug/../../obj/file.o
0x20000a58 0x458 THUMB Debug/../../obj/file.o
.bss.lineParseObject
0x20000eb4 0x184 THUMB Debug/../../obj/file.o
0x20000eb0 0x184 THUMB Debug/../../obj/file.o
.bss.libdebugio.dbgCommWord
0x20001038 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x20001038 dbgCommWord
0x20001034 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x20001034 dbgCommWord
.bss.libdebugio.dbgCntrlWord_mempoll
0x2000103c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x2000103c dbgCntrlWord_mempoll
0x20001038 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x20001038 dbgCntrlWord_mempoll
*(COMMON)
0x20001040 __bss_end__ = (__bss_start__ + SIZEOF (.bss))
0x20001040 __bss_load_end__ = __bss_end__
0x2000103c __bss_end__ = (__bss_start__ + SIZEOF (.bss))
0x2000103c __bss_load_end__ = __bss_end__
0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= __RAM_segment_end__)), error: .bss is too large to fit in RAM memory segment)
0x20001040 __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
0x2000103c __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
.non_init 0x20001040 0x0
0x20001040 __non_init_start__ = .
.non_init 0x2000103c 0x0
0x2000103c __non_init_start__ = .
*(.non_init .non_init.*)
0x20001040 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
0x20001040 __non_init_load_end__ = __non_init_end__
0x2000103c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
0x2000103c __non_init_load_end__ = __non_init_end__
0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= __RAM_segment_end__)), error: .non_init is too large to fit in RAM memory segment)
0x20001040 __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
0x2000103c __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
.heap 0x20001040 0x800
0x20001040 __heap_start__ = .
.heap 0x2000103c 0x800
0x2000103c __heap_start__ = .
*(.heap .heap.*)
0x20001840 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
*fill* 0x20001040 0x800 00
0x20001840 __heap_end__ = (__heap_start__ + SIZEOF (.heap))
0x20001840 __heap_load_end__ = __heap_end__
0x2000183c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
*fill* 0x2000103c 0x800 00
0x2000183c __heap_end__ = (__heap_start__ + SIZEOF (.heap))
0x2000183c __heap_load_end__ = __heap_end__
0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= __RAM_segment_end__)), error: .heap is too large to fit in RAM memory segment)
0x20001840 __stack_load_start__ = ALIGN (__heap_end__, 0x4)
0x2000183c __stack_load_start__ = ALIGN (__heap_end__, 0x4)
.stack 0x20001840 0x800
0x20001840 __stack_start__ = .
.stack 0x2000183c 0x800
0x2000183c __stack_start__ = .
*(.stack .stack.*)
0x20002040 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
*fill* 0x20001840 0x800 00
0x20002040 __stack_end__ = (__stack_start__ + SIZEOF (.stack))
0x20002040 __stack_load_end__ = __stack_end__
0x2000203c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
*fill* 0x2000183c 0x800 00
0x2000203c __stack_end__ = (__stack_start__ + SIZEOF (.stack))
0x2000203c __stack_load_end__ = __stack_end__
0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= __RAM_segment_end__)), error: .stack is too large to fit in RAM memory segment)
0x20002040 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4)
0x2000203c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4)
.stack_process 0x20002040 0x0
0x20002040 __stack_process_start__ = .
.stack_process 0x2000203c 0x0
0x2000203c __stack_process_start__ = .
*(.stack_process .stack_process.*)
0x20002040 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4)
0x20002040 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process))
0x20002040 __stack_process_load_end__ = __stack_process_end__
0x2000203c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4)
0x2000203c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process))
0x2000203c __stack_process_load_end__ = __stack_process_end__
0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= __RAM_segment_end__)), error: .stack_process is too large to fit in RAM memory segment)
0x20002040 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4)
0x2000203c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4)
.tbss 0x20002040 0x0
0x20002040 __tbss_start__ = .
.tbss 0x2000203c 0x0
0x2000203c __tbss_start__ = .
*(.tbss .tbss.*)
0x20002040 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss))
0x20002040 __tbss_load_end__ = __tbss_end__
0x2000203c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss))
0x2000203c __tbss_load_end__ = __tbss_end__
0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= __RAM_segment_end__)), error: .tbss is too large to fit in RAM memory segment)
0x08006fec __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
0x08007010 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
.tdata 0x20002040 0x0 load address 0x08006fec
0x20002040 __tdata_start__ = .
.tdata 0x2000203c 0x0 load address 0x08007010
0x2000203c __tdata_start__ = .
*(.tdata .tdata.*)
0x20002040 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata))
0x08006fec __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata))
0x08006fec __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata))
0x2000203c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata))
0x08007010 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata))
0x08007010 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata))
0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment)
.tdata_run 0x20002040 0x0
0x20002040 __tdata_run_start__ = .
0x20002040 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .)
0x20002040 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run))
0x20002040 __tdata_run_load_end__ = __tdata_run_end__
0x20002040 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run))
.tdata_run 0x2000203c 0x0
0x2000203c __tdata_run_start__ = .
0x2000203c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .)
0x2000203c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run))
0x2000203c __tdata_run_load_end__ = __tdata_run_end__
0x2000203c __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run))
0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= __RAM_segment_end__)), error: .tdata_run is too large to fit in RAM memory segment)
START GROUP
LOAD THUMB Debug/../../obj/mmc.o
@ -3277,6 +3295,7 @@ LOAD THUMB Debug/../../obj/flash.o
LOAD THUMB Debug/../../obj/nvm.o
LOAD THUMB Debug/../../obj/timer.o
LOAD THUMB Debug/../../obj/uart.o
LOAD THUMB Debug/../../obj/can.o
LOAD THUMB Debug/../../obj/assert.o
LOAD THUMB Debug/../../obj/backdoor.o
LOAD THUMB Debug/../../obj/boot.o
@ -3296,7 +3315,7 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib
END GROUP
OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossworks/Boot/ide/../bin/openbtl_olimex_stm32e407.elf elf32-littlearm)
.debug_frame 0x00000000 0x3b20
.debug_frame 0x00000000 0x3b54
.debug_frame 0x00000000 0x4e0 THUMB Debug/../../obj/mmc.o
.debug_frame 0x000004e0 0x38 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_frame 0x00000518 0x2c8 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3320,13 +3339,13 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_frame 0x00001698 0x80 THUMB Debug/../../obj/xcp.o
.debug_frame 0x00001718 0x688 THUMB Debug/../../obj/ff.o
.debug_frame 0x00001da0 0x30 THUMB Debug/../../obj/unicode.o
.debug_frame 0x00001dd0 0x120 THUMB Debug/../../obj/file.o
.debug_frame 0x00001ef0 0x12e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_frame 0x000031d0 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
.debug_frame 0x000032f0 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_frame 0x00003a80 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_frame 0x00001dd0 0x154 THUMB Debug/../../obj/file.o
.debug_frame 0x00001f24 0x12e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_frame 0x00003204 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
.debug_frame 0x00003324 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_frame 0x00003ab4 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_info 0x00000000 0x1000f
.debug_info 0x00000000 0x10008
.debug_info 0x00000000 0x35cb THUMB Debug/../../obj/mmc.o
.debug_info 0x000035cb 0x61d THUMB Debug/../../obj/system_stm32f4xx.o
.debug_info 0x00003be8 0x8a0 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3351,12 +3370,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_info 0x00009ba6 0x83a THUMB Debug/../../obj/xcp.o
.debug_info 0x0000a3e0 0x3562 THUMB Debug/../../obj/ff.o
.debug_info 0x0000d942 0x169 THUMB Debug/../../obj/unicode.o
.debug_info 0x0000daab 0x122d THUMB Debug/../../obj/file.o
.debug_info 0x0000ecd8 0xd02 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_info 0x0000f9da 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_info 0x0000ff39 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_info 0x0000daab 0x1226 THUMB Debug/../../obj/file.o
.debug_info 0x0000ecd1 0xd02 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_info 0x0000f9d3 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_info 0x0000ff32 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_abbrev 0x00000000 0x27e3
.debug_abbrev 0x00000000 0x2799
.debug_abbrev 0x00000000 0x370 THUMB Debug/../../obj/mmc.o
.debug_abbrev 0x00000370 0x158 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_abbrev 0x000004c8 0x1a9 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3381,12 +3400,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_abbrev 0x00001e2a 0x24d THUMB Debug/../../obj/xcp.o
.debug_abbrev 0x00002077 0x337 THUMB Debug/../../obj/ff.o
.debug_abbrev 0x000023ae 0xa8 THUMB Debug/../../obj/unicode.o
.debug_abbrev 0x00002456 0x25c THUMB Debug/../../obj/file.o
.debug_abbrev 0x000026b2 0xcb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_abbrev 0x0000277d 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_abbrev 0x000027bb 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_abbrev 0x00002456 0x212 THUMB Debug/../../obj/file.o
.debug_abbrev 0x00002668 0xcb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_abbrev 0x00002733 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_abbrev 0x00002771 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_loc 0x00000000 0xeb2d
.debug_loc 0x00000000 0xeb43
.debug_loc 0x00000000 0x2289 THUMB Debug/../../obj/mmc.o
.debug_loc 0x00002289 0x1a7 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_loc 0x00002430 0x83a THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3409,11 +3428,11 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_loc 0x00005c84 0x248 THUMB Debug/../../obj/xcp.o
.debug_loc 0x00005ecc 0x68fe THUMB Debug/../../obj/ff.o
.debug_loc 0x0000c7ca 0x179 THUMB Debug/../../obj/unicode.o
.debug_loc 0x0000c943 0x964 THUMB Debug/../../obj/file.o
.debug_loc 0x0000d2a7 0x1092 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_loc 0x0000e339 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_loc 0x0000c943 0x97a THUMB Debug/../../obj/file.o
.debug_loc 0x0000d2bd 0x1092 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_loc 0x0000e34f 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_aranges 0x00000000 0x1360
.debug_aranges 0x00000000 0x1370
.debug_aranges
0x00000000 0x140 THUMB Debug/../../obj/mmc.o
.debug_aranges
@ -3463,15 +3482,15 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_aranges
0x00000b58 0x28 THUMB Debug/../../obj/unicode.o
.debug_aranges
0x00000b80 0x60 THUMB Debug/../../obj/file.o
0x00000b80 0x70 THUMB Debug/../../obj/file.o
.debug_aranges
0x00000be0 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x00000bf0 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_aranges
0x000010e8 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x000010f8 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_aranges
0x00001300 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x00001310 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_ranges 0x00000000 0x1468
.debug_ranges 0x00000000 0x1420
.debug_ranges 0x00000000 0x1f0 THUMB Debug/../../obj/mmc.o
.debug_ranges 0x000001f0 0x18 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_ranges 0x00000208 0x108 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3495,12 +3514,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_ranges 0x00000910 0x80 THUMB Debug/../../obj/xcp.o
.debug_ranges 0x00000990 0x2c8 THUMB Debug/../../obj/ff.o
.debug_ranges 0x00000c58 0x18 THUMB Debug/../../obj/unicode.o
.debug_ranges 0x00000c70 0xa8 THUMB Debug/../../obj/file.o
.debug_ranges 0x00000d18 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_ranges 0x00001210 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_ranges 0x00001418 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_ranges 0x00000c70 0x60 THUMB Debug/../../obj/file.o
.debug_ranges 0x00000cd0 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_ranges 0x000011c8 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_ranges 0x000013d0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_line 0x00000000 0x5e02
.debug_line 0x00000000 0x5e4c
.debug_line 0x00000000 0xb4f THUMB Debug/../../obj/mmc.o
.debug_line 0x00000b4f 0x21c THUMB Debug/../../obj/system_stm32f4xx.o
.debug_line 0x00000d6b 0x49f THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3525,12 +3544,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_line 0x00003bcf 0x1fd THUMB Debug/../../obj/xcp.o
.debug_line 0x00003dcc 0xfb9 THUMB Debug/../../obj/ff.o
.debug_line 0x00004d85 0x185 THUMB Debug/../../obj/unicode.o
.debug_line 0x00004f0a 0x381 THUMB Debug/../../obj/file.o
.debug_line 0x0000528b 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_line 0x0000583e 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_line 0x00005d8e 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_line 0x00004f0a 0x3cb THUMB Debug/../../obj/file.o
.debug_line 0x000052d5 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_line 0x00005888 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_line 0x00005dd8 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_str 0x00000000 0x4a49
.debug_str 0x00000000 0x4a55
.debug_str 0x00000000 0x1460 THUMB Debug/../../obj/mmc.o
0x1526 (size before relaxing)
.debug_str 0x00001460 0x276 THUMB Debug/../../obj/system_stm32f4xx.o
@ -3577,13 +3596,13 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
0x74c (size before relaxing)
.debug_str 0x00003cc4 0x99 THUMB Debug/../../obj/unicode.o
0x165 (size before relaxing)
.debug_str 0x00003d5d 0x2f8 THUMB Debug/../../obj/file.o
0x7dd (size before relaxing)
.debug_str 0x00004055 0x56f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_str 0x00003d5d 0x304 THUMB Debug/../../obj/file.o
0x7e9 (size before relaxing)
.debug_str 0x00004061 0x56f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x655 (size before relaxing)
.debug_str 0x000045c4 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_str 0x000045d0 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x3fc (size before relaxing)
.debug_str 0x00004977 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_str 0x00004983 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x11b (size before relaxing)
.comment 0x00000000 0x4e

View File

@ -1,5 +1,5 @@
S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF
S315080000004020002017020008D1220008D12200084B
S315080000003C20002017020008D1220008D12200084F
S31508000010D1220008D1220008D1220008D1220008E6
S31508000020D1220008D1220008D1220008D1220008D6
S31508000030D1220008D1220008D1220008D1220008C6
@ -44,12 +44,12 @@ S3150800028803BCF7E700208646EC4600200021234AEF
S315080002989047FEE7884207D0521A05D003780130FE
S315080002A80B700131013AF9D17047884202D00270C1
S315080002B80130FAE77047000008ED00E00000000882
S315080002C840200020D46F00080000002018000020F5
S315080002D8280300082803000868660008D46F000881
S315080002E8000000200000002068660008686600080C
S315080002F86866000868660008686600086866000890
S315080003086866000868660008D46F000818000020A8
S315080003184010002040100020401800204522000800
S315080002C83C200020F86F00080000002018000020D5
S315080002D828030008280300088C660008F86F000839
S315080002E800000020000000208C6600088C660008C4
S315080002F88C6600088C6600088C6600088C66000800
S315080003088C6600088C660008F86F0008180000203C
S315080003183C1000203C1000203C180020452200080C
S3150800032808B54FF43053C4F20103586B10F0450F63
S3150800033807D14FF43052C4F20102506B10F0450F42
S31508000348FBD010F0040F06D04FF0040001F01EFE93
@ -376,13 +376,13 @@ S3150800174840F20402C2F20002107808BD2DE9B0433F
S31508001758ADF5027D88461746C8B120E04FF0000966
S315080017684FF40075E219009502A84FEA42224B4643
S31508001778FFF71AFDB0B9FFF7A3FF0128FBD008EB5E
S31508001788442002A92A4604F025FF8CB90DE003F186
S31508001788442002A92A4604F037FF8CB90DE003F174
S31508001798FF34E4B2002BE1D14FF001000CE04FF022
S315080017A8010009E04FF0010006E04FF0000003E0F1
S315080017B804F1FF30C4B2D5E70DF5027DBDE8B08364
S315080017C82DE9F043ADF5037D0F469046E8B124E0D0
S315080017D84FF400754FF0000902A807EB44212A4682
S315080017E804F0F8FE04EB0802009502A84FEA422224
S315080017E804F00AFF04EB0802009502A84FEA422211
S315080017F84B46FFF7F3FD064608B1052810D1FFF753
S315080018085FFF0128FBD08CB90DE003F1FF34E4B281
S31508001818002BDDD14FF001000CE04FF0010009E084
@ -527,18 +527,18 @@ S315080020B823F400514FEA01424FEA124383817047DD
S315080020C84FEAC1514FEAD1528280704780884FEA59
S315080020D8C0514FEAD1507047038819420CBF0020F7
S315080020E80120704700B589B04FF0000300930193AB
S315080020F802930393049305930693079346F268603D
S315080020F802930393049305930693079346F28C6019
S31508002108C0F60000694603F0BFFC40B9009848B11C
S315080021189DF8081081F01002C2F3001004E04FF091
S31508002128000001E04FF0000009B000BD46F2686003
S31508002128000001E04FF0000009B000BD46F28C60DF
S31508002138C0F60000704700BF08B540F2E800C2F2D2
S3150800214800004FF0000380F8243246F28861C0F692
S3150800214800004FF0000380F8243246F2AC61C0F66E
S3150800215800014FF00A0203F09BF838B940F2E8008C
S31508002168C2F200004FF0010280F8242208BD00BF21
S3150800217838B540F2E803C2F2000393F824020128AE
S3150800218805D140F2E800C2F2000003F093FB4FF4D1
S31508002198A054C4F201044FF0400520462946FFF72B
S315080021A89BFF0028F9D046F26860C0F6000003F0E5
S315080021A89BFF0028F9D046F28C60C0F6000003F0C1
S315080021B893FC38BD08B540F2E803C2F2000393F869
S315080021C82402012805D140F2E800C2F2000003F013
S315080021D871FB08BD70B5064640F2E803C2F2000373
@ -556,7 +556,7 @@ S315080022882BFD4FF000038DF806304FF001008DF84E
S3150800229807004FF002058DF804504FF040010091F1
S315080022A88DF8055020466946FFF760FC8DF80450FE
S315080022B84FF08002009220466946FFF757FC00F067
S315080022C85DFD00F069FDFCE708B546F29860C0F6C2
S315080022C85DFD00F069FDFCE708B546F2BC60C0F69E
S315080022D800004FF03D0100F009FD08BD08B500F003
S315080022E891FB80B100F08EFD00F09AFB4EF608537C
S315080022F8CEF200034FF400421A6048F20400C0F612
@ -588,7 +588,7 @@ S31508002488B4F1016F38BF09211AD326E04FF00001CD
S3150800249816E04FF0010113E04FF0020110E04FF08B
S315080024A803010DE04FF004010AE04FF0050107E0CB
S315080024B84FF0060104E04FF0070101E04FF008016C
S315080024C801EB410346F25472C0F6000202EB8300A0
S315080024C801EB410346F27872C0F6000202EB83007C
S315080024D8007A10BD4FF0FF0010BD4FF0FF0010BD89
S315080024E82DE9F04105460068FFF742FFFF283BD073
S315080024F8FFF776FA4FF0F300FFF792FAFFF796FA26
@ -640,7 +640,7 @@ S315080027C8FFF7D6FD054606F1FF300019FFF7D0FDDD
S315080027D80446FF2D59D0FF285BD0854249D8012DDC
S315080027E84BD90B284DD8FFF7FBF84FF0F300FFF746
S315080027F817F9FFF71BF9012805D1FFF707F94FF075
S315080028080000BDE8F08146F22476C0F600064FF0CF
S315080028080000BDE8F08146F24876C0F600064FF0AB
S315080028180207631B03F0010800F00CFB36F81500E5
S315080028283946FFF76BF9082837D008E000F002FBAD
S3150800283836F815003946FFF761F9082805D0FFF775
@ -694,10 +694,10 @@ S31508002B280000ADF80400ADF80600ADF80800ADF8E9
S31508002B380C004FF00C01ADF80A104FF4A054C4F27B
S31508002B48010420466946FFF727FA20464FF0010197
S31508002B58FFF7A6FA04B010BD2DE9F84305460C465A
S31508002B68402907D946F2CC70C0F600004FF0760126
S31508002B68402907D946F2F070C0F600004FF0760102
S31508002B7800F0BCF82046FFF7A9FF012807D046F25F
S31508002B88CC70C0F600004FF0790100F0AFF8264681
S31508002B9844B346F2CC77C0F600074FF081084FF0E9
S31508002B88F070C0F600004FF0790100F0AFF826465D
S31508002B9844B346F2F077C0F600074FF081084FF0C5
S31508002BA8000406F1FF3303F0010900F043F9285D34
S31508002BB8FFF78CFF012817D11AE000F03BF9285DCA
S31508002BC8FFF784FF012803D03846414600F08EF8FF
@ -708,51 +708,51 @@ S31508002C0800F018F9285DFFF761FF012803D0384658
S31508002C18414600F06BF804F10104A1B2B142CCD3E5
S31508002C28BDE8F8833846414600F060F804F1010427
S31508002C38A2B2B242C1D3BDE8F88300BF10B50446B4
S31508002C4840F21C73C2F200031878B0B940F220703B
S31508002C58C2F20000FFF720FF01283CD140F21C739E
S31508002C4840F26173C2F200031878B0B940F21C70FA
S31508002C58C2F20000FFF720FF01283CD140F2617359
S31508002C68C2F200034FF0010018704FF0000040F25E
S31508002C786471C2F20001087010BD40F26471C2F2B4
S31508002C8800010A7802F1010240F22073C2F2000339
S31508002C989818FFF701FF012820D140F26470C2F2A4
S31508002CA80000017801F10101CAB2027040F22073EE
S31508002C786071C2F20001087010BD40F26071C2F2BC
S31508002C8800010A7802F1010240F21C73C2F200033D
S31508002C989818FFF701FF012820D140F26070C2F2A8
S31508002CA80000017801F10101CAB2027040F21C73F2
S31508002CB8C2F200031878904213D120460A49FFF752
S31508002CC823FB40F21C71C2F200014FF000020A70A1
S31508002CC823FB40F26171C2F200014FF000020A705C
S31508002CD84FF0010010BD4FF0000010BD4FF0000086
S31508002CE810BD4FF0000010BD2107002008B540F2BE
S31508002CF86873C2F20003186040F26C70C2F20000F2
S31508002CE810BD4FF0000010BD1D07002008B540F2C2
S31508002CF86473C2F20003186040F26870C2F20000FA
S31508002D08016000F097F8FCE708B500F08DF801288F
S31508002D1820D003F0CDF9E8B140F27073C2F200038F
S31508002D281878012816D1FFF7ADFE40F27471C2F281
S31508002D3800010A6802F1320290420BD340F270731E
S31508002D48C2F200034FF00000187003F0BBF908B987
S31508002D58FFF7C4FA08BD00BF08B540F27073C2F29F
S31508002D6800034FF001021A70FFF78CFE40F27471E7
S31508002D1820D003F0A1F8E8B140F26C73C2F20003C0
S31508002D281878012816D1FFF7ADFE40F27071C2F285
S31508002D3800010A6802F1320290420BD340F26C7322
S31508002D48C2F200034FF00000187003F08FF808B9B4
S31508002D58FFF7C4FA08BD00BF08B540F26C73C2F2A3
S31508002D6800034FF001021A70FFF78CFE40F27071EB
S31508002D78C2F200010860FFF7C7FF08BD08B500F0F2
S31508002D8857F8FFF755FEFFF731FE03F079F900F01B
S31508002D8857F8FFF755FEFFF731FE03F04DF800F048
S31508002D980FF8FFF7E1FF08BD08B500F04BF8FFF795
S31508002DA85FFE03F0ADF900F01DF8FFF7ADFF08BDAB
S31508002DA85FFE03F0BFF900F01DF8FFF7ADFF08BD99
S31508002DB800B583B04FF0FF038DF804304FF00000DC
S31508002DC88DF8050000F04EF8FFF7A4FE40F278717A
S31508002DC88DF8050000F04EF8FFF7A4FE40F274717E
S31508002DD8C2F200010A78012A02D101A800F066F8B1
S31508002DE803B000BD08B540F27C70C2F20000FFF7D8
S31508002DF825FF012805D140F27C70C2F2000000F0D8
S31508002DE803B000BD08B540F27870C2F20000FFF7DC
S31508002DF825FF012805D140F27870C2F2000000F0DC
S31508002E0855F808BD704700BF08B5C9B2FFF7A4FE54
S31508002E1800F042F808BD00BF40F27873C2F200031A
S31508002E1800F042F808BD00BF40F27473C2F200031E
S31508002E284FF001021A70704708B500F02BF808BD74
S31508002E38704700BF704700BF40F2BC73C2F2000378
S31508002E484FF000025A70704740F2BC73C2F2000392
S31508002E38704700BF704700BF40F2B873C2F200037C
S31508002E484FF000025A70704740F2B873C2F2000396
S31508002E584FF0FE02DA7018714FF00200A3F844002A
S31508002E68704700BF40F2BC73C2F200034FF000027D
S31508002E68704700BF40F2B873C2F200034FF0000281
S31508002E781A709A6483F84320A3F844209A705A7003
S31508002E88704700BF40F2BC73C2F2000318780030DE
S31508002E9818BF0120704700BF40F2BC73C2F2000396
S31508002E88704700BF40F2B873C2F2000318780030E2
S31508002E9818BF0120704700BF40F2B873C2F200039A
S31508002EA84FF0000283F84320704700BF38B5044640
S31508002EB80378FF2B25D103F0FBF820B94FF0100053
S31508002EC8FFF7C2FFC7E1FFF7B7FF40F2BC73C2F2CC
S31508002EB80378FF2B25D102F0CFFF20B94FF0100079
S31508002EC8FFF7C2FFC7E1FFF7B7FF40F2B873C2F2D0
S31508002ED800034FF001021A704FF0FF00D8704FF048
S31508002EE8100119714FF0000159714FF0400098719F
S31508002EF8D87119725A729A724FF00802A3F84420C8
S31508002F08A9E140F2BC72C2F200021078012840F02A
S31508002F08A9E140F2B872C2F200021078012840F02E
S31508002F18BC81A3F1C903352B00F29981DFE813F0C8
S31508002F28FD009701970192019701970184011E01F7
S31508002F386A0154019701970197019701970197012B
@ -761,53 +761,53 @@ S31508002F58970197019701970197019701970197019B
S31508002F68970197019701970197019701970197018B
S31508002F78970197018200540036007400970197015B
S31508002F889701B9009701D300D800EC0062783F2A68
S31508002F9804D94FF02200FFF757FF5CE140F2BC75F1
S31508002F9804D94FF02200FFF757FF5CE140F2B875F5
S31508002FA8C2F2000505F10400A96CFFF7ADF94FF068
S31508002FB8FF00E8706178AB6CCA18AA64607800F1FB
S31508002FC80100A5F8440046E161783F2904D94FF085
S31508002FD82200FFF739FF3EE1616840F2BC75C2F28C
S31508002FD82200FFF739FF3EE1616840F2B875C2F290
S31508002FE80005A96405F104006278FFF78DF94FF02A
S31508002FF8FF03EB706278A86C1118A964637803F16B
S315080030080103A5F8443026E140F2BC70C2F200007C
S315080030080103A5F8443026E140F2B870C2F2000080
S315080030184FF0FF01C170636883644FF00102A0F89E
S31508003028442018E140F2BC70C2F200004FF0FF02DB
S31508003028442018E140F2B870C2F200004FF0FF02DF
S31508003038C270836C6468C4B1E4186FEA030108199E
S3150800304800F0010213F8011BA34240F01F810EE0AD
S315080030581A4612F8010B09185B7853FA81F0C1B2BF
S3150800306802F10103A342F3D101E04FF0000140F257
S31508003078BC73C2F20003C3F807104FF001021A71B5
S31508003078B873C2F20003C3F807104FF001021A71B9
S315080030884FF00001597199714FF00800A3F84400F0
S31508003098E1E040F2BC70C2F200004FF0FF03C370D3
S315080030A846F64C02C0F6000282644FF00001017130
S31508003098E1E040F2B870C2F200004FF0FF03C370D7
S315080030A846F67002C0F6000282644FF0000101710C
S315080030B8417181714FF00703C0F807304FF00802D5
S315080030C8A0F84420C7E04FF00000FFF7BDFEC2E0B5
S315080030D840F2BC70C2F200004FF0FF01C1704FF019
S315080030D840F2B870C2F200004FF0FF01C1704FF01D
S315080030E800030371427842718371C37103724FF00A
S315080030F80601A0F84410AEE040F2BC74C2F200041F
S315080030F80601A0F84410AEE040F2B874C2F2000423
S315080031084FF000012170FFF797FE4FF0FF03E370B9
S315080031184FF00102A4F844209DE040F2BC73C2F2C5
S315080031184FF00102A4F844209DE040F2B873C2F2C9
S315080031280003986C4FF03F0104F10102FFF762FCB7
S3150800313820B94FF03100FFF787FE8CE040F2BC70EB
S3150800313820B94FF03100FFF787FE8CE040F2B870EF
S31508003148C2F200004FF0FF01C170826C02F13F0223
S3150800315882644FF00103A0F844307CE063783E2B84
S3150800316804D94FF02200FFF76FFE74E040F2BC70F6
S3150800316804D94FF02200FFF76FFE74E040F2B870FA
S31508003178C2F200004FF0FF01C1704FF00102A0F83B
S315080031884420617841B9FFF741FC002863D14FF024
S315080031983100FFF759FE5EE040F2BC73C2F2000345
S315080031983100FFF759FE5EE040F2B873C2F2000349
S315080031A8986C04F10202FFF725FC20B94FF03100AC
S315080031B8FFF74AFE4FE040F2BC70C2F200006178A1
S315080031C8826C8B18836446E040F2BC73C2F2000333
S315080031B8FFF74AFE4FE040F2B870C2F200006178A5
S315080031C8826C8B18836446E040F2B873C2F2000337
S315080031D84FF0FF02DA704FF00000187158714FF07F
S315080031E840019971D871187258724FF00702A3F8FE
S315080031F8442030E040F2BC73C2F20003986C616860
S315080031F8442030E040F2B873C2F20003986C616864
S31508003208FFF7FCFB20B94FF03100FFF71DFE22E05F
S3150800321840F2BC70C2F200004FF0FF01C1704FF0D7
S315080032280102A0F8442016E0FFF79EF840F2BC70A9
S3150800321840F2B870C2F200004FF0FF01C1704FF0DB
S315080032280102A0F8442016E0FFF79EF840F2B870AD
S31508003238C2F200004FF0FF01C1704FF00102A0F87A
S31508003248442008E04FF03100FFF7FEFD03E04FF099
S315080032582000FFF7F9FD40F2BC73C2F2000393F8A9
S315080032582000FFF7F9FD40F2B873C2F2000393F8AD
S315080032684310012903D14FF01000FFF7EDFD40F296
S31508003278BC73C2F200034FF0010083F8430003F160
S31508003278B873C2F200034FF0010083F8430003F164
S315080032880300B3F84410FFF7BFFD38BD002A3FF422
S31508003298DFAE13F8010B0918C9B2A3427FF4D8AEFA
S315080032A8E5E600BF10B4E2B182186FEA0004131904
@ -852,7 +852,7 @@ S31508003508030010BD4FF0020010BD4FF0000010BDBB
S315080035182DE9F041154603681C78A4F13004092CF6
S3150800352800F2E5815A783A2A40F0E18103F102036C
S3150800353803604FF000030B60002C40F08C8140F6C6
S315080035480C24C2F200042468002C00F088810C6060
S315080035480824C2F200042468002C00F088810C6064
S31508003558217889B16078FEF7DFF810F0010F0BD1F2
S31508003568002D00F0808100F00401C8B2002814BFBD
S315080035780A200020BDE8F0814FF000002070607036
@ -912,7 +912,7 @@ S315080038C80D00BDE8F0814FF00D00BDE8F0814FF01E
S315080038D80D00BDE8F0814FF00D00BDE8F0814FF00E
S315080038E80D00BDE8F0814FF00D00BDE8F0814FF0FE
S315080038F80000086023E603F10203A3612562EF19B5
S3150800390867625619E6624FF00306F3E6080A0020CE
S3150800390867625619E6624FF00306F3E6040A0020D2
S315080039182DE9F0410C4601F109020369002B00F074
S31508003928E28043691E7B1978202900F08A800529D8
S3150800393814BF0A46E52206F0080505F0FF0135B169
@ -1138,8 +1138,8 @@ S315080046E82DE9F04F87B001908B460B782F2B01D018
S315080046F85C2B01D10BF1010B4FF000000199886082
S315080047089BF800201F2A0AD808464FF00001FFF731
S31508004718AFFB02464FF0000301994B6198E146F654
S315080047285404C0F60004039446F66006C0F600066C
S31508004738049646F66803C0F6000305935E461BF81A
S315080047287804C0F60004039446F68406C0F6000624
S31508004738049646F68C03C0F6000305935E461BF8F6
S31508004748010B2F28FAD05C28F8D00199CA69029279
S3150800475830781F2840F256812F2800F045815C28BA
S3150800476800F047811746A7F1020735464FF00104BE
@ -1296,7 +1296,7 @@ S315080050C800D022B905F10105AF4201D191E0454664
S315080050D820463146FFF720F881460028E5D0A2E0A9
S315080050E8E088C31B204699B2FEF7C2FE814600280F
S315080050F840F09980A069FEF743F901904FF000083F
S315080051084FF6FF7546F6E806C0F6000620682169D8
S315080051084FF6FF7546F60C16C0F6000620682169A4
S31508005118FEF78EFD8146002840F08580D4F81C905D
S3150800512861695FFA87FB019A4A734FF00F00C872E4
S3150800513881F80C8081F81A8081F81B800BF1FF33FF
@ -1318,13 +1318,13 @@ S3150800522881460028CAD0484607B0BDE8F08F05F180
S315080052380105ADB2384603A932462B46FFF722FECA
S315080052482046FFF711F8814600287FF4F1AE05F1EC
S315080052580105ADB2642D7FF4CCAEE6E6A0B940F6FA
S315080052680C23C2F20003186810B14FF0000202704E
S3150800527811B14FF000030B7040F60C20C2F2000083
S315080052680823C2F20003186810B14FF00002027052
S3150800527811B14FF000030B7040F60820C2F2000087
S3150800528801604FF0000070474FF00B00704700BFF1
S315080052982DE9F0438FB0019116460546002800F01F
S315080052A8A5804FF00003036001A805A902F01E02B5
S315080052B8FEF72EF90446002840F0B78006F01F08C6
S315080052C802A80B9040F60801C2F200010C9105A845
S315080052C802A80B9040F60401C2F200010C9105A849
S315080052D80199FFF705FA0A9F0146002840F08F80D2
S315080052E8002F40F0868088E059B1042940F0928062
S315080052F805A8FFF767FE48F008080A9F50B1044654
@ -1450,12 +1450,12 @@ S31508005A687F03A3714FF001070CE0A561A368E268FC
S31508005A78934207D9E360A17941F02000A07101E0BB
S31508005A884FF002073846F8BD30B58FB00EAB43F86D
S31508005A98340D0D46184605A94FF00002FDF738FDE6
S31508005AA80446A8B902A80B9040F60801C2F20001FC
S31508005AA80446A8B902A80B9040F60401C2F2000100
S31508005AB80C9105A80199FEF713FE044640B90A9AFF
S31508005AC822B105A82946FDF723FF01E04FF0060491
S31508005AD820460FB030BD00BF30B599B018AB43F8B3
S31508005AE85C0D18460FA94FF00102FDF711FD024695
S31508005AF8002857D103A8159040F60801C2F20001FC
S31508005AF8002857D103A8159040F60401C2F2000100
S31508005B0816910FA80199FEF7EBFD0246002849D120
S31508005B18149959B3CC7A14F0010F2AD12CE0012D27
S31508005B2834D906A80FA94FF02402FDF7BBFB089540
@ -1481,314 +1481,317 @@ S31508005C5800043146FFF7DAFFB0F1FF3F09D004F137
S31508005C68010415F8010F0028F3D104E04FF00004E9
S31508005C7801E04FF0FF34204670BD00BF7F282DD9BC
S31508005C8811B9C7280BD121E0FF2825D8A0F1800033
S31508005C9846F6D822C0F6000232F8100070474FF0D0
S31508005CA8010346F6D822C0F6000232F8021F8142DE
S31508005C9846F6FC22C0F6000232F8100070474FF0AC
S31508005CA8010346F6FC22C0F6000232F8021F8142BA
S31508005CB815D10DE032F8021F814209D003F101031C
S31508005CC89BB232F8021F81420DD101E04FF0000362
S31508005CD803F18000C0B270474FF00000704703F127
S31508005CE801039BB2E6E703F101039BB2802BE1D1DE
S31508005CF8EEE700BF61280ED046F6F801C0F60001A7
S31508005CF8EEE700BF61280ED046F61C11C0F6000173
S31508005D084FF0000202F1010231F8023F5BB183420B
S31508005D18F8D113B970474FF0000246F6D830C0F6E6
S31508005D18F8D113B970474FF0000246F6FC30C0F6C2
S31508005D28000030F81200704730B402464CF6CD44ED
S31508005D38CCF6CC4401F10101A4FB0223DA08F9D117
S31508005D484FF0000501F8015902464CF6CD45CCF648
S31508005D58CC450846A5FB02434FEAD30303EB830465
S31508005D68A2EB440202F1300201F801291A46002B77
S31508005D78EFD130BC704700BF38B50546007800F04B
S31508005D8821FCC0B2A0F13004E4B2162C20D8A0F148
S31508005D8833FCC0B2A0F13004E4B2162C20D8A0F136
S31508005D983A02D1B206291ED9092C84BFA0F13704C4
S31508005DA8E4B2687800F00EFCC0B2A0F13003D9B2AC
S31508005DA8E4B2687800F020FCC0B2A0F13003D9B29A
S31508005DB8162913D8A0F13A02D3B2062B11D9092904
S31508005DC884BFA0F13701C9B201EB0414E0B238BDAB
S31508005DD84FF0000038BD4FF0000038BD4FF0000006
S31508005DE838BD4FF0000038BD08B500F00F03092884
S31508005DF802D903F1370008BD03F1300000F0E2FBD1
S31508005DF802D903F1370008BD03F1300000F0F4FBBF
S31508005E08C0B208BD38B505460C464FEA1010FFF76C
S31508005E18EBFF207005F00F00FFF7E6FF60704FF004
S31508005E280003A370204638BD2DE9F04F85B080469B
S31508005E381646894601B138B946F6B850C0F6000084
S31508005E484FF41671FCF752FF98F8000000F0BAFBF9
S31508005E58532840F0DA8098F8010000F0ABFB0028D8
S31508005E6800F0D38098F80130312B00F0D180322B1E
S31508005E7800F0D180332B40F0C880CFE02046FFF7EA
S31508005E887BFF3918CFB205F1FF3204F1020495B247
S31508005E982046FFF771FF3B18DFB205F1FF3085B2E0
S31508005EA804F10204012DE9D82046FFF765FF6FEAD9
S31508005EB80701CFB2874240F0A180BAF1010F32D06C
S31508005EC8BAF1000F04D0BAF1020F40F09A805CE0EC
S31508005ED80198FFF751FF05460298FFF74DFF4FEA6D
S31508005EE80024C9F8004008F10600FFF745FF231803
S31508005EF8C9F8003008F10808A5F10305ADB2002E67
S31508005F0800F081802FB2002F7DDD4FF00004404657
S31508005F18FFF732FF305508F1020804F10104A4B26C
S31508005F28BC42F4DB6FE00198FFF726FF05460298A6
S31508005F38FFF722FF4FEA0044C9F8004008F10600B7
S31508005F48FFF71AFF04EB0024C9F8004008F1080017
S31508005F58FFF712FF2018C9F8000008F10A08A5F18A
S31508005F680405ADB2002E4ED02FB2002F4BDD4FF0F0
S31508005F7800044046FFF700FF305508F1020804F10F
S31508005F880104A4B2BC42F4DB3DE00198FFF7F4FE35
S31508005F9805460298FFF7F0FE4FEA0064C9F8004084
S31508005FA808F10600FFF7E8FE04EB0044C9F80040CC
S31508005FB808F10800FFF7E0FE04EB0024C9F80040E2
S31508005FC808F10A00FFF7D8FE2218C9F8002008F1D8
S31508005FD80C08A5F10505ADB2AEB12FB2002F12DD3A
S31508005FE84FF000044046FFF7C7FE305508F102088F
S31508005FF804F10104A4B2BC42F4DB04E04FF6FF75D1
S3150800600801E04FF0000528B224E04FF00005FAE752
S315080060184FF0000A04E04FF0010A01E04FF0020AC7
S3150800602808F102000190FFF7A7FE044608F10401EB
S315080060380291039100F0010B0846FFF79DFE22180E
S31508006048D7B204F1FF339DB2039C04F10204012D73
S3150800605803D829E705B0BDE8F08F0FFA8BF00028BA
S315080060683FF40CAF2046FFF787FE3F18FFB205F14D
S31508006078FF35ADB204F10204012D3FF6FFAE13E772
S3150800608808B54FF0000040F65023C2F20003187016
S3150800609840F65C21C2F20001FFF7E0F838B146F68F
S315080060A8B850C0F600004FF09E01FCF71FFE08BD69
S315080060B840F65023C2F200031878D0F1010038BF21
S315080060C80020704708B5FCF7AFFE01280FD040F648
S315080060D85023C2F20003187860B9FCF703F80128C0
S315080060E80BD140F65021C2F20001087008BD4FF0E6
S315080060F8000008BD4FF0000008BD4FF0000008BDBD
S3150800610870B540F65023C2F200031878002800F04C
S315080061184D82012843D1FCF70FF846F62C60C0F6E5
S315080061280000FCF757F846F65060C0F60000FCF782
S3150800613851F8FBF7FBFF0146C6484FF00102FFF787
S31508006148A7F850B146F67860C0F60000FCF742F8A2
S315080061584FF00100FCF72EF870BD46F68060C0F6D1
S315080061680000FCF737F846F68860C0F60000FCF72A
S3150800617831F846F6AC60C0F60000FCF72BF840F696
S315080061885423C2F200034FF000021A605A6040F620
S315080061985020C2F200004FF00201017070BD0228BB
S315080061A840F0088140F65C24C2F2000440F6B46068
S315080061B8C2F200004FF4807104F50D72FFF7F6FC81
S315080061C894F93A12002915DA46F67860C0F60000FE
S315080061D8FCF700F84FF00200FBF7ECFF04F50D702A
S315080061E8FFF768FB40F65020C2F200004FF00001A6
S315080061F8017070BD18B340F6B466C2F200063046A0
S3150800620806F5C0714FF00002FFF70EFE0646B0F11C
S31508006218FF3F14D146F67860C0F60000FBF7DAFFB0
S315080062284FF00300FBF7C6FF8A48FFF743FB40F623
S315080062385023C2F200034FF000021A7070BD32B242
S31508006248002A2CDD40F65423C2F20003586868B9C0
S3150800625840F65421C2F2000140F6B463C2F20003C4
S31508006268D3F88001086036B24E6018E040F6B4618B
S31508006278C2F20001D1F8802140F65423C2F2000385
S3150800628819688A4204D240F65423C2F200031A60F7
S3150800629800FA86F040F65422C2F20002506040F630
S315080062A85C21C2F20001D1F83C22D1F840329A4268
S315080062B840F07C8167484FF00001FFF707FBA0B163
S315080062C846F67860C0F60000FBF784FF4FF0040036
S315080062D8FBF770FF5F48FFF7EDFA40F65020C2F269
S315080062E800004FF00001017070BD46F68060C0F6E8
S315080062F80000FBF76FFF46F6DC60C0F60000FBF708
S3150800630869FF40F65424C2F2000440F61025C2F28A
S31508006318000560682946FFF707FD2846FBF75AFF78
S3150800632846F6E860C0F60000FBF754FFE078294611
S31508006338FFF768FDA07805F10201FFF763FD6078AD
S3150800634805F10401FFF75EFD207805F10601FFF760
S3150800635859FD2846FBF73EFF46F68C70C0F6000046
S31508006368FBF738FF20686168FCF748FBA0B946F6D2
S315080063787860C0F60000FBF72DFF4FF00500FBF725
S3150800638819FF3448FFF796FA40F65023C2F200037D
S315080063984FF000021A7070BD46F68060C0F600001D
S315080063A8FBF718FF40F65020C2F200004FF0030131
S315080063B8017070BD032840F0F98040F65C24C2F2EB
S315080063C8000440F6B460C2F200004FF4807104F588
S315080063D80D72FFF7EBFB94F93A12002915DA46F61F
S315080063E80470C0F60000FBF7F5FE4FF00200FBF755
S315080063F8E1FE04F50D70FFF75DFA40F65023C2F288
S3150800640800034FF00000187070BD28B340F6B46258
S31508006418C2F20002104602F5C07102F58072FFF753
S3150800642803FD0546B0F1FF3F16D146F62870C0F6BB
S315080064380000FBF7CFFE4FF00300FBF7BBFE05484D
S31508006448FFF738FA40F65021C2F200014FF0000271
S315080064580A7070BD900C00202BB2002B5EDD46F644
S315080064684C70C0F60000FBF7B5FE2EB240F61024B5
S31508006478C2F2000430462146FFF756FC2046FBF7D1
S31508006488A9FE46F65C70C0F60000FBF7A3FE40F6C8
S31508006498B465C2F2000595F883012146FFF7B2FCF8
S315080064A895F8820104F10201FFF7ACFC95F8810121
S315080064B804F10401FFF7A6FC95F8800104F106012A
S315080064C8FFF7A0FC2046FBF785FE46F68C70C0F65B
S315080064D80000FBF77FFED5F88001314605F5807286
S315080064E8FCF788FAA0B946F67860C0F60000FBF70C
S315080064F871FE4FF00600FBF75DFE2D48FFF7DAF947
S3150800650840F65023C2F200034FF00000187070BD21
S3150800651846F68060C0F60000FBF75CFE40F65C2095
S31508006528C2F20000D0F83C12D0F8402291423DD180
S3150800653846F67470C0F60000FBF74CFEFCF766FAE0
S31508006548A0B946F67860C0F60000FBF743FE4FF0A0
S315080065580700FBF72FFE1648FFF7ACF940F650215F
S31508006568C2F200014FF000020A7070BD46F680605C
S31508006578C0F60000FBF72EFE46F69070C0F600003F
S31508006588FBF728FE0A48FFF795F946F6A870C0F6FD
S315080065980000FBF71FFE40F65023C2F200034FF037
S315080065A800001870FBF7E4FDFBF798FE70BD00BF06
S315080065B8900C0020A0F1300009288CBF002001208B
S315080065C8704700BFA0F16103D9B2192998BF2038CE
S315080065D8704700BF844640EA010313F0030F40F0F2
S315080065E81080242AC0F00D802DE9F00FB1E8F80FC5
S315080065F8A0E8F80FA2F12402242ABFF4F7AFBDE8F1
S31508006608F00F002A00F0078011F8013B00F8013B5B
S31508006618013A7FF4F9AF6046704700BF38B50446BB
S315080066280D4600F019F841F23803C2F200031D605E
S3150800663844F0800441F23C00C2F2000004600246BD
S3150800664811680029FCD100F009F841F23803C2F2B2
S315080066580003186838BD00BF704700BF704700BF01
S315080066682F64656D6F70726F675F6F6C696D65789B
S315080066785F73746D3332653430372E737265630011
S315080066882F626F6F746C6F672E7478740000000041
S31508006698433A2F576F726B2F736F667477617265FB
S315080066A82F4F70656E424C542F5461726765742F6C
S315080066B844656D6F2F41524D434D345F53544D33E6
S315080066C8325F4F6C696D65785F53544D3332453484
S315080066D830375F43726F7373776F726B732F426FBE
S315080066E86F742F6964652F2E2E2F2E2E2F2E2E2F80
S315080066F82E2E2F536F757263652F41524D434D34B5
S315080067085F53544D33322F43726F7373776F726BBF
S31508006718732F766563746F72732E63000000080022
S3150800672810001800200028003000380040004800F3
S31508006738500058008000880090009800A000A80023
S31508006748B000B800C000C800D000D8000080000813
S31508006758004000000200000000C0000800400000D9
S315080067680300000000000108000001000400000002
S3150800677800000208000002000500000000000408E6
S3150800678800000200060000000000060800000200DB
S3150800679807000000000008080000020008000000C2
S315080067A800000A08000002000900000000000C08A2
S315080067B8000002000A00000000000E08000002009F
S315080067C80B000000433A2F576F726B2F736F66746E
S315080067D8776172652F4F70656E424C542F546172FB
S315080067E86765742F44656D6F2F41524D434D345F6D
S315080067F853544D33325F4F6C696D65785F53544D0A
S315080068083332453430375F43726F7373776F726B01
S31508006818732F426F6F742F6964652F2E2E2F2E2EB5
S315080068282F2E2E2F2E2E2F536F757263652F4152DA
S315080068384D434D345F53544D33322F756172742E60
S31508006848630000004F70656E424C5400222A3A3C99
S315080068583E3F7C7F000000002B2C3B3D5B5D000023
S31508006868809A90418E418F804545454949498E8F82
S315080068789092924F994F555559999A9B9C9D9E9FD0
S3150800688841494F55A5A5A6A7A8A9AAABAC21AEAF5D
S31508006898B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF6A
S315080068A8C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF5A
S315080068B8D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF4A
S315080068C8E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF3A
S315080068D8F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF2A
S315080068E801030507090E10121416181C1E000000CD
S315080068F8610062006300640065006600670068005E
S3150800690869006A006B006C006D006E006F0070000D
S3150800691871007200730074007500760077007800BD
S3150800692879007A00A100A200A300A500AC00AF0078
S31508006938E000E100E200E300E400E500E600E70025
S31508006948E800E900EA00EB00EC00ED00EE00EF00D5
S31508006958F000F100F200F300F400F500F600F80084
S31508006968F900FA00FB00FC00FD00FE00FF0001012B
S3150800697803010501070109010B010D010F011101A9
S3150800698813011501170119011B011D011F01210119
S3150800699823012501270129012B012D012F01310189
S315080069A83301350137013A013C013E0140014201F4
S315080069B84401460148014B014D014F01510153015C
S315080069C85501570159015B015D015F0161016301C9
S315080069D86501670169016B016D016F017101730139
S315080069E8750177017A017C017E019201B103B20330
S315080069F8B303B403B503B603B703B803B903BA03B5
S31508006A08BB03BC03BD03BE03BF03C003C103C30363
S31508006A18C403C503C603C703C803C903CA033004A6
S31508006A28310432043304340435043604370438048C
S31508006A3839043A043B043C043D043E043F0440043C
S31508006A4841044204430444044504460447044804EC
S31508006A5849044A044B044C044D044E044F0451049B
S31508006A685204530454045504560457045804590444
S31508006A785A045B045C045E045F0470217121722168
S31508006A8873217421752176217721782179217A2134
S31508006A987B217C217D217E217F2141FF42FF43FF07
S31508006AA844FF45FF46FF47FF48FF49FF4AFF4BFF9C
S31508006AB84CFF4DFF4EFF4FFF50FF51FF52FF53FF4C
S31508006AC854FF55FF56FF57FF58FF59FF5AFF000056
S31508006AD8C700FC00E900E200E400E000E500E70082
S31508006AE8EA00EB00E800EF00EE00EC00C400C50081
S31508006AF8C900E600C600F400F600F200FB00F9003B
S31508006B08FF00D600DC00A200A300A500A72092017A
S31508006B18E100ED00F300FA00F100D100AA00BA007E
S31508006B28BF001023AC00BD00BC00A100AB00BB0031
S31508006B389125922593250225242561256225562522
S31508006B4855256325512557255D255C255B25102583
S31508006B58142534252C251C2500253C255E255F256E
S31508006B685A25542569256625602550256C256725E7
S31508006B7868256425652559255825522553256B25E5
S31508006B886A2518250C25882584258C259025802591
S31508006B98B103DF009303C003A303C303B500C4030B
S31508006BA8A6039803A903B4031E22C603B50329221C
S31508006BB86122B1006522642220232123F700482296
S31508006BC8B0001922B7001A227F20B200A025A0001B
S31508006BD8410042004300440045004600470048007B
S31508006BE849004A004B004C004D004E004F0050002B
S31508006BF851005200530054005500560057005800DB
S31508006C0859005A002100E0FFE1FFE5FFE2FFE3FF34
S31508006C18C000C100C200C300C400C500C600C70042
S31508006C28C800C900CA00CB00CC00CD00CE00CF00F2
S31508006C38D000D100D200D300D400D500D600D800A1
S31508006C48D900DA00DB00DC00DD00DE00780100018F
S31508006C5802010401060108010A010C010E011001CE
S31508006C6812011401160118011A011C011E0120013E
S31508006C7822012401260128012A012C012E013001AE
S31508006C8832013401360139013B013D013F01410119
S31508006C984301450147014A014C014E015001520181
S31508006CA85401560158015A015C015E0160016201EE
S31508006CB86401660168016A016C016E01700172015E
S31508006CC87401760179017B017D0191019103920393
S31508006CD893039403950396039703980399039A03D2
S31508006CE89B039C039D039E039F03A003A103A30381
S31508006CF8A403A503A603A703A803A903AA031004C4
S31508006D0811041204130414041504160417041804A9
S31508006D1819041A041B041C041D041E041F04200459
S31508006D282104220423042404250426042704280409
S31508006D3829042A042B042C042D042E042F040104E8
S31508006D4802040304040405040604070408040904E1
S31508006D580A040B040C040E040F0460216121622145
S31508006D6863216421652166216721682169216A21D1
S31508006D786B216C216D216E216F2121FF22FF23FFD4
S31508006D8824FF25FF26FF27FF28FF29FF2AFF2BFFB9
S31508006D982CFF2DFF2EFF2FFF30FF31FF32FF33FF69
S31508006DA834FF35FF36FF37FF38FF39FF3AFF000053
S31508006DB8433A2F576F726B2F736F667477617265D4
S31508006DC82F4F70656E424C542F5461726765742F45
S31508006DD844656D6F2F41524D434D345F53544D33BF
S31508006DE8325F4F6C696D65785F53544D333245345D
S31508006DF830375F43726F7373776F726B732F426F97
S31508006E086F742F6964652F2E2E2F2E2E2F2E2E2F58
S31508006E182E2E2F536F757263652F66696C652E6300
S31508006E28000000004669726D7761726520757064A6
S31508006E386174652072657175657374206465746517
S31508006E48637465640A0D00004F70656E696E672085
S31508006E586669726D776172652066696C6520666F0A
S31508006E68722072656164696E672E2E2E0000000016
S31508006E784552524F520A0D004F4B0A0D00000000AA
S31508006E885374617274696E67207468652070726FCE
S31508006E986772616D6D696E672073657175656E6376
S31508006EA8650A0D0050617273696E67206669726DAE
S31508006EB8776172652066696C6520746F206F6274E5
S31508006EC861696E2065726173652073697A652E2E0D
S31508006ED82E00000045726173696E67200000000085
S31508006EE82062797465732066726F6D206D656D6FA3
S31508006EF87279206174203078000000005265616458
S31508006F08696E67206C696E652066726F6D206669A2
S31508006F186C652E2E2E4552524F520A0D000000005F
S31508006F28496E76616C696420636865636B73756D11
S31508006F3820666F756E642E2E2E4552524F520A0DD4
S31508006F480000000050726F6772616D6D696E672088
S31508006F580000000020627974657320746F206D65DF
S31508006F686D6F7279206174203078000057726974E1
S31508006F78696E672070726F6772616D2063686563F2
S31508006F886B73756D2E2E2E00436C6F73696E6720B2
S31508006F986669726D776172652066696C650A0D00A7
S31508006FA84669726D776172652075706461746520CB
S31508006FB87375636365737366756C6C7920636F6D37
S31108006FC8706C657465640A0D000000001A
S31508006FD40100000001000000000000000102030493
S30D08006FE401020304060708096F
S31508005E280003A370204638BD08B54FF0000040F6B9
S31508005E384C23C2F20003187040F65821C2F200013A
S31508005E48FFF70CFA38B146F6DC50C0F600004FF0FA
S31508005E587C01FCF74BFF08BD40F64C23C2F2000351
S31508005E681878D0F1010038BF0020704708B5FCF74C
S31508005E78DBFF01280FD040F64C23C2F2000318783E
S31508005E8860B9FCF72FF901280BD140F64C21C2F26C
S31508005E980001087008BD4FF0000008BD4FF000006B
S31508005EA808BD4FF0000008BD10B50446007800F09C
S31508005EB89BFB53280DD1607800F08EFB60B16078A3
S31508005EC831280CD032280DD0332814BF03200220DD
S31508005ED810BD4FF0030010BD4FF0030010BD4FF082
S31508005EE8000010BD4FF0010010BD00BFF8B504460C
S31508005EF800F10200FFF740FF0646054604F10404D0
S31508005F0800F001072046FFF737FF3018C6B205F13B
S31508005F18FF318DB204F10204012D21D815E020467F
S31508005F28FFF72AFF3018C6B205F1FF3504F1020457
S31508005F38ADB22046FFF720FF3118CEB205F1FF3281
S31508005F4895B204F10204012DE9D82046FFF714FF9B
S31508005F586FEA0603DEB2864214BF00200120F8BDA8
S31508005F683FB2002FDBD02046FFF706FF3218D6B21D
S31508005F7805F1FF339DB204F10204012DCFD8E4E7F9
S31508005F882DE9F04104461546884601B138B946F662
S31508005F98DC50C0F6000040F23621FCF7A7FE204682
S31508005FA8FFF782FF0646032800F0B0802046FFF771
S31508005FB89DFF002800F0AD80012E34D01EB1022EB8
S31508005FC840F0AA8065E004F10200FFF7D5FE07460F
S31508005FD804F10400FFF7D0FE4FEA0026C8F800606F
S31508005FE804F10600FFF7C8FE3118C8F8001004F1D6
S31508005FF80804A7F10307BFB2002D00F08F800FFA37
S3150800600887F8B8F1000F40F389804FF0000620465C
S31508006018FFF7B2FEA85504F1020406F10106B6B266
S315080060284645F4DB7AE004F10200FFF7A5FE0746C9
S3150800603804F10400FFF7A0FE4FEA0046C8F800601E
S3150800604804F10600FFF798FE06EB0026C8F800607C
S3150800605804F10800FFF790FE3218C8F8002004F18A
S315080060680A04A7F10407BFB2002D57D00FFA87F81C
S31508006078B8F1000F52DD4FF000062046FFF77CFE08
S31508006088A85504F1020406F10106B6B24645F4DB42
S3150800609844E004F10200FFF76FFE074604F1040026
S315080060A8FFF76AFE4FEA0066C8F8006004F10600C2
S315080060B8FFF762FE06EB0046C8F8006004F1080020
S315080060C8FFF75AFE06EB0026C8F8006004F10A0036
S315080060D8FFF752FE3018C8F8000004F10C04A7F1BF
S315080060E80507BFB2D5B10FFA87F8B8F1000F15DD65
S315080060F84FF000062046FFF73FFEA85504F10204B4
S3150800610806F10106B6B24645F4DB07E04FF000078C
S3150800611804E04FF6FF7701E04FF0000738B2BDE814
S31508006128F08100BF70B540F64C23C2F20003187818
S31508006138002800F04D82012843D1FBF7FDFF46F6FB
S315080061485060C0F60000FCF745F846F67460C0F6DD
S315080061580000FCF73FF8FBF7E9FF0146C6484FF091
S315080061680102FFF795F850B146F69C60C0F60000A4
S31508006178FCF730F84FF00100FCF71CF870BD46F63E
S31508006188A460C0F60000FCF725F846F6AC60C0F631
S315080061980000FCF71FF846F6D060C0F60000FCF7CA
S315080061A819F840F65023C2F200034FF000021A60AD
S315080061B85A6040F64C20C2F200004FF00201017006
S315080061C870BD022840F0088140F65824C2F200043F
S315080061D840F6B060C2F200004FF4807104F50D7203
S315080061E8FFF7E4FC94F93A12002915DA46F69C609A
S315080061F8C0F60000FBF7EEFF4FF00200FBF7DAFFE8
S3150800620804F50D70FFF756FB40F64C20C2F2000065
S315080062184FF00001017070BD18B340F6B066C2F2BF
S315080062280006304606F5C0714FF00002FFF7A8FED3
S315080062380646B0F1FF3F14D146F69C60C0F600004A
S31508006248FBF7C8FF4FF00300FBF7B4FF8A48FFF7D0
S3150800625831FB40F64C23C2F200034FF000021A70D5
S3150800626870BD32B2002A2CDD40F65023C2F2000374
S31508006278586868B940F65021C2F2000140F6B06382
S31508006288C2F20003D3F88001086036B24E6018E0FF
S3150800629840F6B061C2F20001D1F8802140F65023D9
S315080062A8C2F2000319688A4204D240F65023C2F2A1
S315080062B800031A6000FA86F040F65022C2F200027D
S315080062C8506040F65821C2F20001D1F83C22D1F8B4
S315080062D840329A4240F07C8167484FF00001FFF748
S315080062E8F5FAA0B146F69C60C0F60000FBF772FF07
S315080062F84FF00400FBF75EFF5F48FFF7DBFA40F64E
S315080063084C20C2F200004FF00001017070BD46F63D
S31508006318A460C0F60000FBF75DFF46F60070C0F6FD
S315080063280000FBF757FF40F65024C2F2000440F677
S315080063380C25C2F2000560682946FFF7F5FC2846D1
S31508006348FBF748FF46F60C70C0F60000FBF742FF5D
S31508006358E0782946FFF756FDA07805F10201FFF710
S3150800636851FD607805F10401FFF74CFD207805F129
S315080063780601FFF747FD2846FBF72CFF46F6B070DF
S31508006388C0F60000FBF726FF20686168FCF736FBB5
S31508006398A0B946F69C60C0F60000FBF71BFF4FF055
S315080063A80500FBF707FF3448FFF784FA40F64C2345
S315080063B8C2F200034FF000021A7070BD46F6A460D8
S315080063C8C0F60000FBF706FF40F64C20C2F20000B4
S315080063D84FF00301017070BD032840F0F98040F6BC
S315080063E85824C2F2000440F6B060C2F200004FF426
S315080063F8807104F50D72FFF7D9FB94F93A12002952
S3150800640815DA46F62870C0F60000FBF7E3FE4FF0EB
S315080064180200FBF7CFFE04F50D70FFF74BFA40F6BE
S315080064284C23C2F200034FF00000187070BD28B361
S3150800643840F6B062C2F20002104602F5C07102F5D3
S315080064488072FFF79DFD0546B0F1FF3F16D146F667
S315080064584C70C0F60000FBF7BDFE4FF00300FBF7D3
S31508006468A9FE0548FFF726FA40F64C21C2F20001B4
S315080064784FF000020A7070BD8C0C00202BB2002B5E
S315080064885EDD46F67070C0F60000FBF7A3FE2EB276
S3150800649840F60C24C2F2000430462146FFF744FCB5
S315080064A82046FBF797FE46F68070C0F60000FBF715
S315080064B891FE40F6B065C2F2000595F883012146BB
S315080064C8FFF7A0FC95F8820104F10201FFF79AFC90
S315080064D895F8810104F10401FFF794FC95F8800109
S315080064E804F10601FFF78EFC2046FBF773FE46F615
S315080064F8B070C0F60000FBF76DFED5F8800131468E
S3150800650805F58072FCF776FAA0B946F69C60C0F6DF
S315080065180000FBF75FFE4FF00600FBF74BFE2D4821
S31508006528FFF7C8F940F64C23C2F200034FF0000003
S31508006538187070BD46F6A460C0F60000FBF74AFE60
S3150800654840F65820C2F20000D0F83C12D0F8402293
S3150800655891423DD146F69870C0F60000FBF73AFE20
S31508006568FCF754FAA0B946F69C60C0F60000FBF79B
S3150800657831FE4FF00700FBF71DFE1648FFF79AF99C
S3150800658840F64C21C2F200014FF000020A7070BDB5
S3150800659846F6A460C0F60000FBF71CFE46F6B47083
S315080065A8C0F60000FBF716FE0A48FFF783F946F619
S315080065B8CC70C0F60000FBF70DFE40F64C23C2F27D
S315080065C800034FF000001870FBF7D2FDFBF786FEB4
S315080065D870BD00BF8C0C0020A0F1300009288CBFC4
S315080065E800200120704700BFA0F16103D9B219291C
S315080065F898BF2038704700BF844640EA010313F065
S31508006608030F40F01080242AC0F00D802DE9F00F02
S31508006618B1E8F80FA0E8F80FA2F12402242ABFF47B
S31508006628F7AFBDE8F00F002A00F0078011F8013B24
S3150800663800F8013B013A7FF4F9AF6046704700BF9E
S3150800664838B504460D4600F019F841F23403C2F28B
S3150800665800031D6044F0800441F23800C2F20000CD
S315080066680460024611680029FCD100F009F841F2D5
S315080066783403C2F20003186838BD00BF704700BF6C
S30908006688704700BF8A
S3150800668C2F64656D6F70726F675F6F6C696D657877
S3150800669C5F73746D3332653430372E7372656300ED
S315080066AC2F626F6F746C6F672E747874000000001D
S315080066BC433A2F576F726B2F736F667477617265D7
S315080066CC2F4F70656E424C542F5461726765742F48
S315080066DC44656D6F2F41524D434D345F53544D33C2
S315080066EC325F4F6C696D65785F53544D3332453460
S315080066FC30375F43726F7373776F726B732F426F9A
S3150800670C6F742F6964652F2E2E2F2E2E2F2E2E2F5B
S3150800671C2E2E2F536F757263652F41524D434D3490
S3150800672C5F53544D33322F43726F7373776F726B9B
S3150800673C732F766563746F72732E630000000800FE
S3150800674C10001800200028003000380040004800CF
S3150800675C500058008000880090009800A000A800FF
S3150800676CB000B800C000C800D000D80000800008EF
S3150800677C004000000200000000C0000800400000B5
S3150800678C03000000000001080000010004000000DE
S3150800679C00000208000002000500000000000408C2
S315080067AC00000200060000000000060800000200B7
S315080067BC070000000000080800000200080000009E
S315080067CC00000A08000002000900000000000C087E
S315080067DC000002000A00000000000E08000002007B
S315080067EC0B000000433A2F576F726B2F736F66744A
S315080067FC776172652F4F70656E424C542F546172D7
S3150800680C6765742F44656D6F2F41524D434D345F48
S3150800681C53544D33325F4F6C696D65785F53544DE5
S3150800682C3332453430375F43726F7373776F726BDD
S3150800683C732F426F6F742F6964652F2E2E2F2E2E91
S3150800684C2F2E2E2F2E2E2F536F757263652F4152B6
S3150800685C4D434D345F53544D33322F756172742E3C
S3150800686C630000004F70656E424C5400222A3A3C75
S3150800687C3E3F7C7F000000002B2C3B3D5B5D0000FF
S3150800688C809A90418E418F804545454949498E8F5E
S3150800689C9092924F994F555559999A9B9C9D9E9FAC
S315080068AC41494F55A5A5A6A7A8A9AAABAC21AEAF39
S315080068BCB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF46
S315080068CCC0C1C2C3C4C5C6C7C8C9CACBCCCDCECF36
S315080068DCD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF26
S315080068ECE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF16
S315080068FCF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF06
S3150800690C01030507090E10121416181C1E000000A8
S3150800691C6100620063006400650066006700680039
S3150800692C69006A006B006C006D006E006F007000E9
S3150800693C7100720073007400750076007700780099
S3150800694C79007A00A100A200A300A500AC00AF0054
S3150800695CE000E100E200E300E400E500E600E70001
S3150800696CE800E900EA00EB00EC00ED00EE00EF00B1
S3150800697CF000F100F200F300F400F500F600F80060
S3150800698CF900FA00FB00FC00FD00FE00FF00010107
S3150800699C03010501070109010B010D010F01110185
S315080069AC13011501170119011B011D011F012101F5
S315080069BC23012501270129012B012D012F01310165
S315080069CC3301350137013A013C013E0140014201D0
S315080069DC4401460148014B014D014F015101530138
S315080069EC5501570159015B015D015F0161016301A5
S315080069FC6501670169016B016D016F017101730115
S31508006A0C750177017A017C017E019201B103B2030B
S31508006A1CB303B403B503B603B703B803B903BA0390
S31508006A2CBB03BC03BD03BE03BF03C003C103C3033F
S31508006A3CC403C503C603C703C803C903CA03300482
S31508006A4C3104320433043404350436043704380468
S31508006A5C39043A043B043C043D043E043F04400418
S31508006A6C41044204430444044504460447044804C8
S31508006A7C49044A044B044C044D044E044F04510477
S31508006A8C5204530454045504560457045804590420
S31508006A9C5A045B045C045E045F0470217121722144
S31508006AAC73217421752176217721782179217A2110
S31508006ABC7B217C217D217E217F2141FF42FF43FFE3
S31508006ACC44FF45FF46FF47FF48FF49FF4AFF4BFF78
S31508006ADC4CFF4DFF4EFF4FFF50FF51FF52FF53FF28
S31508006AEC54FF55FF56FF57FF58FF59FF5AFF000032
S31508006AFCC700FC00E900E200E400E000E500E7005E
S31508006B0CEA00EB00E800EF00EE00EC00C400C5005C
S31508006B1CC900E600C600F400F600F200FB00F90016
S31508006B2CFF00D600DC00A200A300A500A720920156
S31508006B3CE100ED00F300FA00F100D100AA00BA005A
S31508006B4CBF001023AC00BD00BC00A100AB00BB000D
S31508006B5C91259225932502252425612562255625FE
S31508006B6C55256325512557255D255C255B2510255F
S31508006B7C142534252C251C2500253C255E255F254A
S31508006B8C5A25542569256625602550256C256725C3
S31508006B9C68256425652559255825522553256B25C1
S31508006BAC6A2518250C25882584258C25902580256D
S31508006BBCB103DF009303C003A303C303B500C403E7
S31508006BCCA6039803A903B4031E22C603B5032922F8
S31508006BDC6122B1006522642220232123F700482272
S31508006BECB0001922B7001A227F20B200A025A000F7
S31508006BFC4100420043004400450046004700480057
S31508006C0C49004A004B004C004D004E004F00500006
S31508006C1C51005200530054005500560057005800B6
S31508006C2C59005A002100E0FFE1FFE5FFE2FFE3FF10
S31508006C3CC000C100C200C300C400C500C600C7001E
S31508006C4CC800C900CA00CB00CC00CD00CE00CF00CE
S31508006C5CD000D100D200D300D400D500D600D8007D
S31508006C6CD900DA00DB00DC00DD00DE00780100016B
S31508006C7C02010401060108010A010C010E011001AA
S31508006C8C12011401160118011A011C011E0120011A
S31508006C9C22012401260128012A012C012E0130018A
S31508006CAC32013401360139013B013D013F014101F5
S31508006CBC4301450147014A014C014E01500152015D
S31508006CCC5401560158015A015C015E0160016201CA
S31508006CDC6401660168016A016C016E01700172013A
S31508006CEC7401760179017B017D019101910392036F
S31508006CFC93039403950396039703980399039A03AE
S31508006D0C9B039C039D039E039F03A003A103A3035C
S31508006D1CA403A503A603A703A803A903AA0310049F
S31508006D2C1104120413041404150416041704180485
S31508006D3C19041A041B041C041D041E041F04200435
S31508006D4C21042204230424042504260427042804E5
S31508006D5C29042A042B042C042D042E042F040104C4
S31508006D6C02040304040405040604070408040904BD
S31508006D7C0A040B040C040E040F0460216121622121
S31508006D8C63216421652166216721682169216A21AD
S31508006D9C6B216C216D216E216F2121FF22FF23FFB0
S31508006DAC24FF25FF26FF27FF28FF29FF2AFF2BFF95
S31508006DBC2CFF2DFF2EFF2FFF30FF31FF32FF33FF45
S31508006DCC34FF35FF36FF37FF38FF39FF3AFF00002F
S31508006DDC433A2F576F726B2F736F667477617265B0
S31508006DEC2F4F70656E424C542F5461726765742F21
S31508006DFC44656D6F2F41524D434D345F53544D339B
S31508006E0C325F4F6C696D65785F53544D3332453438
S31508006E1C30375F43726F7373776F726B732F426F72
S31508006E2C6F742F6964652F2E2E2F2E2E2F2E2E2F34
S31508006E3C2E2E2F536F757263652F66696C652E63DC
S31508006E4C000000004669726D776172652075706482
S31508006E5C61746520726571756573742064657465F3
S31508006E6C637465640A0D00004F70656E696E672061
S31508006E7C6669726D776172652066696C6520666FE6
S31508006E8C722072656164696E672E2E2E00000000F2
S31508006E9C4552524F520A0D004F4B0A0D0000000086
S31508006EAC5374617274696E67207468652070726FAA
S31508006EBC6772616D6D696E672073657175656E6352
S31508006ECC650A0D0050617273696E67206669726D8A
S31508006EDC776172652066696C6520746F206F6274C1
S31508006EEC61696E2065726173652073697A652E2EE9
S31508006EFC2E00000045726173696E67200000000061
S31508006F0C2062797465732066726F6D206D656D6F7E
S31508006F1C7279206174203078000000005265616433
S31508006F2C696E67206C696E652066726F6D2066697E
S31508006F3C6C652E2E2E4552524F520A0D000000003B
S31508006F4C496E76616C696420636865636B73756DED
S31508006F5C20666F756E642E2E2E4552524F520A0DB0
S31508006F6C0000000050726F6772616D6D696E672064
S31508006F7C0000000020627974657320746F206D65BB
S31508006F8C6D6F7279206174203078000057726974BD
S31508006F9C696E672070726F6772616D2063686563CE
S31508006FAC6B73756D2E2E2E00436C6F73696E67208E
S31508006FBC6669726D776172652066696C650A0D0083
S31508006FCC4669726D776172652075706461746520A7
S31508006FDC7375636365737366756C6C7920636F6D13
S31108006FEC706C657465640A0D00000000F6
S31508006FF8010000000100000000000000010203046F
S30D0800700801020304060708094A
S70508000217D9

View File

@ -61,6 +61,33 @@
/****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -102,6 +102,8 @@
<file file_name="../../../../Source/ARMCM4_STM32/types.h"/>
<file file_name="../../../../Source/ARMCM4_STM32/uart.c"/>
<file file_name="../../../../Source/ARMCM4_STM32/uart.h"/>
<file file_name="../../../../Source/ARMCM4_STM32/can.c"/>
<file file_name="../../../../Source/ARMCM4_STM32/can.h"/>
</folder>
<file file_name="../../../../Source/assert.c"/>
<file file_name="../../../../Source/assert.h"/>

View File

@ -63,7 +63,8 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" y="54" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" left="18" selected="1" name="unnamed" top="35" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" y="54" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" left="18" selected="0" name="unnamed" top="50" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\blt_conf.h" y="99" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\blt_conf.h" left="0" selected="1" name="unnamed" top="72" />
</Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot" fileDialogDefaultFilter="" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARMCM4_STM32" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif
/* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */
USART_Cmd(USART6, ENABLE);
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/

View File

@ -50,9 +50,9 @@
</TraceWindow>
<Watch1>
<Watches active="1" update="Never" >
<Watchpoint linenumber="124" radix="-1" name="free_running_counter_now" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="152" radix="-1" name="free_running_counter_accumulative" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="121" radix="-1" name="free_running_counter_last" expression="free_running_counter_last" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="152" radix="-1" name="free_running_counter_accumulative" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="124" radix="-1" name="free_running_counter_now" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
</Watches>
</Watch1>
<Watch2>
@ -65,8 +65,8 @@
<Watches active="0" update="Never" />
</Watch4>
<Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" y="52" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" left="0" selected="0" name="unnamed" top="48" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\led.c" y="40" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\led.c" left="0" selected="1" name="unnamed" top="40" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" y="68" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" left="0" selected="0" name="unnamed" top="39" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\boot.c" y="21" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\boot.c" left="0" selected="1" name="unnamed" top="21" />
</Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\lib\stdperiphlib" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session>

View File

@ -7,38 +7,40 @@ start address 0x08000000
Program Header:
LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15
filesz 0x00005d40 memsz 0x00005d40 flags r-x
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08005d40 align 2**15
filesz 0x0000001c memsz 0x0000183c flags rw-
filesz 0x00005d6c memsz 0x00005d6c flags r-x
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08005d6c align 2**15
filesz 0x0000001c memsz 0x0000001c flags rw-
LOAD off 0x00010020 vaddr 0x20000020 paddr 0x08005d90 align 2**15
filesz 0x00000000 memsz 0x0000181c flags rw-
private flags = 5000002: [Version5 EABI] [has entry point]
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00005d40 08000000 08000000 00008000 2**2
0 .text 00005d6c 08000000 08000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000001c 20000000 08005d40 00010000 2**2
1 .data 0000001c 20000000 08005d6c 00010000 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000181c 20000020 08005d60 0001001c 2**3
2 .bss 0000181c 20000020 08005d90 00010020 2**3
ALLOC
3 .debug_info 0000e4c2 00000000 00000000 0001001c 2**0
3 .debug_info 0000e4fb 00000000 00000000 0001001c 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_abbrev 000027f8 00000000 00000000 0001e4de 2**0
4 .debug_abbrev 000027b8 00000000 00000000 0001e517 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_loc 0000ac20 00000000 00000000 00020cd6 2**0
5 .debug_loc 0000ad42 00000000 00000000 00020ccf 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_aranges 00000be8 00000000 00000000 0002b8f6 2**0
6 .debug_aranges 00000bf8 00000000 00000000 0002ba11 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_ranges 00000cb0 00000000 00000000 0002c4de 2**0
7 .debug_ranges 00000c58 00000000 00000000 0002c609 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 00004696 00000000 00000000 0002d18e 2**0
8 .debug_line 000046cc 00000000 00000000 0002d261 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_str 0000380f 00000000 00000000 00031824 2**0
9 .debug_str 0000381b 00000000 00000000 0003192d 2**0
CONTENTS, READONLY, DEBUGGING
10 .comment 00000030 00000000 00000000 00035033 2**0
10 .comment 00000030 00000000 00000000 00035148 2**0
CONTENTS, READONLY
11 .ARM.attributes 00000033 00000000 00000000 00035063 2**0
11 .ARM.attributes 00000033 00000000 00000000 00035178 2**0
CONTENTS, READONLY
12 .debug_frame 00001f1c 00000000 00000000 00035098 2**2
12 .debug_frame 00001f40 00000000 00000000 000351ac 2**2
CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
08000000 l d .text 00000000 .text
@ -57,9 +59,9 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 vectors.c
00000000 l df *ABS* 00000000 cstart.c
080001ca l F .text 00000000 zero_loop2
08005248 l F .text 00000000 zero_loop
08005274 l F .text 00000000 zero_loop
00000000 l df *ABS* 00000000 hooks.c
080053e8 l O .text 00000020 firmwareFilename
08005414 l O .text 00000020 firmwareFilename
20000020 l O .bss 00000228 logfile
00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 mmc.c
@ -111,21 +113,21 @@ SYMBOL TABLE:
080032b4 l F .text 00000258 dir_register
20000318 l O .bss 00000200 LfnBuf
20000518 l O .bss 00000002 Fsid
0800542c l O .text 00000080 ExCvt
080054ac l O .text 0000000d LfnOfs
08005458 l O .text 00000080 ExCvt
080054d8 l O .text 0000000d LfnOfs
2000051c l O .bss 00000004 FatFs
00000000 l df *ABS* 00000000 unicode.c
080054bc l O .text 000001e0 tbl_lower.4261
0800569c l O .text 00000100 Tbl
0800579c l O .text 000001e0 tbl_upper.4262
080054e8 l O .text 000001e0 tbl_lower.4261
080056c8 l O .text 00000100 Tbl
080057c8 l O .text 000001e0 tbl_upper.4262
00000000 l df *ABS* 00000000 boot.c
00000000 l df *ABS* 00000000 com.c
20000520 l O .bss 00000001 comEntryStateConnect
20000524 l O .bss 00000040 xcpCtoReqPacket.4367
20000524 l O .bss 00000040 xcpCtoReqPacket.4386
00000000 l df *ABS* 00000000 xcp.c
08004038 l F .text 00000010 XcpProtectResources
08004048 l F .text 00000018 XcpSetCtoError
0800597c l O .text 00000008 xcpStationId
080059a8 l O .text 00000008 xcpStationId
20000564 l O .bss 0000004c xcpInfo
00000000 l df *ABS* 00000000 backdoor.c
200005b0 l O .bss 00000001 backdoorOpen
@ -136,7 +138,6 @@ SYMBOL TABLE:
08004480 l F .text 00000024 FileLibByteToHexString
080044a4 l F .text 00000048 FileLibLongToIntString
080044ec l F .text 00000064 FileLibHexStringToByte
08004550 l F .text 0000020c SrecParseLine
200005b8 l O .bss 00000040 loggingStr
200005f8 l O .bss 00000001 firmwareUpdateState
200005fc l O .bss 00000008 eraseInfo
@ -147,21 +148,21 @@ SYMBOL TABLE:
20000be4 l O .bss 00000004 assert_failure_line
00000000 l df *ABS* 00000000 cpu.c
00000000 l df *ABS* 00000000 flash.c
08004c08 l F .text 00000044 FlashGetSector
08004c4c l F .text 0000007c FlashWriteBlock
08004cc8 l F .text 00000030 FlashInitBlock
08004cf8 l F .text 00000044 FlashSwitchBlock
08004d3c l F .text 00000092 FlashAddToBlock
08005b44 l O .text 00000030 flashSectorNumToMask
08005b74 l O .text 00000078 flashLayout
08004c34 l F .text 00000044 FlashGetSector
08004c78 l F .text 0000007c FlashWriteBlock
08004cf4 l F .text 00000030 FlashInitBlock
08004d24 l F .text 00000044 FlashSwitchBlock
08004d68 l F .text 00000092 FlashAddToBlock
08005b70 l O .text 00000030 flashSectorNumToMask
08005ba0 l O .text 00000078 flashLayout
20000be8 l O .bss 00000204 bootBlockInfo
20000dec l O .bss 00000204 blockInfo
00000000 l df *ABS* 00000000 uart.c
08004fc8 l F .text 0000002c UartReceiveByte
08004ff4 l F .text 0000003c UartTransmitByte
20000ff0 l O .bss 00000001 xcpCtoRxLength.7754
20000ff1 l O .bss 00000001 xcpCtoRxInProgress.7755
20000ff4 l O .bss 00000041 xcpCtoReqPacket.7753
08004ff4 l F .text 0000002c UartReceiveByte
08005020 l F .text 0000003c UartTransmitByte
20000ff0 l O .bss 00000041 xcpCtoReqPacket.7772
20001034 l O .bss 00000001 xcpCtoRxLength.7773
20001035 l O .bss 00000001 xcpCtoRxInProgress.7774
00000000 l df *ABS* 00000000 nvm.c
00000000 l df *ABS* 00000000 timer.c
20001038 l O .bss 00000004 millisecond_counter
@ -170,14 +171,14 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000
00000800 l *ABS* 00000000 __STACKSIZE__
08003fc0 g F .text 00000034 ComInit
08004de8 g F .text 00000054 FlashWrite
08004e14 g F .text 00000054 FlashWrite
08003e40 g F .text 0000005e f_gets
080016fc g F .text 00000020 FLASH_Unlock
08004b9c g F .text 00000018 AssertFailure
08004bc8 g F .text 00000018 AssertFailure
0800260c g F .text 0000010a get_fat
08005210 g F .text 0000005c reset_handler
0800523c g F .text 0000005c reset_handler
08001910 g F .text 00000038 GPIO_PinAFConfig
080051cc g F .text 00000020 TimerUpdate
080051f8 g F .text 00000020 TimerUpdate
0800408c g F .text 00000010 XcpPacketTransmitted
08003ff4 g F .text 00000018 ComTask
08001b70 g F .text 0000000c SDIO_ClearFlag
@ -186,48 +187,50 @@ SYMBOL TABLE:
08004020 g F .text 00000010 ComSetConnectEntryState
08001aa8 g F .text 0000000c SDIO_SetPowerState
08003f8c g F .text 0000001c BootInit
08004618 g F .text 00000042 FileSrecVerifyChecksum
0800442c g F .text 00000020 BackDoorInit
08001ca8 g F .text 0000000c USART_GetFlagStatus
08004450 g F .text 00000002 CopService
08005d40 g .text 00000000 _etext
08005d6c g .text 00000000 _etext
080012e0 g F .text 000001b8 SD_WriteBlock
08003f5c g F .text 00000030 ff_wtoupper
08005274 g F .text 00000174 memcpy
080047d0 g F .text 000003cc FileTask
08005190 g F .text 00000010 TimerReset
080052a0 g F .text 00000174 memcpy
080047fc g F .text 000003cc FileTask
080051bc g F .text 00000010 TimerReset
08001534 g F .text 00000034 disk_initialize
08000c1c g F .text 000002e0 SD_GetCardInfo
08001b5c g F .text 00000014 SDIO_GetFlagStatus
08001c9c g F .text 0000000c USART_ReceiveData
08003fa8 g F .text 00000018 BootTask
080014e8 g F .text 0000002e SD_GetState
08004ee0 g F .text 00000050 FlashWriteChecksum
08004f0c g F .text 00000050 FlashWriteChecksum
08000efc g F .text 00000084 SD_EnableWideBusOperation
08001a18 g F .text 0000001c RCC_APB2PeriphClockCmd
08001af0 g F .text 0000000c SDIO_GetCommandResponse
08004010 g F .text 0000000e ComTransmitPacket
08001860 g F .text 000000a2 GPIO_Init
08001568 g F .text 00000028 disk_status
0800465c g F .text 000001a0 FileSrecParseLine
08001c70 g F .text 00000020 USART_Cmd
08001680 g F .text 00000074 disk_ioctl
0800479c g F .text 00000034 FileHandleFirmwareUpdateRequest
08004590 g F .text 00000034 FileHandleFirmwareUpdateRequest
08003204 g F .text 000000b0 gen_numname
08000280 g F .text 00000038 FileFirmwareUpdateCompletedHook
0800407c g F .text 00000010 XcpIsConnected
08003d70 g F .text 000000d0 f_unlink
0800515c g F .text 00000008 NvmInit
08004dd0 g F .text 00000018 FlashInit
08005188 g F .text 00000008 NvmInit
08004dfc g F .text 00000018 FlashInit
0800171c g F .text 00000010 FLASH_Lock
2000103c g .bss 00000000 _ebss
08003ea0 g F .text 00000038 f_putc
08003ed8 g F .text 00000036 f_puts
080051fc g F .text 00000014 UnusedISR
08005228 g F .text 00000014 UnusedISR
08001a9c g F .text 0000000c SDIO_ClockCmd
0800400c g F .text 00000002 ComFree
08001b18 g F .text 0000002c SDIO_DataConfig
08005030 g F .text 00000044 UartInit
0800505c g F .text 00000044 UartInit
08001948 g F .text 000000b4 RCC_GetClocksFreq
0800516c g F .text 00000008 NvmErase
08005198 g F .text 00000008 NvmErase
08001b7c g F .text 000000f4 USART_Init
20000020 g .bss 00000000 _bss
08003b50 g F .text 00000016 f_close
@ -236,46 +239,47 @@ SYMBOL TABLE:
0800172c g F .text 0000000c FLASH_ClearFlag
08001780 g F .text 00000034 FLASH_WaitForLastOperation
080036d8 g F .text 000001c4 f_read
08004f88 g F .text 00000040 FlashDone
08004fb4 g F .text 00000040 FlashDone
08000fb0 g F .text 00000174 SD_Init
08000188 g F .text 00000068 EntryFromProg
08000f80 g F .text 00000030 SD_SelectDeselect
08001ac4 g F .text 0000002c SDIO_SendCommand
080016f4 g F .text 00000008 get_fattime
08004060 g F .text 0000001c XcpInit
0800475c g F .text 0000002c FileInit
08004550 g F .text 0000002c FileInit
08001b44 g F .text 0000000c SDIO_ReadData
08004e3c g F .text 000000a4 FlashErase
08004e68 g F .text 000000a4 FlashErase
080002b8 g F .text 00000018 FileFirmwareUpdateErrorHook
08000324 g F .text 0000008c main
080017f0 g F .text 00000070 FLASH_EraseSector
08003a9c g F .text 000000b4 f_sync
08001498 g F .text 00000050 SD_SendStatus
0800517c g F .text 00000014 NvmDone
080045c4 g F .text 00000054 FileSrecGetLineType
080051a8 g F .text 00000014 NvmDone
0800350c g F .text 0000002c f_mount
08005074 g F .text 00000064 UartTransmitPacket
08005174 g F .text 00000008 NvmVerifyChecksum
08004bdc g F .text 00000024 CpuMemCopy
080050a0 g F .text 00000064 UartTransmitPacket
080051a0 g F .text 00000008 NvmVerifyChecksum
08004c08 g F .text 00000024 CpuMemCopy
08001afc g F .text 0000001c SDIO_GetResponse
08001cb4 g F .text 000000f8 SystemInit
080027c4 g F .text 0000012e put_fat
08003b68 g F .text 000001bc f_lseek
080050d8 g F .text 00000084 UartReceivePacket
08005104 g F .text 00000084 UartReceivePacket
0800024c g F .text 00000008 FileGetFirmwareFilenameHook
08001124 g F .text 000001bc SD_ReadBlock
20000000 g .data 00000000 _data
08003d24 g F .text 0000004c f_stat
0800444c g F .text 00000002 CopInit
08004c00 g F .text 00000008 CpuReset
08004c2c g F .text 00000008 CpuReset
080007d0 g F .text 0000002c SD_Detect
08005164 g F .text 00000008 NvmWrite
08004bb4 g F .text 00000028 CpuStartUserProgram
08005190 g F .text 00000008 NvmWrite
08004be0 g F .text 00000028 CpuStartUserProgram
080025ec g F .text 0000001e clust2sect
2000183c g .bss 00000000 _estack
08001c90 g F .text 0000000c USART_SendData
08004f30 g F .text 00000058 FlashVerifyChecksum
08004f5c g F .text 00000058 FlashVerifyChecksum
2000001c g .data 00000000 _edata
08004788 g F .text 00000014 FileIsIdle
0800457c g F .text 00000014 FileIsIdle
0800389c g F .text 00000200 f_write
08000000 g O .text 00000188 _vectab
08003538 g F .text 000001a0 f_open
@ -283,7 +287,7 @@ SYMBOL TABLE:
080002d0 g F .text 00000054 FileFirmwareUpdateLogHook
20000018 g O .data 00000004 __ctype_ptr__
08004030 g F .text 00000008 ComIsConnected
08005c3c g O .text 00000101 _ctype_
08005c68 g O .text 00000101 _ctype_
08001a6c g F .text 00000030 SDIO_Init
08000204 g F .text 00000048 FileIsFirmwareUpdateRequestedHook
080007fc g F .text 00000270 SD_PowerON
@ -293,11 +297,11 @@ SYMBOL TABLE:
2000103c g .bss 00000000 _stack
08001a34 g F .text 0000001c RCC_APB2PeriphResetCmd
08003f10 g F .text 0000004c ff_convert
080051ec g F .text 00000010 TimerGet
08005218 g F .text 00000010 TimerGet
08001ab4 g F .text 00000010 SDIO_GetPowerState
08000a6c g F .text 000001b0 SD_InitializeCards
08001904 g F .text 0000000c GPIO_ReadInputDataBit
080051a0 g F .text 0000002c TimerInit
080051cc g F .text 0000002c TimerInit
08001b50 g F .text 0000000c SDIO_WriteData
08000254 g F .text 0000002c FileFirmwareUpdateStartedHook
08001a50 g F .text 0000001c SDIO_DeInit

View File

@ -1,48 +1,48 @@
S024000062696E2F6F70656E62746C5F6F6C696D65785F73746D3332653430372E737265639F
S315080000003C18002011520008FD510008FD51000857
S31508000010FD510008FD510008FD510008FD5100087A
S31508000020FD510008FD510008FD510008FD5100086A
S31508000030FD510008FD510008FD510008FD5100085A
S31508000040FD510008FD510008FD510008FD5100084A
S31508000050FD510008FD510008FD510008FD5100083A
S31508000060FD510008FD510008FD510008FD5100082A
S31508000070FD510008FD510008FD510008FD5100081A
S31508000080FD510008FD510008FD510008FD5100080A
S31508000090FD510008FD510008FD510008FD510008FA
S315080000A0FD510008FD510008FD510008FD510008EA
S315080000B0FD510008FD510008FD510008FD510008DA
S315080000C0FD510008FD510008FD510008FD510008CA
S315080000D0FD510008FD510008FD510008FD510008BA
S315080000E0FD510008FD510008FD510008FD510008AA
S315080000F0FD510008FD510008FD510008FD5100089A
S31508000100FD510008FD510008FD510008FD51000889
S31508000110FD510008FD510008FD510008FD51000879
S31508000120FD510008FD510008FD510008FD51000869
S31508000130FD510008FD510008FD510008FD51000859
S31508000140FD510008FD510008FD510008FD51000849
S31508000150FD510008FD510008FD510008FD51000839
S31508000160FD510008FD510008FD510008FD51000829
S31508000170FD510008FD510008FD510008FD51000819
S31508000180FD510008FD51000810B572B61848194906
S315080000003C1800203D5200082952000829520008D1
S3150800001029520008295200082952000829520008C6
S3150800002029520008295200082952000829520008B6
S3150800003029520008295200082952000829520008A6
S315080000402952000829520008295200082952000896
S315080000502952000829520008295200082952000886
S315080000602952000829520008295200082952000876
S315080000702952000829520008295200082952000866
S315080000802952000829520008295200082952000856
S315080000902952000829520008295200082952000846
S315080000A02952000829520008295200082952000836
S315080000B02952000829520008295200082952000826
S315080000C02952000829520008295200082952000816
S315080000D02952000829520008295200082952000806
S315080000E029520008295200082952000829520008F6
S315080000F029520008295200082952000829520008E6
S3150800010029520008295200082952000829520008D5
S3150800011029520008295200082952000829520008C5
S3150800012029520008295200082952000829520008B5
S3150800013029520008295200082952000829520008A5
S315080001402952000829520008295200082952000895
S315080001502952000829520008295200082952000885
S315080001602952000829520008295200082952000875
S315080001702952000829520008295200082952000865
S31508000180295200082952000810B572B618481949AC
S31508000190016019498D46124B124A9A4211D202F150
S315080001A00403114CE41A24F0030404F104044FF088
S315080001B0000310460D495A581A5003F10403A34286
S315080001C0F9D10E480E494FF000028842B8BF40F8F0
S315080001D0042BFFF6FAAF03F023FF00F0A3F810BDD7
S315080001E01C000020000000201F000020405D0008C1
S315080001E01C000020000000201F0000206C5D000895
S315080001F008ED00E0000000083C1800202000002060
S315080002003C10002000B589B04FF00003009301931D
S315080002100293039304930593069307930A48694642
S3150800022003F080FD40B9009B4BB19DF8080080F0B3
S315080002301000C0F3001004E04FF0000001E04FF09A
S31508000240000009B000BD00BFE85300080048704729
S31508000250E853000808B508484FF0000380F8243230
S31508000240000009B000BD00BF1454000800487047FC
S315080002501454000808B508484FF0000380F8243203
S3150800026006494FF00A0203F067F920B94FF0010278
S31508000270014B83F8242208BD2000002008540008FA
S31508000270014B83F8242208BD2000002034540008CE
S3150800028038B50A4B93F82432012B02D1074803F0FC
S315080002905FFC074D4FF040042846214601F004FD57
S315080002A00028F9D0034803F063FD38BD200000207C
S315080002B000140140E853000808B5044B93F82432AB
S315080002B0001401401454000808B5044B93F824327E
S315080002C0012B02D1014803F043FC08BD20000020A1
S315080002D070B50646114B93F82432012B0BD10F4902
S315080002E003F0FAFD002806DA0C484FF0000380F800
@ -347,13 +347,13 @@ S31508001580FE021A70014B187808BD00BF040000203F
S315080015902DE9F043ADF5037D88461746C8B120E02E
S315080015A04FF000094FF40075E619009502A84FEAB6
S315080015B046224B46FFF7B6FDB0B9FFF7ADFF012847
S315080015C0FBD008EB442002A92A4603F053FE8CB947
S315080015C0FBD008EB442002A92A4603F069FE8CB931
S315080015D00DE003F1FF34E4B2002BE1D14FF0010036
S315080015E00CE04FF0010009E04FF0010006E04FF073
S315080015F0000003E004F1FF34E4B2D5E70DF5037DFE
S31508001600BDE8F0832DE9F043ADF5037D0F4690461E
S31508001610E0B123E04FF400754FF0000902A807EB8C
S3150800162044212A4603F026FE04EB0806009502A884
S3150800162044212A4603F03CFE04EB0806009502A86E
S315080016304FEA46224B46FFF753FE08B1052810D15C
S31508001640FFF76AFF0128FBD08CB90DE003F1FF34E0
S31508001650E4B2002BDED14FF001000CE04FF00100A0
@ -714,7 +714,7 @@ S31508002C70D04620465946FFF7A1FE074600283FF4EE
S31508002C805BAF10E04FF004070DE006F1FF365FFA80
S31508002C9086F8DDF80890ECE7049C00E0049CDDF873
S31508002CA00890D046E5E7384607B0BDE8F08F00BF84
S31508002CB0AC5400082DE9F04F85B0824688460B785B
S31508002CB0D85400082DE9F04F85B0824688460B782F
S31508002CC02F2B01D05C2B01D108F101084FF000032E
S31508002CD0CAF8083098F800301F2B0AD850464FF02B
S31508002CE00001FFF719FD02464FF00003CAF8143039
@ -764,8 +764,8 @@ S31508002F90EEE64FF00004D846A8444FF00407E7E6EB
S31508002FA009F1FF3936F819302E2B3FF417AF019B7C
S31508002FB012E7019A0B2A7FF445AF39E74FF006026C
S31508002FC007E0019B0B2B7FF43DAF31E747F0020783
S31508002FD05BE7104605B0BDE8F08F00BF185400083F
S31508002FE02C540008245400082DE9F0410446C588ED
S31508002FD05BE7104605B0BDE8F08F00BF4454000813
S31508002FE058540008505400082DE9F0410446C58895
S31508002FF0018C4FF6FF73994208BF2946FFF78CFBF1
S315080030000346E0B94FF0E5074FF001064FF0000818
S3150800301020682169FFF762FA034668B96269177082
@ -791,7 +791,7 @@ S31508003140464602E0464600E0464620463946FFF730
S3150800315035FC054618B92169002986D175B14FF0A5
S31508003160000323610AE003F1FF33DEB2F246ECE71F
S31508003170F2464646E9E74FF00405F0E7284603B06D
S31508003180BDE8F08FAC5400082DE9F04104460E4620
S31508003180BDE8F08FD85400082DE9F04104460E46F4
S31508003190012926D98369994226D24FF000074FF0B4
S315080031A0010820463146FFF731FA0546F8B10128ED
S315080031B020D0B0F1FF3F20D0204631463A46FFF7EF
@ -847,7 +847,7 @@ S315080034C01BE007F1FF371FFA87F8B8F1000F0DD098
S315080034D06EE706EB020E1EF801EC01F80E708E443C
S315080034E08EF80170B2E70C2A9AD9B6E720682169E6
S315080034F0FEF7F4FF82460028C8D0504607B0BDE85C
S31508003500F08F00BF4FECC44EAC54000870B9094B9D
S31508003500F08F00BF4FECC44ED854000870B9094B71
S315080035101B6813B14FF000021A7011B14FF0000387
S315080035200B70044B19604FF0000070474FF00B000A
S31508003530704700BF1C0500202DE9F0438FB00191AC
@ -1012,19 +1012,19 @@ S31508003F107F2820D911B9C72808D114E0FF2818D856
S31508003F20A0F180000C4B33F8100070470A4A4FF096
S31508003F30010332F8021F814207D003F101039BB245
S31508003F40802BF6D101E04FF0000303F18000C0B2E8
S31508003F5070474FF0000070479C56000861280BD048
S31508003F5070474FF000007047C856000861280BD01C
S31508003F6008494FF0000202F1010231F8023F43B15D
S31508003F708342F8D113B970474FF00002024B33F869
S31508003F8012007047BC5400089C57000808B500F09A
S31508003F905DFA01F005F901F0E1F800F0DFFB00F049
S31508003F8012007047E8540008C857000808B500F042
S31508003F905DFA01F01BF901F0F7F800F0D9FA00F024
S31508003FA00FF800F043FA08BD08B500F051FA01F021
S31508003FB00DF900F00DFC00F01DF800F015FA08BD2B
S31508003FB023F900F023FC00F01DF800F015FA08BDFF
S31508003FC000B583B04FF0FF038DF804304FF00003BF
S31508003FD08DF8053000F044F801F02AF8044B1B78F8
S31508003FD08DF8053000F044F801F040F8044B1B78E2
S31508003FE0012B02D101A800F059F803B000BD00BFAB
S31508003FF02005002008B5044801F06EF8012802D112
S31508003FF02005002008B5044801F084F8012802D1FC
S31508004000014800F04BF808BD24050020704700BFA2
S3150800401008B5C9B201F02EF800F038F808BD00BF9F
S3150800401008B5C9B201F044F800F038F808BD00BF89
S315080040204FF00102014B1A70704700BF20050020AF
S3150800403008B500F023F808BD4FF00002014B5A708E
S31508004040704700BF64050020044B4FF0FE02DA708B
@ -1033,7 +1033,7 @@ S31508004060054B4FF000021A709A6483F84320A3F8B0
S3150800407044209A705A70704764050020024B1878DD
S31508004080003018BF01207047640500204FF0000279
S31508004090014B83F8432070476405002038B5044671
S315080040A00378FF2B22D100F06FFB20B94FF01000E8
S315080040A00378FF2B22D100F069FA20B94FF01000EF
S315080040B0FFF7CAFF81E1FFF7BFFFAF4B4FF00102E1
S315080040C01A704FF0FF01D9704FF0100119714FF0B7
S315080040D0000159714FF040009871D87119725A72DF
@ -1047,11 +1047,11 @@ S3150800414057015701570157015701570157015701A1
S3150800415057015701570157017900510036006E0083
S315080041605701570157019B005701AF00B400C5001E
S3150800417042783F2A04D94FF02200FFF765FF1CE179
S315080041807D4D05F10400A96C00F028FD4FF0FF03F2
S315080041807D4D05F10400A96C00F03EFD4FF0FF03DC
S31508004190EB706278AB6CD318AB64637803F10103F8
S315080041A0A5F8443009E143783F2B04D94FF02200A3
S315080041B0FFF74AFF01E141686F4DA96405F1040064
S315080041C0627800F00BFD4FF0FF03EB706278AB6C82
S315080041C0627800F021FD4FF0FF03EB706278AB6C6C
S315080041D0D318AB64637803F10103A5F84430ECE027
S315080041E0654B4FF0FF02DA7042689A644FF001029D
S315080041F0A3F84420E1E0604B4FF0FF02DA709B6CB5
@ -1066,31 +1066,31 @@ S31508004270FF02DA704FF000021A71597859719A7173
S31508004280DA711A724FF00602A3F8442095E03A4C08
S315080042904FF000032370FFF7CFFE4FF0FF03E370E4
S315080042A04FF00103A4F8443087E0334B986C4FF085
S315080042B03F0104F1010200F055FF20B94FF031002B
S315080042B03F0104F1010200F06BFF20B94FF0310015
S315080042C0FFF7C2FE79E02C4B4FF0FF02DA709A6CCA
S315080042D002F13F029A644FF00102A3F844206CE011
S315080042E043783E2B04D94FF02200FFF7ADFE64E079
S315080042F0214B4FF0FF02DA704FF00102A3F8442079
S31508004300417841B900F03AFF002856D14FF0310004
S31508004300417841B900F050FF002856D14FF03100EE
S31508004310FFF79AFE51E0184B986C04F1020200F080
S3150800432021FF20B94FF03100FFF78EFE45E0124B12
S3150800432037FF20B94FF03100FFF78EFE45E0124BFC
S3150800433061789A6C8A189A643FE00F4B4FF0FF0237
S31508004340DA704FF000021A715A714FF040019971F4
S31508004350DA711A725A724FF00702A3F844202CE059
S31508004360054B986C616800F001FF48B94FF03100C1
S31508004370FFF76AFE21E000BF640500207C590008AB
S31508004360054B986C616800F017FF48B94FF03100AB
S31508004370FFF76AFE21E000BF64050020A85900087F
S31508004380184B4FF0FF02DA704FF00102A3F84420F1
S3150800439013E000F035FC134B4FF0FF02DA704FF0D4
S3150800439013E000F04BFC134B4FF0FF02DA704FF0BE
S315080043A00102A3F8442008E04FF03100FFF74CFE65
S315080043B003E04FF02000FFF747FE0A4B93F843301F
S315080043C0012B03D14FF01000FFF73EFE054B4FF0CF
S315080043D0010283F8432003F10300B3F84410FFF702
S315080043E017FE38BD6405002008B5FFF721FE012831
S315080043F017D000F0C9F9A0B10A4B1B78012B10D1D0
S3150800440000F0F4FE084B1B6803F13203984208D308
S315080044104FF00002034B1A7000F0C0F908B900F01B
S31508004420C9FB08BDB0050020B405002008B54FF04B
S315080044300102044B1A7000F0D9FE034B1860FFF70F
S315080043F017D000F0C3F8A0B10A4B1B78012B10D1D7
S3150800440000F00AFF084B1B6803F13203984208D3F1
S315080044104FF00002034B1A7000F0BAF808B900F022
S31508004420DFFB08BDB0050020B405002008B54FF035
S315080044300102044B1A7000F0EFFE034B1860FFF7F9
S31508004440D3FF08BDB0050020B4050020704700BFA3
S31508004450704700BF00F00F03092802D903F137009F
S31508004460704703F13000054B1B681B185B7803F097
@ -1108,389 +1108,392 @@ S31508004510D2B2162A12D8A1F13A04E4B2062C10D95E
S31508004520092A84BFA1F13702D2B202EB001000F0CB
S31508004530FF0003F10103022BDFD104E04FF0000076
S3150800454001E04FF0000070BC704700BF1800002063
S315080045502DE9F04F83B080461746894601B120B948
S315080045607C484FF4167100F019FB98F800307A4A27
S315080045701268D118497801F00301022908BF203BC7
S31508004580532B40F0C38098F80130D218527802F0C5
S315080045900402D2B2002A00F0BC80312B00F0C3809E
S315080045A0322B00F0C380332B00F0C3804FF0000598
S315080045B0B7E02046FFF79AFF3018C6B205F1FF3577
S315080045C0ADB204F10204012DF3D82046FFF78EFFA1
S315080045D06FEA0606F6B2864240F09E80BAF1010FEF
S315080045E02FD0BAF1000F04D0BAF1020F40F097802D
S315080045F056E05846FFF77AFF4FEA0024C9F800400C
S3150800460008F10600FFF772FF2018C9F8000008F144
S315080046100808019BA3F10305ADB2002F00F08180C5
S315080046202EB2002E7DDD4FF000044046FFF75EFFF8
S31508004630385508F1020804F10104A4B2B442F4DBC7
S315080046406FE05846FFF752FF4FEA0044C9F80040AA
S3150800465008F10600FFF74AFF04EB0024C9F80040FA
S3150800466008F10800FFF742FF2018C9F8000008F112
S315080046700A08019BA3F10405ADB2002F51D02EB252
S31508004680002E4EDD4FF000044046FFF72FFF385549
S3150800469008F1020804F10104A4B2A642F4DC40E0E1
S315080046A05846FFF723FF4FEA0064C9F8004008F1AF
S315080046B00600FFF71BFF04EB0044C9F8004008F1A9
S315080046C00800FFF713FF04EB0024C9F8004008F1BF
S315080046D00A00FFF70BFF2018C9F8000008F10C08BC
S315080046E0019BA3F10505ADB2DFB12EB2002E18DD90
S315080046F04FF000044046FFF7F9FE385508F1020866
S3150800470004F10104A4B2B442F4DB0AE04FF0000558
S3150800471007E04FF0000504E04FF6FF7501E04FF0A3
S31508004720000528B212E04FF0000A04E04FF0010A33
S3150800473001E04FF0020A08F10200FFF7D7FE06462D
S31508004740019008F1040B05465C4632E703B0BDE864
S31508004750F08F00BF845900081800002008B54FF0F4
S315080047600000064B18700649FEF7D0FE20B1054832
S315080047704FF09E0100F012FA08BD00BFF8050020B0
S315080047800406002084590008034B1878D0F101006C
S3150800479038BF0020704700BFF805002008B5FFF7AE
S315080047A047FC012809D0094B1B784BB9FBF72AFDB2
S315080047B0012808D1054B187008BD4FF0000008BD48
S315080047C04FF0000008BD4FF0000008BDF8050020B6
S315080047D070B5964B1B78002B00F0C481012B2BD1AA
S315080047E0FBF738FD9248FBF773FD9248FBF770FD1F
S315080047F0FBF72CFD014690484FF00102FEF79CFEA0
S3150800480038B18E48FBF764FD4FF00100FBF754FD05
S3150800481070BD8B48FBF75CFD8A48FBF759FD8A4853
S31508004820FBF756FD894B4FF000021A605A604FF0AD
S3150800483002027E4B1A7070BD022B40F0BB80844D7D
S3150800484084484FF4807105F50D72FFF7F9FA95F96A
S315080048503A32002B0FDA7948FBF73AFD4FF002009F
S31508004860FBF72AFD05F50D70FFF772F94FF0000208
S315080048706E4B1A7070BDD0B17649084601F5C07105
S315080048804FF00002FFF764FE0446B0F1FF3F0ED179
S315080048906A48FBF71DFD4FF00300FBF70DFD664860
S315080048A0FFF756F94FF00002604B1A7070BD23B23D
S315080048B0002B17DD654B5B683BB9644B654AD2F83C
S315080048C080211A6024B25C600CE0624AD2F880212A
S315080048D05E4909688A423CBF5C490A6003FA84F368
S315080048E05A4A53605A4BD3F83C22D3F840329A427C
S315080048F040F0388150484FF00001FFF735F970B1A4
S315080049004E48FBF7E5FC4FF00400FBF7D5FC4A4898
S31508004910FFF71EF94FF00002444B1A7070BD484865
S31508004920FBF7D6FC4C48FBF7D3FC484D4B4C686864
S315080049302146FFF7B7FD2046FBF7CAFC4848FBF7B8
S31508004940C7FC2E684FEA16602146FFF799FDC6F3A5
S31508004950074004F10201FFF793FDC6F3072004F1AF
S315080049600401FFF78DFDF0B204F10601FFF788FD9B
S315080049702046FBF7ADFC3B48FBF7AAFC28686968AC
S3150800498000F0F4FB70B92D48FBF7A2FC4FF00500C8
S31508004990FBF792FC2848FFF7DBF84FF00002234BA1
S315080049A01A7070BD2648FBF793FC4FF003021F4BA5
S315080049B01A7070BD032B40F0D580254D25484FF45D
S315080049C0807105F50D72FFF73BFA95F93A32002B1F
S315080049D00FDA2548FBF77CFC4FF00200FBF76CFC6E
S315080049E005F50D70FFF7B4F84FF000020F4B1A707B
S315080049F070BD00283CD0174A104602F5C07102F572
S31508004A008072FFF7A5FD0446B0F1FF3F30D1174885
S31508004A10FBF75EFC4FF00300FBF74EFC0648FFF77A
S31508004A2097F84FF00002014B1A7070BDF805002088
S31508004A309C590008C059000838080020E8590008A1
S31508004A40F0590008F85900081C5A0008FC0500200F
S31508004A50040600205C0A00204C5A0008B80500200D
S31508004A60585A0008FC5A0008745A0008985A000850
S31508004A7023B2002B46DD3C48FBF72AFC24B23B4D0B
S31508004A8020462946FFF70EFD2846FBF721FC384845
S31508004A90FBF71EFC374E96F883012946FFF7F0FC14
S31508004AA096F8820105F10201FFF7EAFC96F8810102
S31508004AB005F10401FFF7E4FC96F8800105F106010B
S31508004AC0FFF7DEFC2846FBF703FC2B48FBF700FC48
S31508004AD0D6F88001214606F5807200F043FB70B9CE
S31508004AE02648FBF7F5FB4FF00600FBF7E5FB2448E5
S31508004AF0FFF72EF84FF00002224B1A7070BD2248BD
S31508004B00FBF7E6FB214BD3F83C22D3F840329A4216
S31508004B1028D11F48FBF7DCFB00F030FB70B91748BB
S31508004B20FBF7D6FB4FF00700FBF7C6FB1448FFF769
S31508004B300FF84FF00002134B1A7070BD1248FBF7BE
S31508004B40C7FB1448FBF7C4FB0D48FFF701F81248EA
S31508004B50FBF7BEFB4FF000020A4B1A70FBF790FBFF
S31508004B6000F028F870BD00BFBC5A0008B805002040
S31508004B70CC5A00085C0A0020FC5A0008E8590008CC
S31508004B8038080020F8050020F0590008040600201F
S31508004B90E45A0008005B0008185B000808B5034BD8
S31508004BA01860034B1960FFF753FCFCE7E00B002085
S31508004BB0E40B002008B500F0DDFA50B1FFF726FA3D
S31508004BC000F0E6FA4FF40042024B1A60024B1B68EB
S31508004BD0984708BD08ED00E00480000870B5044653
S31508004BE002F1FF36B6B252B100F101039E190D1A51
S31508004BF0635D04F8013BFFF72BFCB442F8D170BDA6
S31508004C0008B500F005FB08BDF8B507464FF00004E7
S31508004C1025460D4EFFF71CFCA359BB420BD831198C
S31508004C2049685B189F4206D205EB4502064B03EB23
S31508004C308202107AF8BD05F1010504F10C04782CFE
S31508004C40E8D14FF0FF00F8BD745B00082DE9F0418C
S31508004C5007460068FFF7D8FFFF2830D0FCF74EFD5F
S31508004C604FF0F300FCF762FDFCF766FD012818BF5C
S31508004C70002404D1FCF752FD4FF0000421E03E6801
S31508004C8004EB06083B195D68FFF7E2FB4046294638
S31508004C90FCF790FD08280AD1A359AB420AD104F1C2
S31508004CA00404B4F5007FEAD14FF0010404E04FF0A4
S31508004CB0000401E04FF00004FCF730FD01E04FF07E
S31508004CC000042046BDE8F08108B54FEAC1534FEA13
S31508004CD0D3535BB903688B420BD040F8041B4FF4DF
S31508004CE00072FFF77BFF4FF0010008BD4FF0000090
S31508004CF008BD4FF0010008BD38B504460D460C4BFB
S31508004D00984206D00B4B994205D0FFF79FFF18B97A
S31508004D100AE0094C00E0064C20462946FFF7D4FF76
S31508004D20002808BF002401E04FF00004204638BDE3
S31508004D30E80B002000800008EC0D00202DE9F84360
S31508004D4006460C4617461D464FEA51294FEA492999
S31508004D500368B3F1FF3F03D14946FFF7B5FF50B3E8
S31508004D6033684B4505D030464946FFF7C5FF06462A
S31508004D7028B33368E41A341904F1040440F2FF181E
S31508004D8009F50079FFF764FB06F10403E31A4345C6
S31508004D9007D930464946FFF7AFFF064698B100F1F6
S31508004DA0040417F8013B04F8013B013DEAD14FF032
S31508004DB00100BDE8F8834FF00000BDE8F8834FF026
S31508004DC00000BDE8F8834FF00000BDE8F88300BF97
S31508004DD04FF0FF33024A1360024A1360704700BF60
S31508004DE0EC0D0020E80B002070B504460D4616466B
S31508004DF0FFF70AFFFF2814D004F1FF304019FFF728
S31508004E0003FFFF2810D04FEA5422094BB3EB422F79
S31508004E100CBF08480848214632462B46FFF78EFF46
S31508004E2070BD4FF0000070BD4FF0000070BD00BFB0
S31508004E3000800008E80B0020EC0D0020F8B50646B7
S31508004E400D46FFF7E1FE044606F1FF304019FFF76D
S31508004E50DBFE0546FF2C3AD0FF283BD084422DD8EE
S31508004E60012C2ED90B282FD8FCF748FC4FF0F3005D
S31508004E70FCF75CFCFCF760FC012804D1FCF74EFC4F
S31508004E804FF00000F8BD154F4FF00206FFF7E0FAA5
S31508004E9037F814003146FCF7ABFC082804D0FCF7B9
S31508004EA03DFC4FF00000F8BD04F10104E4B2A54250
S31508004EB0ECD2FCF733FC4FF00100F8BD4FF00000D0
S31508004EC0F8BD4FF00000F8BD4FF00000F8BD4FF0F8
S31508004ED00000F8BD4FF00000F8BD00BF445B0008B5
S31508004EE000B583B0104B1B68B3F1FF3F18D00E4BCB
S31508004EF099685A688918DA6889181A6989185A6976
S31508004F0089189A698A18D9695318C3F1000302AA3D
S31508004F1042F8043D05484FF00401FFF765FF01E03C
S31508004F204FF0010003B000BDE80B0020888100089F
S31508004F300E4B1868A3F104031B68C0180C4B1B68BA
S31508004F40C0180C4B1B68C0180B4B1B68C0180B4BC2
S31508004F501B68C0180A4B1B68C0180A4B1B68C01888
S31508004F60D0F1010038BF0020704700BF0480000858
S31508004F70088000080C8000081080000814800008CB
S31508004F80188000088881000808B50D4B1B68B3F126
S31508004F90FF3F03D00A48FFF759FE58B1094B1B6873
S31508004FA0B3F1FF3F09D00748FFF750FE003018BF9E
S31508004FB0012008BD4FF0000008BD4FF0010008BDF4
S31508004FC0E80B0020EC0D002010B5044608484FF009
S31508004FD02001FCF769FE012806D10548FCF75EFEAC
S31508004FE020704FF0010010BD4FF0000010BD00BF4B
S31508004FF00014014038B504460C484FF08001FCF710
S3150800500053FE78B109482146FCF742FE074D4FF09A
S31508005010800428462146FCF747FE0028F9D04FF0C1
S31508005020010038BD4FF0000038BD00BF0014014034
S3150800503010B584B04FF4614300934FF00003ADF808
S315080050400430ADF80630ADF80830ADF80C304FF046
S315080050500C03ADF80A30064C20466946FCF78EFD6F
S3150800506020464FF00101FCF703FE04B010BD00BF57
S31508005070001401402DE9F04106460C46402904D9A2
S3150800508014484FF07601FFF789FD2046FFF7B2FF77
S31508005090012804D00F484FF07901FFF77FFD254618
S315080050A0ACB14FF00004DFF82C804FF08107FFF712
S315080050B0CFF9305DFFF79EFF012803D040463946F9
S315080050C0FFF76CFD04F10104A3B2AB42EFD3BDE8D0
S315080050D0F08100BFEC5B000810B504461B4B1B783B
S315080050E06BB91B48FFF770FF012825D14FF0010265
S315080050F0164B1A704FF00000164B187010BD154B62
S315080051001878154BC018FFF75FFF012817D1114B08
S315080051101A7802F10102D2B21A700D4B1B7893422B
S3150800512010D120460C49FFF759FD4FF00002074BF6
S315080051301A704FF0010010BD4FF0000010BD4FF07F
S31508005140000010BD4FF0000010BD00BFF10F002099
S31508005150F40F0020F00F0020F50F002008B5FFF728
S3150800516037FE08BD08B5FFF73FFE08BD08B5FFF7CF
S3150800517065FE08BD08B5FFF7DBFE08BD08B5FFF7F5
S31508005180AFFE10B1FFF700FF08BD4FF0000008BDE5
S315080051904FF00002014B1A60704700BF10E000E0B4
S315080051A008B5FFF7F5FF064B064A5A604FF00002AE
S315080051B09A604FF005011960034B1A6008BD00BFDD
S315080051C010E000E03F90020038100020054B1B68F5
S315080051D013F4803F04D0044B1A6802F101021A60E6
S315080051E0704700BF10E000E03810002008B5FFF750
S315080051F0EDFF014B186808BD3810002008B50348B4
S315080052004FF03601FFF7CAFC08BD00BF105C000866
S3150800521010B572B6114B124A9A4211D202F1040322
S31508005220104CE41A24F0030404F104044FF00003BC
S3150800523010460D495A581A5003F10403A342F9D1EE
S315080052400A480B494FF000028842B8BF40F8042BC1
S31508005250FFF6FAAFFBF766F810BD00BF1C0000208A
S31508005260000000201F000020405D000820000020EC
S315080052703C100020032A2DE9F00F09D82AB1002393
S31508005280CC5CC45401339342FAD1BDE8F00F7047A1
S31508005290830702440ED0441C4D1C15F8017C04F00B
S315080052A00306234601342946013504F8027C002EFC
S315080052B0F3D100E0034611F003046DD0D71A0D1B95
S315080052C0032F2E6819DDC4F1040C4FEAC4081C1D0F
S315080052D04FEACC0C55F8047FC4EB02092346043187
S315080052E00434B9F1030F26FA08FA07FA0CFB3E460E
S315080052F04BEA0A0744F8087CECDC9A42C5D9013324
S315080053000131013211F8014C01330131934203F89E
S31508005310024CF7D1B9E70C684033403143F8404CAA
S3150800532051F83C4C43F83C4C51F8384C43F8384C4F
S3150800533051F8344C43F8344C51F8304C43F8304C5F
S3150800534051F82C4C43F82C4C51F8284C43F8284C6F
S3150800535051F8244C43F8244C51F8204C43F8204C7F
S3150800536051F81C4C43F81C4C51F8184C43F8184C8F
S3150800537051F8144C43F8144C51F8104C43F8104C9F
S3150800538051F80C4C43F80C4C51F8084C43F8084CAF
S3150800539051F8044C43F8044CD41A3F2CBBDC11E0FA
S315080053A00C681033103143F8104C51F80C4C43F884
S315080053B00C4C51F8084C43F8084C51F8044C43F887
S315080053C0044CD41A0F2CEBDC032C96DD1C1D0D1D8A
S315080053D055F8047C161B2346294604340435032E47
S315080053E044F8087CF4DC88E72F64656D6F70726F8B
S315080053F0675F6F6C696D65785F73746D333265349A
S3150800540030372E73726563002F626F6F746C6F6727
S315080054102E74787400000000222A3A3C3E3F7C7FB6
S31508005420000000002B2C3B3D5B5D0000809A9041FC
S315080054308E418F804545454949498E8F9092924FB6
S31508005440994F555559999A9B9C9D9E9F41494F55F1
S31508005450A5A5A6A7A8A9AAABAC21AEAFB0B1B2B311
S31508005460B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C376
S31508005470C4C5C6C7C8C9CACBCCCDCECFD0D1D2D366
S31508005480D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E356
S31508005490E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F346
S315080054A0F4F5F6F7F8F9FAFBFCFDFEFF010305072C
S315080054B0090E10121416181C1E0000006100620066
S315080054C063006400650066006700680069006A009A
S315080054D06B006C006D006E006F007000710072004A
S315080054E073007400750076007700780079007A00FA
S315080054F0A100A200A300A500AC00AF00E000E100F7
S31508005500E200E300E400E500E600E700E800E90061
S31508005510EA00EB00EC00ED00EE00EF00F000F10011
S31508005520F200F300F400F500F600F800F900FA00BE
S31508005530FB00FC00FD00FE00FF0001010301050160
S31508005540070109010B010D010F01110113011501D5
S31508005550170119011B011D011F0121012301250145
S31508005560270129012B012D012F01310133013501B5
S3150800557037013A013C013E0140014201440146011E
S3150800558048014B014D014F01510153015501570186
S3150800559059015B015D015F016101630165016701F5
S315080055A069016B016D016F01710173017501770165
S315080055B07A017C017E019201B103B203B303B403FD
S315080055C0B503B603B703B803B903BA03BB03BC03F1
S315080055D0BD03BE03BF03C003C103C303C403C5039E
S315080055E0C603C703C803C903CA0330043104320417
S315080055F033043404350436043704380439043A04C9
S315080056003B043C043D043E043F0440044104420478
S3150800561043044404450446044704480449044A0428
S315080056204B044C044D044E044F04510452045304D5
S315080056305404550456045704580459045A045B0480
S315080056405C045E045F047021712172217321742148
S31508005650752176217721782179217A217B217C2170
S315080056607D217E217F2141FF42FF43FF44FF45FF05
S3150800567046FF47FF48FF49FF4AFF4BFF4CFF4DFFD8
S315080056804EFF4FFF50FF51FF52FF53FF54FF55FF88
S3150800569056FF57FF58FF59FF5AFF0000C700FC0086
S315080056A0E900E200E400E000E500E700EA00EB00BC
S315080056B0E800EF00EE00EC00C400C500C900E600F3
S315080056C0C600F400F600F200FB00F900FF00D60061
S315080056D0DC00A200A300A500A7209201E100ED00CE
S315080056E0F300FA00F100D100AA00BA00BF001023A7
S315080056F0AC00BD00BC00A100AB00BB009125922503
S3150800570093250225242561256225562555256325D9
S31508005710512557255D255C255B251025142534253F
S315080057202C251C2500253C255E255F255A25542554
S3150800573069256625602550256C2567256825642515
S31508005740652559255825522553256B256A2518257B
S315080057500C25882584258C2590258025B103DF0016
S315080057609303C003A303C303B500C403A6039803A6
S31508005770A903B4031E22C603B50329226122B10078
S315080057806522642220232123F7004822B00019222B
S31508005790B7001A227F20B200A025A00041004200CF
S315080057A043004400450046004700480049004A00B7
S315080057B04B004C004D004E004F0050005100520067
S315080057C053005400550056005700580059005A0017
S315080057D02100E0FFE1FFE5FFE2FFE3FFC000C100B3
S315080057E0C200C300C400C500C600C700C800C9007F
S315080057F0CA00CB00CC00CD00CE00CF00D000D1002F
S31508005800D200D300D400D500D600D800D900DA00DB
S31508005810DB00DC00DD00DE00780100010201040186
S31508005820060108010A010C010E01100112011401FA
S31508005830160118011A011C011E012001220124016A
S31508005840260128012A012C012E01300132013401DA
S31508005850360139013B013D013F0141014301450143
S3150800586047014A014C014E015001520154015601AB
S3150800587058015A015C015E0160016201640166011A
S3150800588068016A016C016E0170017201740176018A
S3150800589079017B017D01910191039203930394039E
S315080058A0950396039703980399039A039B039C030E
S315080058B09D039E039F03A003A103A303A403A503BB
S315080058C0A603A703A803A903AA0310041104120434
S315080058D013041404150416041704180419041A04E6
S315080058E01B041C041D041E041F0420042104220496
S315080058F023042404250426042704280429042A0446
S315080059002B042C042D042E042F0401040204030482
S315080059100404050406040704080409040A040B041D
S315080059200C040E040F0460216121622163216421A5
S31508005930652166216721682169216A216B216C210D
S315080059406D216E216F2121FF22FF23FF24FF25FFF2
S3150800595026FF27FF28FF29FF2AFF2BFF2CFF2DFFF5
S315080059602EFF2FFF30FF31FF32FF33FF34FF35FFA5
S3150800597036FF37FF38FF39FF3AFF00004F70656E74
S31508005980424C54002E2E2F2E2E2F2E2E2F536F754F
S315080059907263652F66696C652E6300004669726DD1
S315080059A077617265207570646174652072657175BA
S315080059B06573742064657465637465640A0D000014
S315080059C04F70656E696E67206669726D776172657C
S315080059D02066696C6520666F722072656164696EFF
S315080059E0672E2E2E000000004552524F520A0D0017
S315080059F04F4B0A0D000000005374617274696E679C
S31508005A00207468652070726F6772616D6D696E6764
S31508005A102073657175656E63650A0D005061727352
S31508005A20696E67206669726D776172652066696C52
S31508005A306520746F206F627461696E206572617388
S31508005A40652073697A652E2E2E00000045726173F3
S31508005A50696E67200000000020627974657320660D
S31508005A60726F6D206D656D6F727920617420307864
S31508005A700000000052656164696E67206C696E6596
S31508005A802066726F6D2066696C652E2E2E45525201
S31508005A904F520A0D00000000496E76616C69642059
S31508005AA0636865636B73756D20666F756E642E2EFD
S31508005AB02E4552524F520A0D0000000050726F6771
S31508005AC072616D6D696E672000000000206279744E
S31508005AD0657320746F206D656D6F7279206174200F
S31508005AE03078000057726974696E672070726F6744
S31508005AF072616D20636865636B73756D2E2E2E005B
S31508005B00436C6F73696E67206669726D776172653B
S31508005B102066696C650A0D004669726D7761726563
S31508005B202075706461746520737563636573736645
S31508005B30756C6C7920636F6D706C657465640A0D9D
S31508005B4000000000000008001000180020002800CF
S31508005B503000380040004800500058008000880097
S31508005B6090009800A000A800B000B800C000C800C7
S31508005B70D000D800008000080040000002000000A5
S31508005B8000C00008004000000300000000000108F3
S31508005B9000000100040000000000020800000200E6
S31508005BA005000000000004080000020006000000CE
S31508005BB000000608000002000700000000000808B0
S31508005BC0000002000800000000000A0800000200A9
S31508005BD00900000000000C08000002000A0000008E
S31508005BE000000E08000002000B0000002E2E2F2ECB
S31508005BF02E2F2E2E2F536F757263652F41524D43EC
S31508005C004D345F53544D33322F756172742E6300D1
S31508005C102E2E2F2E2E2F2E2E2F536F757263652F35
S31508005C2041524D434D345F53544D33322F4743430E
S31508005C302F766563746F72732E6300000020202030
S31508005C40202020202020282828282820202020201E
S31508005C5020202020202020202020202020881010EE
S31508005C60101010101010101010101010100404044A
S31508005C700404040404040410101010101010414108
S31508005C8041414141010101010101010101010101F6
S31508005C90010101010101010110101010101042420A
S31508005CA042424242020202020202020202020202C6
S31508005CB00202020202020202101010102000000066
S31508005CC000000000000000000000000000000000C6
S31508005CD000000000000000000000000000000000B6
S31508005CE000000000000000000000000000000000A6
S3150800455008B54FF00000064B18700649FEF7D6FF5F
S3150800456020B105484FF07C0100F02EFB08BD00BFC6
S31508004570F805002004060020B0590008034B1878F7
S31508004580D0F1010038BF0020704700BFF8050020B1
S3150800459008B5FFF74DFD012809D0094B1B784BB923
S315080045A0FBF730FE012808D1054B187008BD4FF0FF
S315080045B0000008BD4FF0000008BD4FF0000008BD20
S315080045C0F80500200378134A1268D118497801F0D3
S315080045D00301022908BF203B532B0FD1407812183C
S315080045E0537803F00403DBB25BB131280CD03228D0
S315080045F00DD0332814BF0320022070474FF0030064
S3150800460070474FF0030070474FF0000070474FF0B7
S31508004610010070471800002070B5044600F102003A
S31508004620FFF764FF0646054604F104042046FFF733
S315080046305DFF3018C6B205F1FF35ADB204F10204CC
S31508004640012DF3D82046FFF751FF6FEA0606F6B2AA
S31508004650864214BF0020012070BD00BF2DE9F0413D
S3150800466004461546884601B120B9634840F236210A
S3150800467000F0AAFA2046FFF7A5FF0646032800F031
S31508004680B0802046FFF7C8FF002800F0AD80012E55
S3150800469034D01EB1022E40F0AA8065E004F1020073
S315080046A0FFF724FF074604F10400FFF71FFF4FEA50
S315080046B00026C8F8006004F10600FFF717FF301857
S315080046C0C8F8000004F10806A7F10307BFB2002DD9
S315080046D000F08F800FFA87F8B8F1000F40F3898051
S315080046E04FF000043046FFF701FF285506F1020691
S315080046F004F10104A4B24445F4DB7AE004F10200B3
S31508004700FFF7F4FE074604F10400FFF7EFFE4FEA51
S315080047100046C8F8006004F10600FFF7E7FE06EB5E
S315080047200026C8F8006004F10800FFF7DFFE30181D
S31508004730C8F8000004F10A06A7F10407BFB2002D65
S3150800474057D00FFA87F8B8F1000F52DD4FF0000482
S315080047503046FFF7CBFE285506F1020604F10104A0
S31508004760A4B24445F4DB44E004F10200FFF7BEFEC0
S31508004770074604F10400FFF7B9FE4FEA0066C8F8D9
S31508004780006004F10600FFF7B1FE06EB0046C8F824
S31508004790006004F10800FFF7A9FE06EB0026C8F83A
S315080047A0006004F10A00FFF7A1FE3018C8F80000FF
S315080047B004F10C06A7F10507BFB2D5B10FFA87F8C1
S315080047C0B8F1000F15DD4FF000043046FFF78EFEF6
S315080047D0285506F1020604F10104A4B24445F4DBA7
S315080047E007E04FF0000704E04FF6FF7701E04FF0CF
S315080047F0000738B2BDE8F081B059000870B5964B8D
S315080048001B78002B00F0C481012B2BD1FBF722FD6E
S315080048109248FBF75DFD9248FBF75AFDFBF716FD3C
S31508004820014690484FF00102FEF786FE38B18E48E1
S31508004830FBF74EFD4FF00100FBF73EFD70BD8B48C0
S31508004840FBF746FD8A48FBF743FD8A48FBF740FD20
S31508004850894B4FF000021A605A604FF002027E4BF5
S315080048601A7070BD022B40F0BB80844D84484FF40B
S31508004870807105F50D72FFF7E3FA95F93A32002BC8
S315080048800FDA7948FBF724FD4FF00200FBF714FD19
S3150800489005F50D70FFF75CF94FF000026E4B1A70C4
S315080048A070BDD0B17649084601F5C0714FF00002D7
S315080048B0FFF7D4FE0446B0F1FF3F0ED16A48FBF776
S315080048C007FD4FF00300FBF7F7FC6648FFF740F9D2
S315080048D04FF00002604B1A7070BD23B2002B17DD33
S315080048E0654B5B683BB9644B654AD2F880211A6010
S315080048F024B25C600CE0624AD2F880215E490968FD
S315080049008A423CBF5C490A6003FA84F35A4A5360F8
S315080049105A4BD3F83C22D3F840329A4240F03881B9
S3150800492050484FF00001FFF71FF970B14E48FBF7EA
S31508004930CFFC4FF00400FBF7BFFC4A48FFF708F925
S315080049404FF00002444B1A7070BD4848FBF7C0FC94
S315080049504C48FBF7BDFC484D4B4C68682146FFF7B1
S31508004960A1FD2046FBF7B4FC4848FBF7B1FC2E68CE
S315080049704FEA16602146FFF783FDC6F3074004F1A8
S315080049800201FFF77DFDC6F3072004F10401FFF7D6
S3150800499077FDF0B204F10601FFF772FD2046FBF73A
S315080049A097FC3B48FBF794FC2868696800F0F4FB21
S315080049B070B92D48FBF78CFC4FF00500FBF77CFC23
S315080049C02848FFF7C5F84FF00002234B1A7070BD50
S315080049D02648FBF77DFC4FF003021F4B1A7070BD8B
S315080049E0032B40F0D580254D25484FF4807105F5F9
S315080049F00D72FFF725FA95F93A32002B0FDA25489A
S31508004A00FBF766FC4FF00200FBF756FC05F50D7048
S31508004A10FFF79EF84FF000020F4B1A7070BD002882
S31508004A203CD0174A104602F5C07102F58072FFF7AE
S31508004A3015FE0446B0F1FF3F30D11748FBF748FC96
S31508004A404FF00300FBF738FC0648FFF781F84FF0F4
S31508004A500002014B1A7070BDF8050020C8590008FD
S31508004A60EC59000838080020145A00081C5A000897
S31508004A70245A0008485A0008FC05002004060020AD
S31508004A805C0A0020785A0008B8050020845A0008F5
S31508004A90285B0008A05A0008C45A000823B2002B55
S31508004AA046DD3C48FBF714FC24B23B4D204629461C
S31508004AB0FFF7F8FC2846FBF70BFC3848FBF708FC21
S31508004AC0374E96F883012946FFF7DAFC96F88201F5
S31508004AD005F10201FFF7D4FC96F8810105F10401FE
S31508004AE0FFF7CEFC96F8800105F10601FFF7C8FC32
S31508004AF02846FBF7EDFB2B48FBF7EAFBD6F88001C7
S31508004B00214606F5807200F043FB70B92648FBF78C
S31508004B10DFFB4FF00600FBF7CFFB2448FFF718F83A
S31508004B204FF00002224B1A7070BD2248FBF7D0FBEB
S31508004B30214BD3F83C22D3F840329A4228D11F4859
S31508004B40FBF7C6FB00F030FB70B91748FBF7C0FB54
S31508004B504FF00700FBF7B0FB1448FEF7F9FF4FF0DC
S31508004B600002134B1A7070BD1248FBF7B1FB1448CC
S31508004B70FBF7AEFB0D48FEF7EBFF1248FBF7A8FB69
S31508004B804FF000020A4B1A70FBF77AFB00F028F880
S31508004B9070BD00BFE85A0008B8050020F85A00089A
S31508004BA05C0A0020285B0008145A00083808002010
S31508004BB0F80500201C5A000804060020105B0008AF
S31508004BC02C5B0008445B000808B5034B1860034BD0
S31508004BD01960FFF73DFCFCE7E00B0020E40B002022
S31508004BE008B500F0DDFA50B1FFF710FA00F0E6FA62
S31508004BF04FF40042024B1A60024B1B68984708BDE7
S31508004C0008ED00E00480000870B5044602F1FF369E
S31508004C10B6B252B100F101039E190D1A635D04F88C
S31508004C20013BFFF715FCB442F8D170BD08B500F09A
S31508004C3005FB08BDF8B507464FF0000425460D4E9E
S31508004C40FFF706FCA359BB420BD8311949685B1814
S31508004C509F4206D205EB4502064B03EB8202107A09
S31508004C60F8BD05F1010504F10C04782CE8D14FF0E4
S31508004C70FF00F8BDA05B00082DE9F0410746006873
S31508004C80FFF7D8FFFF2830D0FCF738FD4FF0F300C8
S31508004C90FCF74CFDFCF750FD012818BF002404D191
S31508004CA0FCF73CFD4FF0000421E03E6804EB0608E3
S31508004CB03B195D68FFF7CCFB40462946FCF77AFDB1
S31508004CC008280AD1A359AB420AD104F10404B4F561
S31508004CD0007FEAD14FF0010404E04FF0000401E040
S31508004CE04FF00004FCF71AFD01E04FF000042046DF
S31508004CF0BDE8F08108B54FEAC1534FEAD3535BB913
S31508004D0003688B420BD040F8041B4FF40072FFF780
S31508004D107BFF4FF0010008BD4FF0000008BD4FF0C3
S31508004D20010008BD38B504460D460C4B984206D01E
S31508004D300B4B994205D0FFF79FFF18B90AE0094CBB
S31508004D4000E0064C20462946FFF7D4FF002808BF96
S31508004D50002401E04FF00004204638BDE80B00208F
S31508004D6000800008EC0D00202DE9F84306460C46A5
S31508004D7017461D464FEA51294FEA49290368B3F1F8
S31508004D80FF3F03D14946FFF7B5FF50B333684B459C
S31508004D9005D030464946FFF7C5FF064628B33368AF
S31508004DA0E41A341904F1040440F2FF1809F50079ED
S31508004DB0FFF74EFB06F10403E31A434507D93046CD
S31508004DC04946FFF7AFFF064698B100F1040417F805
S31508004DD0013B04F8013B013DEAD14FF00100BDE873
S31508004DE0F8834FF00000BDE8F8834FF00000BDE8F7
S31508004DF0F8834FF00000BDE8F88300BF4FF0FF339B
S31508004E00024A1360024A1360704700BFEC0D002087
S31508004E10E80B002070B504460D461646FFF70AFF54
S31508004E20FF2814D004F1FF304019FFF703FFFF28CD
S31508004E3010D04FEA5422094BB3EB422F0CBF084857
S31508004E400848214632462B46FFF78EFF70BD4FF0C5
S31508004E50000070BD4FF0000070BD00BF0080000864
S31508004E60E80B0020EC0D0020F8B506460D46FFF7C6
S31508004E70E1FE044606F1FF304019FFF7DBFE054662
S31508004E80FF2C3AD0FF283BD084422DD8012C2ED9AE
S31508004E900B282FD8FCF732FC4FF0F300FCF746FC42
S31508004EA0FCF74AFC012804D1FCF738FC4FF0000057
S31508004EB0F8BD154F4FF00206FFF7CAFA37F8140087
S31508004EC03146FCF795FC082804D0FCF727FC4FF080
S31508004ED00000F8BD04F10104E4B2A542ECD2FCF7E7
S31508004EE01DFC4FF00100F8BD4FF00000F8BD4FF073
S31508004EF00000F8BD4FF00000F8BD4FF00000F8BD07
S31508004F004FF00000F8BD00BF705B000800B583B025
S31508004F10104B1B68B3F1FF3F18D00E4B99685A68BF
S31508004F208918DA6889181A6989185A6989189A6964
S31508004F308A18D9695318C3F1000302AA42F8043D36
S31508004F4005484FF00401FFF765FF01E04FF0010047
S31508004F5003B000BDE80B0020888100080E4B1868D6
S31508004F60A3F104031B68C0180C4B1B68C0180C4B34
S31508004F701B68C0180B4B1B68C0180B4B1B68C01866
S31508004F800A4B1B68C0180A4B1B68C018D0F10100F1
S31508004F9038BF0020704700BF04800008088000085A
S31508004FA00C8000081080000814800008188000088B
S31508004FB08881000808B50D4B1B68B3F1FF3F03D085
S31508004FC00A48FFF759FE58B1094B1B68B3F1FF3F72
S31508004FD009D00748FFF750FE003018BF012008BD6A
S31508004FE04FF0000008BD4FF0010008BDE80B002097
S31508004FF0EC0D002010B5044608484FF02001FCF7D8
S3150800500053FE012806D10548FCF748FE20704FF0EC
S31508005010010010BD4FF0000010BD00BF0014014094
S3150800502038B504460C484FF08001FCF73DFE78B1D0
S3150800503009482146FCF72CFE074D4FF08004284608
S315080050402146FCF731FE0028F9D04FF0010038BDA3
S315080050504FF0000038BD00BF0014014010B584B001
S315080050604FF4614300934FF00003ADF80430ADF8F8
S315080050700630ADF80830ADF80C304FF00C03ADF83B
S315080050800A30064C20466946FCF778FD20464FF064
S315080050900101FCF7EDFD04B010BD00BF001401408E
S315080050A02DE9F04106460C46402904D914484FF02C
S315080050B07601FFF789FD2046FFF7B2FF012804D0E5
S315080050C00F484FF07901FFF77FFD2546ACB14FF049
S315080050D00004DFF82C804FF08107FFF7B9F9305D3F
S315080050E0FFF79EFF012803D040463946FFF76CFDBF
S315080050F004F10104A3B2AB42EFD3BDE8F08100BFCF
S31508005100185C000810B504461B4B1B786BB91B4886
S31508005110FFF770FF012825D14FF00102164B1A70D0
S315080051204FF00000164B187010BD154B1878154B2C
S31508005130C018FFF75FFF012817D1114B1A7802F143
S315080051400102D2B21A700D4B1B78934210D1204639
S315080051500C49FFF759FD4FF00002074B1A704FF044
S31508005160010010BD4FF0000010BD4FF0000010BD4B
S315080051704FF0000010BD00BF35100020F00F0020D2
S3150800518034100020F10F002008B5FFF737FE08BDE0
S3150800519008B5FFF73FFE08BD08B5FFF765FE08BD71
S315080051A008B5FFF7DBFE08BD08B5FFF7AFFE10B17F
S315080051B0FFF700FF08BD4FF0000008BD4FF00002E2
S315080051C0014B1A60704700BF10E000E008B5FFF712
S315080051D0F5FF064B064A5A604FF000029A604FF0F8
S315080051E005011960034B1A6008BD00BF10E000E016
S315080051F03F90020038100020054B1B6813F4803FCF
S3150800520004D0044B1A6802F101021A60704700BF05
S3150800521010E000E03810002008B5FFF7EDFF014B5D
S31508005220186808BD3810002008B503484FF0360145
S31508005230FFF7CAFC08BD00BF3C5C000810B572B693
S31508005240114B124A9A4211D202F10403104CE41A85
S3150800525024F0030404F104044FF0000310460D493A
S315080052605A581A5003F10403A342F9D10A480B49C4
S315080052704FF000028842B8BF40F8042BFFF6FAAF99
S31508005280FBF750F810BD00BF1C00002000000020EE
S315080052901F0000206C5D0008200000203C10002044
S315080052A0032A2DE9F00F09D82AB10023CC5CC4548F
S315080052B001339342FAD1BDE8F00F704783070244E1
S315080052C00ED0441C4D1C15F8017C04F00306234639
S315080052D001342946013504F8027C002EF3D100E09A
S315080052E0034611F003046DD0D71A0D1B032F2E6841
S315080052F019DDC4F1040C4FEAC4081C1D4FEACC0C96
S3150800530055F8047FC4EB0209234604310434B9F185
S31508005310030F26FA08FA07FA0CFB3E464BEA0A0779
S3150800532044F8087CECDC9A42C5D9013301310132D4
S3150800533011F8014C01330131934203F8024CF7D1BD
S31508005340B9E70C684033403143F8404C51F83C4CBF
S3150800535043F83C4C51F8384C43F8384C51F8344C27
S3150800536043F8344C51F8304C43F8304C51F82C4C37
S3150800537043F82C4C51F8284C43F8284C51F8244C47
S3150800538043F8244C51F8204C43F8204C51F81C4C57
S3150800539043F81C4C51F8184C43F8184C51F8144C67
S315080053A043F8144C51F8104C43F8104C51F80C4C77
S315080053B043F80C4C51F8084C43F8084C51F8044C87
S315080053C043F8044CD41A3F2CBBDC11E00C681033AC
S315080053D0103143F8104C51F80C4C43F80C4C51F86A
S315080053E0084C43F8084C51F8044C43F8044CD41ABA
S315080053F00F2CEBDC032C96DD1C1D0D1D55F8047CCB
S31508005400161B2346294604340435032E44F8087C23
S31508005410F4DC88E72F64656D6F70726F675F6F6C79
S31508005420696D65785F73746D3332653430372E7302
S31508005430726563002F626F6F746C6F672E74787471
S3150800544000000000222A3A3C3E3F7C7F0000000014
S315080054502B2C3B3D5B5D0000809A90418E418F80EE
S315080054604545454949498E8F9092924F994F5555D2
S3150800547059999A9B9C9D9E9F41494F55A5A5A6A7BC
S31508005480A8A9AAABAC21AEAFB0B1B2B3B4B5B6B7A2
S31508005490B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C706
S315080054A0C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7F6
S315080054B0D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E6
S315080054C0E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7D6
S315080054D0F8F9FAFBFCFDFEFF01030507090E101299
S315080054E01416181C1E0000006100620063006400A8
S315080054F0650066006700680069006A006B006C005A
S315080055006D006E006F007000710072007300740009
S31508005510750076007700780079007A00A100A2006D
S31508005520A300A500AC00AF00E000E100E200E30044
S31508005530E400E500E600E700E800E900EA00EB0021
S31508005540EC00ED00EE00EF00F000F100F200F300D1
S31508005550F400F500F600F800F900FA00FB00FC007C
S31508005560FD00FE00FF000101030105010701090115
S315080055700B010D010F011101130115011701190185
S315080055801B011D011F0121012301250127012901F5
S315080055902B012D012F0131013301350137013A0164
S315080055A03C013E01400142014401460148014B01CC
S315080055B04D014F01510153015501570159015B0135
S315080055C05D015F01610163016501670169016B01A5
S315080055D06D016F0171017301750177017A017C0113
S315080055E07E019201B103B203B303B403B503B60354
S315080055F0B703B803B903BA03BB03BC03BD03BE03B1
S31508005600BF03C003C103C303C403C503C603C7035B
S31508005610C803C903CA03300431043204330434040A
S31508005620350436043704380439043A043B043C0488
S315080056303D043E043F044004410442044304440438
S31508005640450446044704480449044A044B044C04E8
S315080056504D044E044F045104520453045404550493
S3150800566056045704580459045A045B045C045E043F
S315080056705F047021712172217321742175217621AD
S315080056807721782179217A217B217C217D217E2130
S315080056907F2141FF42FF43FF44FF45FF46FF47FF87
S315080056A048FF49FF4AFF4BFF4CFF4DFF4EFF4FFF98
S315080056B050FF51FF52FF53FF54FF55FF56FF57FF48
S315080056C058FF59FF5AFF0000C700FC00E900E20036
S315080056D0E400E000E500E700EA00EB00E800EF0080
S315080056E0EE00EC00C400C500C900E600C600F400E0
S315080056F0F600F200FB00F900FF00D600DC00A2006D
S31508005700A300A500A7209201E100ED00F300FA002E
S31508005710F100D100AA00BA00BF001023AC00BD00FA
S31508005720BC00A100AB00BB0091259225932502255C
S315080057302425612562255625552563255125572596
S315080057405D255C255B251025142534252C251C256F
S3150800575000253C255E255F255A255425692566259D
S31508005760602550256C2567256825642565255925F6
S315080057705825522553256B256A2518250C25882575
S3150800578084258C2590258025B103DF009303C0036B
S31508005790A303C303B500C403A6039803A903B4036C
S315080057A01E22C603B50329226122B100652264229E
S315080057B020232123F7004822B0001922B7001A2215
S315080057C07F20B200A025A00041004200430044000B
S315080057D0450046004700480049004A004B004C0077
S315080057E04D004E004F005000510052005300540027
S315080057F0550056005700580059005A002100E0FF8E
S31508005800E1FFE5FFE2FFE3FFC000C100C200C300FD
S31508005810C400C500C600C700C800C900CA00CB003E
S31508005820CC00CD00CE00CF00D000D100D200D300EE
S31508005830D400D500D600D800D900DA00DB00DC0099
S31508005840DD00DE00780100010201040106010801FD
S315080058500A010C010E0110011201140116011801AA
S315080058601A011C011E01200122012401260128011A
S315080058702A012C012E013001320134013601390189
S315080058803B013D013F0141014301450147014A01F1
S315080058904C014E01500152015401560158015A015A
S315080058A05C015E01600162016401660168016A01CA
S315080058B06C016E01700172017401760179017B0138
S315080058C07D01910191039203930394039503960333
S315080058D09703980399039A039B039C039D039E03CE
S315080058E09F03A003A103A303A403A503A603A70379
S315080058F0A803A903AA031004110412041304140428
S31508005900150416041704180419041A041B041C04A5
S315080059101D041E041F042004210422042304240455
S31508005920250426042704280429042A042B042C0405
S315080059302D042E042F0401040204030404040504A0
S3150800594006040704080409040A040B040C040E04DC
S315080059500F0460216121622163216421652166218A
S315080059606721682169216A216B216C216D216E21CD
S315080059706F2121FF22FF23FF24FF25FF26FF27FF94
S3150800598028FF29FF2AFF2BFF2CFF2DFF2EFF2FFFB5
S3150800599030FF31FF32FF33FF34FF35FF36FF37FF65
S315080059A038FF39FF3AFF00004F70656E424C5400CD
S315080059B02E2E2F2E2E2F2E2E2F536F757263652F98
S315080059C066696C652E6300004669726D776172655B
S315080059D020757064617465207265717565737420CD
S315080059E064657465637465640A0D00004F70656EBE
S315080059F0696E67206669726D776172652066696C83
S31508005A006520666F722072656164696E672E2E2E38
S31508005A10000000004552524F520A0D004F4B0A0D26
S31508005A20000000005374617274696E6720746865BB
S31508005A302070726F6772616D6D696E67207365712C
S31508005A4075656E63650A0D0050617273696E67202D
S31508005A506669726D776172652066696C6520746F18
S31508005A60206F627461696E2065726173652073695F
S31508005A707A652E2E2E00000045726173696E6720C6
S31508005A80000000002062797465732066726F6D20CD
S31508005A906D656D6F727920617420307800000000A2
S31508005AA052656164696E67206C696E652066726FFF
S31508005AB06D2066696C652E2E2E4552524F520A0D80
S31508005AC000000000496E76616C696420636865634E
S31508005AD06B73756D20666F756E642E2E2E45525249
S31508005AE04F520A0D0000000050726F6772616D6DAB
S31508005AF0696E67200000000020627974657320745F
S31508005B006F206D656D6F72792061742030780000A2
S31508005B1057726974696E672070726F6772616D205B
S31508005B20636865636B73756D2E2E2E00436C6F73F9
S31508005B30696E67206669726D776172652066696C41
S31508005B40650A0D004669726D776172652075706425
S31508005B50617465207375636365737366756C6C79B8
S31508005B6020636F6D706C657465640A0D0000000033
S31508005B700000080010001800200028003000380037
S31508005B8040004800500058008000880090009800A7
S31508005B90A000A800B000B800C000C800D000D80017
S31508005BA000800008004000000200000000C0000855
S31508005BB0004000000300000000000108000001008A
S31508005BC004000000000002080000020005000000B2
S31508005BD00000040800000200060000000000060895
S31508005BE0000002000700000000000808000002008C
S31508005BF00800000000000A08000002000900000072
S31508005C0000000C08000002000A00000000000E0850
S31508005C10000002000B0000002E2E2F2E2E2F2E2EF7
S31508005C202F536F757263652F41524D434D345F5341
S31508005C30544D33322F756172742E63002E2E2F2E1B
S31508005C402E2F2E2E2F536F757263652F41524D439B
S31508005C504D345F53544D33322F4743432F76656394
S31508005C60746F72732E6300000020202020202020ED
S31508005C7020202828282828202020202020202020EE
S31508005C8020202020202020202088101010101010FE
S31508005C90101010101010101010040404040404044A
S31508005CA004040410101010101010414141414141E4
S31508005CB001010101010101010101010101010101C6
S31508005CC001010101101010101010424242424242D6
S31508005CD00202020202020202020202020202020296
S31508005CE0020202021010101020000000000000003E
S31508005CF00000000000000000000000000000000096
S31508005D000000000000000000000000000000000085
S31508005D100000000000000000000000000000000075
S31508005D200000000000000000000000000000000065
S31508005D300000000000000000000000000000000055
S31508005D400100000001000000000000000102030439
S31108005D5001020304060708093C5C000871
S31508005D400000000000000000000000000000000045
S31508005D500000000000000000000000000000000035
S31108005D6000000000000000000000000029
S31508005D6C010000000100000000000000010203040D
S31108005D7C0102030406070809685C000819
S70508000000F2

View File

@ -61,6 +61,33 @@
/****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -229,6 +229,16 @@ continue
<File Name="../../../../Source/ARMCM4_STM32/GCC/cstart.c"/>
<File Name="../../../../Source/ARMCM4_STM32/GCC/vectors.c"/>
</VirtualDirectory>
<VirtualDirectory Name="Crossworks">
<File Name="../../../../Source/ARMCM4_STM32/Crossworks/cstart.s"/>
<File Name="../../../../Source/ARMCM4_STM32/Crossworks/vectors.c"/>
</VirtualDirectory>
<VirtualDirectory Name="IAR">
<File Name="../../../../Source/ARMCM4_STM32/IAR/cstart.s"/>
<File Name="../../../../Source/ARMCM4_STM32/IAR/vectors.c"/>
</VirtualDirectory>
<File Name="../../../../Source/ARMCM4_STM32/can.c"/>
<File Name="../../../../Source/ARMCM4_STM32/can.h"/>
</VirtualDirectory>
</VirtualDirectory>
</CodeLite_Project>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif
/* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */
USART_Cmd(USART6, ENABLE);
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/

View File

@ -126,6 +126,8 @@ main.c \
../../../Source/assert.h \
../../../Source/plausibility.h \
../../../Source/ARMCM4_STM32/types.h \
../../../Source/ARMCM4_STM32/can.c \
../../../Source/ARMCM4_STM32/can.h \
../../../Source/ARMCM4_STM32/cpu.c \
../../../Source/ARMCM4_STM32/cpu.h \
../../../Source/ARMCM4_STM32/flash.c \

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/

View File

@ -1055,7 +1055,7 @@ S315080041B8022B44BF0B7803707047083A07D3B1E857
S315080041C80810083A40F8043B40F804CBF7D25307DE
S315080041D8E4E7FF0010B5DFF8D00600210170DFF824
S315080041E8CC160020FDF7DEFB0400E4B2002C04D050
S315080041F89E21DFF8BC0600F0F7FB10BDDFF8A8061D
S315080041F87C21DFF8BC0600F0F7FB10BDDFF8A8063F
S315080042080078002801D1012000E00020704780B519
S3150800421800F02EFC012801D1002011E0DFF88806FD
S315080042280078002801D000200AE000F025FC0128C3
@ -1135,7 +1135,7 @@ S315080046B800F070F90500AE19A41C200000F06AF98C
S315080046C8801906006D1EA41CADB2022DF5DAF6B2E5
S315080046D8F643200000F05EF9F6B2864201D00020C3
S315080046E800E0012070BD2DE9F84F82460C00150040
S315080046F80027002C02D0BAF1000F04D14FF4167126
S315080046F80027002C02D0BAF1000F04D140F2362167
S315080047086B4800F071F95046FFF7AEFF0600F6B29F
S31508004718032E01D10020C4E05046FFF7C4FF002845
S3150800472802D15FF0FF30BCE0F6B2002E03D0022EAD

View File

@ -63,6 +63,33 @@
/****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -83,14 +83,14 @@
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2900</SelStart2><SelEnd2>2900</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\flash.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>315</YPos2><SelStart2>19406</SelStart2><SelEnd2>19406</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\config.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>57</YPos2><SelStart2>5405</SelStart2><SelEnd2>5405</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\nvm.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>145</YPos2><SelStart2>6479</SelStart2><SelEnd2>6479</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>597</YPos2><SelStart2>27816</SelStart2><SelEnd2>27816</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\fatfs\src\ff.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>3114</YPos2><SelStart2>111111</SelStart2><SelEnd2>111111</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\xcp.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>216</YPos2><SelStart2>11560</SelStart2><SelEnd2>11560</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\boot.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2798</SelStart2><SelEnd2>2798</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\backdoor.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>89</YPos2><SelStart2>5799</SelStart2><SelEnd2>5799</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\cpu.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>91</YPos2><SelStart2>5211</SelStart2><SelEnd2>5211</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\timer.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>4186</SelStart2><SelEnd2>4186</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\file.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>108</YPos2><SelStart2>5993</SelStart2><SelEnd2>6018</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\uart.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>144</YPos2><SelStart2>7489</SelStart2><SelEnd2>7489</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\com.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>133</YPos2><SelStart2>7085</SelStart2><SelEnd2>7085</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>339</YPos2><SelStart2>16576</SelStart2><SelEnd2>16601</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2963</SelStart2><SelEnd2>2963</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>54</YPos2><SelStart2>3384</SelStart2><SelEnd2>3384</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-02afcf20><key>iaridepm.enu1</key></Toolbar-02afcf20></Sizes></Row0><Row1><Sizes><Toolbar-0d0af0b0><key>debuggergui.enu1</key></Toolbar-0d0af0b0></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>461</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>241146</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd3></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-028deb38><key>iaridepm.enu1</key></Toolbar-028deb38></Sizes></Row0><Row1><Sizes><Toolbar-0a394190><key>debuggergui.enu1</key></Toolbar-0a394190></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>461</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>241146</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd3></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Project>

View File

@ -9,7 +9,7 @@ TriggerName=main
LimitSize=0
ByteLimit=50
[DebugChecksum]
Checksum=-471197012
Checksum=1695986847
[Exceptions]
StopOnUncaught=_ 0
StopOnThrow=_ 0

View File

@ -12,20 +12,20 @@
<Column0>203</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
<Column0>338</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build>
<PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Find-in-Files</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build>
<TerminalIO/>
<Find-in-Files>
<ColumnWidth0>190</ColumnWidth0><ColumnWidth1>27</ColumnWidth1><ColumnWidth2>326</ColumnWidth2></Find-in-Files>
<ColumnWidth0>190</ColumnWidth0><ColumnWidth1>27</ColumnWidth1><ColumnWidth2>326</ColumnWidth2><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window></Windows></PreferedWindows></Find-in-Files>
<PROJECT_GUI_CALL_GRAPH><col-names><item>File</item><item>Function</item><item>Line</item></col-names><col-widths><item>200</item><item>700</item><item>100</item></col-widths><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></PROJECT_GUI_CALL_GRAPH></Static>
<Windows>
@ -42,36 +42,20 @@
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd2>
<Tabs>
<Tab>
<Identity>TabID-3456-10024</Identity>
<TabName>Build</TabName>
<Factory>Build</Factory>
<Session/>
</Tab>
<Tab>
<Identity>TabID-19098-11164</Identity>
<TabName>Find in Files</TabName>
<Factory>Find-in-Files</Factory>
<Session/>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd2></Windows>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-19870-1384</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2963</SelStart2><SelEnd2>2963</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>54</YPos2><SelStart2>3384</SelStart2><SelEnd2>3384</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-00a8cf20><key>iaridepm.enu1</key></Toolbar-00a8cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>778</Bottom><Right>277</Right><x>-2</x><y>-2</y><xscreen>135</xscreen><yscreen>163</yscreen><sizeHorzCX>104328</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>215611</sizeVertCX><sizeVertCY>947752</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>778</Bottom><Right>374</Right><x>-2</x><y>-2</y><xscreen>1297</xscreen><yscreen>163</yscreen><sizeHorzCX>1002318</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>290572</sizeVertCX><sizeVertCY>947752</sizeVertCY></Rect></Wnd2></Sizes></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-028deb38><key>iaridepm.enu1</key></Toolbar-028deb38></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>963</Bottom><Right>412</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>215625</sizeVertCX><sizeVertCY>957341</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>963</Bottom><Right>420</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>219792</sizeVertCX><sizeVertCY>957341</sizeVertCY></Rect></Wnd1></Sizes></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

View File

@ -2079,6 +2079,12 @@
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\IAR\vectors.c</name>
</file>
</group>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\can.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\can.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\cpu.c</name>
</file>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif
/* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */
USART_Cmd(USART6, ENABLE);
#endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/

View File

@ -12,12 +12,12 @@
<Column0>181</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
<Column0>305</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace>
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build><TerminalIO/></Static>
<Windows>
<Wnd0>
<Wnd2>
<Tabs>
<Tab>
<Identity>TabID-29163-19963</Identity>
@ -29,20 +29,20 @@
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-19063-20767</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>
<SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-19063-20767</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>36</YPos2><SelStart2>2627</SelStart2><SelEnd2>2627</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\led.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>30</YPos2><SelStart2>2259</SelStart2><SelEnd2>2259</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\boot.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>27</YPos2><SelStart2>7214</SelStart2><SelEnd2>7214</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>45</YPos2><SelStart2>2856</SelStart2><SelEnd2>2856</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions>
<Top><Row0><Sizes><Toolbar-0294cf20><key>iaridepm.enu1</key></Toolbar-0294cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>617</Bottom><Right>255</Right><x>-2</x><y>-2</y><xscreen>135</xscreen><yscreen>163</yscreen><sizeHorzCX>104328</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>198609</sizeVertCX><sizeVertCY>752126</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>161</Bottom><Right>1296</Right><x>-2</x><y>-2</y><xscreen>1298</xscreen><yscreen>163</yscreen><sizeHorzCX>1003091</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>104328</sizeVertCX><sizeVertCY>198056</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
<Top><Row0><Sizes><Toolbar-02b7eb38><key>iaridepm.enu1</key></Toolbar-02b7eb38></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>765</Bottom><Right>379</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>198438</sizeVertCX><sizeVertCY>760913</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop>
</Workspace>

View File

@ -289,9 +289,6 @@ void CanInit(void)
****************************************************************************************/
void CanTransmitPacket(blt_int8u *data, blt_int8u len)
{
blt_int8u byte_count;
blt_int8u mailbox;
/* make sure that transmit mailbox 0 is available */
ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0);
/* store the 11-bit message identifier */
@ -327,7 +324,6 @@ void CanTransmitPacket(blt_int8u *data, blt_int8u len)
****************************************************************************************/
blt_bool CanReceivePacket(blt_int8u *data)
{
blt_int8u byte_count;
blt_int32u rxMsgId;
blt_bool result = BLT_FALSE;

View File

@ -0,0 +1,388 @@
/************************************************************************************//**
* \file Source\ARMCM4_STM32\can.c
* \brief Bootloader CAN communication interface source file.
* \ingroup Target_ARMCM4_STM32
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2013 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>.
*
* \endinternal
****************************************************************************************/
/****************************************************************************************
* Include files
****************************************************************************************/
#include "boot.h" /* bootloader generic header */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief CAN transmission mailbox layout. */
typedef struct
{
volatile blt_int32u TIR;
volatile blt_int32u TDTR;
volatile blt_int32u TDLR;
volatile blt_int32u TDHR;
} tCanTxMailBox;
/** \brief CAN reception FIFO mailbox layout. */
typedef struct
{
volatile blt_int32u RIR;
volatile blt_int32u RDTR;
volatile blt_int32u RDLR;
volatile blt_int32u RDHR;
} tCanRxFIFOMailBox;
/** \brief CAN filter register layout. */
typedef struct
{
volatile blt_int32u FR1;
volatile blt_int32u FR2;
} tCanFilter;
/** \brief CAN controller register layout. */
typedef struct
{
volatile blt_int32u MCR;
volatile blt_int32u MSR;
volatile blt_int32u TSR;
volatile blt_int32u RF0R;
volatile blt_int32u RF1R;
volatile blt_int32u IER;
volatile blt_int32u ESR;
volatile blt_int32u BTR;
blt_int32u RESERVED0[88];
tCanTxMailBox sTxMailBox[3];
tCanRxFIFOMailBox sFIFOMailBox[2];
blt_int32u RESERVED1[12];
volatile blt_int32u FMR;
volatile blt_int32u FM1R;
blt_int32u RESERVED2;
volatile blt_int32u FS1R;
blt_int32u RESERVED3;
volatile blt_int32u FFA1R;
blt_int32u RESERVED4;
volatile blt_int32u FA1R;
blt_int32u RESERVED5[8];
tCanFilter sFilterRegister[28];
} tCanRegs;
/****************************************************************************************
* Macro definitions
****************************************************************************************/
/** \brief Reset request bit. */
#define CAN_BIT_RESET ((blt_int32u)0x00008000)
/** \brief Initialization request bit. */
#define CAN_BIT_INRQ ((blt_int32u)0x00000001)
/** \brief Initialization acknowledge bit. */
#define CAN_BIT_INAK ((blt_int32u)0x00000001)
/** \brief Sleep mode request bit. */
#define CAN_BIT_SLEEP ((blt_int32u)0x00000002)
/** \brief Filter 0 selection bit. */
#define CAN_BIT_FILTER0 ((blt_int32u)0x00000001)
/** \brief Filter 14 selection bit. */
#define CAN_BIT_FILTER14 ((blt_int32u)0x00004000)
/** \brief Filter init mode bit. */
#define CAN_BIT_FINIT ((blt_int32u)0x00000001)
/** \brief Transmit mailbox 0 empty bit. */
#define CAN_BIT_TME0 ((blt_int32u)0x04000000)
/** \brief Transmit mailbox request bit. */
#define CAN_BIT_TXRQ ((blt_int32u)0x00000001)
/** \brief Release FIFO 0 mailbox bit. */
#define CAN_BIT_RFOM0 ((blt_int32u)0x00000020)
/****************************************************************************************
* Register definitions
****************************************************************************************/
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/** \brief Macro for accessing CAN1 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006400)
#else
/** \brief Macro for accessing CAN2 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006800)
#endif
/** \brief Macro for accessing CAN1 controller registers. */
#define CAN1 ((tCanRegs *) (blt_int32u)0x40006400)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
blt_int8u tseg1; /**< CAN time segment 1 */
blt_int8u tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return BLT_TRUE if the CAN bustiming register values were found, BLT_FALSE
** otherwise.
**
****************************************************************************************/
static blt_bool CanGetSpeedConfig(blt_int16u baud, blt_int16u *prescaler,
blt_int8u *tseg1, blt_int8u *tseg2)
{
blt_int8u cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return BLT_TRUE;
}
}
}
/* could not find a good bus timing configuration */
return BLT_FALSE;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN controller and synchronizes it to the CAN bus.
** \return none.
**
****************************************************************************************/
void CanInit(void)
{
blt_int16u prescaler;
blt_int8u tseg1, tseg2;
blt_bool result;
/* the current implementation supports CAN1 and 2. throw an assertion error in case a
* different CAN channel is configured.
*/
ASSERT_CT((BOOT_COM_CAN_CHANNEL_INDEX == 0 || BOOT_COM_CAN_CHANNEL_INDEX == 1));
/* obtain bittiming configuration information */
result = CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
ASSERT_RT(result == BLT_TRUE);
/* disable all can interrupt. this driver works in polling mode */
CANx->IER = (blt_int32u)0;
/* set request to reset the can controller */
CANx->MCR |= CAN_BIT_RESET ;
/* wait for acknowledge that the can controller was reset */
while ((CANx->MCR & CAN_BIT_RESET) != 0)
{
/* keep the watchdog happy */
CopService();
}
/* exit from sleep mode, which is the default mode after reset */
CANx->MCR &= ~CAN_BIT_SLEEP;
/* set request to enter initialisation mode */
CANx->MCR |= CAN_BIT_INRQ ;
/* wait for acknowledge that initialization mode was entered */
while ((CANx->MSR & CAN_BIT_INAK) == 0)
{
/* keep the watchdog happy */
CopService();
}
/* configure the bittming */
CANx->BTR = (blt_int32u)((blt_int32u)(tseg1 - 1) << 16) | \
(blt_int32u)((blt_int32u)(tseg2 - 1) << 20) | \
(blt_int32u)(prescaler - 1);
/* set request to leave initialisation mode */
CANx->MCR &= ~CAN_BIT_INRQ;
/* wait for acknowledge that initialization mode was exited */
while ((CANx->MSR & CAN_BIT_INAK) != 0)
{
/* keep the watchdog happy */
CopService();
}
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 0 */
CAN1->FA1R &= ~CAN_BIT_FILTER0;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER0;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[0].FR1 = 0;
CAN1->sFilterRegister[0].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER0;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER0;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER0;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#else
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 14 */
CAN1->FA1R &= ~CAN_BIT_FILTER14;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER14;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[14].FR1 = 0;
CAN1->sFilterRegister[14].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER14;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER14;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER14;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#endif
} /*** end of CanInit ***/
/************************************************************************************//**
** \brief Transmits a packet formatted for the communication interface.
** \param data Pointer to byte array with data that it to be transmitted.
** \param len Number of bytes that are to be transmitted.
** \return none.
**
****************************************************************************************/
void CanTransmitPacket(blt_int8u *data, blt_int8u len)
{
/* make sure that transmit mailbox 0 is available */
ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0);
/* store the 11-bit message identifier */
CANx->sTxMailBox[0].TIR &= CAN_BIT_TXRQ;
CANx->sTxMailBox[0].TIR |= ((blt_int32u)BOOT_COM_CAN_TX_MSG_ID << 21);
/* store the message date length code (DLC) */
CANx->sTxMailBox[0].TDTR = len;
/* store the message data bytes */
CANx->sTxMailBox[0].TDLR = (((blt_int32u)data[3] << 24) | \
((blt_int32u)data[2] << 16) | \
((blt_int32u)data[1] << 8) | \
((blt_int32u)data[0]));
CANx->sTxMailBox[0].TDHR = (((blt_int32u)data[7] << 24) | \
((blt_int32u)data[6] << 16) | \
((blt_int32u)data[5] << 8) | \
((blt_int32u)data[4]));
/* request the start of message transmission */
CANx->sTxMailBox[0].TIR |= CAN_BIT_TXRQ;
/* wait for transmit completion */
while ((CANx->TSR&CAN_BIT_TME0) == 0)
{
/* keep the watchdog happy */
CopService();
}
} /*** end of CanTransmitPacket ***/
/************************************************************************************//**
** \brief Receives a communication interface packet if one is present.
** \param data Pointer to byte array where the data is to be stored.
** \return BLT_TRUE is a packet was received, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool CanReceivePacket(blt_int8u *data)
{
blt_int32u rxMsgId;
blt_bool result = BLT_FALSE;
/* check if a new message was received */
if ((CANx->RF0R&(blt_int32u)0x00000003) > 0)
{
/* read out the message identifier */
rxMsgId = (blt_int32u)0x000007FF & (CANx->sFIFOMailBox[0].RIR >> 21);
/* is this the packet identifier */
if (rxMsgId == BOOT_COM_CAN_RX_MSG_ID)
{
result = BLT_TRUE;
/* store the received packet data */
data[0] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDLR;
data[1] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 8);
data[2] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 16);
data[3] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 24);
data[4] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDHR;
data[5] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 8);
data[6] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 16);
data[7] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 24);
}
/* release FIFO0 */
CANx->RF0R |= CAN_BIT_RFOM0;
}
return result;
} /*** end of CanReceivePacket ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of can.c **************************************/

View File

@ -0,0 +1,47 @@
/************************************************************************************//**
* \file Source\ARMCM4_STM32\can.h
* \brief Bootloader CAN communication interface header file.
* \ingroup Target_ARMCM4_STM32
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2013 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>.
*
* \endinternal
****************************************************************************************/
#ifndef CAN_H
#define CAN_H
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* Function prototypes
****************************************************************************************/
void CanInit(void);
void CanTransmitPacket(blt_int8u *data, blt_int8u len);
blt_bool CanReceivePacket(blt_int8u *data);
#endif /* BOOT_COM_CAN_ENABLE > 0 */
#endif /* CAN_H */
/*********************************** end of can.h **************************************/

View File

@ -41,7 +41,7 @@
/** \brief Minor version of the bootloader core. */
#define BOOT_VERSION_CORE_MINOR (96u)
/** \brief Bufgix version of the bootloader core. */
#define BOOT_VERSION_CORE_BUGFIX (0u)
#define BOOT_VERSION_CORE_BUGFIX (1u)
/****************************************************************************************

View File

@ -40,19 +40,6 @@
#if (BOOT_FILE_SYS_ENABLE > 0)
/****************************************************************************************
* Defines
****************************************************************************************/
/** \brief Maximum number of characters that can be on a line in the firmware file. */
#define MAX_CHARS_PER_LINE (256)
/** \brief Maximum number of data bytes that can be on a line in the firmware file
* (S-record).
*/
#define MAX_DATA_BYTES_PER_LINE (MAX_CHARS_PER_LINE/2)
/** \brief Return code in case an invalid checksum was detected on an S-record line. */
#define ERROR_SREC_INVALID_CHECKSUM (-1)
/****************************************************************************************
* Type definitions
****************************************************************************************/
@ -65,15 +52,6 @@ typedef enum
FIRMWARE_UPDATE_STATE_PROGRAMMING /**< programming state */
} tFirmwareUpdateState;
/** \brief Enumeration for the different S-record line types. */
typedef enum
{
LINE_TYPE_S1, /**< 16-bit address line */
LINE_TYPE_S2, /**< 24-bit address line */
LINE_TYPE_S3, /**< 32-bit address line */
LINE_TYPE_UNSUPPORTED /**< unsupported line */
} tSrecLineType;
/** \brief Structure type with information for the memory erase opeartion. */
typedef struct
{
@ -88,21 +66,9 @@ typedef struct
FIL file; /**< file object for firmware file */
} tFatFsObjects;
/** \brief Structure type for grouping the parsing results of an S-record line. */
typedef struct
{
blt_char line[MAX_CHARS_PER_LINE]; /**< string buffer for the line chars */
blt_int8u data[MAX_DATA_BYTES_PER_LINE]; /**< array for S1, S2 or S3 data bytes*/
blt_addr address; /**< address on S1, S2 or S3 line */
} tSrecLineParseObject;
/****************************************************************************************
* Function prototypes
****************************************************************************************/
static tSrecLineType SrecGetLineType(const blt_char *line);
static blt_bool SrecVerifyChecksum(const blt_char *line);
static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data);
#if (BOOT_FILE_LOGGING_ENABLE > 0)
static blt_char FileLibByteNibbleToChar(blt_int8u nibble);
static blt_char *FileLibByteToHexString(blt_int8u byte_val, blt_char *destination);
@ -284,7 +250,7 @@ void FileTask(void)
/* parse the S-Record line without copying the data values if the line is not empty */
if (read_line_ptr != BLT_NULL)
{
parse_result = SrecParseLine(lineParseObject.line, &lineParseObject.address, BLT_NULL);
parse_result = FileSrecParseLine(lineParseObject.line, &lineParseObject.address, BLT_NULL);
/* check parsing result */
if (parse_result == ERROR_SREC_INVALID_CHECKSUM)
{
@ -399,7 +365,7 @@ void FileTask(void)
/* parse the S-Record line if the line is not empty */
if (read_line_ptr != BLT_NULL)
{
parse_result = SrecParseLine(lineParseObject.line, &lineParseObject.address, lineParseObject.data);
parse_result = FileSrecParseLine(lineParseObject.line, &lineParseObject.address, lineParseObject.data);
/* check parsing result */
if (parse_result == ERROR_SREC_INVALID_CHECKSUM)
{
@ -505,7 +471,7 @@ void FileTask(void)
** \return the S-Record line type.
**
****************************************************************************************/
static tSrecLineType SrecGetLineType(const blt_char *line)
tSrecLineType FileSrecGetLineType(const blt_char *line)
{
/* check if the line starts with the 'S' character, followed by a digit */
if ( (toupper(line[0]) != 'S') || (isdigit(line[1]) == 0) )
@ -528,7 +494,7 @@ static tSrecLineType SrecGetLineType(const blt_char *line)
}
/* still here so not a supported line type found */
return LINE_TYPE_UNSUPPORTED;
} /*** end of SrecGetLineType ***/
} /*** end of FileSrecGetLineType ***/
/************************************************************************************//**
@ -538,7 +504,7 @@ static tSrecLineType SrecGetLineType(const blt_char *line)
** \return BLT_TRUE if the checksum is correct, BLT_FALSE otherwise.
**
****************************************************************************************/
static blt_bool SrecVerifyChecksum(const blt_char *line)
blt_bool FileSrecVerifyChecksum(const blt_char *line)
{
blt_int16u bytes_on_line;
blt_int8u checksum = 0;
@ -573,7 +539,7 @@ static blt_bool SrecVerifyChecksum(const blt_char *line)
}
/* still here so the checksum was correct */
return BLT_TRUE;
} /*** end of SrecVerifyChecksum ***/
} /*** end of FileSrecVerifyChecksum ***/
/************************************************************************************//**
@ -589,7 +555,7 @@ static blt_bool SrecVerifyChecksum(const blt_char *line)
** in case the checksum validation failed.
**
****************************************************************************************/
static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data)
blt_int16s FileSrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data)
{
tSrecLineType lineType;
blt_int16s data_byte_count = 0;
@ -599,7 +565,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
/* check pointers and not that data can be a null pointer */
ASSERT_RT((address != BLT_NULL) && (line != BLT_NULL));
/* figure out what type of line we are dealing with */
lineType = SrecGetLineType(line);
lineType = FileSrecGetLineType(line);
/* make sure it is one that we can parse */
if (lineType == LINE_TYPE_UNSUPPORTED)
{
@ -607,7 +573,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
return 0;
}
/* verify the checksum */
if (SrecVerifyChecksum(line) == BLT_FALSE)
if (FileSrecVerifyChecksum(line) == BLT_FALSE)
{
/* error on data line encountered */
return ERROR_SREC_INVALID_CHECKSUM;
@ -704,7 +670,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
}
return data_byte_count;
} /*** end of SrecParseLine ***/
} /*** end of FileSrecParseLine ***/
#if (BOOT_FILE_LOGGING_ENABLE > 0)

View File

@ -58,14 +58,48 @@
/** \brief Error code because the program's checksum could not be written to memory. */
#define FILE_ERROR_CANNOT_WRITE_CHECKSUM (7)
/** \brief Maximum number of characters that can be on a line in the firmware file. */
#define MAX_CHARS_PER_LINE (256)
/** \brief Maximum number of data bytes that can be on a line in the firmware file
* (S-record).
*/
#define MAX_DATA_BYTES_PER_LINE (MAX_CHARS_PER_LINE/2)
/** \brief Return code in case an invalid checksum was detected on an S-record line. */
#define ERROR_SREC_INVALID_CHECKSUM (-1)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Enumeration for the different S-record line types. */
typedef enum
{
LINE_TYPE_S1, /**< 16-bit address line */
LINE_TYPE_S2, /**< 24-bit address line */
LINE_TYPE_S3, /**< 32-bit address line */
LINE_TYPE_UNSUPPORTED /**< unsupported line */
} tSrecLineType;
/** \brief Structure type for grouping the parsing results of an S-record line. */
typedef struct
{
blt_char line[MAX_CHARS_PER_LINE]; /**< string buffer for the line chars */
blt_int8u data[MAX_DATA_BYTES_PER_LINE]; /**< array for S1, S2 or S3 data bytes*/
blt_addr address; /**< address on S1, S2 or S3 line */
} tSrecLineParseObject;
/****************************************************************************************
* Function prototypes
****************************************************************************************/
void FileInit(void);
void FileTask(void);
blt_bool FileIsIdle(void);
blt_bool FileHandleFirmwareUpdateRequest(void);
void FileInit(void);
void FileTask(void);
blt_bool FileIsIdle(void);
blt_bool FileHandleFirmwareUpdateRequest(void);
/* functions for reading data from a Motorola S-record file. */
tSrecLineType FileSrecGetLineType(const blt_char *line);
blt_bool FileSrecVerifyChecksum(const blt_char *line);
blt_int16s FileSrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data);
#endif /* BOOT_FILE_SYS_ENABLE > 0 */