Hi,
I have an issue about "invalid start address". I try to transfer application code via teraTerm. At the end of the flow, the correct crc comparison is made, but there is no jump to the application.TeraTerm Screen;
System BootLoader
Reset reason...Cold Reset.
Enter 'U' for update in 5 seconds.... . . . .
Device Firmware Update : Update not requested.Device Firmware Update : Verifying Application area with CRC.Invalid Start AddressDevice Firmware : Calculated Checksum Value : 0x45E3Device Firmware : Read Checksum Value : 0x45E3Device Firmware : Application Flash not validErasing Application Area...Done.Starting update from UART.Please start file send using XModem protocol....Bootloader Code addresses;
#define APP_VECTOR_START (0XFFFFFF70U)
/* This is the last address of the user's fixed vector table, used for checking jump address*/
#define APP_VECTOR_END (0xFFFFFF73U)
/* Start of the user application code */
/* Ensure this is the very start of a flash block*/
/* By default this is the top of flash */
#define APP_START (0xFFFD0000)
/* End of application area */
/* CRC calculation is performed for all addresses APP_START to APP_END */
/* Ensure this is the last address of a flash block, including the fixed vectors */
/* but not including the calculated checksum */
#define APP_END (0xFFFFFF7B)
/* Location in application code space that contains stored checksum */
/* must be a multiple of 4 to allow the flash self-prog library to work */
#define APP_CRC_CHECKSUM_PTR ((uint32_t *)(0xFFFFFF7C))Application code linker_script;MEMORY{ RAM : ORIGIN = 0x00007000, LENGTH = 0x9000 ROM : ORIGIN = 0xFFFD0000, LENGTH = 196608 OFS : ORIGIN = 0x120000, LENGTH = 128}SECTIONS{ .exvectors 0xFFFFFEF4: AT(0xFFFFFEF4) { "_exvectors_start" = .; KEEP(*(.exvectors)) "_exvectors_end" = .; } >ROM .fvectors 0xFFFFFF70: AT(0xFFFFFF70) { KEEP(*(.fvectors)) } > ROM .text 0xFFFD0000: AT(0xFFFD0000) { *(.text) *(.text.*) *(P) etext = .; } > ROM .rvectors ALIGN(4): { _rvectors_start = .; INCLUDE ..\src\smc_gen\r_bsp\mcu\all\linker_script_rvectors.inc _rvectors_end = .; } > ROM .init : { KEEP(*(.init)) __preinit_array_start = .; KEEP(*(.preinit_array)) __preinit_array_end = .; __init_array_start = (. + 3) & ~ 3; KEEP(*(.init_array)) KEEP(*(SORT(.init_array.*))) __init_array_end = .; __fini_array_start = .; KEEP(*(.fini_array)) KEEP(*(SORT(.fini_array.*))) __fini_array_end = .; } > ROM .fini : { KEEP(*(.fini)) } > ROM .got : { *(.got) *(.got.plt) } > ROM .rodata : { *(.rodata) *(.rodata.*) *(C_1) *(C_2) *(C) _erodata = .; } > ROM gcc_exceptions_table : { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } > ROM .eh_frame_hdr : { *(.eh_frame_hdr) } > ROM .eh_frame : { *(.eh_frame) } > ROM .jcr : { *(.jcr) } > ROM .tors : { __CTOR_LIST__ = .; . = ALIGN(2); ___ctors = .; *(.ctors) ___ctors_end = .; __CTOR_END__ = .; __DTOR_LIST__ = .; ___dtors = .; *(.dtors) ___dtors_end = .; __DTOR_END__ = .; . = ALIGN(2); _mdata = .; } > ROM .data : AT(_mdata) { _data = .; *(.data) *(.data.*) *(D) *(D_1) *(D_2) _edata = .; } > RAM .bss : { _bss = .; *(.bss) *(.bss.**) *(COMMON) *(B) *(B_1) *(B_2) _ebss = .; . = ALIGN(128); _end = .; } > RAM AT>RAM .ofs1 0x120040: AT(0x120040) { KEEP(*(.ofs1)) } > OFS .ofs2 0x120048: AT(0x120048) { KEEP(*(.ofs2)) } > OFS .ofs3 0x120050: AT(0x120050) { KEEP(*(.ofs3)) } > OFS .ofs4 0x120060: AT(0x120060) { KEEP(*(.ofs4)) } > OFS .r_bsp_NULL : { . += 0x100; "_r_bsp_NULL_end" = .; } >RAM.r_bsp_istack BLOCK(0x4) (NOLOAD) : { KEEP(*(.r_bsp_istack)) } >RAM.istack : { "_istack" = .; } >RAM.r_bsp_ustack BLOCK(0x4) (NOLOAD) : { KEEP(*(.r_bsp_ustack)) } >RAM.ustack : { "_ustack" = .; } >RAM}
Could you please help me to fix this problem ?or do you have any advice ?Thank you.