Other Parts Discussed in Thread: HALCOGEN
I have been able to successfully port the Hercules_Ethernet_Bootloader example for LAUNCHXL2-RM57L in CCS version 10.4.0.00006.
My CCS project settings are:
- Connection - XDS110 USB Debug Probe
- Core - RM57L8xx
- Compiler version - TI v20.2.0 LTS
Note that I am using bare-metal HalCoGen drivers.
Using Debug mode, I am able to successfully compile and run tftp-based Ethernet bootloader on my development kit and able to transfer an application binary (basic led blinking code) using tftpd utility.
My bootloader code spans Sectors0-8 of Flash Bank0. So, I have fixed my application's start address beginning with Sector-9 in bl_config.h as follows :-
#define APP_STATUS_ADDRESS 0x00C0000
#define APP_START_ADDRESS 0x00C0020
The bootloader is able to receive the application code and run it. But, after I press the reset button, my application code is not able to load directly. I am trying to jump to my application from bootloader based on this check:
/* Check if update needed*/ uint32_t *FlagPtr; FlagPtr = (uint32_t *)APP_STATUS_ADDRESS; if( *FlagPtr == 0x5A5A5A5A ) { UARTprintf("Starting LED Application ... \n\r"); g_ulTransferAddress = (uint32_t)APP_START_ADDRESS; ((void (*)(void))g_ulTransferAddress)(); }
The HL_sys_link.cmd files are also attached for your reference:
************** Bootloader *****************
/*----------------------------------------------------------------------------*/
/* Linker Settings */
--retain="*(.intvecs)"
/* USER CODE BEGIN (1) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/
/* Memory Map */
MEMORY
{
/* USER CODE BEGIN (2) */
VECTORS (X) : origin=0x00000000 length=0x00000020 vfill = 0xffffffff
FLASH0 (RX) : origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff
FLASH1 (RX) : origin=0x00200000 length=0x00200000 vfill = 0xffffffff
RAM (RWX) : origin=0x08002000 length=0x0007E000
STACK (RW) : origin=0x08000000 length=0x00002000
#if 0
/* USER CODE END */
VECTORS (X) : origin=0x00000000 length=0x00000020
FLASH0 (RX) : origin=0x00000020 length=0x001FFFE0
FLASH1 (RX) : origin=0x00200000 length=0x00200000
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0007eb00
/* USER CODE BEGIN (3) */
#endif
#if 1
ECC_VEC (R) : origin=(0xf0400000 + (start(VECTORS) >> 3))
length=(size(VECTORS) >> 3)
ECC={algorithm=algoL2R5F021, input_range=VECTORS}
ECC_FLA0 (R) : origin=(0xf0400000 + (start(FLASH0) >> 3))
length=(size(FLASH0) >> 3)
ECC={algorithm=algoL2R5F021, input_range=FLASH0 }
ECC_FLA1 (R) : origin=(0xf0400000 + (start(FLASH1) >> 3))
length=(size(FLASH1) >> 3)
ECC={algorithm=algoL2R5F021, input_range=FLASH1 }
#endif
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
ECC
{
algoL2R5F021 : address_mask = 0xfffffff8 /* Address Bits 31:3 */
hamming_mask = R4 /* Use R4/R5 build in Mask */
parity_mask = 0x0c /* Set which ECC bits are Even and Odd parity */
mirroring = F021 /* RM57Lx and TMS570LCx are build in F021 */
}
/* USER CODE END */
/*----------------------------------------------------------------------------*/
/* Section Configuration */
SECTIONS
{
/* USER CODE BEGIN (5) */
/* USER CODE END */
.intvecs : {} > VECTORS
.text align(32) : {} > FLASH0 | FLASH1
.const align(32) : {} > FLASH0 | FLASH1
.cinit align(32) : {} > FLASH0 | FLASH1
.pinit align(32) : {} > FLASH0 | FLASH1
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
/* USER CODE BEGIN (6) */
flashAPI:
{
.\Boot\Fapi_UserDefinedFunctions.obj (.text)
.\Boot\bl_flash.obj (.text, .data)
--library= "c:\ti\Hercules\F021 Flash API\02.01.01\F021_API_CortexR4_LE_L2FMC.lib" (.text, .data)
} palign=8 load = FLASH0 |FLASH1, run = RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)
/* USER CODE END */
}
/*----------------------------------------------------------------------------*/
************** Application *****************
/*----------------------------------------------------------------------------*/
/* Linker Settings */
--retain="*(.intvecs)"
/* USER CODE BEGIN (1) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/
/* Memory Map */
MEMORY
{
/* USER CODE BEGIN (2) */
/* USER CODE END */
//VECTORS (X) : origin=0x00000000 length=0x00000020
//FLASH0 (RX) : origin=0x00000020 length=0x001FFFE0
VECTORS (X) : origin=0x000C0000 length=0x00000020
FLASH0 (RX) : origin=0x000C0020 length=0x0013FFC0
FLASH1 (RX) : origin=0x00200000 length=0x00200000
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0007EB00
/* USER CODE BEGIN (3) */
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/
/* Section Configuration */
SECTIONS
{
/* USER CODE BEGIN (5) */
/* USER CODE END */
.intvecs : {} > VECTORS
.text align(32) : {} > FLASH0 | FLASH1
.const align(32) : {} > FLASH0 | FLASH1
.cinit align(32) : {} > FLASH0 | FLASH1
.pinit align(32) : {} > FLASH0 | FLASH1
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
/* USER CODE BEGIN (6) */
/* USER CODE END */
}
Request your help to resolve this issue.