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.

Boot from flash problem.

Other Parts Discussed in Thread: SYSBIOS

Hello,

I am migrating from a working dsp/bios project to TI-RTOS on 28069. After a few adaptations code is working properly on TI-RTOS.

However, if debugger is disconnected,execution does not branch off to _c_int00 on power up .This was found out by turning on  "load symbols only" option after power up.

SWIs and idle tasks are working properly with  debugger.

codestartbranch.asm has been excluded from build.

Instead - "boot from flash" option is enabled in TI-RTOS.

Tried otherwise  also - ie including codestartbranch.asm in build and disabling "boot from flash" option in TI-RTOS.

Please do not direct me to wiki pages and other app notes as I went through almost all of them. :)

Am I missing something?

With " load symbols only" option  - first address is 0x3ff75c(no symbols defined for 0x3ff75c).

With "load program" option - fist address is 0x3e9294.(_c_int00 at boot_cg.asm : entry point was reached)

CCS: 6.1.0.00104

TI-RTOS: 2.12.1.33

Thank you.


 

  • Linker file contents for above post:

    Map file is attached.
    MEMORY
    {
    PAGE 0 : /* Program Memory */

    L03SARAM : origin = 0x008000, length = 0x002000 /* on-chip RAM block L0-L3 */
    OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
    FLASH : origin = 0x3D8000, length = 0x01FF80 /* on-chip FLASH */
    CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Program with all 0x0000 when CSM is in use. */
    BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Used for "boot to Flash" bootloader mode. */
    CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* CSM password locations in FLASH */

    FPUTABLES : origin = 0x3FD860, length = 0x0006A0 /* FPU Tables in Boot ROM */
    IQTABLES : origin = 0x3FDF00, length = 0x000B50 /* IQ Math Tables in Boot ROM */
    IQTABLES2 : origin = 0x3FEA50, length = 0x00008C /* IQ Math Tables in Boot ROM */
    IQTABLES3 : origin = 0x3FEADC, length = 0x0000AA /* IQ Math Tables in Boot ROM */

    ROM : origin = 0x3FF3B0, length = 0x000C10 /* Boot ROM */
    RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
    VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */

    PAGE 1 : /* Data Memory */

    M01SARAM : origin = 0x000000, length = 0x000800 /* on-chip RAM block M0, M1 */
    PIEVECT : origin = 0xD00, length = 0x100
    L46SARAM : origin = 0x00A000, length = 0x006000 /* on-chip RAM block L4-L6 */
    L78SARAM : origin = 0x010000, length = 0x004000 /* on-chip RAM block L7, L8 */
    }

    /*
    * Allocate sections to memory blocks.
    * Note:
    * codestart user defined section in DSP28_CodeStartBranch.asm
    * used to redirect code execution when booting to flash
    *
    * ramfuncs user defined section to store functions that will be
    * copied from Flash into RAM
    */

    SECTIONS
    {
    /* Allocate program areas: */
    .cinit : > FLASH PAGE = 0
    .pinit : > FLASH PAGE = 0
    .text : > FLASH PAGE = 0
    codestart : > BEGIN PAGE = 0
    ramfuncs : LOAD = FLASH PAGE = 0,
    RUN = L03SARAM PAGE = 0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart)

    csmpasswds : > CSM_PWL PAGE = 0
    csm_rsvd : > CSM_RSVD PAGE = 0

    /* Allocate uninitalized data sections: */
    .stack : > M01SARAM | L46SARAM PAGE = 1
    .ebss : > M01SARAM | L46SARAM PAGE = 1
    .esysmem : > L78SARAM | L46SARAM | M01SARAM PAGE = 1
    .cio : > L78SARAM | L46SARAM | M01SARAM PAGE = 1

    /* Initalized sections go in Flash */
    /* For SDFlash to program these, they must be allocated to page 0 */
    .econst : > FLASH PAGE = 0
    .switch : > FLASH PAGE = 0
    .args : > FLASH PAGE = 0

    /* Allocate IQ math areas: */
    IQmath : > FLASH PAGE = 0 /* Math Code */
    IQmathTables : > IQTABLES PAGE = 0, TYPE = NOLOAD

    /* Allocate FPU math areas: */
    FPUmathTables : > FPUTABLES PAGE = 0, TYPE = NOLOAD

    /*
    * Uncomment the section below if calling the IQNexp() or IQexp()
    * functions from the IQMath.lib library in order to utilize the
    * relevant IQ Math table in Boot ROM (This saves space and Boot ROM
    * is 1 wait-state). If this section is not uncommented, IQmathTables2
    * will be loaded into other memory (SARAM, Flash, etc.) and will take
    * up space, but 0 wait-state is possible.
    */
    /*
    IQmathTables2 : > IQTABLES2 PAGE = 0, TYPE = NOLOAD
    {
    IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
    }
    */

    /*
    * Uncomment the section below if calling the IQNasin() or IQasin()
    * functions from the IQMath.lib library in order to utilize the
    * relevant IQ Math table in Boot ROM (This saves space and Boot ROM
    * is 1 wait-state). If this section is not uncommented, IQmathTables2
    * will be loaded into other memory (SARAM, Flash, etc.) and will take
    * up space, but 0 wait-state is possible.
    */
    /*
    IQmathTables3 : > IQTABLES3 PAGE = 0, TYPE = NOLOAD
    {
    IQmath.lib<IQNasinTable.obj> (IQmathTablesRam)
    }
    */
    .reset : > FLASH, PAGE = 0, TYPE = DSECT
    vectors : > VECTORS, PAGE = 0, TYPE = DSECT
    }

    5488.Map.txt

  • Hello,
    Is it possible to get an "example TI-RTOS/sysbios boot from flash" project for F2806x device? This would be very helpful.
    Couldn't locate one.
  • Hi AAH,

    Selecting the "Enable boot from FLASH" option in the C28x Boot module should be enough. Can you share your application's map file ? I would like to confirm that the Boot_entry function is part of the final executable and is being placed at the right address.

    Best,

    Ashish

  • Hello Ashish,

    Map file is attached in my previous message. Attaching it again. By the way, this boards is already in production with DSP/BIOS 5. 2110.Map.txt

    Please check.

    Thank you.

    regards

  • Hi AAH,

    It looks like the Boot_entry function is being installed correctly. I am guessing you cannot share your full project, but, can you create a smaller project that demonstrates this issue ?

    As per your earlier request, I have attached an example for F28069 control stick that boots from flash. The example blinks the red LED on the board.

    Best,

    Ashish

    6254.controlSTICK_F28069_Boot_Example01.zip

  • Hello Ashish,

    I could not run your project as it is in sysbios.

    However,  I have attached a TI-RTOS clock project taken from 'Resource Explorer'.

    For this application:

    1. Linker file has been replaced by the one in our application.

    2. "Boot from flash" is enabled in TI-RTOS.

    Exactly the same result is obtained:

    1. If you debug with "Load program" execution jumps to _c_int00.

    2. If you debug with "Load symbols" execution jumps to 0x3ff75c. On giving a  "CPU reset" +"restart", execution goes to main().

    Screen shots are in attached file.

    regards

    7041.ti_post.docx

    0081.clock_TMS320F28069.zip

  • Hi AAH,

    I will try your example and get back.

    AAH said:

    I could not run your project as it is in sysbios.

    Were you unable to build the example or were able to build it but not able to run it ? 

    Best,

    Ashish

  • Hello Ashish,

    Error message can be seen in the doc ti_post.docx in my previous post.

    regards

    AAH

  • Hi AAH,

    I added a few lines of code to blink the LED in the project you shared and flashed it to my board. I was able to verify the app works (LEDs blink) when the target is disconnected from CCS and directly connected to a power source.

    I think I figured out why you see that the application is executing some seemingly random code when you re-connect to the target. The problem is that the gel file does some configuration which ends up reseting the CPU. So the "Boot from flash" feature in SYS/BIOS is working fine.

    Can you try the following:

     - Flash the board with your Clock application (or some other app which has Boot from Flash enabled)

     - Disconnect the target in CCS

     - Open "Tools"->"Gel Files" menu item. Now in the "Gel Files" window, right click on the f28069.gel file and remove it.

     - Re-connect to the C28x target without restarting the debug session (Restarting debug session will reload the gel file we just removed). The PC should now be pointing to some location within the app as expected.

    Best,

    Ashish

  • Hello Ashish,
    The "Load symbols" debug option led me to believe that boot sequence was wrong.

    Actually, the problem was resolved after tweaking the linker cmd file.

    Thanks

    AAH