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.

CCS/TMS570LS3137: About FLASH ECC and RAM ECC

Part Number: TMS570LS3137

Tool/software: Code Composer Studio

Hello

 I use periodic self-test for cpu.

And 

retVal = SL_SelfTest_SRAM(SRAM_ECC_ERROR_FORCING_1BIT, TRUE, &failInfoTCMRAM);

retVal = SL_SelfTest_FEE(FEE_ECC_DATA_CORR_MODE, TRUE, &failInfoFlash);
INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);

/* Run 1 bit selftest */
retVal = SL_SelfTest_FEE(FEE_ECC_TEST_MODE_1BIT, TRUE, &failInfoFlash);
INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
/* Run Diagmode 2 */
retVal = SL_SelfTest_FEE(FEE_ECC_SYN_REPORT_MODE, TRUE, &failInfoFlash);
INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
/* Run Diagmode 3 */
retVal = SL_SelfTest_FEE(FEE_ECC_MALFUNCTION_MODE1, TRUE, &failInfoFlash);
INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
/* Run Diagmode 4 */
retVal = SL_SelfTest_FEE(FEE_ECC_MALFUNCTION_MODE2, TRUE, &failInfoFlash);
INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);

//

Now I want to know ,Is it necessary to add a flash space for ecc in the cmd file

And fill some data in ECC flash .I see paper device “Flash bank7 is an FLEE bank and can be programmed while executing code from flash bank0.It is 72-bit wide with ECC support

  • Hello Whong,

    You don't need to add the memory for ECC to CMD file if you don't use linker CMD to generate ECC.

    If you want to generate ECC using Linker CMD, yes, both flash and it's ECC should be put in CMD file. For example:

    MEMORY
    {


    VECTORS (X) : origin=0x00000000 length=0x00000020 fill = 0xffffffff

    FLASH0 (RX) : origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff
    FLASH1 (RX) : origin=0x00200000 length=0x00200000 vfill = 0xffffffff
    /* Bank 7 (128kB, FEE) */
    FLASH7 (R) : origin=0xF0200000 length=0x00020000 vfill = 0xffffffff

    STACKS (RW) : origin=0x08000000 length=0x00001500
    RAM (RW) : origin=0x08001500 length=0x0007db00

    /*RAM (RW) : origin=0x08001500 length=0x0007db00*/
    SHAREDRAM (RW) : origin=0x0807F000 length=0x0001000

    /* Bank 0 ECC */
    ECC_VEC (R) : origin=(0xf0400000 + (start(VECTORS) >> 3)length=(size(VECTORS) >> 3)
    ECC={algorithm=algoL2R5F021, input_range=VECTORS}

    ECC_FLA0 (R) : origin=(0xf0400000 + (start(FLASH0) >> 3)length=(size(FLASH0) >> 3)
    ECC={algorithm=algoL2R5F021, input_range=FLASH0 }

    /* Bank 1 ECC */
    ECC_FLA1 (R) : origin=(0xf0400000 + (start(FLASH1) >> 3))length=(size(FLASH1) >> 3)
    ECC={algorithm=algoL2R5F021, input_range=FLASH1 }

    /* Bank 7 ECC */
    ECC_FLA7 (R) : origin=0xF0100000 length=(size(FLASH7) >> 3)
    ECC={algorithm=algoL2R5F021, input_range=FLASH7 }

    }

  • Yes, the bank7 can be used as EEPROM or FEE. It can be erased or programmed from the code running in Bank 0 or Bank 2.

  • Thank you

    run test Code 

    else if(1 == step)
    {


    /* Run 1Bit ECC test on TCM RAM */
    retVal = SL_SelfTest_SRAM(SRAM_ECC_ERROR_FORCING_1BIT, TRUE, &failInfoTCMRAM);
    INCREMENT_PASS_FAIL_COUNTER(failInfoTCMRAM, retVal);
    }
    else if(2 == step)
    {
    /* Run Diagmode 1 */
    retVal = SL_SelfTest_FEE(FEE_ECC_DATA_CORR_MODE, TRUE, &failInfoFlash);
    INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);

    /* Run 1 bit selftest */
    retVal = SL_SelfTest_FEE(FEE_ECC_TEST_MODE_1BIT, TRUE, &failInfoFlash);
    INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
    /* Run Diagmode 2 */
    retVal = SL_SelfTest_FEE(FEE_ECC_SYN_REPORT_MODE, TRUE, &failInfoFlash);
    INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
    /* Run Diagmode 3 */
    retVal = SL_SelfTest_FEE(FEE_ECC_MALFUNCTION_MODE1, TRUE, &failInfoFlash);
    INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
    /* Run Diagmode 4 */
    retVal = SL_SelfTest_FEE(FEE_ECC_MALFUNCTION_MODE2, TRUE, &failInfoFlash);
    INCREMENT_PASS_FAIL_COUNTER(failInfoFlash, retVal);
    }

    if I use the code above,I want to know whether need to add flash 7.

    and I look some cmd code ,that 

     FEE (R) : origin=0xF0200000 length=0x00000064 fill=0xDEADBEEF /* For FEE testing, Valid only for sample application */

    why fill 0xDEADBEEF?

     

  • Hi Whong,

    If you use FEE in your application, you can do selftest for FEE in your startup code.

    0xDEADBEEF is just a random value, you can fill it with any value for ECC test.

  • Thank you

    No  the  cmd .file

    MEMORY
    {
    VECTORS (X) : origin=0x00000000 length=0x00000020
    FLASH0 (RX) : origin=0x00000020 length=0x0005FFE0
    STACKS (RW) : origin=0x08000000 length=0x00001500
    RAM (RW) : origin=0x08001500 length=0x00006B00

    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    }

    /* USER CODE BEGIN (3) */
    /* USER CODE END */


    /*----------------------------------------------------------------------------*/
    /* Section Configuration */

    SECTIONS
    {
    .intvecs : START(ulFlashStartAddr) {} > VECTORS
    .text : {} > FLASH0
    .const : END(ulFlashEndAddr) {} > FLASH0
    .cinit : {} > FLASH0
    .pinit : {} > FLASH0
    .bss : {} > RAM
    .data : {} > RAM
    .sysmem : {} > RAM

    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    }

    DO I need  to add flash 7?

  • No, you don't need to add Bank 7 to linker cmd file.

  • Thank you