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.

Flash programed code doesn't run

Hello, I can not run properly a flash programmed code in the 28x335 DSP.

The program worked very well when I sent the code from CCS to 28335 RAM and I debugged it.

Now I want to send the code to the flash to work as stand alone. I have programmed the flash memory and I have prepared it to dump the code from flash to RAM in order to work at maximum speed.
When I disconnect CCS and try to execute the stand alone program, it does not work. It seems to be a problem with the AD converter I think. However, I connect immediately the CCS to the 28335 (it seems to do a reset and the code stays halted), I run the code and the program works fine.
It is executing the same code from flash (dumped to RAM) but now it works properly.

Can you help me or give me some advice?

Thank you very much.

Salvador Orts

  • Hi Salvador,

    One common gotcha is that when using CCS, many initialization steps for the device/board are done in a startup GEL file. Hence there is a CCS dependency. When you take CCS out of the loop, the applications fails to run as expected because the extra initialization steps done in the GEL file have not been moved to the bootload code running on the target.

    This application note has more details on this:

    http://www.ti.com/lit/an/spraa74a/spraa74a.pdf (See section 5)

    Hence one thing to make sure is if you are indeed reliant on any actions done in the startup GEL file, if you are using one.

    Another thing to note is that CCS will set the program to the proper entry point. Make sure when you run standalone, on powerup that it will get to the entry point of the flashed program.

    Hope this helps

    ki

  • Thanks Ki-Soo Lee,

    I'm sure the problem may be related to the gel file actions. Using the gel file, I connect the CCS to the flash programed 28335 and run the code (whitout a reset) and the programs works well. However, if I delete the gel file and try to connect and run the flash programed 28335 the program dosen't work. At this point doing reset and run the program works.

    I have read the spraa74a and also tried to add to my code the functions related to the reset that I have seen in the gel file:

    OnReset(int nErrorCode)
    {
        C28x_Mode();
        Unlock_CSM();
        ADC_Cal();
    }

    But the program doesn't work at all in standalone mode.

    I send you my command file. Hope you can help me.

    Thank you very much.

     

    MEMORY
    {
    PAGE 0:    /* Program Memory */
               /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

     ZONE0             : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */
     RAM_L0L1L2L3: origin = 0x008000, length = 0x004000    /* on-chip RAM */
        OTP              : origin = 0x380400, length = 0x000400     /* on-chip OTP */
        ZONE6         : origin = 0x100000, length = 0x100000     /* XINTF zone 6 */
        ZONE7A      : origin = 0x200000, length = 0x00FC00     /* XINTF zone 7 - program space */
        /* FLASH_ABCDEFGH  : origin = 0x300000, length = 0x03FF80     /* On-chip FLASH */
        FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
        FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */
        FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */
        FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */
        FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
        FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */
        FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */

        CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
        BEGIN_FLASH : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
        PASSWORDS   : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
        ADC_CAL     : origin = 0x380080, length = 0x000009    /* Part of TI OTP */
        IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
        IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */ 
        FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
        ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */
        RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
        VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */


    PAGE 1 :   /* Data Memory */
               /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
               /* Registers remain on PAGE1                                                  */
     BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
        RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
        RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
        RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L1 */
        RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */
     RAML67      : origin = 0x00E000, length = 0x002000     /* on-chip RAM block L6 y L7 */
        /*RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L6 */
        /*RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L7 */
        DRAMH0     : origin = 0x3FB800, length = 0x000600
        ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
        FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */

    }

    /**************************************************************/
    /* Link all user defined sections                             */
    /**************************************************************/
    SECTIONS {

    /*** Initialized Sections ***/                                         
       .cinit   : LOAD = FLASHA,  PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0     /* must be CSM secured RAM */
                      LOAD_START(_cinit_loadstart),
                      RUN_START(_cinit_runstart),
                      SIZE(_cinit_size)

     .const   :   LOAD = FLASHA,   PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0        /* must be CSM secured RAM */
                      LOAD_START(_const_loadstart),
                      RUN_START(_const_runstart),
                      SIZE(_const_size)

     .econst   :   LOAD = FLASHA,   PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0        /* must be CSM secured RAM */
                      LOAD_START(_econst_loadstart),
                      RUN_START(_econst_runstart),
                      SIZE(_econst_size)

     .pinit   :   LOAD = FLASHA,   PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0        /* must be CSM secured RAM */
                      LOAD_START(_pinit_loadstart),
                      RUN_START(_pinit_runstart),
                      SIZE(_pinit_size)

     .switch   :   LOAD = FLASHA,   PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0        /* must be CSM secured RAM */
                      LOAD_START(_switch_loadstart),
                      RUN_START(_switch_runstart),
                      SIZE(_switch_size)

     .text   :   LOAD = FLASHA,   PAGE = 0        /* can be ROM */
                      RUN = RAM_L0L1L2L3, PAGE = 0        /* must be CSM secured RAM */
                      LOAD_START(_text_loadstart),
                      RUN_START(_text_runstart),
                      SIZE(_text_size)

    /*** Uninitialized Sections ***/
        .stack          : > RAMM1        PAGE = 1
        /*.ebss           : > RAMM1        PAGE = 1 */
     /*.esysmem        : > RAMM1        PAGE = 1*/
     .ebss           : > RAML67        PAGE = 1
     data            : > RAML5       PAGE = 1
        .esysmem        : > RAMM1        PAGE = 1

    /*** Code Security Password Locations ***/
        csm_rsvd        : > CSM_RSVD,       PAGE = 0      /* Used by file passwords.asm */
        passwords       : > PASSWORDS,      PAGE = 0      /* Used by file passwords.asm */


    /*** User Defined Sections ***/
        codestart       : > BEGIN_FLASH, PAGE = 0        /* Used by file CodeStartBranch.asm */
        wddisable  : > FLASHA,   PAGE = 0 
       copysections : > FLASHA,   PAGE = 0

      /* Allocate IQ math areas: */
       IQmath           : > FLASHC       PAGE = 0        /* Math Code */
       IQmathTables     : > IQTABLES,    PAGE = 0, TYPE = NOLOAD
       IQmathTables2    : > IQTABLES2,   PAGE = 0, TYPE = NOLOAD
       FPUmathTables    : > FPUTABLES,   PAGE = 0, TYPE = NOLOAD
            
       /* Allocate DMA-accessible RAM sections: */
       DMARAML4         : > RAML4,       PAGE = 1
       DMARAML5         : > RAML5,       PAGE = 1
       DMARAML6         : > RAML67,       PAGE = 1
       DMARAML7         : > RAML67,       PAGE = 1
      
       /* Allocate 0x400 of XINTF Zone 7 to storing data */
       ZONE7DATA        : > ZONE7B,      PAGE = 1

    /* .reset is a standard section used by the compiler.  It contains the */
    /* the address of the start of _c_int00 for C Code.   /*
    /* When using the boot ROM this section and the CPU vector */
    /* table is not needed.  Thus the default type is set here to  */
    /* DSECT  */
     .reset          : > RESET,       PAGE = 0, TYPE = DSECT
     vectors         : > VECTORS      PAGE = 0, TYPE = DSECT

    /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
       .adc_cal      : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD

    }

     

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

     

  • Hi  Ki-Soo Lee,

    I have just solved the issue.

    It was a problem with the ADC_Cal function.

    Thank you very much for your time.

     

    Salvador Orts 

  • I meet same issue, Could you tell me about how to solve it?