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.

RM48L952: SRAM Live Lock Test

Part Number: RM48L952

Can someone explain the purpose of this test SL_SelfTest_SRAM(SRAM_LIVELOCK_DIAGNOSTICS) and what it does? It returns true but it does not set ST_PASS.

Also, what is the resolution of these concerns? https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/606860?RM48L952-SafeTI-SRAM-LIVELOCK-DIAGNOSTICS-is-that-test-complete-ready-to-run-

Are system state preserved and restored after the test?

  • Hello,

    Please refer to this thread for details on SRAM_LIVELOCK test : https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/569492/2100035

    Guy Tadi said:

    Also, what is the resolution of these concerns? https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/606860?RM48L952-SafeTI-SRAM-LIVELOCK-DIAGNOSTICS-is-that-test-complete-ready-to-run-

    Are system state preserved and restored after the test?

    I'm looking into this and will get back to you with more details.

    Thanks,

    Akshay

  • Thanks. I understand clearly now what livelock test does. But my question still remains: why does it return TRUE but not set *sram_stResult = ST_PASS or *sram_stResult = ST_FAIL anywhere. What is the pass/fail condition for this test? The case block for SRAM_LIVELOCK_DIAGNOSTICS is below:

        case SRAM_LIVELOCK_DIAGNOSTICS:
            (void)SL_FLAG_SET(testType);

            tp = (volatile uint64 *)0x08000004u; /*start address of unaligned access*/
            eccB1 = (volatile uint64 *)0x08000000u; /*bank1 base word*/
            /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
            eccB1 = eccB1 + (0x00400000u/sizeof(uint64)); /*pointer to ecc for bank1 base word*/
            eccB2 = (volatile uint64 *)0x08000008u; /*bank2 base word*/
            /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */
            eccB2 = eccB2 + (0x00400000u/sizeof(uint64)); /*pointer to ecc for bank2 base word*/

            /* Enable Writes to ECC RAM */
            /*SAFETYMCUSW 9 S MR: 12.2 <APPROVED> Comment_10*/
            /*SAFETYMCUSW 134 S MR: 12.2 <APPROVED> Comment_5*/
            BIT_SET(sl_tcram1REG->RAMCTRL, TCRAM_RAMCTRL_ECCWREN);
            /*SAFETYMCUSW 9 S MR: 12.2 <APPROVED> Comment_10*/
            /*SAFETYMCUSW 134 S MR: 12.2 <APPROVED> Comment_5*/
            BIT_SET(sl_tcram2REG->RAMCTRL, TCRAM_RAMCTRL_ECCWREN);

            regBkupRamTh1 = sl_tcram1REG->RAMTHRESHOLD;
            regBkupRamTh2 = sl_tcram2REG->RAMTHRESHOLD;

            /* set threshold to 1 */
            sl_tcram1REG->RAMTHRESHOLD = 0x1u;
            sl_tcram2REG->RAMTHRESHOLD = 0x1u;

                _SL_Barrier_Data_Access();

                /* cause a 1-bit ECC error */
                *eccB1 ^= TCRAM_SYN_1BIT_DATA_ECC;

                *eccB2 ^= TCRAM_SYN_1BIT_DATA_ECC;

                /* read from location with to be generate error */
                _SL_Barrier_Data_Access();

                ramread64 = (*tp); /*unaligned read*/

                _SL_Barrier_Data_Access();

            SL_FLAG_CLEAR(testType);

            break;
    #endif

        default:
            retVal = FALSE;
            break;
        }

  • Hello. I'll appreciate a follow-up response to my question about pass/fail condition for the test. Thanks.
  • Hello,

    Sorry for the delay.

    The SRAM_LIVELOCK_DIAGNOSTICS test is not supported in the Safety Diagnostic Library. This has been documented in Table 3.API Mapping in the Software Safety Manual.

    Thanks,

    Akshay