board: arm: Add support for WeAct Mini STM31H7B0

This board is mostly the same as mini_stm32h743.

Noatable diffrences for dt:
- rcc config
- octospi in quadspi mode
- pinmux naming for USB and quadspi

Signed-off-by: Sahaj Sarup <sahaj.sarup@linaro.org>
This commit is contained in:
Sahaj Sarup 2024-10-25 03:15:27 +05:30 committed by Benjamin Cabé
parent f254280f1f
commit 18a3f6f0fa
9 changed files with 553 additions and 0 deletions

View file

@ -0,0 +1,35 @@
# Copyright (c) 2024 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
# WeAct Studio MiniSTM32H7B0 board configuration
if BOARD_MINI_STM32H7B0
if DISPLAY
config INPUT
default y
if LVGL
configdefault LV_COLOR_16_SWAP
default y
config LV_Z_BITS_PER_PIXEL
default 16
endif # LVGL
endif # DISPLAY
if USB_DEVICE_STACK
config UART_CONSOLE
default CONSOLE
config USB_DEVICE_INITIALIZE_AT_BOOT
default y
endif # USB_DEVICE_STACK
endif # BOARD_MINI_STM32H7B0

View file

@ -0,0 +1,5 @@
# Copyright (c) 2024 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
config BOARD_MINI_STM32H7B0
select SOC_STM32H7B0XX

View file

@ -0,0 +1,8 @@
# Copyright (c) 2024 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
board_runner_args(jlink "--device=STM32H7B0VB" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

View file

@ -0,0 +1,6 @@
board:
name: mini_stm32h7b0
full_name: MiniSTM32H7B0 Core Board
vendor: weact
socs:
- name: stm32h7b0xx

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,234 @@
.. zephyr:board:: mini_stm32h7b0
Overview
********
The MiniSTM32H7B0 Core board is a compact development board equipped with
an STM32H7B0VBT6 microcontroller. It features a variety of peripherals,
including a user LED and button, a display, and external SPI and QuadSPI
NOR flash memory.
Key Features
- STM32 microcontroller in LQFP100 package
- USB OTG or full-speed device
- 1 user LED
- User, boot, and reset push-buttons
- 32.768 kHz and 25MHz HSE crystal oscillators
- External NOR Flash memories: 64-Mbit Quad-SPI and 64-Mbit SPI
- Board connectors:
- Camera (8 bit) connector
- ST7735 TFT-LCD 160 x 80 pixels (RGB565 3-SPI)
- microSD |trade| card
- USB Type-C Connector
- SWD header for external debugger
- 2x 40-pin GPIO connector
More information about the board can be found on the `Mini_STM32H7B0 website`_.
Hardware
********
The MiniSTM32H7B0 Core board provides the following hardware components:
- STM32H7B0VBT6 in LQFP100 package
- ARM 32-bit Cortex-M7 CPU with FPU
- Chrom-ART Accelerator
- Hardware JPEG Codec
- 280 MHz max CPU frequency
- VDD from 1.62 V to 3.6 V
- 128 KB Flash
- 1.4 MB SRAM
- High-resolution timer (2.1 ns)
- 32-bit timers(2)
- 16-bit timers(10)
- SPI(5)
- I2C(4)
- I2S (4)
- USART(5)
- UART(5)
- USB OTG Full Speed and High Speed(1)
- CAN FD(2)
- SAI(4)
- SPDIF_Rx(4)
- HDMI_CEC(1)
- Dual Mode Quad SPI(1)
- Camera Interface
- GPIO (up to 80) with external interrupt capability
- 16-bit ADC(2) with 16 channels
- 12-bit DAC with 2 channels(2)
- True Random Number Generator (RNG)
- 16-channel DMA
- LCD-TFT Controller with XGA resolution
More information about STM32H7BO can be found here:
- `STM32H7B0VB on www.st.com`_
- `STM32H7B0VB reference manual`_
- `STM32H7B0VB datasheet`_
Supported Features
==================
The ``mini_stm32h7b0`` board target supports the following hardware features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| WDT | on-chip | watchdog |
+-----------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+-----------+------------+-------------------------------------+
| FLASH | on-chip | flash memory |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
+-----------+------------+-------------------------------------+
| QSPI NOR | on-chip | off-chip flash |
+-----------+------------+-------------------------------------+
| SDMMC | on-chip | disk access |
+-----------+------------+-------------------------------------+
| DISPLAY | on-chip | display |
+-----------+------------+-------------------------------------+
Other hardware features have not been enabled yet for this board.
The default configuration per core can be found in the defconfig file:
:zephyr_file:`boards/weact/mini_stm32h7b0/mini_stm32h7b0_defconfig`
Pin Mapping
===========
MiniSTM32H7B0 Core board has 5 GPIO controllers. These controllers are responsible for pin muxing,
input/output, pull-up, etc.
For more details please refer to `Mini_STM32H7B0 website`_.
Default Zephyr Peripheral Mapping:
----------------------------------
The MiniSTM32H7B0 Core board is configured as follows
- USER_LED : PE3
- USER_PB : PC13
- SPI1 SCK/MISO/MOSI/NSS : PB3/PB4/PD7/PD6 (NOR Flash memory)
- SPI4 SCK/MOSI/NSS : PE12/PE14/PE11 (LCD)
- QuadSPI CLK/NCS/IO0/IO1/IO2/IO3 : PB2/PB6/PD11/PD12/PE2/PD13 (NOR Flash memory)
- SDMMC1 CLK/DCMD/CD/D0/D1/D2/D3 : PC12/PD2/PD4/PC8/PC9/PC10/PC11 (microSD card)
- USB DM/DP : PA11/PA12 (USB CDC ACM)
System Clock
============
The STM32H7B0VB System Clock can be driven by an internal or external oscillator,
as well as by the main PLL clock. By default, the System clock is driven
by the PLL clock at 280MHz. PLL clock is fed by a 25MHz high speed external clock.
Serial Port (USB CDC ACM)
=========================
The Zephyr console output is assigned to the USB CDC ACM virtual serial port.
Virtual COM port interface. Default communication settings are 115200 8N1.
Programming and Debugging
*************************
The MiniSTM32H7B0 Core board facilitates firmware flashing via the USB DFU
bootloader. This method simplifies the process of updating images, although
it doesn't provide debugging capabilities. However, the board provides header
pins for the Serial Wire Debug (SWD) interface, which can be used to connect
an external debugger, such as ST-Link.
Flashing
========
To activate the bootloader, follow these steps:
1. Press and hold the BOOT0 key.
2. While still holding the BOOT0 key, press and release the RESET key.
3. Wait for 0.5 seconds, then release the BOOT0 key.
Upon successful execution of these steps, the device will transition into
bootloader mode and present itself as a USB DFU Mode device. You can program
the device using the west tool or the STM32CubeProgrammer.
Flashing an application to MiniSTM32H7B0
----------------------------------------
Here is an example for the :zephyr:code-sample:`hello_world` application.
First, put the board in bootloader mode as described above. Then build and flash
the application in the usual way. Just add ``CONFIG_BOOT_DELAY=5000`` to the
configuration, so that USB CDC ACM is initialized before any text is printed,
as below:
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: mini_stm32h7b0
:goals: build flash
:gen-args: -DCONFIG_BOOT_DELAY=5000
Run a serial host program to connect with your board:
.. code-block:: console
$ minicom -D <tty_device> -b 115200
Then, press the RESET button, you should see the following message after few seconds:
.. code-block:: console
Hello World! mini_stm32h7b0
Replace :code:`<tty_device>` with the port where the board XIAO BLE
can be found. For example, under Linux, :code:`/dev/ttyACM0`.
Debugging
---------
This current Zephyr port does not support debugging.
Testing the LEDs in the MiniSTM32H7B0
*************************************
There is a sample that allows to test that LED on the board are working
properly with Zephyr:
.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: mini_stm32h7b0
:goals: build flash
:gen-args: -DCONFIG_BOOT_DELAY=5000
You can build and flash the examples to make sure Zephyr is running correctly on
your board. The LED definitions can be found in
:zephyr_file:`boards/weact/mini_stm32h7b0/mini_stm32h7b0.dts`.
Testing shell over USB in the MiniSTM32H7B0
*******************************************
There is a sample that allows to test shell interface over USB CDC ACM interface
with Zephyr:
.. zephyr-app-commands::
:zephyr-app: samples/subsys/shell/shell_module
:board: mini_stm32h7b0
:goals: build flash
:gen-args: -DCONFIG_BOOT_DELAY=5000
.. _Mini_STM32H7B0 website:
https://github.com/WeActStudio/WeActStudio.MiniSTM32H7B0
.. _STM32H7B0VB on www.st.com:
https://www.st.com/en/microcontrollers-microprocessors/stm32h7b0vb.html
.. _STM32H7B0VB reference manual:
https://www.st.com/resource/en/reference_manual/rm0455-stm32h7a37b3-and-stm32h7b0-value-line-advanced-armbased-32bit-mcus-stmicroelectronics.pdf
.. _STM32H7B0VB datasheet:
https://www.st.com/resource/en/datasheet/stm32h7b0vb.pdf

View file

@ -0,0 +1,223 @@
/*
* Copyright (c) 2024 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/h7/stm32h7b0Xb.dtsi>
#include <st/h7/stm32h7b0vbtx-pinctrl.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>
#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>
/ {
model = "WeAct Studio MiniSTM32H7B0 Core Board";
compatible = "weact,mini-stm32h7b0";
chosen {
zephyr,console = &usb_cdc_acm_uart;
zephyr,shell-uart = &usb_cdc_acm_uart;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,display = &st7735r_160x80;
};
leds {
compatible = "gpio-leds";
user_led: led {
gpios = <&gpioe 3 GPIO_ACTIVE_HIGH>;
label = "User LED";
};
};
gpio_keys {
compatible = "gpio-keys";
user_button: button {
label = "User PB";
gpios = <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
zephyr,code = <INPUT_KEY_0>;
};
};
mipi_dbi_st7735r_160x80 {
compatible = "zephyr,mipi-dbi-spi";
spi-dev = <&spi4>;
dc-gpios = <&gpioe 13 GPIO_ACTIVE_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
st7735r_160x80: st7735r@0 {
compatible = "sitronix,st7735r";
mipi-max-frequency = <20000000>;
mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE";
reg = <0>;
width = <160>;
height = <80>;
inversion-on;
rgb-is-inverted;
x-offset = <1>;
y-offset = <26>;
pwctr1 = [A2 02 84];
pwctr2 = [C5];
pwctr3 = [0A 00];
pwctr4 = [8A 2A];
pwctr5 = [8A EE];
invctr = <7>;
frmctr1 = [01 2C 2D];
frmctr2 = [01 2C 2D];
frmctr3 = [01 2C 2D 01 2C 2D];
vmctr1 = <14>;
gamctrp1 = [02 1C 07 12 37 32 29 2D 29 25 2B 39 00 01 03 10];
gamctrn1 = [03 1D 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10];
colmod = <5>;
/* Set D3 (RGB) bit to 1. LV_COLOR_16_SWAP is enabled by default */
madctl = <120>; /* Set to <184> to rotate the image 180 degrees. */
caset = [00 01 00 a0];
raset = [00 1a 00 69];
};
};
aliases {
led0 = &user_led;
sw0 = &user_button;
watchdog0 = &iwdg;
sdhc0 = &sdmmc1;
};
};
&clk_lsi {
status = "okay";
};
&clk_hsi48 {
status = "okay";
};
&clk_hse {
clock-frequency = <DT_FREQ_M(25)>;
status = "okay";
};
&pll {
div-m = <5>;
mul-n = <112>;
div-p = <2>;
div-q = <2>;
div-r = <2>;
clocks = <&clk_hse>;
status = "okay";
};
&rcc {
clocks = <&pll>;
clock-frequency = <DT_FREQ_M(280)>;
d1cpre = <1>;
hpre = <2>;
d1ppre = <1>;
d2ppre1 = <1>;
d2ppre2 = <1>;
d3ppre = <1>;
};
&sdmmc1 {
pinctrl-0 = <&sdmmc1_d0_pc8 &sdmmc1_d1_pc9
&sdmmc1_d2_pc10 &sdmmc1_d3_pc11
&sdmmc1_ck_pc12 &sdmmc1_cmd_pd2>;
pinctrl-names = "default";
cd-gpios = <&gpiod 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
status = "okay";
};
zephyr_udc0: &usbotg_hs {
pinctrl-0 = <&usb_otg_hs_dm_pa11 &usb_otg_hs_dp_pa12>;
pinctrl-names = "default";
status = "okay";
usb_cdc_acm_uart: cdc_acm_uart {
compatible = "zephyr,cdc-acm-uart";
};
};
&octospi1 {
pinctrl-names = "default";
pinctrl-0 = <&octospim_p1_clk_pb2 &octospim_p1_ncs_pb6
&octospim_p1_io0_pd11 &octospim_p1_io1_pd12
&octospim_p1_io2_pe2 &octospim_p1_io3_pd13>;
status = "okay";
w25q64_qspi: ospi-nor-flash@90000000 {
compatible = "st,stm32-ospi-nor";
reg = <0x90000000 DT_SIZE_M(64)>; /* 64 Mbits */
ospi-max-frequency = <40000000>;
status = "okay";
spi-bus-width = <4>;
data-rate = <OSPI_STR_TRANSFER>;
writeoc = "PP_1_1_4";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
slot0_partition: partition@0 {
reg = <0x00000000 DT_SIZE_M(64)>;
};
};
};
};
&spi1 {
pinctrl-0 = <&spi1_sck_pb3 &spi1_miso_pb4 &spi1_mosi_pd7>;
cs-gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
status = "okay";
w25q64_spi: spi-nor-flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <40000000>;
size = <DT_SIZE_M(64)>; /* 64 Mbits */
status = "okay";
jedec-id = [ef 40 17];
has-dpd;
t-enter-dpd = <3500>;
t-exit-dpd = <3500>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
storage_partition: partition@0 {
label = "storage";
reg = <0x00000000 DT_SIZE_M(64)>;
};
};
};
};
&gpioe {
status = "okay";
lcd_led {
gpio-hog;
gpios = <10 GPIO_ACTIVE_LOW>;
output-high;
};
};
&spi4 {
pinctrl-0 = <&spi4_sck_pe12 &spi4_mosi_pe14>;
cs-gpios = <&gpioe 11 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
status = "okay";
};
&rng {
status = "okay";
};
&backup_sram {
status = "okay";
};
&iwdg1 {
status = "okay";
};

View file

@ -0,0 +1,19 @@
identifier: mini_stm32h7b0
name: WeAct Studio MiniSTM32H7B0 Core Board
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 512
flash: 2048
supported:
- gpio
- counter
- spi
- backup_sram
- watchdog
- qspi
- video
vendor: weact

View file

@ -0,0 +1,23 @@
# Copyright (c) 2024 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
# Enable MPU
CONFIG_ARM_MPU=y
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y
# Enable UART driver
CONFIG_SERIAL=y
# Enable console
CONFIG_CONSOLE=y
# Enable GPIO
CONFIG_GPIO=y
# Logger cannot use itself to log
CONFIG_USB_CDC_ACM_LOG_LEVEL_OFF=y
# Enable USB
CONFIG_USB_DEVICE_STACK=y