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.

TMS320DM8148: DDR3 test stops ..

Part Number: TMS320DM8148

Team,

In one of customer design based on DM8148 the DDR test stops some times. (And while running the linux occasionally we see the random crashes). When this happens we can not even connect to JTAG and debug ... Following is the error seen on the CCS console:

CortexA8: GEL Output: Data written at :: 0xC063153C
CortexA8: GEL Output: Data written at :: 0xC0631540
CortexA8: Trouble Writing Memory Block at 0xc0631544 on Page 0 of Length 0x4: Error 0x80002002/-1204 Fatal Error during: Memory, Control,  The DAP access, address 0x00000080, has casued a STALL. DAP transaction is aborted.  
DDR_DataTransferCheck() cannot be evaluated.
Internal error while writing 0xC0631544
    at *(((unsigned int *) 0xC0600200+i))=temp_reg_wr [Mercury_Ti814x_ddr3.gel:700]
    at DDR_DataTransferCheck()
CortexA8: Warning: Error 0x60020020/-1267 Error during: Execution, Internal,  Unable to get target status due to the OS_LOCK enabled by the application.  
CortexA8: Unable to determine target status after 20 attempts
CortexA8: Failed to remove the debug state from the target before disconnecting.  There may still be breakpoint op-codes embedded in program memory.  It is recommended that you reset the emulator before you connect and reload your program before you continue debugging

Following is the test conducted:

hotmenu DDR_DataTransferCheck()
{
    unsigned int temp_reg_rd = 0;
        unsigned int temp_reg_wr = 0xA5A5A5A5;
        unsigned int i=0;
        unsigned int error=0;
      GEL_TextOut("Try Accessing DDR memory....Write data\n");
        for (i=0;i<NO_LOOP_CNT; i++)
        {
         *((UWORD32 *)DDR_START_ADDR + (i)) = temp_reg_wr;
         //GEL_TextOut("Data Written is :: %x \n",,,,,(unsigned int *)i);
       GEL_TextOut("Data written at :: %x \n",,,,,(unsigned int *)DDR_START_ADDR + (i));

        
        }
      for (i=0;i<NO_LOOP_CNT; i++)
        {

        temp_reg_rd =  *((UWORD32 *)DDR_START_ADDR + (i));
        // GEL_TextOut("Data Read is :: %x \n",,,,,(unsigned int *)temp_reg_rd);
        if(temp_reg_rd != 0xA5A5A5A5)
           {
            //GEL_TextOut("Data check failed at :: %x \n",,,,,(unsigned int *)DDR_START_ADDR + (i));

            error++;    
           }
        else
        {
        //GEL_TextOut("Data check passed  at :: %x \n",,,,,(unsigned int *)DDR_START_ADDR + (i));

         }
        GEL_TextOut("No of Failed locations  are :: %x \n",,,,,(unsigned int *)error);

        }

        if(error != 0)
        {
        GEL_TextOut("Data Integrity check Failed ");
        }
        else {
        GEL_TextOut("Data Integrity check Passed\n");
        }   
}

What could be the reason for this kind of behaviour ? Could you please provide some pointers ?

Best Regards,

Shiv