From 0cd3f56f0d1acee632cdae0c5fcb2b6d19e80e8a Mon Sep 17 00:00:00 2001 From: John Sanpe Date: Thu, 4 Apr 2024 14:05:44 +0800 Subject: [PATCH] board: add support for VCC-GND STM32H750VB YD-STM23H750VB board has 128 Kbytes of flash memory, 1 Mbytes of SRAM and 16 Mbytes onboard SPI norflash. Signed-off-by: John Sanpe --- .../vcc-gnd/yd_stm32h750vb/Kconfig.defconfig | 11 ++ .../yd_stm32h750vb/Kconfig.yd_stm32h750vb | 7 + boards/vcc-gnd/yd_stm32h750vb/board.cmake | 11 ++ boards/vcc-gnd/yd_stm32h750vb/board.yml | 5 + .../yd_stm32h750vb/doc/img/yd_stm32h750vb.png | Bin 0 -> 56848 bytes boards/vcc-gnd/yd_stm32h750vb/doc/index.rst | 133 +++++++++++++++++ .../yd_stm32h750vb/support/openocd.cfg | 30 ++++ .../vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.dts | 134 ++++++++++++++++++ .../yd_stm32h750vb/yd_stm32h750vb.yaml | 15 ++ .../yd_stm32h750vb/yd_stm32h750vb_defconfig | 26 ++++ 10 files changed, 372 insertions(+) create mode 100644 boards/vcc-gnd/yd_stm32h750vb/Kconfig.defconfig create mode 100644 boards/vcc-gnd/yd_stm32h750vb/Kconfig.yd_stm32h750vb create mode 100644 boards/vcc-gnd/yd_stm32h750vb/board.cmake create mode 100644 boards/vcc-gnd/yd_stm32h750vb/board.yml create mode 100644 boards/vcc-gnd/yd_stm32h750vb/doc/img/yd_stm32h750vb.png create mode 100644 boards/vcc-gnd/yd_stm32h750vb/doc/index.rst create mode 100644 boards/vcc-gnd/yd_stm32h750vb/support/openocd.cfg create mode 100644 boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.dts create mode 100644 boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.yaml create mode 100644 boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb_defconfig diff --git a/boards/vcc-gnd/yd_stm32h750vb/Kconfig.defconfig b/boards/vcc-gnd/yd_stm32h750vb/Kconfig.defconfig new file mode 100644 index 00000000000..8e5ecbe7ff2 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/Kconfig.defconfig @@ -0,0 +1,11 @@ +# YD-STM32H750VB board configuration + +# Copyright(c) 2024 John Sanpe +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_YD_STM32H750VB + +config DISK_DRIVER_SDMMC + default y if DISK_DRIVERS + +endif # BOARD_YD_STM32H750VB diff --git a/boards/vcc-gnd/yd_stm32h750vb/Kconfig.yd_stm32h750vb b/boards/vcc-gnd/yd_stm32h750vb/Kconfig.yd_stm32h750vb new file mode 100644 index 00000000000..14b5ebe4648 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/Kconfig.yd_stm32h750vb @@ -0,0 +1,7 @@ +# YD-STM32H750VB board configuration + +# Copyright(c) 2024 John Sanpe +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_YD_STM32H750VB + select SOC_STM32H750XX diff --git a/boards/vcc-gnd/yd_stm32h750vb/board.cmake b/boards/vcc-gnd/yd_stm32h750vb/board.cmake new file mode 100644 index 00000000000..2cf1e034d59 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/board.cmake @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32H735IG" "--speed=4000") +board_runner_args(openocd --target-handle=_CHIPNAME.cpu0) +board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw") + +include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake) +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/vcc-gnd/yd_stm32h750vb/board.yml b/boards/vcc-gnd/yd_stm32h750vb/board.yml new file mode 100644 index 00000000000..f26fffaa901 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/board.yml @@ -0,0 +1,5 @@ +board: + name: yd_stm32h750vb + vendor: vcc-gnd + socs: + - name: stm32h750xx diff --git a/boards/vcc-gnd/yd_stm32h750vb/doc/img/yd_stm32h750vb.png b/boards/vcc-gnd/yd_stm32h750vb/doc/img/yd_stm32h750vb.png new file mode 100644 index 0000000000000000000000000000000000000000..814f26a1099e3dd826afe2acd5bbaa7f5da426d5 GIT binary patch literal 56848 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 literal 0 HcmV?d00001 diff --git a/boards/vcc-gnd/yd_stm32h750vb/doc/index.rst b/boards/vcc-gnd/yd_stm32h750vb/doc/index.rst new file mode 100644 index 00000000000..5a5775cae1f --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/doc/index.rst @@ -0,0 +1,133 @@ +.. _yd_stm32h750vb: + +YD-STM32H750VB +############## + +Overview +******** + +The YD-STM32H750VB development board is a complete demonstration and development +platform for Arm |reg| Cortex |reg|-M7 core-based STM32H750VBT6 microcontroller, with +128Kbytes of Flash memory and 1 Mbytes of SRAM. + +.. image:: img/yd_stm32h750vb.png + :align: center + :alt: YD-STM32H750VB + +More information about STM32H750 can be found here: + +- `STM32H750 on www.st.com`_ +- `STM32H750xx reference manual`_ +- `STM32H750xx datasheet`_ + +Supported Features +================== + +The current Zephyr YD-STM32H750VB board supports the following features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| CLOCK | on-chip | reset and clock control | ++-----------+------------+-------------------------------------+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| UART | on-chip | serial port-polling; | +| | | serial port-interrupt | ++-----------+------------+-------------------------------------+ +| PINMUX | on-chip | pinmux | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ + +Other hardware features are not yet supported on Zephyr porting. + +The default configuration can be found in the defconfig file: +:zephyr_file:`boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb_defconfig` + +Pin Mapping +=========== + +Default Zephyr Peripheral Mapping: +---------------------------------- + +- UART_1_TX : PA9 +- UART_1_RX : PA10 +- LED_1 : PA13 (SWDIO) +- LED_2 : PA14 (SWCLK) +- LED_3 : PA15 +- LED_4 : PB4 +- KEY : PB3 + +System Clock +============ + +The STM32H750VB 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 480MHz. PLL clock is feed by a 25MHz high speed external clock. + +Flashing +======== + +There are 2 main entry points for flashing STM32H750VB SoCs, one using the ROM +bootloader, and another by using the SWD debug port (which requires additional +hardware such as ST-Link). Flashing using the ROM bootloader requires a special activation +pattern, which can be triggered by using the BOOT0 button. + +Installing dfu-util +------------------- + +It is recommended to use at least v0.8 of `dfu-util`_. The package available in +debian/ubuntu can be quite old, so you might have to build dfu-util from source. + +There is also a Windows version which works, but you may have to install the +right USB drivers with a tool like `Zadig`_. + +Flashing an application to YD-STM32H750VB +----------------------------------------- + +Connect a USB-C cable and the board should power ON. Force the board into DFU mode +by keeping the BOOT0 switch pressed while pressing and releasing the RST switch. + +The dfu-util runner is supported on this board and so a sample can be built and +tested easily. + +Here is an example for the :zephyr:code-sample:`blinky` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: yd_stm32h750vb + :goals: build flash + +You will see the LED blinking every second. + +Debugging +========= + +You can debug an application in the usual way. Here is an example for the +:ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: yd_stm32h750vb + :goals: debug + +References +********** + +.. target-notes:: + +.. _Zadig: + https://zadig.akeo.ie/ + +.. _dfu-util: + http://dfu-util.sourceforge.net/build.html + +.. _STM32H750 on www.st.com: + https://www.st.com/en/microcontrollers-microprocessors/stm32h750-value-line.html + +.. _STM32H750xx reference manual: + https://www.st.com/resource/en/reference_manual/rm0433-stm32h742-stm32h743753-and-stm32h750-value-line-advanced-armbased-32bit-mcus-stmicroelectronics.pdf + +.. _STM32H750xx datasheet: + https://www.st.com/resource/en/datasheet/stm32h750vb.pdf diff --git a/boards/vcc-gnd/yd_stm32h750vb/support/openocd.cfg b/boards/vcc-gnd/yd_stm32h750vb/support/openocd.cfg new file mode 100644 index 00000000000..f7674378361 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/support/openocd.cfg @@ -0,0 +1,30 @@ +source [find interface/stlink-dap.cfg] +transport select dapdirect_swd + +set WORKAREASIZE 0x2000 +set CHIPNAME STM23H750VB +set BOARDNAME YD_STM23H750VB + +source [find target/stm32h7x.cfg] + +# Use connect_assert_srst here to be able to program +# even when core is in sleep mode +reset_config srst_only srst_nogate connect_assert_srst + +$_CHIPNAME.cpu0 configure -event gdb-attach { + echo "Debugger attaching: halting execution" + gdb_breakpoint_override hard +} + +$_CHIPNAME.cpu0 configure -event gdb-detach { + echo "Debugger detaching: resuming execution" + resume +} + +# Due to the use of connect_assert_srst, running gdb requires +# to reset halt just after openocd init. +rename init old_init +proc init {} { + old_init + reset halt +} diff --git a/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.dts b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.dts new file mode 100644 index 00000000000..926f1f56454 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.dts @@ -0,0 +1,134 @@ +/* + * Copyright(c) 2024 John Sanpe + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include + +/ { + model = "VCC-GND Studio STM32H750VB"; + compatible = "st,stm32h750vb"; + + aliases { + led0 = &yellow_led; + led1 = &blue_led; + sw0 = &user_button; + spi-flash0 = &w25q128jv; + }; + + chosen { + zephyr,console = &usart1; + zephyr,shell-uart = &usart1; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,flash-controller = &w25q128jv; + }; + + leds { + compatible = "gpio-leds"; + red_led: led_1 { + gpios = <&gpioa 13 GPIO_ACTIVE_HIGH>; + label = "LED1"; + status = "disabled"; + }; + green_led: led_2 { + gpios = <&gpioa 14 GPIO_ACTIVE_HIGH>; + label = "LED2"; + status = "disabled"; + }; + yellow_led: led_3 { + gpios = <&gpioa 15 GPIO_ACTIVE_HIGH>; + label = "LED3"; + }; + blue_led: led_4 { + gpios = <&gpiob 4 GPIO_ACTIVE_HIGH>; + label = "LED4"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button: button { + gpios = <&gpiob 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + zephyr,code = ; + label = "USR"; + }; + }; +}; + +&clk_hse { + clock-frequency = ; + status = "okay"; +}; + +&clk_lse { + status = "okay"; +}; + +&pll { + div-m = <5>; + mul-n = <192>; + div-p = <2>; + div-q = <4>; + div-r = <4>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + d1cpre = <1>; + hpre = <2>; + d1ppre = <2>; + d2ppre1 = <2>; + d2ppre2 = <2>; + d3ppre = <2>; +}; + +&usart1 { + pinctrl-names = "default"; + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + current-speed = <115200>; + status = "okay"; +}; + +&sdmmc1 { + pinctrl-names = "default"; + pinctrl-0 = <&sdmmc1_d0_pc8 &sdmmc1_d1_pc9 + &sdmmc1_d2_pc10 &sdmmc1_d3_pc11 + &sdmmc1_ck_pc12 &sdmmc1_cmd_pd2>; + cd-gpios = <&gpioa 8 GPIO_ACTIVE_LOW>; + status = "okay"; +}; + +&quadspi { + pinctrl-names = "default"; + pinctrl-0 = <&quadspi_clk_pb2 &quadspi_bk1_ncs_pb10 + &quadspi_bk1_io0_pd11 &quadspi_bk1_io1_pd12 + &quadspi_bk1_io2_pe2 &quadspi_bk1_io3_pd13>; + status = "okay"; + + w25q128jv: qspi-nor-flash@90000000 { + compatible = "st,stm32-qspi-nor"; + reg = <0x90000000 DT_SIZE_M(16)>; + qspi-max-frequency = <80000000>; + spi-bus-width = <4>; + status = "okay"; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + storage_partition: partition@0 { + label = "storage"; + reg = <0x0 DT_SIZE_M(16)>; + }; + }; + }; +}; diff --git a/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.yaml b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.yaml new file mode 100644 index 00000000000..0ce537a1bd4 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb.yaml @@ -0,0 +1,15 @@ +identifier: yd_stm32h750vb +name: YD-STM32H750VB +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 1024 +flash: 128 +supported: + - gpio + - uart + - qspi +vendor: vcc-gnd diff --git a/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb_defconfig b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb_defconfig new file mode 100644 index 00000000000..40e6adc0583 --- /dev/null +++ b/boards/vcc-gnd/yd_stm32h750vb/yd_stm32h750vb_defconfig @@ -0,0 +1,26 @@ +# Copyright(c) 2024 John Sanpe +# SPDX-License-Identifier: Apache-2.0 + +# Enable the internal SMPS regulator +CONFIG_POWER_SUPPLY_LDO=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_SERIAL=y + +# console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# enable GPIO +CONFIG_GPIO=y + +# Enable Clocks +CONFIG_CLOCK_CONTROL=y + +# enable pin controller +CONFIG_PINCTRL=y