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.

TMS320F28388D: How to make destination adrress to be 128-bit aligned

Part Number: TMS320F28388D


Hello, Experts

I have a problem making the binary image including memory block with 128-bit aligned address.

I'm using the hex utility to get a binary format image with boot table as shown below.

The problem is that there is a block which is not 128-bit aligned in the binary format image like below.

When updating the firmware using flash APIs to flash memory, this makes some issue such as calculating ECC.

The destination address, 0x0009801E, is not 128-bit aligned address.

Below is the link command script I am using. I tried to set it to be 128-bit aligned with ALIGN(8), but I'm not sure which point I missed.

Please give me some advice about this issue.


CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start

MEMORY
{
   HWBIST           : origin = 0x000000, length = 0x000020
   /* BEGIN is used for the "boot to Flash" bootloader mode   */
   RAMM0            : origin = 0x0001B1, length = 0x00024F
   RAMM1            : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
   RAMD0            : origin = 0x00C000, length = 0x000800
   RAMD1            : origin = 0x00C800, length = 0x000800
   RAMLS0           : origin = 0x008000, length = 0x000800
   RAMLS1           : origin = 0x008800, length = 0x000800
   RAMLS23           : origin = 0x009000, length = 0x001000
   RAMLS4           : origin = 0x00A000, length = 0x000800
   RAMLS5           : origin = 0x00A800, length = 0x000800
   RAMLS6TO7		: origin = 0x00B000, length = 0x001000
   RAMGS0           : origin = 0x00D000, length = 0x001000
   RAMGS1TO11		: origin = 0x00E000, length = 0x00AFF0
   RAMCOPY		    : origin = 0x018FF0, length = 0x000010

   /* Flash sectors */
   BEGIN            : origin = 0x088000, length = 0x000002
   VERSION			: origin = 0x088008, length = 0x000008
   FLASH4TO9		: origin = 0x088010, length = 0x02FFF0
   FLASH10			: origin = 0x0B8000, length = 0x002000
   FLASH11          : origin = 0x0BA000, length = 0x002000  /* on-chip Flash */
   FLASH12          : origin = 0x0BC000, length = 0x002000  /* on-chip Flash */
   FLASH13          : origin = 0x0BE000, length = 0x001FF0  /* on-chip Flash */

   CPU1TOCPU2RAM   : origin = 0x03A000, length = 0x000800
   CPU2TOCPU1RAM   : origin = 0x03B000, length = 0x0007F0
   CPU2TOCPU1RAM_WD : origin = 0x03B7F0, length = 0x000010
   CPUTOCMRAM      : origin = 0x039000, length = 0x0007F0
   CPUTOCM_PS  	   : origin = 0x0397F0, length = 0x000010
   CMTOCPURAM      : origin = 0x038000, length = 0x0007E8
   CMTOCPU_WD      : origin = 0x0387E8, length = 0x000008
   CMTOCPU_PS      : origin = 0x0387F0, length = 0x000010

   CLATOCPURAM   : origin = 0x001480,   length = 0x000080
   CPUTOCLARAM   : origin = 0x001500,   length = 0x000080

   CLATODMARAM	: origin = 0x001680, length = 0x000080
   DMATOCLARAM	: origin = 0x001700, length = 0x000080



   CANA_MSG_RAM     : origin = 0x049000, length = 0x000800
   CANB_MSG_RAM     : origin = 0x04B000, length = 0x000800

   RESET            : origin = 0x3FFFC0, length = 0x000002

   EMIF1_CS0n      : origin = 0x80000000, length = 0x10000000
   EMIF1_CS2n      : origin = 0x00100000, length = 0x00100000
   EMIF1_CS0_CS2n  : origin = 0x00200000, length = 0x00100000
   EMIF1_CS3n      : origin = 0x00300000, length = 0x00080000
   EMIF1_CS4n      : origin = 0x00380000, length = 0x00060000
   EMIF2_CS0n      : origin = 0x90000000, length = 0x10000000
   EMIF2_CS2n      : origin = 0x00002000, length = 0x00001000
}

SECTIONS
{
   codestart           : > BEGIN, ALIGN(8)
   .text               : > FLASH4TO9, ALIGN(8)
   .cinit              : > FLASH4TO9, ALIGN(8)
   .switch             : > FLASH10, ALIGN(8)
   .reset              : > RESET, TYPE = DSECT /* not used, */
   .TI.crctab	       : > FLASH13, ALIGN(8)

   /* HWBIST reset context restore code must be placed at 0x0000 */
   hwbist           : LOAD = FLASH4TO9,
                      RUN = HWBIST,
                      LOAD_START(HwbistLoadStart),
                      LOAD_SIZE(HwbistLoadSize),
                      RUN_START(HwbistRunStart),
                      PAGE = 0, ALIGN(8)

   /* Must be placed lower than a 16-bit memory address */
   hwbiststack      : > RAMM0

   .stack           : > RAMLS6TO7
   .init_array      : > FLASH4TO9, ALIGN(8)
   .bss             : >> RAMGS1TO11
   .bss:output      : > RAMLS4
   .bss:cio         : > RAMLS4
   .data            : >> RAMLS4|RAMLS5
   .sysmem          : > RAMLS5
   /* Initalized sections go in Flash */
   .const           : > FLASH4TO9, ALIGN(8)

   ramgs0 : > RAMGS1TO11, type=NOINIT
   ramcopy : > RAMCOPY, type=NOINIT
   
   MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT
   MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT
   MSGRAM_CPU2_TO_CPU1_Wd : > CPU2TOCPU1RAM_WD, type=NOINIT
   MSGRAM_CPU_TO_CM    : > CPUTOCMRAM, type=NOINIT
   MSGRAM_CM_TO_CPU    : > CMTOCPURAM, type=NOINIT

   MSGRAM_CPUTOCM_PS   : > CPUTOCM_PS, type=NOINIT
   MSGRAM_CMTOCPU_PS   : > CMTOCPU_PS, type=NOINIT
   MSGRAM_CMTOCPU_WD   : > CMTOCPU_WD, type=NOINIT

   MSGRAM_CLA_TO_CPU 	: > CLATOCPURAM, type=NOINIT
   MSGRAM_CPU_TO_CLA 	: > CPUTOCLARAM, type=NOINIT
   MSGRAM_CLA_TO_DMA    : > CLATODMARAM, type=NOINIT
   MSGRAM_DMA_TO_CLA    : > DMATOCLARAM, type=NOINIT

   /* CLA specific sections */
   Cla1Prog         :   LOAD = FLASH11,
                        RUN = RAMLS23,
                        LOAD_START(Cla1funcsLoadStart),
                        LOAD_END(Cla1funcsLoadEnd),
                        RUN_START(Cla1funcsRunStart),
                        LOAD_SIZE(Cla1funcsLoadSize),
                        ALIGN(8)


   CLADataLS0       : > RAMLS0
   CLADataLS1       : > RAMLS1

  /* CLA C compiler sections */
   //
   // Must be allocated to memory the CLA has write access to
   //
   CLAscratch       :
                     { *.obj(CLAscratch)
                     . += CLA_SCRATCHPAD_SIZE;
                     *.obj(CLAscratch_end) } >  RAMLS1, ALIGN(8)

   .scratchpad      : > RAMLS1
   .bss_cla         : > RAMLS1
   .const_cla       :   LOAD = FLASH11,
                        RUN = RAMLS1,
                        RUN_START(Cla1ConstRunStart),
                        LOAD_START(Cla1ConstLoadStart),
                        LOAD_SIZE(Cla1ConstLoadSize),
                        ALIGN(8)


   DataBufferSection : > RAMM1, ALIGN(8)
   VersionImageSection : > RAMGS1TO11, ALIGN(8)
   PrintBufferSection : > RAMGS1TO11, ALIGN(8)
   SafetyParameterSection : > RAMGS1TO11, ALIGN(8)

   .TI.ramfunc : {
   					-l F2838x_C28x_FlashAPI.lib
   				 }
   					LOAD = FLASH4TO9,
                    RUN = RAMGS1TO11,
                    LOAD_START(RamfuncsLoadStart),
                    LOAD_SIZE(RamfuncsLoadSize),
                    LOAD_END(RamfuncsLoadEnd),
                    RUN_START(RamfuncsRunStart),
                    RUN_SIZE(RamfuncsRunSize),
                    RUN_END(RamfuncsRunEnd),
                    ALIGN(8)


   .sdramfunc    : {} LOAD = FLASH4TO9,
                   RUN = RAMGS1TO11,
                   LOAD_START(XintffuncsLoadStart),
                   LOAD_END(XintffuncsLoadEnd),
                   RUN_START(XintffuncsRunStart),
                   ALIGN(8)


   emif_cs0_nonfar  : > EMIF1_CS0_CS2n
   .farbss          : > EMIF1_CS0n
   .farconst        : > EMIF1_CS0n
   .em1_cs0         : > EMIF1_CS0n
   .em1_cs2         : > EMIF1_CS2n | EMIF1_CS0_CS2n
   .em1_cs3         : > EMIF1_CS3n
   .em1_cs4         : > EMIF1_CS4n
   .em2_cs0         : > EMIF2_CS0n
   .em2_cs2         : > EMIF2_CS2n
}

/*
//===========================================================================
// End of file.
//===========================================================================
*/