This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LS3137: bl_link.cmd problem with TMS570LS3137PGE

Part Number: TMS570LS3137


Hello ! I have a question about the boot loader program. I used ussesfully the boot loader program in the development kit.

Now, I want to use the boot loader program in my board, that it has a TMS570LS3137PGE micro.

When I copy the files and the headers and compile, the program has a problem in the bl_link.cmd.

"../source/bl_link.cmd", line 102: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. load placement with alignment fails for section "flashAPI" size 0x1010. Available memory ranges:
FLASH0 size: 0x10000 unused: 0xb48 max hole: 0xb48
error #10010: errors encountered during linking; "LabOSat-02_Engine.out" not built

The Flash API it is include in the include files.

It is the same ecode that I used with the development kit. Do I need change the bl_link.cmd to use with the TMS570LS3137PGE? Or do I need do another change in the proyect?

I leave the bl_link.cmd for it is help.

Thanks a lot !!

bl_link.cmd:

/*----------------------------------------------------------------------------*/
/* Linker Settings */
--retain="*(.intvecs)"

/* USER CODE BEGIN (1) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map */

MEMORY
{

VECTORS (X) : origin=0x00000000 length=0x00000020 vfill = 0xffffffff
FLASH0 (RX) : origin=0x00000020 length=0x00010000 vfill = 0xffffffff
FLASH1 (RX) : origin=0x00010020 length=0x07FF1FE0 vfill = 0xffffffff
SRAM (RWX) : origin=0x08002000 length=0x00002000
STACK (RW) : origin=0x08004000 length=0x00002000

/* USER CODE BEGIN (2) */
#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 (3) */
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
{
.intvecs : {} > VECTORS


flashAPI:
{
.\source\Fapi_UserDefinedFunctions.obj (.text)
.\source\bl_flash.obj (.text)
--library="F021_API_CortexR4_BE_V3D16.lib" (.text)
} palign=8 load = FLASH0, run = SRAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)

.text : {} > FLASH0 /*Initialized executable code and constants*/
.const : {} load=FLASH0, run = SRAM, LOAD_START(constLoadStart), RUN_START(constRunStart), SIZE(constLoadSize)

.cinit : {} > FLASH0 | FLASH1
.pinit : {} > FLASH0 | FLASH1
.bss : {} > SRAM
.data : {} > SRAM
.sysmem : {} > SRAM
/* USER CODE BEGIN (4) */
/* USER CODE END */
}

/* USER CODE BEGIN (5) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Misc */

/* USER CODE BEGIN (6) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/

  • "../source/bl_link.cmd", line 102: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. load placement with alignment fails for section "flashAPI" size 0x1010. Available memory ranges:
    FLASH0 size: 0x10000 unused: 0xb48 max hole: 0xb48

    The error message suggests there is insufficient space in the FLASH0 memory region to place the flashAPI. FLASH0 is 64Kbyte in size, but there is only 0xb48 bytes available which is less than the flashAPI which is size 0x1010 bytes.

    Do I need change the bl_link.cmd to use with the TMS570LS3137PGE?

    I don't know the overall size of your program, but you could try increasing the size of the FLASH0 memory region, and corresponding decrease the size of the FLASH1 memory region . The start address of the FLASH1 memory region would also need to change accordingly.

    .cinit : {} > FLASH0 | FLASH1
    .pinit : {} > FLASH0 | FLASH1

    From your bl_link.cmd the .cinit and .pinit sections are allowed to be split across the FLASH0 and FLASH1 memory regions. That differs from the example bl_link.cmd which only uses FLASH0:

       .cinit : {} > FLASH0 /*Initialized global and static variables*/
       .pinit : {} > FLASH0

    Is the intent that FLASH0 is only used by the bootloader, leaving FLASH1 for the downloaded application?

  • Hi Chester,

    I am working with Federico Di Nardo in this project. We could flash the mcu changing the reserved memory region for FLASH0 and FLASH1.

    However, using the RTI module, the MCU is reset every time the interrupt is triggered. How could we solve this issue?

    I attach the bl_link.cmd code below:

    /* Copyright (C) 2013-2019 Texas Instruments Incorporated - http://www.ti.com/
     *
     *
     *  Redistribution and use in source and binary forms, with or without
     *  modification, are permitted provided that the following conditions
     *  are met:
     *
     *    Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     *    Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the
     *    distribution.
     *
     *    Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /*                                                                            */
    /*----------------------------------------------------------------------------*/
    /* USER CODE BEGIN (0) */
    /* USER CODE END */
    
    
    /*----------------------------------------------------------------------------*/
    /* Linker Settings                                                            */
    --retain="*(.intvecs)"
    
    /* USER CODE BEGIN (1) */
    
    /* USER CODE END */
    
    /*----------------------------------------------------------------------------*/
    /* Memory Map                                                                 */
    
    MEMORY
    {
    
        VECTORS (X)  : origin=0x00000000 length=0x00000020
        FLASH0  (RX) : origin=0x00000020 length=0x0017FFE0
        FLASH1  (RX) : origin=0x00180000 length=0x07E82000
        SRAM  (RW) : origin=0x08002000 length=0x00002000
        STACK   (RW) : origin=0x08004000 length=0x00002000
    
    
    //    VECTORS    (X)   : origin=0x00000000 length=0x00000020    vfill = 0xffffffff
    //    FLASH0     (RX)  : origin=0x00000020 length=0x00010000    vfill = 0xffffffff
    //    FLASH1     (RX)  : origin=0x00010020 length=0x07FF1FE0    vfill = 0xffffffff
    //    SRAM       (RWX)  : origin=0x08002000 length=0x00002000
    //    STACK      (RW)  : origin=0x08004000 length=0x00002000
    
    /* USER CODE BEGIN (2) */
    #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 (3) */
    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
    {
       .intvecs : {} > VECTORS
    
    
    
       flashAPI:
       {
         .\source\Fapi_UserDefinedFunctions.obj (.text)
         .\source\bl_flash.obj (.text)
         //--library= "c:\ti\Hercules\F021 Flash API\02.01.01\F021_API_CortexR4_BE_V3D16.lib"  (.text)
         --library="F021_API_CortexR4_BE_V3D16.lib"  (.text)
       } palign=8 load = FLASH0, run = SRAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)
    
       .text  : {} > FLASH0 /*Initialized executable code and constants*/
       .const : {} load=FLASH0 , run = SRAM, LOAD_START(constLoadStart), RUN_START(constRunStart), SIZE(constLoadSize)
    
    //  ; .cinit : {} > FLASH0 /*Initialized global and static variables*/
    // ;  .pinit : {} > FLASH0
    // ;  .data  : {} > SRAM
    //  ; .bss   : {} > SRAM   /*Uninitialized Global and static variables */
    //  ; .sysmem  : {} > SRAM
    
    
    //  ;  .intvecs : {} > VECTORS
    //   ; .text    : {} > FLASH0 | FLASH1
    //    ;.const   : {} > FLASH0 | FLASH1
    
        .cinit   : {} > FLASH0
        .pinit   : {} > FLASH0
        .bss     : {} > SRAM
        .data    : {} > SRAM
    	.sysmem  : {} > SRAM
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    }
    
    /* USER CODE BEGIN (5) */
    /* USER CODE END */
    
    
    /*----------------------------------------------------------------------------*/
    /* Misc                                                                       */
    
    /* USER CODE BEGIN (6) */
    /* USER CODE END */
    /*----------------------------------------------------------------------------*/
    

    Thanks and regards,

    Leandro

  • using the RTI module, the MCU is reset every time the interrupt is triggered. How could we solve this issue?

    The RTI module also supports digital watchdog. Is the DWD enabled? The DWD generates resets or NMIs after a programmable period, or if no correct key sequence was written to the RTIWDKEY register.

    Please refer to DWD section in device TRM.

  • Hello QJ, 

    Thanks a lot for your response.

    We did not enable the DWD. We only use the RTI module.

    If we only iplement the main program with no modifications over the .cmd file and without the flash api, it works fine. This problem arises since we are trying to add the bootloader to our project.

    May be the DWD starts to run when we initialize the RTI? Could it be possible?

    Best regards,

    Leandro

  • May be the DWD starts to run when we initialize the RTI? Could it be possible?

    The HALgenerated RTI initialization code (rtiInit) doesn't enabled the digital watchdog.