[PATCH] bsp/stm32h7: update FMC configuration for SRAM and SDRAM usage
Karel Gardas
karel at functional.vision
Wed Apr 6 12:21:36 UTC 2022
Hello Sebastian,
let me explain more motivation behind this patch. I'm working on
stm32h757i-eval bsp variant and while looking into FMC support while
using STM32CubeIDE I've noticed that actual changes between
system_stm32h7xx.c files generated for H743i-eval and H757i-eval are
pretty minimal much less than between RTEMS's ext-mem-ctl and
system_stm32h7xx.c for H757i-eval.
So what this patch does is update H743i-eval values to the latest
generated by IDE and by this minimize differences between H743i-eval and
future H757i-eval variant.
The problem with this patch is that I do not have 743i-eval2 board for
testing here. So basically patch is provided in a best hope that it'll
be working on your board.
If you do not accept this, then the other way around this would be big
#ifdef between 743 and 757 and this would be maintainer nightmare I
would guess so I'm offering this way first for your review and
consideration.
Please let me know if you would like to have this situation handled
differently or would like to have any changes to the patch.
Thanks!
Karel
On 4/6/22 14:13, Karel Gardas wrote:
> The patch merges differences in FMC configuration between system_stm32h7xx.c
> file generated by STM32CubeIDE for 743i-eval2 board and the current RTEMS
> ext-mem-ctl.c file.
>
> Sponsored-By: Precidata
> ---
> bsps/arm/stm32h7/start/ext-mem-ctl.c | 23 ++++++++++++++---------
> 1 file changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/bsps/arm/stm32h7/start/ext-mem-ctl.c b/bsps/arm/stm32h7/start/ext-mem-ctl.c
> index 5b92244533..a2ab9d8f1f 100644
> --- a/bsps/arm/stm32h7/start/ext-mem-ctl.c
> +++ b/bsps/arm/stm32h7/start/ext-mem-ctl.c
> @@ -66,8 +66,8 @@ void SystemInit_ExtMemCtl(void)
> GPIOD->AFR[1] = 0xCCCCCCCC;
> /* Configure PDx pins in Alternate function mode */
> GPIOD->MODER = 0xAAAAFAFA;
> - /* Configure PDx pins speed to VERY_HIGH */
> - GPIOD->OSPEEDR = 0xFFFFFF0F;
> + /* Configure PDx pins speed to 100 MHz */
> + GPIOD->OSPEEDR = 0xFFFF0F0F;
> /* Configure PDx pins Output type to push-pull */
> GPIOD->OTYPER = 0x00000000;
> /* Configure PDx pins in Pull-up */
> @@ -78,8 +78,8 @@ void SystemInit_ExtMemCtl(void)
> GPIOE->AFR[1] = 0xCCCCCCCC;
> /* Configure PEx pins in Alternate function mode */
> GPIOE->MODER = 0xAAAABEBA;
> - /* Configure PEx pins speed to VERY_HIGH */
> - GPIOE->OSPEEDR = 0xFFFFFFFF;
> + /* Configure PEx pins speed to 100 MHz */
> + GPIOE->OSPEEDR = 0xFFFFC3CF;
> /* Configure PEx pins Output type to push-pull */
> GPIOE->OTYPER = 0x00000000;
> /* Configure PEx pins in Pull-up */
> @@ -90,7 +90,7 @@ void SystemInit_ExtMemCtl(void)
> GPIOF->AFR[1] = 0xCCCCC000;
> /* Configure PFx pins in Alternate function mode */
> GPIOF->MODER = 0xAABFFAAA;
> - /* Configure PFx pins speed to VERY_HIGH */
> + /* Configure PFx pins speed to 100 MHz */
> GPIOF->OSPEEDR = 0xFFC00FFF;
> /* Configure PFx pins Output type to push-pull */
> GPIOF->OTYPER = 0x00000000;
> @@ -102,7 +102,7 @@ void SystemInit_ExtMemCtl(void)
> GPIOG->AFR[1] = 0xC0000C0C;
> /* Configure PGx pins in Alternate function mode */
> GPIOG->MODER = 0xBFEEFAAA;
> - /* Configure PGx pins speed to VERY_HIGH */
> + /* Configure PGx pins speed to 100 MHz */
> GPIOG->OSPEEDR = 0xC0330FFF;
> /* Configure PGx pins Output type to push-pull */
> GPIOG->OTYPER = 0x00000000;
> @@ -114,7 +114,7 @@ void SystemInit_ExtMemCtl(void)
> GPIOH->AFR[1] = 0xCCCCCCCC;
> /* Configure PHx pins in Alternate function mode */
> GPIOH->MODER = 0xAAAAABFF;
> - /* Configure PHx pins speed to VERY_HIGH */
> + /* Configure PHx pins speed to 100 MHz */
> GPIOH->OSPEEDR = 0xFFFFFC00;
> /* Configure PHx pins Output type to push-pull */
> GPIOH->OTYPER = 0x00000000;
> @@ -126,7 +126,7 @@ void SystemInit_ExtMemCtl(void)
> GPIOI->AFR[1] = 0x00000CC0;
> /* Configure PIx pins in Alternate function mode */
> GPIOI->MODER = 0xFFEBAAAA;
> - /* Configure PIx pins speed to VERY_HIGH */
> + /* Configure PIx pins speed to 100 MHz */
> GPIOI->OSPEEDR = 0x003CFFFF;
> /* Configure PIx pins Output type to push-pull */
> GPIOI->OTYPER = 0x00000000;
> @@ -164,7 +164,7 @@ void SystemInit_ExtMemCtl(void)
> WriteRecoveryTime = 2 -> 1 WWWW TWR
> RPDelay = 2 -> 1 PPPP TRP
> RCDDelay = 2 -> 1 CCCC TRCD */
> -
> + #if 0
> FMC_Bank5_6_R->SDCR[0] = 0x00005965; // 0000 0000 0000 0000 0101 1001 0110 0101 Bank 1
> // PPB KKWL LNMM RRCC
> FMC_Bank5_6_R->SDCR[1] = 0x00005965; // 0000 0000 0000 0000 0101 1001 0110 0101 Bank 2 // CAS Latency = 2
> @@ -174,6 +174,7 @@ void SystemInit_ExtMemCtl(void)
> // CCCC PPPP WWWW RRRR SSSS EEEE LLLL // mit CAS Latency = 2 (s.o.)
> FMC_Bank5_6_R->SDTR[1] = 0x01010351; // 0000 0001 0000 0001 0000 0011 0101 0001 Bank 2
> // CCCC WWWW SSSS EEEE LLLL
> + #endif
> #if 0
> FMC_Bank5_6_R->SDTR[0] = 0x00206000; // 0000 0000 0010 0000 0110 0000 0000 0000 Bank 1 // Original + 1 bei allen Werten,
> // CCCC PPPP WWWW RRRR SSSS EEEE LLLL // mit CAS Latency = 3 (s.o.)
> @@ -187,6 +188,10 @@ void SystemInit_ExtMemCtl(void)
> FMC_Bank5_6_R->SDTR[1] = 0x020306B1; // 0000 0010 0000 0011 0000 0110 1011 0001 Bank 2
> // CCCC WWWW SSSS EEEE LLLL
> #endif
> + FMC_Bank5_6_R->SDCR[0] = 0x00001800;
> + FMC_Bank5_6_R->SDCR[1] = 0x00000165;
> + FMC_Bank5_6_R->SDTR[0] = 0x00105000;
> + FMC_Bank5_6_R->SDTR[1] = 0x01010351;
>
> /* SDRAM initialization sequence */
>
More information about the devel
mailing list