summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <christopher.david.wilson@gmail.com>2021-07-11 16:39:56 -0700
committerDamien George <damien@micropython.org>2021-07-23 22:03:16 +1000
commitaecb697c72ac1fdb9f549daa5734e2ffbd37a6d3 (patch)
treecea25121b1a6fae6a9566535481542076bd59a78
parent341158c251c032fe1116395d60ea69c6dc406898 (diff)
stm32/boards: Add support for SparkFun STM32 MicroMod Processor board.
Signed-off-by: Chris Wilson <christopher.david.wilson@gmail.com>
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/bdev.c28
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/board_init.c11
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.h100
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.mk16
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/pins.csv57
-rw-r--r--ports/stm32/boards/SPARKFUN_MICROMOD_STM32/stm32f4xx_hal_conf.h19
6 files changed, 231 insertions, 0 deletions
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/bdev.c b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/bdev.c
new file mode 100644
index 000000000..18b5b85b1
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/bdev.c
@@ -0,0 +1,28 @@
+#include "storage.h"
+
+#if !MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
+
+// External SPI flash uses standard SPI interface
+
+STATIC const mp_soft_spi_obj_t soft_spi_bus = {
+ .delay_half = MICROPY_HW_SOFTSPI_MIN_DELAY,
+ .polarity = 0,
+ .phase = 0,
+ .sck = MICROPY_HW_SPIFLASH_SCK,
+ .mosi = MICROPY_HW_SPIFLASH_MOSI,
+ .miso = MICROPY_HW_SPIFLASH_MISO,
+};
+
+STATIC mp_spiflash_cache_t spi_bdev_cache;
+
+const mp_spiflash_config_t spiflash_config = {
+ .bus_kind = MP_SPIFLASH_BUS_SPI,
+ .bus.u_spi.cs = MICROPY_HW_SPIFLASH_CS,
+ .bus.u_spi.data = (void*)&soft_spi_bus,
+ .bus.u_spi.proto = &mp_soft_spi_proto,
+ .cache = &spi_bdev_cache,
+};
+
+spi_bdev_t spi_bdev;
+
+#endif
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/board_init.c b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/board_init.c
new file mode 100644
index 000000000..0184bc820
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/board_init.c
@@ -0,0 +1,11 @@
+#include "py/mphal.h"
+
+void board_early_init(void) {
+
+#if !MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
+ // set external SPI flash CS pin high
+ mp_hal_pin_output(MICROPY_HW_SPIFLASH_CS);
+ mp_hal_pin_write(MICROPY_HW_SPIFLASH_CS, 1);
+#endif
+
+}
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.h b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.h
new file mode 100644
index 000000000..0c451a4db
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.h
@@ -0,0 +1,100 @@
+// The Sparkfun MicroMod spec uses a zero-based peripheral numbering scheme.
+// In cases where the 0th peripheral is the default, the "0" is omitted from
+// the name (e.g. "I2C" instead of "I2C0").
+//
+// Note: UART (UART0) is not present in the edge connector pinout because the
+// primary debug serial port is exposed as a virtual serial port over USB,
+// i.e. Serial.print() should print over USB VCP, not UART_TX1.
+//
+// For more details, see https://www.sparkfun.com/micromod#tech-specs
+
+#define MICROPY_HW_BOARD_NAME "SparkFun STM32 MicroMod Processor"
+#define MICROPY_HW_MCU_NAME "STM32F405RG"
+
+// 1 = use STM32 internal flash (1 MByte)
+// 0 = use onboard external SPI flash (16 MByte)
+#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0)
+
+#define MICROPY_HW_HAS_FLASH (1)
+#define MICROPY_HW_ENABLE_RNG (1)
+#define MICROPY_HW_ENABLE_RTC (1)
+#define MICROPY_HW_ENABLE_DAC (1)
+#define MICROPY_HW_ENABLE_USB (1)
+
+// External SPI Flash config
+#if !MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
+
+// 128 Mbit (16 MByte) external SPI flash
+#define MICROPY_HW_SPIFLASH_SIZE_BITS (128 * 1024 * 1024)
+
+#define MICROPY_HW_SPIFLASH_CS (pin_C3)
+#define MICROPY_HW_SPIFLASH_SCK (pin_C10)
+#define MICROPY_HW_SPIFLASH_MOSI (pin_C12)
+#define MICROPY_HW_SPIFLASH_MISO (pin_C11)
+
+#define MICROPY_BOARD_EARLY_INIT board_early_init
+void board_early_init(void);
+
+extern const struct _mp_spiflash_config_t spiflash_config;
+extern struct _spi_bdev_t spi_bdev;
+#define MICROPY_HW_SPIFLASH_ENABLE_CACHE (1)
+#define MICROPY_HW_BDEV_IOCTL(op, arg) ( \
+ (op) == BDEV_IOCTL_NUM_BLOCKS ? (MICROPY_HW_SPIFLASH_SIZE_BITS / 8 / FLASH_BLOCK_SIZE) : \
+ (op) == BDEV_IOCTL_INIT ? spi_bdev_ioctl(&spi_bdev, (op), (uint32_t)&spiflash_config) : \
+ spi_bdev_ioctl(&spi_bdev, (op), (arg)) \
+)
+#define MICROPY_HW_BDEV_READBLOCKS(dest, bl, n) spi_bdev_readblocks(&spi_bdev, (dest), (bl), (n))
+#define MICROPY_HW_BDEV_WRITEBLOCKS(src, bl, n) spi_bdev_writeblocks(&spi_bdev, (src), (bl), (n))
+#define MICROPY_HW_BDEV_SPIFLASH_EXTENDED (&spi_bdev) // for extended block protocol
+
+#endif // !MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE
+
+// STM32 HSE config
+// The module has a 12 MHz crystal for the HSE oscillator.
+#define MICROPY_HW_CLK_PLLM (12)
+#define MICROPY_HW_CLK_PLLN (336)
+#define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2)
+#define MICROPY_HW_CLK_PLLQ (7)
+#define MICROPY_HW_CLK_LAST_FREQ (1)
+
+// STM32 LSE config
+// The module has a 32.768 kHz crystal for the LSE (RTC).
+#define MICROPY_HW_RTC_USE_LSE (1)
+#define MICROPY_HW_RTC_USE_US (0)
+#define MICROPY_HW_RTC_USE_CALOUT (1)
+
+// UART1 config (MicroMod UART1)
+#define MICROPY_HW_UART1_NAME "UART1"
+#define MICROPY_HW_UART1_TX (pin_A2)
+#define MICROPY_HW_UART1_RX (pin_A3)
+
+// CAN1 config (MicroMod CAN)
+#define MICROPY_HW_CAN1_NAME "CAN"
+#define MICROPY_HW_CAN1_TX (pin_B9)
+#define MICROPY_HW_CAN1_RX (pin_B8)
+
+// I2C1 config (MicroMod I2C)
+#define MICROPY_HW_I2C1_NAME "I2C"
+#define MICROPY_HW_I2C1_SCL (pin_B10)
+#define MICROPY_HW_I2C1_SDA (pin_B11)
+
+// I2C2 config (MicroMod I2C1)
+#define MICROPY_HW_I2C2_NAME "I2C1"
+#define MICROPY_HW_I2C2_SCL (pin_B6)
+#define MICROPY_HW_I2C2_SDA (pin_B7)
+
+// SPI1 config (MicroMod SPI)
+#define MICROPY_HW_SPI1_NAME "SPI"
+#define MICROPY_HW_SPI1_NSS (pin_C4)
+#define MICROPY_HW_SPI1_SCK (pin_A5)
+#define MICROPY_HW_SPI1_MISO (pin_A6)
+#define MICROPY_HW_SPI1_MOSI (pin_A7)
+
+// LED1 config
+// The module has a single blue status LED.
+#define MICROPY_HW_LED1 (pin_A15)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
+
+// USB device config
+#define MICROPY_HW_USB_FS (1)
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.mk b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.mk
new file mode 100644
index 000000000..cb78a7846
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/mpconfigboard.mk
@@ -0,0 +1,16 @@
+MCU_SERIES = f4
+CMSIS_MCU = STM32F405xx
+AF_FILE = boards/stm32f405_af.csv
+ifeq ($(USE_MBOOT),1)
+# When using Mboot all the text goes together after the filesystem
+LD_FILES = boards/stm32f405.ld boards/common_blifs.ld
+TEXT0_ADDR = 0x08020000
+else
+# When not using Mboot the ISR text goes first, then the rest after the filesystem
+LD_FILES = boards/stm32f405.ld boards/common_ifs.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
+endif
+
+# MicroPython settings
+MICROPY_VFS_LFS2 = 1
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/pins.csv b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/pins.csv
new file mode 100644
index 000000000..5e77de300
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/pins.csv
@@ -0,0 +1,57 @@
+G2,PA0
+BUS2,PA0
+BATT_SENSE,PA1
+UART_TX1,PA2
+UART_RX1,PA3
+AUD_LRCLK,PA4
+SPI_SCK,PA5
+SPI_MISO,PA6
+SPI_CIPO,PA6
+SPI_MOSI,PA7
+SPI_COPI,PA7
+G1,PA8
+BUS1,PA8
+USB_DN,PA11
+USB_DP,PA12
+SWDIO,PA13
+SWDCK,PA14
+STATUS_LED,PA15
+A1,PB0
+I2C_INT,PB1
+AUD_BCLK,PB3
+AUD_OUT,PB4
+AUD_IN,PB5
+I2C_SCL1,PB6
+I2C_SDA1,PB7
+CAN_RX,PB8
+CAN_TX,PB9
+I2C_SCL,PB10
+I2C_SDA,PB11
+USB_HOST_ID,PB12
+G11,PB12
+USB_HOST_VBUS,PB13
+G10,PB13
+USB_HOST_DN,PB14
+USB_HOST_DP,PB15
+D0,PC0
+D1,PC1
+G6,PC2
+BUS6,PC2
+SPI_FLASH_CS,PC3
+SPI_CS,PC4
+A0,PC5
+PWM0,PC6
+PWM1,PC7
+G3,PC8
+BUS3,PC8
+G4,PC9
+BUS4,PC9
+SPI_FLASH_SCK,PC10
+SPI_FLASH_MISO,PC11
+SPI_FLASH_MOSI,PC12
+G5,PC13
+BUS5,PC13
+OSC32_IN,PC14
+OSC32_OUT,PC15
+G0,PD2
+BUS0,PD2
diff --git a/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/stm32f4xx_hal_conf.h b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/stm32f4xx_hal_conf.h
new file mode 100644
index 000000000..9719157e5
--- /dev/null
+++ b/ports/stm32/boards/SPARKFUN_MICROMOD_STM32/stm32f4xx_hal_conf.h
@@ -0,0 +1,19 @@
+/* This file is part of the MicroPython project, http://micropython.org/
+ * The MIT License (MIT)
+ * Copyright (c) 2019 Damien P. George
+ */
+#ifndef MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H
+#define MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H
+
+#include "boards/stm32f4xx_hal_conf_base.h"
+
+// Oscillator values in Hz
+#define HSE_VALUE (12000000)
+#define LSE_VALUE (32768)
+#define EXTERNAL_CLOCK_VALUE (12288000)
+
+// Oscillator timeouts in ms
+#define HSE_STARTUP_TIMEOUT (100)
+#define LSE_STARTUP_TIMEOUT (5000)
+
+#endif // MICROPY_INCLUDED_STM32F4XX_HAL_CONF_H