Skip to content

Commit bd4aaa7

Browse files
nspsckdpgeorge
authored andcommitted
stm32/octospi: Add 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 is 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 series MCU. Signed-off-by: nspsck <[email protected]>
1 parent e2c0e87 commit bd4aaa7

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

ports/stm32/octospi.c

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,24 @@
4545

4646
void octospi_init(void) {
4747
// Configure OCTOSPI pins (allows 1, 2, 4 or 8 line configuration).
48-
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);
49-
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);
50-
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);
48+
#if defined(STM32H7)
49+
#define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPIM_P1_##signal
50+
#else
51+
#define STATIC_AF_OCTOSPI(signal) STATIC_AF_OCTOSPI1_##signal
52+
#endif
53+
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));
54+
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));
55+
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));
5156
#if defined(MICROPY_HW_OSPIFLASH_IO1)
52-
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);
57+
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));
5358
#if defined(MICROPY_HW_OSPIFLASH_IO2)
54-
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);
55-
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);
59+
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));
60+
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));
5661
#if defined(MICROPY_HW_OSPIFLASH_IO4)
57-
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);
58-
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);
59-
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);
60-
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);
62+
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));
63+
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));
64+
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));
65+
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));
6166
#endif
6267
#endif
6368
#endif
@@ -69,11 +74,19 @@ void octospi_init(void) {
6974

7075
// Configure the OCTOSPI peripheral.
7176

77+
#if defined(STM32H7)
78+
OCTOSPI1->CR =
79+
3 << OCTOSPI_CR_FTHRES_Pos // 4 bytes must be available to read/write
80+
| 0 << OCTOSPI_CR_FSEL_Pos // FLASH 0 selected
81+
| 0 << OCTOSPI_CR_DQM_Pos // dual-memory mode disabled
82+
;
83+
#else
7284
OCTOSPI1->CR =
7385
3 << OCTOSPI_CR_FTHRES_Pos // 4 bytes must be available to read/write
7486
| 0 << OCTOSPI_CR_MSEL_Pos // FLASH 0 selected
7587
| 0 << OCTOSPI_CR_DMM_Pos // dual-memory mode disabled
7688
;
89+
#endif
7790

7891
OCTOSPI1->DCR1 =
7992
(MICROPY_HW_OSPIFLASH_SIZE_BITS_LOG2 - 3 - 1) << OCTOSPI_DCR1_DEVSIZE_Pos

0 commit comments

Comments
 (0)