@@ -68,10 +68,10 @@ static void MX_FMC_Init(void)
6868 /* Timing */
6969 _timing.AddressSetupTime = 0 ;
7070 _timing.AddressHoldTime = 0 ;
71- _timing.DataSetupTime = 2 ;
71+ _timing.DataSetupTime = 4 ;
7272 _timing.BusTurnAroundDuration = 0 ;
73- _timing.CLKDivision = 1 ;
74- _timing.DataLatency = 1 ;
73+ _timing.CLKDivision = 0 ;
74+ _timing.DataLatency = 0 ;
7575 _timing.AccessMode = FMC_ACCESS_MODE_A;
7676 /* ExtTiming */
7777
@@ -89,19 +89,19 @@ static void MX_FMC_Init(void)
8989 _hsdram1.Init .RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
9090 _hsdram1.Init .MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
9191 _hsdram1.Init .InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
92- _hsdram1.Init .CASLatency = FMC_SDRAM_CAS_LATENCY_2 ;
92+ _hsdram1.Init .CASLatency = FMC_SDRAM_CAS_LATENCY_3 ;
9393 _hsdram1.Init .WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
9494 _hsdram1.Init .SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
9595 _hsdram1.Init .ReadBurst = FMC_SDRAM_RBURST_ENABLE;
96- _hsdram1.Init .ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0 ;
96+ _hsdram1.Init .ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1 ;
9797 /* SdramTiming */
9898 _sdramTiming.LoadToActiveDelay = 2 ;
99- _sdramTiming.ExitSelfRefreshDelay = 10 ;
100- _sdramTiming.SelfRefreshTime = 2 ;
101- _sdramTiming.RowCycleDelay = 8 ;
102- _sdramTiming.WriteRecoveryTime = 4 ;
103- _sdramTiming.RPDelay = 2 ;
104- _sdramTiming.RCDDelay = 2 ;
99+ _sdramTiming.ExitSelfRefreshDelay = 12 ;
100+ _sdramTiming.SelfRefreshTime = 8 ;
101+ _sdramTiming.RowCycleDelay = 10 ;
102+ _sdramTiming.WriteRecoveryTime = 3 ;
103+ _sdramTiming.RPDelay = 4 ;
104+ _sdramTiming.RCDDelay = 4 ;
105105
106106 if (HAL_SDRAM_Init (&_hsdram1, &_sdramTiming) != HAL_OK)
107107 {
@@ -143,7 +143,7 @@ static void MX_FMC_Init(void)
143143 }
144144
145145 /* Step 7: Program the external memory mode register */
146- _modeRegister = ( 0 << 0 ) | ( 0 << 2 ) | ( 2 << 4 ) | ( 0 << 7 ) | ( 1 << 9 ) ;
146+ _modeRegister = 0b000000110011011 ;
147147 _command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
148148 _command.ModeRegisterDefinition = _modeRegister;
149149 _command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
@@ -153,8 +153,8 @@ static void MX_FMC_Init(void)
153153 /* Step 8: Set the refresh rate counter - refer to section SDRAM refresh timer register in RM0455 */
154154 /* Set the device refresh rate
155155 * COUNT = [(SDRAM self refresh time / number of row) x SDRAM CLK] – 20
156- = [(64ms/8192) * 133.3333MHz ] - 20 = 1021.6667 */
157- if (HAL_SDRAM_ProgramRefreshRate (&_hsdram1, 1022 ) != HAL_OK)
156+ = [(64ms/8192) * 150MHz ] - 20 = 1151.875 ~ 1152. */
157+ if (HAL_SDRAM_ProgramRefreshRate (&_hsdram1, 1152 ) != HAL_OK)
158158 {
159159 Error_Handler ();
160160 }
@@ -179,7 +179,7 @@ static void HAL_FMC_MspInit(void)
179179 */
180180 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC;
181181 PeriphClkInitStruct.PLL2 .PLL2M = 6 ;
182- PeriphClkInitStruct.PLL2 .PLL2N = 200 ;
182+ PeriphClkInitStruct.PLL2 .PLL2N = 225 ;
183183 PeriphClkInitStruct.PLL2 .PLL2P = 2 ;
184184 PeriphClkInitStruct.PLL2 .PLL2Q = 2 ;
185185 PeriphClkInitStruct.PLL2 .PLL2R = 2 ;
@@ -680,4 +680,4 @@ extern "C" void MDMA_IRQHandler()
680680{
681681 HAL_MDMA_IRQHandler (&_hmdmaMdmaChannel40Sw0);
682682 HAL_MDMA_IRQHandler (&_hmdmaMdmaChannel41Sw0);
683- }
683+ }
0 commit comments