rx66t Bootloader Xmodem

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 Address
Device Firmware : Calculated Checksum Value : 0x45E3
Device Firmware : Read Checksum Value : 0x45E3
Device Firmware : Application Flash not valid
Erasing 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.

Parents Reply Children