From b85331f038027cfd2268cc7f993b2027d48ae819 Mon Sep 17 00:00:00 2001 From: nspsck Date: Tue, 26 Sep 2023 19:44:14 +0200 Subject: [PATCH 1/3] stm32/boards/STM32H7B3I_DK: Fixed octo-spi pin implementation. The original OSPIFLASH settings in the mpconfigboard.h contains some mistakes that prevents the firmware to be built. These are now corrected and the firmware can be built with support for OSPI flash. Signed-off-by: nspsck --- ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h b/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h index f742241f7f..69d178159e 100644 --- a/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h +++ b/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h @@ -39,20 +39,20 @@ // SMPS configuration #define MICROPY_HW_PWR_SMPS_CONFIG (PWR_DIRECT_SMPS_SUPPLY) -#if 0 +#if 1 // 512MBit external OSPI flash, used for either the filesystem or XIP memory mapped #define MICROPY_HW_OSPIFLASH_SIZE_BITS_LOG2 (29) #define MICROPY_HW_OSPIFLASH_CS (pin_G6) -#define MICROPY_HW_OSPIFLASH_CLK (pin_B2) +#define MICROPY_HW_OSPIFLASH_SCK (pin_B2) #define MICROPY_HW_OSPIFLASH_DQS (pin_C5) -#define MICROPY_HW_OSPIFLASH_IO0 (pin_P8) +#define MICROPY_HW_OSPIFLASH_IO0 (pin_D11) // changed from pin_P8 #define MICROPY_HW_OSPIFLASH_IO1 (pin_F9) #define MICROPY_HW_OSPIFLASH_IO2 (pin_F7) #define MICROPY_HW_OSPIFLASH_IO3 (pin_F6) #define MICROPY_HW_OSPIFLASH_IO4 (pin_C1) #define MICROPY_HW_OSPIFLASH_IO5 (pin_H3) -#define MICROPY_HW_OSPIFLASH_IO6 (pin_D6) -#define MICROPY_HW_OSPIFLASH_IO7 (pin_G14) +#define MICROPY_HW_OSPIFLASH_IO6 (pin_G9) // changed from pin_D6 +#define MICROPY_HW_OSPIFLASH_IO7 (pin_D7) // changed from pin_G14 #endif // UART buses From 43eef9434fa2d7a4d41a5ccacdb637727cb97ede Mon Sep 17 00:00:00 2001 From: nspsck Date: Tue, 26 Sep 2023 20:06:30 +0200 Subject: [PATCH 2/3] stm32/octospi: Added OSPI support for STM32H7 mcus. Added a if-statement to octospi.c to detect if the targeted MCU is one of the STM32H7 series. If that was the case, another set of variables are used for the mp_hal_pin_config_alt_static_speed() function, as well as for register OCTOSPI1->CR. This allows the STM32H723 and STM32H7B3 series MCU to use octo- spi flash like the STM32H573 serie MCU. Signed-off-by: nspsck --- .../boards/STM32H7B3I_DK/mpconfigboard.h | 8 ++--- ports/stm32/octospi.c | 34 +++++++++++++------ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h b/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h index 69d178159e..99d8c1e90b 100644 --- a/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h +++ b/ports/stm32/boards/STM32H7B3I_DK/mpconfigboard.h @@ -39,20 +39,20 @@ // SMPS configuration #define MICROPY_HW_PWR_SMPS_CONFIG (PWR_DIRECT_SMPS_SUPPLY) -#if 1 +#if MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE // 512MBit external OSPI flash, used for either the filesystem or XIP memory mapped #define MICROPY_HW_OSPIFLASH_SIZE_BITS_LOG2 (29) #define MICROPY_HW_OSPIFLASH_CS (pin_G6) #define MICROPY_HW_OSPIFLASH_SCK (pin_B2) #define MICROPY_HW_OSPIFLASH_DQS (pin_C5) -#define MICROPY_HW_OSPIFLASH_IO0 (pin_D11) // changed from pin_P8 +#define MICROPY_HW_OSPIFLASH_IO0 (pin_D11) #define MICROPY_HW_OSPIFLASH_IO1 (pin_F9) #define MICROPY_HW_OSPIFLASH_IO2 (pin_F7) #define MICROPY_HW_OSPIFLASH_IO3 (pin_F6) #define MICROPY_HW_OSPIFLASH_IO4 (pin_C1) #define MICROPY_HW_OSPIFLASH_IO5 (pin_H3) -#define MICROPY_HW_OSPIFLASH_IO6 (pin_G9) // changed from pin_D6 -#define MICROPY_HW_OSPIFLASH_IO7 (pin_D7) // changed from pin_G14 +#define MICROPY_HW_OSPIFLASH_IO6 (pin_G9) +#define MICROPY_HW_OSPIFLASH_IO7 (pin_D7) #endif // UART buses diff --git a/ports/stm32/octospi.c b/ports/stm32/octospi.c index f2854f3796..6c60aa604f 100644 --- a/ports/stm32/octospi.c +++ b/ports/stm32/octospi.c @@ -45,19 +45,24 @@ void octospi_init(void) { // Configure OCTOSPI pins (allows 1, 2, 4 or 8 line configuration). - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_CS, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_NCS); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_SCK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_CLK); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO0, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO0); + #if defined(STM32H7) + #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPIM_P1_ ## signal + #else + #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPI1_ ## signal + #endif + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_CS, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(NCS)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_SCK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(CLK)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO0, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO0)); #if defined(MICROPY_HW_OSPIFLASH_IO1) - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO1, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO1); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO1, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO1)); #if defined(MICROPY_HW_OSPIFLASH_IO2) - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO2, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO2); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO3, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO3); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO2, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO2)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO3, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO3)); #if defined(MICROPY_HW_OSPIFLASH_IO4) - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO4, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO4); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO5, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO5); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO6, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO6); - mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO7, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI1_IO7); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO4, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO4)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO5, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO5)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO6, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO6)); + mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_IO7, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(IO7)); #endif #endif #endif @@ -68,12 +73,19 @@ void octospi_init(void) { __HAL_RCC_OSPI1_RELEASE_RESET(); // Configure the OCTOSPI peripheral. - + #if defined(STM32H7) + OCTOSPI1->CR = + 3 << OCTOSPI_CR_FTHRES_Pos // 4 bytes must be available to read/write + | 0 << OCTOSPI_CR_FSEL_Pos // FLASH 0 selected + | 0 << OCTOSPI_CR_DQM_Pos // dual-memory mode disabled + ; + #else OCTOSPI1->CR = 3 << OCTOSPI_CR_FTHRES_Pos // 4 bytes must be available to read/write | 0 << OCTOSPI_CR_MSEL_Pos // FLASH 0 selected | 0 << OCTOSPI_CR_DMM_Pos // dual-memory mode disabled ; + #endif OCTOSPI1->DCR1 = (MICROPY_HW_OSPIFLASH_SIZE_BITS_LOG2 - 3 - 1) << OCTOSPI_DCR1_DEVSIZE_Pos From 3247548d4de3e3094325b3346385e706203e1aa7 Mon Sep 17 00:00:00 2001 From: nspsck Date: Fri, 17 Nov 2023 12:48:53 +0100 Subject: [PATCH 3/3] stm32/system_stm32: Allows OSPI-clocksource selection. Added a if-statement to system_stm32.c to check whether MICROPY_HW_RCC_OSPI_CLKSOURCE is defined. If that was the case, the clocksource for the OSPI will be changed to the specified source. Signed-off-by: nspsck --- ports/stm32/octospi.c | 4 ++-- ports/stm32/system_stm32.c | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ports/stm32/octospi.c b/ports/stm32/octospi.c index 6c60aa604f..8e164329b1 100644 --- a/ports/stm32/octospi.c +++ b/ports/stm32/octospi.c @@ -46,9 +46,9 @@ void octospi_init(void) { // Configure OCTOSPI pins (allows 1, 2, 4 or 8 line configuration). #if defined(STM32H7) - #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPIM_P1_ ## signal + #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPIM_P1_##signal #else - #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPI1_ ## signal + #define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPI1_##signal #endif mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_CS, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(NCS)); mp_hal_pin_config_alt_static_speed(MICROPY_HW_OSPIFLASH_SCK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_NONE, MP_HAL_PIN_SPEED_VERY_HIGH, STATIC_AF_OCTOSPI(CLK)); diff --git a/ports/stm32/system_stm32.c b/ports/stm32/system_stm32.c index 2cff36c3a6..b76a41e97b 100644 --- a/ports/stm32/system_stm32.c +++ b/ports/stm32/system_stm32.c @@ -461,6 +461,11 @@ MP_WEAK void SystemClock_Config(void) { PeriphClkInitStruct.QspiClockSelection = MICROPY_HW_RCC_QSPI_CLKSOURCE; #endif + #if defined(MICROPY_HW_RCC_OSPI_CLKSOURCE) + PeriphClkInitStruct.PeriphClockSelection |= RCC_PERIPHCLK_OSPI; + PeriphClkInitStruct.OspiClockSelection = MICROPY_HW_RCC_OSPI_CLKSOURCE; + #endif + #if defined(MICROPY_HW_RCC_SPI123_CLKSOURCE) PeriphClkInitStruct.PeriphClockSelection |= RCC_PERIPHCLK_SPI123; PeriphClkInitStruct.Spi123ClockSelection = MICROPY_HW_RCC_SPI123_CLKSOURCE;