TMS320F28379D: boot error

Part Number: TMS320F28379D

Tool/software:

Hi,

Could you guide for below boot error?

Customer made the board based on C2000 LaunchPad XL TMS320F28379D V2.0.

Customer is programming and debugging with CCS and XDS200 and using Flash Boot Mode.

At debug, when it's not RUN, boot error occured.

At first time, CPU1 works but CPU2 not works.

At next time, both are in boot error.

When they tested the code at LaunchPad, CPU1 works but CPU2 not works.

Please guide next step.

When customer provide the f/w and schematic, could you review them?

Thanks.

  • Hello,

    Could you please provide more detail on the issue? It is unclear what is happening here.

    1. What is the customer trying to do? Are they connecting the device via CCS and attempting to load/run code? 
    2. Can you please describe what you mean by "boot error"? Is there some error in CCS showing? What is the symptom/nature of the issue? Is the CPU jumping to an ITRAP ISR?
    3. I cannot debug code for the customer, but I can make some suggestions on how to debug after gathering a better understanding of the issue.

    Best Regards,

    Allison

  • Hi....  this is andrew kim   

    1.I am currently programming and debugging using CCS. I am programming CPU1 and CPU2. First of all, since we are programming the BuckBoost power, we are implementing PID control using 6 PWMs. CPU1 is using CLA1, and CPU2 communicates with the PC through CAN.

    2. CCS does not check the boot error, but when the program is tested in debug state and reset on CCS, it fails to enter the main program. Of course, CPU1 cannot boot alone, and CPU2 also cannot boot due to the same problem. Now that the program is almost complete, it needs to be booted on its own to test while powering on, which is difficult.

    3. 
    Since it may be a simple mistake on my part to send you the source code, I will send you the CMD file first.

    // The user must define CLA_C in the project linker settings if using the
    // CLA C compiler
    // Project Properties -> C2000 Linker -> Advanced Options -> Command File
    // Preprocessing -> --define
    
    #ifdef CLA_C
    // Define a size for the CLA scratchpad area that will be used
    // by the CLA compiler for local symbols and temps
    // Also force references to the special symbols that mark the
    // scratchpad are.
    CLA_SCRATCHPAD_SIZE = 0x100;
    --undef_sym=__cla_scratchpad_end
    --undef_sym=__cla_scratchpad_start
    #endif //CLA_C
    
    
    MEMORY
    {
    PAGE 0 :  /* Program Memory */
              /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
              /* BEGIN is used for the "boot to Flash" bootloader mode   */
    
       BEGIN           	: origin = 0x080000, length = 0x000002
       RAMM0           	: origin = 0x000123, length = 0x0002DD
       RAMD0           	: origin = 0x00B000, length = 0x000800
       RAMLS0          	: origin = 0x008000, length = 0x000800
       //CLA1Prog         : origin = 0x008800, length = 0x001000
       //CLA1Data         : origin = 0x009800, length = 0x001000
    
       RAMLS1_2         : origin = 0x008800, length = 0x001000
       RAMLS3_4      	: origin = 0x009800, length = 0x001000
       //RAMLS2      		: origin = 0x009000, length = 0x000800
       //RAMLS3      		: origin = 0x009800, length = 0x000800
       //RAMLS4      		: origin = 0x00A000, length = 0x000800
       RAMGS14          : origin = 0x01A000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS15          : origin = 0x01B000, length = 0x000FF8     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
       //CPU2TOCPU1RAM   : origin = 0x01A000, length = 0x000400
       //CPU1TOCPU2RAM   : origin = 0x01B000, length = 0x000400
    //   RAMGS15_RSVD     : origin = 0x01BFF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RESET           	: origin = 0x3FFFC0, length = 0x000002
    
       /* FPU Math Tables in Boot ROM */
       //FPUTABLES : origin = 0x3FD860, length = 0x0006A0
    
    
       /* Flash sectors */
       FLASHA           : origin = 0x080002, length = 0x001FFE	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086000, length = 0x002000	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x001FF0	/* on-chip Flash */
    
    //   FLASHN_RSVD     : origin = 0x0BFFF0, length = 0x000010    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    PAGE 1 : /* Data Memory */
             /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */
    
       BOOT_RSVD       : origin = 0x000002, length = 0x000121     /* Part of M0, BOOT rom will use this for stack */
       RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
    //   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       RAMD1           : origin = 0x00B800, length = 0x000800
    
    CLATOCPU_MSGRAM    : origin = 0x001480, length = 0x000080
    CPUTOCLA_MSGRAM    : origin = 0x001500, length = 0x000080
    
       RAMLS5      : origin = 0x00A800, length = 0x000800
    
       RAMGS0      : origin = 0x00C000, length = 0x001000
       RAMGS1      : origin = 0x00D000, length = 0x001000
       RAMGS2      : origin = 0x00E000, length = 0x001000
       RAMGS3      : origin = 0x00F000, length = 0x001000
       RAMGS4      : origin = 0x010000, length = 0x001000
       RAMGS5      : origin = 0x011000, length = 0x001000
       RAMGS6      : origin = 0x012000, length = 0x001000
       RAMGS7      : origin = 0x013000, length = 0x001000
       RAMGS8      : origin = 0x014000, length = 0x001000
       RAMGS9      : origin = 0x015000, length = 0x001000
       RAMGS10     : origin = 0x016000, length = 0x001000
    
    //   RAMGS11     : origin = 0x017000, length = 0x000FF8   /* Uncomment for F28374D, F28376D devices */
    
    //   RAMGS11_RSVD : origin = 0x017FF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RAMGS11     : origin = 0x017000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS12     : origin = 0x018000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS13     : origin = 0x019000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
    
       CPU2TOCPU1RAM   : origin = 0x03F800, length = 0x000400
       CPU1TOCPU2RAM   : origin = 0x03FC00, length = 0x000400
    }
    
    SECTIONS
    {
       /* Allocate program areas: */
       .cinit              : > FLASHA      PAGE = 0, ALIGN(8)
       .text               : >> FLASHC | FLASHD | FLASHE      PAGE = 0, ALIGN(8)
       codestart           : > BEGIN       PAGE = 0, ALIGN(8)
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM1       PAGE = 1
       .switch             : > FLASHA      PAGE = 0, ALIGN(8)
       .reset              : > RESET       PAGE = 0, TYPE = DSECT /* not used, */
    
    	// Andrew Code Below
        cla1ToCpuMsgRAM      : >  CLATOCPU_MSGRAM
        cpuToCla1MsgRAM      : >  CPUTOCLA_MSGRAM
    
     	systemC1 {  }          >  RAMGS0, ALIGN(8)
        systemC2 {  }          >  RAMGS1, ALIGN(8)
    
    	//
        // User Sections
        //
        SFRA_Data {  }         >  RAMGS2, ALIGN(64)
        SFRA_F32_Data {  }     >  RAMGS2, ALIGN(64)
        FPUmathTables {  }     >  FLASHN, ALIGN(8)
        controlVariables {  }  >  RAMLS0
        dclfuncs {  }          >  RAMD0,  ALIGN(8)
    
    
        //
        // CLA Sections
        //
        /* CLA specific sections */
    #if defined(__TI_EABI__)
       		Cla1Prog    : LOAD = FLASHF,
                          RUN = RAMLS1_2,
                          LOAD_START(Cla1funcsLoadStart),
                          LOAD_END(Cla1funcsLoadEnd),
                          RUN_START(Cla1funcsRunStart),
                          LOAD_SIZE(Cla1funcsLoadSize),
                          PAGE = 0, ALIGN(8)
            .bss_cla    : >  RAMLS3_4, PAGE = 0, ALIGN(8)
    #else
          	Cla1Prog    : LOAD = FLASHF,
                          RUN = RAMLS1_2,
                          LOAD_START(_Cla1funcsLoadStart),
                          LOAD_END(_Cla1funcsLoadEnd),
                          RUN_START(_Cla1funcsRunStart),
                          LOAD_SIZE(_Cla1funcsLoadSize),
                          PAGE = 0, ALIGN(8)
      		.bss_cla    : >  RAMLS3_4, ALIGN(8)
    #endif
    
    #ifdef CLA_C
       /* CLA C compiler sections */
       //
       // Must be allocated to memory the CLA has write access to
       //
       CLAscratch       :
                         { *.obj(CLAscratch)
                         . += CLA_SCRATCHPAD_SIZE;
                         *.obj(CLAscratch_end) } >  RAMLS3_4,  PAGE = 0
    
       .scratchpad      : > RAMLS3_4,       PAGE = 0
       .bss_cla		    : > RAMLS3_4,       PAGE = 0
       #if defined(__TI_EABI__)
       .const_cla      : LOAD = FLASHG,
                          RUN = RAMLS3_4,
                          RUN_START(Cla1ConstRunStart),
                          LOAD_START(Cla1ConstLoadStart),
                          LOAD_SIZE(Cla1ConstLoadSize),
                          PAGE = 0,
                          ALIGN(4)
      #else
       .const_cla      : LOAD = FLASHG,
                          RUN = RAMLS3_4,
                          RUN_START(_Cla1ConstRunStart),
                          LOAD_START(_Cla1ConstLoadStart),
                          LOAD_SIZE(_Cla1ConstLoadSize),
                          PAGE = 0,
                          ALIGN(4)
      #endif
    #endif //CLA_C
    
    
        Cla1ToCpuMsgRAM {  }    >  CLATOCPU_MSGRAM, ALIGN(8)
        CpuToCla1MsgRAM {  }    >  CPUTOCLA_MSGRAM, ALIGN(8)
    
    
    
    #if defined(__TI_EABI__)
       .init_array         : > FLASHA,       PAGE = 0,       ALIGN(8)
       .bss                : > RAMLS5,       PAGE = 1
       .bss:output         : > RAMLS0,       PAGE = 0
       .bss:cio            : > RAMLS5,       PAGE = 1
       .data               : > RAMLS5,       PAGE = 1
       .sysmem             : > RAMLS5,       PAGE = 1
       /* Initalized sections go in Flash */
       .const              : > FLASHF,       PAGE = 0,       ALIGN(8)
    #else
       .pinit              : > FLASHB,       PAGE = 0,       ALIGN(8)
       .ebss               : >> RAMLS5 | RAMGS0 | RAMGS1,    PAGE = 1
       .esysmem            : > RAMLS5,       PAGE = 1
       .cio                : > RAMLS5,       PAGE = 1
       /* Initalized sections go in Flash */
       .econst             : >> FLASHF      PAGE = 0, ALIGN(8)
    #endif
    
    
    
    
    #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000
            #if defined(__TI_EABI__)
            .TI.ramfunc : {
    				        sfra_f32_eabi.lib<SFRA_F32_inject.obj>
    				        sfra_f32_eabi.lib<SFRA_F32_collect.obj>
            				} LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(RamfuncsLoadStart),
                             LOAD_SIZE(RamfuncsLoadSize),
                             LOAD_END(RamfuncsLoadEnd),
                             RUN_START(RamfuncsRunStart),
                             RUN_SIZE(RamfuncsRunSize),
                             RUN_END(RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
            #else
            .TI.ramfunc : {} LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
            #endif
        #else
       ramfuncs            : LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
        #endif
    
    #endif
    
    	/* Allocate FPU math areas: */
    	//FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
    	//FPUmathTables : > FLASH1, PAGE =1
    
        MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT
        MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT
    
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    MEMORY
    {
    PAGE 0 :
       /* BEGIN is used for the "boot to SARAM" bootloader mode   */
    
       BEGIN           	: origin = 0x080000, length = 0x000002
       RAMM0           	: origin = 0x0000A2, length = 0x00035E
       RAMD0           	: origin = 0x00B000, length = 0x000800
       RAMLS0          	: origin = 0x008000, length = 0x000800
       RAMLS1          	: origin = 0x008800, length = 0x000800
       RAMLS2      		: origin = 0x009000, length = 0x000800
       RAMLS3      		: origin = 0x009800, length = 0x000800
       RAMLS4      		: origin = 0x00A000, length = 0x000800
       RAMGS14          : origin = 0x01A000, length = 0x001000     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
       RAMGS15          : origin = 0x01B000, length = 0x000FF8     /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
    
    //   RAMGS15_RSVD     : origin = 0x01BFF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
       RESET       		: origin = 0x3FFFC0, length = 0x000002
    
       /* Flash sectors */
       FLASHA           : origin = 0x080002, length = 0x001FFE	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086000, length = 0x002000	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x001FF0	/* on-chip Flash */
    
    //   FLASHN_RSVD     : origin = 0x0BFFF0, length = 0x000010    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    PAGE 1 :
    
       BOOT_RSVD       : origin = 0x000002, length = 0x0000A0     /* Part of M0, BOOT rom will use this for stack  A0*/
       RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
    //   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       RAMD1           : origin = 0x00B800, length = 0x000800
    
       RAMLS5          : origin = 0x00A800, length = 0x000800
    
       RAMGS0          : origin = 0x00C000, length = 0x001000
       RAMGS1          : origin = 0x00D000, length = 0x001000
       RAMGS2          : origin = 0x00E000, length = 0x001000
       CPU2TOCPU1RAM   : origin = 0x03F800, length = 0x000400
       CPU1TOCPU2RAM   : origin = 0x03FC00, length = 0x000400
    }
    
    SECTIONS
    {
       /* Allocate program areas: */
       .cinit              : > FLASHA      PAGE = 0, ALIGN(8)
       .text               : > FLASHB | FLASHC | FLASHD     PAGE = 0, ALIGN(8)
       codestart           : > BEGIN       PAGE = 0, ALIGN(8)
    
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM1        PAGE = 1
    
       /* Initalized sections go in Flash */
       .switch             : > FLASHB      PAGE = 0, ALIGN(8)
       .reset              : > RESET       PAGE = 0, TYPE = DSECT /* not used, */
       
    #if defined(__TI_EABI__)
       .init_array         : > FLASHA,       PAGE = 0,       ALIGN(8)
       .bss                : > RAMLS5,       PAGE = 1
       .bss:output         : > RAMLS3,       PAGE = 0
       .bss:cio            : > RAMLS5,       PAGE = 1
       .data               : > RAMLS5,       PAGE = 1
       .sysmem             : > RAMLS5,       PAGE = 1
    
       /* Initalized sections go in Flash */
       .const              : > FLASHF,       PAGE = 0,       ALIGN(8)
    #else
       .pinit              : > FLASHB,       PAGE = 0,       ALIGN(8)
       .ebss               : >> RAMLS5 | RAMGS2 | RAMGS3,    PAGE = 1
       .esysmem            : > RAMLS5,       PAGE = 1
       .cio                : > RAMLS5,       PAGE = 1
       /* Initalized sections go in Flash */
       .econst             : >> FLASHF       PAGE = 0, ALIGN(8)
    #endif
    
       //SHARERAMGS0		: > RAMGS0,		PAGE = 1
       //SHARERAMGS1		: > RAMGS1,		PAGE = 1
       //SHARERAMGS2		: > RAMGS2,		PAGE = 1
    
    #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000
            #if defined(__TI_EABI__)
                .TI.ramfunc : {} LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(RamfuncsLoadStart),
                             LOAD_SIZE(RamfuncsLoadSize),
                             LOAD_END(RamfuncsLoadEnd),
                             RUN_START(RamfuncsRunStart),
                             RUN_SIZE(RamfuncsRunSize),
                             RUN_END(RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
            #else
                .TI.ramfunc : {} LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
            #endif
        #else
       ramfuncs            : LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
        #endif
    #endif
    
    	//
        // User Sections
        //
        systemC1 {  }          >  RAMGS0, ALIGN(8)
        systemC2 {  }          >  RAMGS1, ALIGN(8)
    
        /* The following section definitions are required when using the IPC API Drivers */
        //GROUP : > CPU1TOCPU2RAM, PAGE = 1
        //{
        //    PUTBUFFER
        //    PUTWRITEIDX
        //    GETREADIDX
        //}
    
        //GROUP : > CPU2TOCPU1RAM, PAGE = 1
        //{
        //    GETBUFFER :    TYPE = DSECT
        //    GETWRITEIDX :  TYPE = DSECT
        //    PUTREADIDX :   TYPE = DSECT
        //}
    
    	MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT
        MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */