@@ -37,19 +37,24 @@ static HAL_StatusTypeDef FMC_SDRAM_Clock_Config(void)
3737{
3838 RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct ;
3939
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 */
4340 RCC_PeriphCLKInitStruct .PeriphClockSelection = RCC_PERIPHCLK_FMC ;
4441 RCC_PeriphCLKInitStruct .FmcClockSelection = RCC_FMCCLKSOURCE_PLL2 ;
4542#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 ;
4950#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 */
5055 RCC_PeriphCLKInitStruct .PLL2 .PLL2RGE = RCC_PLL2VCIRANGE_2 ;
5156 RCC_PeriphCLKInitStruct .PLL2 .PLL2M = 5 ;
52- RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 95 ;
57+ RCC_PeriphCLKInitStruct .PLL2 .PLL2N = 80 ;
5358#endif
5459 RCC_PeriphCLKInitStruct .PLL2 .PLL2FRACN = 0 ;
5560 RCC_PeriphCLKInitStruct .PLL2 .PLL2P = 2 ;
@@ -150,7 +155,7 @@ bool sdram_init(void) {
150155
151156 /* SDRAM device configuration */
152157 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) */
154159 /* TMRD: 2 Clock cycles */
155160 SDRAM_Timing .LoadToActiveDelay = MICROPY_HW_SDRAM_TIMING_TMRD ;
156161 /* TXSR: min=70ns (6x11.90ns) */
@@ -247,7 +252,7 @@ static void sdram_init_seq(SDRAM_HandleTypeDef
247252 we also need to subtract 20 from the value, so the target
248253 refresh rate is 703 - 20 = 683.
249254 */
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)
251256 HAL_SDRAM_ProgramRefreshRate (hsdram , REFRESH_COUNT );
252257}
253258
0 commit comments