@@ -37,19 +37,24 @@ static HAL_StatusTypeDef FMC_SDRAM_Clock_Config(void)
37
37
{
38
38
RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct ;
39
39
40
- /* PLL2_VCO Input = HSE_VALUE/PLL2_M = 5 Mhz */
41
- /* PLL2_VCO Output = PLL2_VCO Input * PLL_N = 800 Mhz */
42
- /* FMC Kernel Clock = PLL2_VCO Output/PLL_R = 800/4 = 200 Mhz */
43
40
RCC_PeriphCLKInitStruct .PeriphClockSelection = RCC_PERIPHCLK_FMC ;
44
41
RCC_PeriphCLKInitStruct .FmcClockSelection = RCC_FMCCLKSOURCE_PLL2 ;
45
42
#ifdef ARDUINO_GIGA
46
- RCC_PeriphCLKInitStruct .PLL2 .PLL2RGE = RCC_PLL2VCIRANGE_3 ;
47
- RCC_PeriphCLKInitStruct .PLL2 .PLL2M = 2 ;
48
- RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 60 ;
43
+ /* 16MHz HSE */
44
+ /* PLL2_VCO Input = HSE_VALUE/PLL2_M = (16/4) = 4 Mhz */
45
+ /* PLL2_VCO Output = PLL2_VCO Input * PLL_N = 4*100 = 400 Mhz */
46
+ /* FMC Kernel Clock = PLL2_VCO Output/PLL_R = 400/2 = 200 Mhz */
47
+ RCC_PeriphCLKInitStruct .PLL2 .PLL2RGE = RCC_PLL2VCIRANGE_2 ;
48
+ RCC_PeriphCLKInitStruct .PLL2 .PLL2M = 4 ;
49
+ RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 100 ;
49
50
#else
51
+ /* 25MHz HSE */
52
+ /* PLL2_VCO Input = HSE_VALUE/PLL2_M = 25/5 = 5 Mhz */
53
+ /* PLL2_VCO Output = PLL2_VCO Input * PLL_N = 5*80 = 400 Mhz */
54
+ /* FMC Kernel Clock = PLL2_VCO Output/PLL_R = 400/2 = 200 Mhz */
50
55
RCC_PeriphCLKInitStruct .PLL2 .PLL2RGE = RCC_PLL2VCIRANGE_2 ;
51
56
RCC_PeriphCLKInitStruct .PLL2 .PLL2M = 5 ;
52
- RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 95 ;
57
+ RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 80 ;
53
58
#endif
54
59
RCC_PeriphCLKInitStruct .PLL2 .PLL2FRACN = 0 ;
55
60
RCC_PeriphCLKInitStruct .PLL2 .PLL2P = 2 ;
@@ -150,7 +155,7 @@ bool sdram_init(void) {
150
155
151
156
/* SDRAM device configuration */
152
157
hsdram .Instance = FMC_SDRAM_DEVICE ;
153
- /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz /2) */
158
+ /* Timing configuration for 100 Mhz of SD clock frequency (200Mhz /2) */
154
159
/* TMRD: 2 Clock cycles */
155
160
SDRAM_Timing .LoadToActiveDelay = MICROPY_HW_SDRAM_TIMING_TMRD ;
156
161
/* TXSR: min=70ns (6x11.90ns) */
@@ -247,7 +252,7 @@ static void sdram_init_seq(SDRAM_HandleTypeDef
247
252
we also need to subtract 20 from the value, so the target
248
253
refresh rate is 703 - 20 = 683.
249
254
*/
250
- #define REFRESH_COUNT (MICROPY_HW_SDRAM_REFRESH_RATE * 90000 / 8192 - 20)
255
+ #define REFRESH_COUNT (MICROPY_HW_SDRAM_REFRESH_RATE * MICROPY_HW_SDRAM_FREQUENCY / MICROPY_HW_SDRAM_REFRESH_CYCLES - 20)
251
256
HAL_SDRAM_ProgramRefreshRate (hsdram , REFRESH_COUNT );
252
257
}
253
258
0 commit comments