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.

Regarding how to use a part of flash as EEPROM?

Other Parts Discussed in Thread: TMS320F28034, TMS320F28069, TMS320F28031

Hello,

I am Dhanuraj from Dubas Engg. Pvt.Ltd.

We are currently using Piccolo series DSP (TMS320F28031, TMS320F28034,TMS320F28069).

I want to know, How can i use a part of a flash as EEPROM?

If any examples available related to this particular technique, please send the link.


  • Hi Dhanuraj,

    Check this link for EEPROM emulation for C2000 devices:

    www.ti.com/.../litabsmultiplefilelist.tsp

    Regards,
    Gautam
  • Hi Mr. Gautam Iyer, thanks for your reply.
    But i am not able to open the link.
    Its telling..Sorry! We couldn't find your page.
    Can u please verify and tell us the link?
  • The first link:
    www.google.co.in/

    Regards,
    Gautam
  • we already referred that particular document. not able to get clarity with it. Please send some examples related to that technique please?
  • I'm not talking only about the document but also the zip file which has example code in the same TI link.
  • Hello Mr. Gautam Iyer,
    As per your zip files mentioned in SPRAB69, we have done programming for API library , API configuration and then EEPROM.
    We want to reserve sector D and sector H for EEPROM.
    What are the changes to be made in cmd file mentioned below. Please update us the respective code.



    /*
    // TI File $Revision: /main/1 $
    // Checkin $Date: November 9, 2009 15:08:03 $
    //###########################################################################
    //
    // FILE: F28031.cmd
    //
    // TITLE: Linker Command File For F28031 Device
    //
    //###########################################################################
    // $TI Release: 2803x C/C++ Header Files V1.21 $
    // $Release Date: December 1, 2009 $
    //###########################################################################
    */

    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    //
    // The header linker files are found in <base>\DSP2803x_Headers\cmd
    //
    // For BIOS applications add: DSP2803x_Headers_BIOS.cmd
    // For nonBIOS applications add: DSP2803x_Headers_nonBIOS.cmd
    ========================================================= */

    /* ======================================================
    // For Code Composer Studio prior to V2.2
    // --------------------------------------
    // 1) Use one of the following -l statements to include the
    // header linker command file in the project. The header linker
    // file is required to link the peripheral structures to the proper
    // locations within the memory map */

    /* Uncomment this line to include file only for non-BIOS applications */
    /* -l DSP2803x_Headers_nonBIOS.cmd */

    /* Uncomment this line to include file only for BIOS applications */
    /* -l DSP2803x_Headers_BIOS.cmd */

    /* 2) In your project add the path to <base>\DSP2803x_headers\cmd to the
    library search path under project->build options, linker tab,
    library search path (-i).
    /*========================================================= */

    /* Define the memory block start/length for the F28031
    PAGE 0 will be used to organize program sections
    PAGE 1 will be used to organize data sections

    Notes:
    Memory blocks on F2803x are uniform (ie same
    physical memory) in both PAGE 0 and PAGE 1.
    That is the same memory region should not be
    defined for both PAGE 0 and PAGE 1.
    Doing so will result in corruption of program
    and/or data.

    L0 memory block is mirrored - that is
    it can be accessed in high memory or low memory.
    For simplicity only one instance is used in this
    linker file.

    Contiguous SARAM memory blocks or flash sectors can be
    be combined if required to create a larger memory block.
    */

    MEMORY
    {
    PAGE 0: /* Program Memory */
    /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
    RAML0 : origin = 0x008000, length = 0x000800 /* on-chip RAM block L0 */
    RAML1 : origin = 0x008800, length = 0x000400 /* on-chip RAM block L1 */
    OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */

    FLASHH : origin = 0x3F0000, length = 0x001000 /* on-chip FLASH */
    FLASHG : origin = 0x3F1000, length = 0x001000 /* on-chip FLASH */
    FLASHF : origin = 0x3F2000, length = 0x001000 /* on-chip FLASH */
    FLASHE : origin = 0x3F3000, length = 0x001000 /* on-chip FLASH */
    FLASHD : origin = 0x3F4000, length = 0x001000 /* on-chip FLASH */
    FLASHC : origin = 0x3F5000, length = 0x001000 /* on-chip FLASH */
    FLASHA : origin = 0x3F7000, length = 0x000F80 /* on-chip FLASH */
    CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
    BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
    CSM_PWL_P0 : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */

    IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */
    IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */
    IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math 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 */
    RAML2 : origin = 0x008C00, length = 0x000400 /* on-chip RAM block L2 */
    RAML3 : origin = 0x009000, length = 0x000800 /* on-chip RAM block L3 */
    FLASHB : origin = 0x3F6000, length = 0x001000 /* on-chip FLASH */
    }

    /* 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 : > FLASHA PAGE = 0
    .pinit : > FLASHA, PAGE = 0
    .text : > FLASHA PAGE = 0
    codestart : > BEGIN PAGE = 0
    ramfuncs : LOAD = FLASHD,
    RUN = RAML0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    PAGE = 0

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

    /* Allocate uninitalized data sections: */
    .stack : > RAMM0 PAGE = 1
    .ebss : > RAML2 PAGE = 1
    .esysmem : > RAML2 PAGE = 1

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

    /* Allocate IQ math areas: */
    IQmath : > FLASHA PAGE = 0 /* Math Code */
    IQmathTables : > IQTABLES, 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 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

    }

    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
  • The same can be edited in 'F280xx_EEPROM.h' header file. The same can be found here:
    D:\Projects\Datasheets\TI\C2000\C2000 E2PROM Emulation in Flash\F28xxx_EEPROM\F280xx\include

    Check the #define lines for Sector Allotment.

  • Hello Mr.Gautam Iyer
    We have currently done programming for a part of flash to work as EEPROM referring to the documents provided in SPRAB69 and the zip files for TMS320F28031.
    Can u please tell us how to check that it is working as EEPROM in flash ?
  • Dubas Engg said:
    Can u please tell us how to check that it is working as EEPROM in flash ?

    The easiest way is to write data to a memory address while commenting the read routine and later comment the write routine while running only the read routine to fetch written data.

    Regards,

    Gautam

  • Hello Mr.Gautam Iyer

    We are facing problem in linking the flash API files, can you please provide us your mail id so that we can share our program to you & please do suggest a solution for the same.

    Thanks/Regards

    Dhanuraj
  • Dhanuraj, I'm not the right person to share your code with. Let me call in here to help you out.
  • Hi manoj,

    now we are able to write the code but when read back the data we are reading the same . is there any constraint on writing locations because now we are writing data on flash D.

    Regards

    Nandish