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/TMS570LC4357: SafeTI library in debug mode

Part Number: TMS570LC4357

Tool/software: Code Composer Studio

Dear team

My customer used TMS570LC4357 DEMO board and DEMO program of SafeTI Diagnostic Library for experiments.

They found the following questions:

1  When the computer is connected to the TMS570LC4357 DEMO board for DEBUG, the nERROR pin of the TMS570LC4357 chip was automatically activated (low level), the ERROR lamp of the DEMO board was lit.

2  SafeTI Diagnostic Library entered the endless loop of while (TRUE == SL_ESM_nERROR_Active ()) in the _SL_HoldNClear_nError () function of the sl_priv.c file. The SafeTI Diagnostic Library cannot perform the safety self-test.

So,How to solve the problem that the TMS570LC4357 chip cannot run the SafeTI Diagnostic Library in the debug mode? 

BR,

Susan

  • Hello Susan,

    The Cortex R5F CPU may generate speculative fetches to any location within the Flash memory space. A speculative fetch to a location with invalid ECC, which is subsequently not used, will set the ESM flags for a correctable or uncorrectable error. An uncorrectable error will unconditionally cause the nERROR pin to toggle low. Therefore care must be taken to generate the correct ECC for the entire Flash space including the holes between sections and any unused or blank Flash areas.

    Please use linker cmd file to generate ECC for the whole flash. https://processors.wiki.ti.com/index.php/Linker_Generated_ECC

    When uncorrectable error occurs, the corresponding bits in ESM group 3 is set. The code will be in the loop in sys_startup.c

    /* Check if there were ESM group3 errors during power-up.
    * These could occur during eFuse auto-load or during reads from flash OTP
    * during power-up. Device operation is not reliable and not recommended
    * in this case. */
    if ((esmREG->SR1[2]) != 0U)
    {
       esmGroup3Notification(esmREG,esmREG->SR1[2]);
    }

    #pragma WEAK(esmGroup3Notification)
    void esmGroup3Notification(esmBASE_t *esm, uint32 channel)
    {
    /* enter user code between the USER CODE BEGIN and USER CODE END. */
    /* USER CODE BEGIN (5) */
    /* USER CODE END */
         for(;;)
         {
         }/* Wait */
    /* USER CODE BEGIN (6) */
    /* USER CODE END */
    }