cancel
Showing results for 
Search instead for 
Did you mean: 

ERROR WHILE DOING SDRAM INITIALIZATION

SGupt.5
Associate II

I have connected external 16Mb SDRAM with STM32F429ZI controller.

While initialization sequence of the SDRAM i am getting following error:

handle_vCont_c, Failed continue thread

Error: Failed to set more breakpoints

Target is not responding, retrying...

While debugging I checked this is happening when code is at following point:

 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

I am attaching the screenshot of exact problem.

Following is my MX_FMC_Init & BSP_SDRAM_Initialization_sequence:

void MX_FMC_Init(void)

{

 /* USER CODE BEGIN FMC_Init 0 */

 /* USER CODE END FMC_Init 0 */

 FMC_SDRAM_TimingTypeDef SdramTiming = {0};

 /* USER CODE BEGIN FMC_Init 1 */

 /* USER CODE END FMC_Init 1 */

 /** Perform the SDRAM1 memory initialization sequence

 */

 hsdram1.Instance = FMC_SDRAM_DEVICE;

 /* hsdram1.Init */

 hsdram1.Init.SDBank = FMC_SDRAM_BANK1;

 hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;

 hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_11;

 hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;

 hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;

 hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;

 hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;

 hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;

 hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;

 hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;

 /* SdramTiming */

 SdramTiming.LoadToActiveDelay = 2;

 SdramTiming.ExitSelfRefreshDelay = 7;

 SdramTiming.SelfRefreshTime = 4;

 SdramTiming.RowCycleDelay = 7;

 SdramTiming.WriteRecoveryTime = 2;

 SdramTiming.RPDelay = 2;

 SdramTiming.RCDDelay = 2;

 if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)

 {

  Error_Handler( );

 }

 /* USER CODE BEGIN FMC_Init 2 */

BSP_SDRAM_Initialization_sequence(REFRESH_COUNT);

 /* USER CODE END FMC_Init 2 */

}

void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount)

{

 __IO uint32_t tmpmrd = 0;

 /* Step 1: Configure a clock configuration enable command */

 Command.CommandMode      = FMC_SDRAM_CMD_CLK_ENABLE;

 Command.CommandTarget     = FMC_SDRAM_CMD_TARGET_BANK1;

 Command.AutoRefreshNumber   = 1;

 Command.ModeRegisterDefinition = 0;

 /* Send the command */

 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 2: Insert 100 us minimum delay */

 /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */

 HAL_Delay(1);

 /* Step 3: Configure a PALL (precharge all) command */

 Command.CommandMode      = FMC_SDRAM_CMD_PALL;

 Command.CommandTarget     = FMC_SDRAM_CMD_TARGET_BANK1;

 Command.AutoRefreshNumber   = 1;

 Command.ModeRegisterDefinition = 0;

 /* Send the command */

 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 4: Configure an Auto Refresh command */

 Command.CommandMode      = FMC_SDRAM_CMD_AUTOREFRESH_MODE;

 Command.CommandTarget     = FMC_SDRAM_CMD_TARGET_BANK1;

 Command.AutoRefreshNumber   = 8;

 Command.ModeRegisterDefinition = 0;

 /* Send the command */

 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 5: Program the external memory mode register */

 tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1     |\

           SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL  |\

           SDRAM_MODEREG_CAS_LATENCY_3      |\

           SDRAM_MODEREG_OPERATING_MODE_STANDARD |\

           SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

 Command.CommandMode      = FMC_SDRAM_CMD_LOAD_MODE;

 Command.CommandTarget     = FMC_SDRAM_CMD_TARGET_BANK1;

 Command.AutoRefreshNumber   = 1;

 Command.ModeRegisterDefinition = tmpmrd;

 /* Send the command */

 HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 6: Set the refresh rate counter */

 /* Set the device refresh rate */

 HAL_SDRAM_ProgramRefreshRate(&hsdram1, RefreshCount);

}

0693W000008vv2kQAA.pngPlease give the solution.

3 REPLIES 3

You'll probably have to work to a solution.

Check you aren't breaking the debugger connection via pin configurations or low power modes.

Instrument your system so you can get secondary diagnostics out a serial port, irrespective of the debugger connection.

Have Hard Fault and Error Handler routines output actionable information.

Use better tools..

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
SGupt.5
Associate II

Hi Tesla,

Thanks for you immediate response.

I checked the debugger connection is not breaking.

Actually while debugging the step by step its working when I go into that particular HAL_SDRAM_SendComand step then this error generate.

Please check the configuration code of SDRAM. Is it correct?

SGupt.5
Associate II

Still waiting for answer.....!!!!