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.

TMS320F28379D: in bootloader application code execution.

Part Number: TMS320F28379D

in bootloader while fetching opcodes of application code .

it will reset the bootloader and start executing bootloader code from main.  

is there any issue with .cmd files ?

  • Hi,

    Could you please restate your question such that we can direct it to the right person?

  •   i am trying to implement a second stage bootloader for tms320f28379D by using I2C communication.

    where my controller will behave slave receiver and by using master i will send hex opcodes of application code to second stage bootloader and it will write it into flash sectors as provided block size and block address. till this it is done .

    then for jumping to the entry point i am using this asm(" LB 0X0A0000"); instruction.

    but when it jump to application code and start fetching opcodes on that time it is jumping to main of second stage bootloader. .

  • Hi Basweshwar, 

    First, can you please confirm that this issue is the same as and related to this thread you initiated:   https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/973516/3597715#3597715  

    If you confirm this, we will merge the two threads and focus here. 

    Here are few more questions: 

    1. Is the secondary bootloader writing the application to the flash memory starting at address 0xA0000?

    2. If so, once the application is loaded, are you able to verify the contents starting at 0xA0000. 

    3. Can you send us a screen shot of the region of memory that contains application?

    Cheers!

    Krishna 

  • yes you can merge both threads.

    my second stage bootloader will stay in 0x80000 - 0xa0000

    and application code will be from 0xa0000 till end .

    application code opcodes stored from 0xa0000.

    you can see in disassembly also written application code is proper.

  • Thanks Basweshwar for sharing the details.  Couple of questions for you...

    Are you able to set a breakpoint at address: 0xA0000? 

    As you see, there is a long branch (LB) at 0xA0000.  What is at the destination address of the LB?  

    Can you please send us a screen shot of the disassembly view of the region of memory on and around the destination address of the LB.

    Cheers, 

    Krishna

  • i have not tried to breakpoint at 0xa0000.

    0xa0000 it is entry point of code. they  specified some location on this entry address when it will jump over there it will start fetching opcodes putting them  into RAM

    .

    issue is this every thing is fine i can see the opcodes copied into RAM .but that application code not executing  it is jumping to the main of boot loader.

  • Hi Basweshwar, 

    As you see, there is a long branch (LB) at 0xA0000.  What is at the destination address of the LB?  

    Can you please send us a screen shot of the disassembly view of the region of memory on and around the destination address of the LB.

    Thanks,

    Krishna

  • Hi Basweshwar, 

    Your latest screen shot is not very helpful.  In the previous image you sent, you have the following line:

    0xa0000:     004A8AB1         LB                      0xa8ab1  

    The address in red, is the destination address of the Long Branch (LB)

    Please take a screen shot of the software at and around that destination address...

    Thanks,
    Krishna

  • thanks for reply,

    i did some changes in linker command file.so addresses are changed 

    below are screenshots as you said .

    this next screenshot of RAM location here data is got copied.

    if you want any other information let me know.

  • this are linker command files for 

    application.

    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 = 0x086000, length = 0x000002
    RAMM0 : origin = 0x000123, length = 0x0002DD
    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 = 0x086002, length = 0x001FFE /* 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
    RAMLS4 : origin = 0x00A000, length = 0x000800
    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 : > FLASHD PAGE = 0, ALIGN(8)
    .text : >> FLASHE|FLASHF PAGE = 0, ALIGN(8)
    codestart : > BEGIN PAGE = 0, ALIGN(8)
    /* Allocate uninitalized data sections: */
    .stack : > RAMD0 PAGE = 0
    .switch : > FLASHF PAGE = 0, ALIGN(8)
    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    #if defined(__TI_EABI__)
    .init_array : > FLASHG, 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 : > FLASHG, PAGE = 0, ALIGN(8)
    #else
    .pinit : > FLASHG, PAGE = 0, ALIGN(8)
    .ebss : >> RAMLS4 | RAMGS5 | RAMGS6, PAGE = 1
    .esysmem : > RAMLS5, PAGE = 1
    .cio : > RAMLS5, PAGE = 1
    /* Initalized sections go in Flash */
    .econst : >> FLASHG PAGE = 0, ALIGN(8)
    #endif

    Filter_RegsFile : > RAMGS0, PAGE = 1

    SHARERAMGS0 : > RAMGS5, PAGE = 1
    SHARERAMGS1 : > RAMGS6, PAGE = 1
    ramgs0 : > RAMGS0, PAGE = 1
    ramgs1 : > RAMGS1, PAGE = 1

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    #if defined(__TI_EABI__)
    .TI.ramfunc : {} LOAD = FLASHD,
    RUN = RAMLS2,
    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 = RAMLS2,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #endif
    #else
    .TI.ramfuncs : LOAD = FLASHD,
    RUN = RAMLS2,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #endif
    #endif


    /* 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
    }

    /* The following section definition are for SDFM examples */
    Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111
    Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222
    Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333
    Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444
    Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333
    }

    bootloader

    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 = 0x000122, length = 0x0002DE
    RAMD0 : origin = 0x00B000, length = 0x000800
    RAMLS03 : origin = 0x008000, length = 0x001000
    /* 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/F28377S, F28375D/F28375S devices. Remove line on other devices. */
    RAMGS15 : origin = 0x01B000, length = 0x000FF8 /* Only Available on F28379D/_, F28377D/F28377S, F28375D/F28375S 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 : /* 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

    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/F28377S, F28375D/F28375S devices. Remove line on other devices. */
    RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D/_, F28377D/F28377S, F28375D/F28375S devices. Remove line on other devices. */
    RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D/_, F28377D/F28377S, F28375D/F28375S devices. Remove line on other devices. */

    CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400
    CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400
    }


    SECTIONS
    {

    /* Allocate program areas: */
    .cinit : > FLASHB PAGE = 0
    .pinit : > FLASHB, PAGE = 0
    .text : >> FLASHB | FLASHC PAGE = 0
    codestart : > BEGIN PAGE = 0

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    GROUP
    {
    .TI.ramfunc
    { -l F021_API_F2837xD_FPU32.lib}

    } LOAD = FLASHB,
    RUN = RAMLS03,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0
    #else
    GROUP
    {
    .TI.ramfunc
    { -l F021_API_F2837xD_FPU32.lib}

    } LOAD = FLASHB,
    RUN = RAMLS03,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0
    #endif
    #endif


    /* Allocate uninitalized data sections: */
    .stack : > RAMM1 PAGE = 1
    .ebss : >> RAMGS9 | RAMGS8 | RAMGS7 PAGE = 1
    .esysmem : > RAMGS9 PAGE = 1

    /* Initalized sections go in Flash */
    .econst : >> FLASHC PAGE = 0
    .switch : > FLASHB PAGE = 0

    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    Filter_RegsFile : > RAMGS7, PAGE = 1

    SHARERAMGS0 : > RAMGS7, PAGE = 1
    SHARERAMGS1 : > RAMGS8, PAGE = 1

    /* Flash Programming Buffer */
    BufferDataSection : > RAMD1, PAGE = 1, 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
    }

    }

  • Hi Basweshwar, 

    The image with respect to the entry point of the code does not look right.  I assume you are using CCS for your development right?  In that case, please tell me if you are able to load the application into flash via CCS directly and are you able to run your application successfully?  If so, send me a screen shot of your application at and around the entry point (_c_int00) of your application.

    Thanks,

    Krishna