From 88954c3fd989129760bbda688485513fff78902e Mon Sep 17 00:00:00 2001 From: Mike Banducci Date: Mon, 1 Jul 2024 11:28:14 -0500 Subject: [PATCH] boards: stm32: Add nucleo_h755zi_q support Add support for the ST nucleo h755zi_q board which uses an stm32h755 in the st nucleo-144 board format. Signed-off-by: Mike Banducci --- boards/st/nucleo_h755zi_q/Kconfig.defconfig | 15 + .../nucleo_h755zi_q/Kconfig.nucleo_h755zi_q | 8 + .../nucleo_h755zi_q/arduino_r3_connector.dtsi | 40 +++ boards/st/nucleo_h755zi_q/board.cmake | 13 + boards/st/nucleo_h755zi_q/board.yml | 5 + .../doc/img/nucleo_h755zi_q.webp | Bin 0 -> 59668 bytes boards/st/nucleo_h755zi_q/doc/index.rst | 295 ++++++++++++++++++ .../st/nucleo_h755zi_q/nucleo_h755zi_q.dtsi | 49 +++ .../nucleo_h755zi_q_stm32h755xx_m4.dts | 37 +++ .../nucleo_h755zi_q_stm32h755xx_m4.yaml | 18 ++ .../nucleo_h755zi_q_stm32h755xx_m4_defconfig | 20 ++ .../nucleo_h755zi_q_stm32h755xx_m7.dts | 139 +++++++++ .../nucleo_h755zi_q_stm32h755xx_m7.yaml | 20 ++ .../nucleo_h755zi_q_stm32h755xx_m7_defconfig | 27 ++ boards/st/nucleo_h755zi_q/support/openocd.cfg | 30 ++ .../fs_mgmt_hash_supported/testcase.yaml | 1 + 16 files changed, 717 insertions(+) create mode 100644 boards/st/nucleo_h755zi_q/Kconfig.defconfig create mode 100644 boards/st/nucleo_h755zi_q/Kconfig.nucleo_h755zi_q create mode 100644 boards/st/nucleo_h755zi_q/arduino_r3_connector.dtsi create mode 100644 boards/st/nucleo_h755zi_q/board.cmake create mode 100644 boards/st/nucleo_h755zi_q/board.yml create mode 100644 boards/st/nucleo_h755zi_q/doc/img/nucleo_h755zi_q.webp create mode 100644 boards/st/nucleo_h755zi_q/doc/index.rst create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q.dtsi create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.dts create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.yaml create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4_defconfig create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.dts create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.yaml create mode 100644 boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7_defconfig create mode 100644 boards/st/nucleo_h755zi_q/support/openocd.cfg diff --git a/boards/st/nucleo_h755zi_q/Kconfig.defconfig b/boards/st/nucleo_h755zi_q/Kconfig.defconfig new file mode 100644 index 00000000000..2b0f2cac9a0 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/Kconfig.defconfig @@ -0,0 +1,15 @@ +# STM32H755ZI Nucleo board configuration + +# Copyright (c) 2024 S&C Electric Company +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NUCLEO_H755ZI_Q + +if NETWORKING + +config NET_L2_ETHERNET + default y + +endif # NETWORKING + +endif # BOARD_NUCLEO_H755ZI_Q diff --git a/boards/st/nucleo_h755zi_q/Kconfig.nucleo_h755zi_q b/boards/st/nucleo_h755zi_q/Kconfig.nucleo_h755zi_q new file mode 100644 index 00000000000..57d7263c6e1 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/Kconfig.nucleo_h755zi_q @@ -0,0 +1,8 @@ +# STM32H755ZI Nucleo board configuration + +# Copyright (c) 2024 S&C Electric Company +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_NUCLEO_H755ZI_Q + select SOC_STM32H755XX_M7 if BOARD_NUCLEO_H755ZI_Q_STM32H755XX_M7 + select SOC_STM32H755XX_M4 if BOARD_NUCLEO_H755ZI_Q_STM32H755XX_M4 diff --git a/boards/st/nucleo_h755zi_q/arduino_r3_connector.dtsi b/boards/st/nucleo_h755zi_q/arduino_r3_connector.dtsi new file mode 100644 index 00000000000..aaa4cec0583 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/arduino_r3_connector.dtsi @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 S&C Electric Company + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpioa 3 0>, /* A0 */ + <1 0 &gpioc 0 0>, /* A1 */ + <2 0 &gpioc 3 0>, /* A2 */ + <3 0 &gpiob 1 0>, /* A3 */ + <4 0 &gpioc 2 0>, /* A4 */ + <5 0 &gpiof 11 0>, /* A5 */ + <6 0 &gpiob 7 0>, /* D0 */ + <7 0 &gpiob 6 0>, /* D1 */ + <8 0 &gpiog 14 0>, /* D2 */ + <9 0 &gpioe 13 0>, /* D3 */ + <10 0 &gpioe 14 0>, /* D4 */ + <11 0 &gpioe 11 0>, /* D5 */ + <12 0 &gpioa 8 0>, /* D6 */ + <13 0 &gpiog 12 0>, /* D7 */ + <14 0 &gpiog 9 0>, /* D8 */ + <15 0 &gpiod 15 0>, /* D9 */ + <16 0 &gpiod 14 0>, /* D10 */ + <17 0 &gpiob 5 0>, /* D11 */ + <18 0 &gpioa 6 0>, /* D12 */ + <19 0 &gpioa 5 0>, /* D13 */ + <20 0 &gpiob 9 0>, /* D14 */ + <21 0 &gpiob 8 0>; /* D15 */ + }; +}; + +arduino_i2c: &i2c1 {}; + +arduino_serial: &uart8 {}; diff --git a/boards/st/nucleo_h755zi_q/board.cmake b/boards/st/nucleo_h755zi_q/board.cmake new file mode 100644 index 00000000000..826810787e2 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/board.cmake @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw") +board_runner_args(jlink "--device=STM32H755ZI" "--speed=3300") +if(CONFIG_BOARD_NUCLEO_H755ZI_Q_STM32H755XX_M7) + board_runner_args(openocd --target-handle=_CHIPNAME.cpu0) +elseif(CONFIG_BOARD_NUCLEO_H755ZI_Q_STM32H755XX_M4) + board_runner_args(openocd --target-handle=_CHIPNAME.cpu1) +endif() + +include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/st/nucleo_h755zi_q/board.yml b/boards/st/nucleo_h755zi_q/board.yml new file mode 100644 index 00000000000..ecffd3b0fd1 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/board.yml @@ -0,0 +1,5 @@ +board: + name: nucleo_h755zi_q + vendor: st + socs: + - name: stm32h755xx diff --git a/boards/st/nucleo_h755zi_q/doc/img/nucleo_h755zi_q.webp b/boards/st/nucleo_h755zi_q/doc/img/nucleo_h755zi_q.webp new file mode 100644 index 0000000000000000000000000000000000000000..4202c63585cd941a02abf0eb567bf9b9bdc76fa1 GIT binary patch literal 59668 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 + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "arduino_r3_connector.dtsi" +#include + +/ { + leds: leds { + compatible = "gpio-leds"; + green_led: led_1 { + gpios = <&gpioa 5 GPIO_ACTIVE_HIGH>; + label = "User LD1"; + }; + yellow_led: led_2 { + gpios = <&gpioe 1 GPIO_ACTIVE_HIGH>; + label = "User LD2"; + }; + red_led: led_3 { + gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>; + label = "User LD3"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button: button_0 { + gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; + label = "User SB1"; + zephyr,code = ; + }; + }; +}; + +&rcc { + d1cpre = <1>; + hpre = <2>; + d1ppre = <2>; + d2ppre1 = <2>; + d2ppre2 = <2>; + d3ppre = <2>; +}; + +&mailbox { + status = "okay"; +}; diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.dts b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.dts new file mode 100644 index 00000000000..71501daef00 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.dts @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 S&C Electric Company + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "nucleo_h755zi_q.dtsi" + +/ { + model = "STMicroelectronics STM32H755ZI-Q-NUCLEO board"; + compatible = "st,stm32h755zi-q-nucleo"; + + /* HW resources belonging to CM4 */ + chosen { + zephyr,console = &uart8; + zephyr,shell-uart = &uart8; + zephyr,sram = &sram1; + zephyr,flash = &flash1; + }; + + aliases { + led0 = &yellow_led; + }; +}; + +&uart8 { + pinctrl-0 = <&uart8_tx_pe1 &uart8_rx_pe0>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&rcc { + clock-frequency = ; +}; diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.yaml b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.yaml new file mode 100644 index 00000000000..b29de5b2c1b --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4.yaml @@ -0,0 +1,18 @@ +identifier: nucleo_h755zi_q/stm32h755xx/m4 +name: ST Nucleo H755ZI-Q (M4) +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +ram: 288 +flash: 1024 +supported: + - arduino_gpio + - gpio + - netif:eth +testing: + ignore_tags: + - mpu + - nfc +vendor: st diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4_defconfig b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4_defconfig new file mode 100644 index 00000000000..632f31ee7c8 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m4_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) 2024 S&C Electric Company + +# Enable GPIO +CONFIG_GPIO=y + +# Enable clock +CONFIG_CLOCK_CONTROL=y + +# By default SERIAL peripherals are assigned to m7 + +# Enable uart driver +#CONFIG_SERIAL=y + +# Console +#CONFIG_CONSOLE=y +#CONFIG_UART_CONSOLE=y + +# Enable pin controller +CONFIG_PINCTRL=y diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.dts b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.dts new file mode 100644 index 00000000000..d565297ebcb --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.dts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2024 S&C Electric Company + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "nucleo_h755zi_q.dtsi" + +/* + * WARNING: + * Possible pin conflicts: The pins PA2 and PB13 may conflict on selection of + * ETH_STM32_HAL, since they are used in ST Zio or ST morpho connectors. To + * avoid conflicting states the jumpers JP6 and JP7 must be in ON state. + */ + +/ { + model = "STMicroelectronics STM32H755ZI-Q-NUCLEO board"; + compatible = "st,stm32h755zi-q-nucleo"; + + /* HW resources belonging to CM7 */ + chosen { + zephyr,console = &usart3; + zephyr,shell-uart = &usart3; + zephyr,dtcm = &dtcm; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + pwmleds { + compatible = "pwm-leds"; + + red_pwm_led: red_pwm_led { + pwms = <&pwm12 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "User LD3 - PWM12"; + }; + }; + + aliases { + led0 = &green_led; + pwm-led0 = &red_pwm_led; + sw0 = &user_button; + }; +}; + +&clk_lsi { + status = "okay"; +}; + +&clk_hsi48 { + status = "okay"; +}; + +&clk_hse { + hse-bypass; + clock-frequency = ; /* STLink 8MHz clock */ + status = "okay"; +}; + +&pll { + div-m = <1>; + mul-n = <120>; + div-p = <2>; + div-q = <8>; + div-r = <2>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; +}; + +&usart3 { + pinctrl-0 = <&usart3_tx_pd8 &usart3_rx_pd9>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&rtc { + clocks = <&rcc STM32_CLOCK_BUS_APB4 0x00010000>, + <&rcc STM32_SRC_LSI RTC_SEL(2)>; + status = "okay"; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; +}; + +&timers12 { + st,prescaler = <10000>; + status = "okay"; + + pwm12: pwm { + status = "okay"; + pinctrl-0 = <&tim12_ch1_pb14>; + pinctrl-names = "default"; + }; +}; + +&mac { + status = "okay"; + pinctrl-0 = <ð_ref_clk_pa1 + ð_crs_dv_pa7 + ð_rxd0_pc4 + ð_rxd1_pc5 + ð_tx_en_pg11 + ð_txd0_pg13 + ð_txd1_pb13>; + pinctrl-names = "default"; +}; + +&mdio { + status = "okay"; + pinctrl-0 = <ð_mdio_pa2 ð_mdc_pc1>; + pinctrl-names = "default"; + + ethernet-phy@0 { + compatible = "ethernet-phy"; + reg = <0x00>; + status = "okay"; + }; +}; + +&rng { + status = "okay"; +}; + +zephyr_udc0: &usbotg_fs { + pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; +}; diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.yaml b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.yaml new file mode 100644 index 00000000000..63739dff138 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7.yaml @@ -0,0 +1,20 @@ +identifier: nucleo_h755zi_q/stm32h755xx/m7 +name: ST Nucleo H755ZI-Q (M7) +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +ram: 512 +flash: 1024 +supported: + - arduino_gpio + - arduino_i2c + - uart + - gpio + - counter + - i2c + - pwm + - netif:eth + - usb_device +vendor: st diff --git a/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7_defconfig b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7_defconfig new file mode 100644 index 00000000000..712afbaf7fd --- /dev/null +++ b/boards/st/nucleo_h755zi_q/nucleo_h755zi_q_stm32h755xx_m7_defconfig @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) 2024 S&C Electric Company + +# Enable the internal SMPS regulator +CONFIG_POWER_SUPPLY_DIRECT_SMPS=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable UART (disable to assign to M4 core) +CONFIG_SERIAL=y + +# Console (disable to assign to M4 core) +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable Clock +CONFIG_CLOCK_CONTROL=y + +# Enable pin controller +CONFIG_PINCTRL=y diff --git a/boards/st/nucleo_h755zi_q/support/openocd.cfg b/boards/st/nucleo_h755zi_q/support/openocd.cfg new file mode 100644 index 00000000000..719125ff149 --- /dev/null +++ b/boards/st/nucleo_h755zi_q/support/openocd.cfg @@ -0,0 +1,30 @@ +# STM32H745ZI Nucleo board OpenOCD ST-LINK V3 configuration +# +# Copyright (c) 2024 S&C Electric Company +# SPDX-License-Identifier: Apache-2.0 +# + +# Borrow the nucleo_h745zi openocd configuration as no config exists for the h755 yet. +source [find board/st_nucleo_h745zi.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/tests/subsys/mgmt/mcumgr/fs_mgmt_hash_supported/testcase.yaml b/tests/subsys/mgmt/mcumgr/fs_mgmt_hash_supported/testcase.yaml index efceb4abdf9..b34d7fbb823 100644 --- a/tests/subsys/mgmt/mcumgr/fs_mgmt_hash_supported/testcase.yaml +++ b/tests/subsys/mgmt/mcumgr/fs_mgmt_hash_supported/testcase.yaml @@ -15,6 +15,7 @@ common: - arduino_portenta_h7/stm32h747xx/m4 - lpcxpresso51u68 - nucleo_h745zi_q/stm32h745xx/m4 + - nucleo_h755zi_q/stm32h755xx/m4 - stm32h747i_disco/stm32h747xx/m4 - lpcxpresso55s69/lpc55s69/cpu1 - mpfs_icicle