From 419edffabf61a992fb66b22e1a2dcbec76f80290 Mon Sep 17 00:00:00 2001 From: Felipe Neves Date: Thu, 22 Aug 2024 12:20:57 -0300 Subject: [PATCH] boards: arduino_nicla_vision: add Arduino Nicla Vision Initial board support and documentation. Signed-off-by: Felipe Neves --- .../nicla_vision/Kconfig.arduino_nicla_vision | 6 + boards/arduino/nicla_vision/Kconfig.defconfig | 18 ++ .../nicla_vision/arduino_nicla_vision.dtsi | 33 +++ .../arduino_nicla_vision_stm32h747xx_m4.dts | 37 ++++ .../arduino_nicla_vision_stm32h747xx_m4.yaml | 18 ++ ...uino_nicla_vision_stm32h747xx_m4_defconfig | 24 +++ .../arduino_nicla_vision_stm32h747xx_m7.dts | 194 ++++++++++++++++++ .../arduino_nicla_vision_stm32h747xx_m7.yaml | 15 ++ ...uino_nicla_vision_stm32h747xx_m7_defconfig | 30 +++ boards/arduino/nicla_vision/board.cmake | 18 ++ boards/arduino/nicla_vision/board.yml | 5 + .../doc/img/arduino_nicla_vision.webp | Bin 0 -> 20678 bytes boards/arduino/nicla_vision/doc/index.rst | 193 +++++++++++++++++ .../openocd_arduino_nicla_vision_m4.cfg | 12 ++ .../openocd_arduino_nicla_vision_m7.cfg | 28 +++ samples/drivers/flash_shell/sample.yaml | 1 + .../fs_mgmt_hash_supported/testcase.yaml | 1 + 17 files changed, 633 insertions(+) create mode 100644 boards/arduino/nicla_vision/Kconfig.arduino_nicla_vision create mode 100644 boards/arduino/nicla_vision/Kconfig.defconfig create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision.dtsi create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.dts create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.yaml create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4_defconfig create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.dts create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.yaml create mode 100644 boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7_defconfig create mode 100644 boards/arduino/nicla_vision/board.cmake create mode 100644 boards/arduino/nicla_vision/board.yml create mode 100644 boards/arduino/nicla_vision/doc/img/arduino_nicla_vision.webp create mode 100644 boards/arduino/nicla_vision/doc/index.rst create mode 100644 boards/arduino/nicla_vision/support/openocd_arduino_nicla_vision_m4.cfg create mode 100644 boards/arduino/nicla_vision/support/openocd_arduino_nicla_vision_m7.cfg diff --git a/boards/arduino/nicla_vision/Kconfig.arduino_nicla_vision b/boards/arduino/nicla_vision/Kconfig.arduino_nicla_vision new file mode 100644 index 00000000000..3d5b76a0749 --- /dev/null +++ b/boards/arduino/nicla_vision/Kconfig.arduino_nicla_vision @@ -0,0 +1,6 @@ +# Copyright 2024 Felipe Neves +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ARDUINO_NICLA_VISION + select SOC_STM32H747XX_M7 if BOARD_ARDUINO_NICLA_VISION_STM32H747XX_M7 + select SOC_STM32H747XX_M4 if BOARD_ARDUINO_NICLA_VISION_STM32H747XX_M4 diff --git a/boards/arduino/nicla_vision/Kconfig.defconfig b/boards/arduino/nicla_vision/Kconfig.defconfig new file mode 100644 index 00000000000..8d737075d08 --- /dev/null +++ b/boards/arduino/nicla_vision/Kconfig.defconfig @@ -0,0 +1,18 @@ +# Copyright 2024 Felipe Neves +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_ARDUINO_NICLA_VISION + +if BT + +choice AIROC_PART + default CYW4343W +endchoice + +choice CYW4343W_MODULE + default CYW4343W_MURATA_1DX +endchoice + +endif # BT + +endif # BOARD_ARDUINO_NICLA_VISION diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision.dtsi b/boards/arduino/nicla_vision/arduino_nicla_vision.dtsi new file mode 100644 index 00000000000..cec25611b1b --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision.dtsi @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Felipe Neves + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + leds { + compatible = "gpio-leds"; + red_led: led_0 { + gpios = <&gpioe 3 GPIO_ACTIVE_LOW>; + }; + green_led: led_1 { + gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; + }; + blue_led: led_2 { + gpios = <&gpiof 4 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&rcc { + d1cpre = <1>; + hpre = <2>; + d1ppre = <2>; + d2ppre1 = <2>; + d2ppre2 = <2>; + d3ppre = <2>; +}; + +&mailbox { + status = "okay"; +}; diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.dts b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.dts new file mode 100644 index 00000000000..f8d97508d83 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.dts @@ -0,0 +1,37 @@ +/* + * Copyright 2024 Felipe Neves + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include "arduino_nicla_vision.dtsi" + +/ { + model = "Arduino Nicla Vision Board (M4)"; + compatible = "arduino,nicla-vision"; + + chosen { + zephyr,console = &uart4; + zephyr,shell-uart = &uart4; + zephyr,sram = &sram1; + zephyr,flash = &flash1; + }; + + aliases { + led0 = &blue_led; + }; +}; + +&rcc { + clock-frequency = ; +}; + +&uart4 { + status = "okay"; + pinctrl-0 = <&uart4_tx_pb9 &uart4_rx_pb8>; + pinctrl-names = "default"; + current-speed = <115200>; +}; diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.yaml b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.yaml new file mode 100644 index 00000000000..727622952e5 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4.yaml @@ -0,0 +1,18 @@ +identifier: arduino_nicla_vision/stm32h747xx/m4 +name: Arduino Nicla Vision (M4) +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 288 +flash: 1024 +supported: + - gpio +testing: + ignore_tags: + - mpu + - nfc + - net +vendor: arduino diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4_defconfig b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4_defconfig new file mode 100644 index 00000000000..d27bd8dac13 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m4_defconfig @@ -0,0 +1,24 @@ +# Copyright 2024 Felipe Neves +# SPDX-License-Identifier: Apache-2.0 + +# Enable GPIO +CONFIG_GPIO=y + +# Clock configuration +CONFIG_CLOCK_CONTROL=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable uart driver +CONFIG_SERIAL=y + +# Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable pin controller +CONFIG_PINCTRL=y diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.dts b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.dts new file mode 100644 index 00000000000..ffd72fe9fb7 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.dts @@ -0,0 +1,194 @@ +/* + * Copyright 2024 Felipe Neves + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include +#include "arduino_nicla_vision.dtsi" + +/ { + model = "Arduino Nicla Vision Board (M7)"; + compatible = "arduino,nicla-vision"; + + chosen { + zephyr,console = &lpuart1; + zephyr,shell-uart = &lpuart1; + zephyr,uart-mcumgr = &lpuart1; + zephyr,bt-hci = &bt_hci_uart; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + sdram1: sdram@c0000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + device_type = "memory"; + reg = <0xc0000000 DT_SIZE_M(8)>; + zephyr,memory-region = "SDRAM1"; + zephyr,memory-attr = <( DT_MEM_ARM(ATTR_MPU_RAM) )>; + }; + + aliases { + led0 = &red_led; + led1 = &green_led; + }; + + otghs_ulpi_phy: otghs_ulpis_phy { + compatible = "usb-ulpi-phy"; + #phy-cells = <0>; + }; +}; + +&clk_hse { + status = "okay"; + clock-frequency = ; +}; + +&clk_lse { + status = "okay"; +}; + +&clk_hsi48 { + status = "okay"; +}; + +&pll { + div-m = <5>; + mul-n = <192>; + div-p = <2>; + div-q = <4>; + div-r = <2>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; +}; + +&lpuart1 { + status = "okay"; + pinctrl-0 = <&lpuart1_tx_pa9 &lpuart1_rx_pa10>; + pinctrl-names = "default"; + current-speed = <115200>; +}; + +&usart1 { + pinctrl-0 = <&usart1_rx_pb7 &usart1_tx_pb6 + &usart1_rts_pa12 &usart1_cts_pa11>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; + hw-flow-control; + + bt_hci_uart: bt_hci_uart { + compatible = "zephyr,bt-hci-uart"; + status = "okay"; + + murata-1dx { + compatible = "infineon,cyw43xxx-bt-hci"; + bt-reg-on-gpios = <&gpiof 14 GPIO_ACTIVE_HIGH>; + bt-host-wake-gpios = <&gpiod 14 GPIO_ACTIVE_HIGH>; + bt-dev-wake-gpios = <&gpioe 9 GPIO_ACTIVE_HIGH>; + fw-download-speed = <115200>; + }; + }; +}; + +&i2c1 { + status = "disabled"; + pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>; + pinctrl-names = "default"; + clock-frequency = ; +}; + +&i2c2 { + status = "okay"; + pinctrl-0 = <&i2c2_scl_pf1 &i2c2_sda_pf0>; + pinctrl-names = "default"; + clock-frequency = ; + + vl53l1x: vl53l1x@52 { + compatible = "st,vl53l1x"; + reg = <0x52>; + status = "okay"; + xshut-gpios = <&gpiog 10 GPIO_ACTIVE_HIGH>; + int-gpios = <&gpiod 8 GPIO_ACTIVE_HIGH>; + }; +}; + +&i2c3 { + status = "okay"; + pinctrl-0 = <&i2c3_scl_pa8 &i2c3_sda_pc9>; + pinctrl-names = "default"; + clock-frequency = ; +}; + +&spi4 { + status = "okay"; + pinctrl-0 = <&spi4_nss_pe11 &spi4_sck_pe12 + &spi4_miso_pe13 &spi4_mosi_pe14>; + pinctrl-names = "default"; +}; + +&spi5 { + status = "okay"; + pinctrl-0 = <&spi5_nss_pf6 &spi5_sck_pf7 + &spi5_miso_pf8 &spi5_mosi_pf11>; + pinctrl-names = "default"; + + lsm6dso: lsm6dso@0 { + compatible = "st,lsm6dso"; + status = "okay"; + reg = <0x0>; + irq-gpios = <&gpioa 1 GPIO_ACTIVE_LOW>; + spi-max-frequency = <4000000>; + }; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "bootloader"; + reg = <0x0 0x40000>; + read-only; + }; + + slot0_partition: partition@40000 { + label = "image-0"; + reg = <0x40000 0x000c0000>; + }; + }; +}; + +&rng { + status = "okay"; +}; + +zephyr_udc0: &usbotg_hs { + pinctrl-0 = <&usb_otg_hs_ulpi_ck_pa5 + &usb_otg_hs_ulpi_d0_pa3 + &usb_otg_hs_ulpi_d1_pb0 + &usb_otg_hs_ulpi_d2_pb1 + &usb_otg_hs_ulpi_d3_pb10 + &usb_otg_hs_ulpi_d4_pb11 + &usb_otg_hs_ulpi_d5_pb12 + &usb_otg_hs_ulpi_d6_pb13 + &usb_otg_hs_ulpi_d7_pb5 + &usb_otg_hs_ulpi_stp_pc0 + &usb_otg_hs_ulpi_dir_pc2_c + &usb_otg_hs_ulpi_nxt_pc3_c>; + pinctrl-names = "default"; + maximum-speed = "high-speed"; + phys = <&otghs_ulpi_phy>; + status = "okay"; +}; diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.yaml b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.yaml new file mode 100644 index 00000000000..006cd2b35b4 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7.yaml @@ -0,0 +1,15 @@ +identifier: arduino_nicla_vision/stm32h747xx/m7 +name: Arduino Nicla Vision (M7) +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 512 +flash: 1024 +supported: + - gpio + - spi + - i2c +vendor: arduino diff --git a/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7_defconfig b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7_defconfig new file mode 100644 index 00000000000..3150f04d833 --- /dev/null +++ b/boards/arduino/nicla_vision/arduino_nicla_vision_stm32h747xx_m7_defconfig @@ -0,0 +1,30 @@ +# Copyright 2024 Felipe Neves +# SPDX-License-Identifier: Apache-2.0 + +# Disable the internal SMPS regulator +CONFIG_POWER_SUPPLY_DIRECT_SMPS=n + +# Enable GPIO +CONFIG_GPIO=y + +# Enable clocks +CONFIG_CLOCK_CONTROL=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable uart driver +CONFIG_SERIAL=y + +# Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable pin controller +CONFIG_PINCTRL=y + +# Use zephyr,code-partition as flash offset +CONFIG_USE_DT_CODE_PARTITION=y diff --git a/boards/arduino/nicla_vision/board.cmake b/boards/arduino/nicla_vision/board.cmake new file mode 100644 index 00000000000..d90b93bf6b2 --- /dev/null +++ b/boards/arduino/nicla_vision/board.cmake @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_BOARD_ARDUINO_NICLA_VISION_STM32H747XX_M7) + board_runner_args(jlink "--device=STM32H747XI_M7" "--speed=4000") + board_runner_args(openocd "--config=${BOARD_DIR}/support/openocd_arduino_nicla_vision_m7.cfg") + board_runner_args(openocd --target-handle=_CHIPNAME.cpu0) +elseif(CONFIG_BOARD_ARDUINO_NICLA_VISION_STM32H747XX_M4) + board_runner_args(jlink "--device=STM32H747XI_M4" "--speed=4000") + board_runner_args(openocd "--config=${BOARD_DIR}/support/openocd_arduino_nicla_vision_m4.cfg") + board_runner_args(openocd --target-handle=_CHIPNAME.cpu1) +endif() +board_runner_args(dfu-util "--pid=2341:035f" "--alt=0" "--dfuse") +board_runner_args(blackmagicprobe "--connect-rst") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/arduino/nicla_vision/board.yml b/boards/arduino/nicla_vision/board.yml new file mode 100644 index 00000000000..660cb3ca8aa --- /dev/null +++ b/boards/arduino/nicla_vision/board.yml @@ -0,0 +1,5 @@ +board: + name: arduino_nicla_vision + vendor: arduino + socs: + - name: stm32h747xx diff --git a/boards/arduino/nicla_vision/doc/img/arduino_nicla_vision.webp b/boards/arduino/nicla_vision/doc/img/arduino_nicla_vision.webp new file mode 100644 index 0000000000000000000000000000000000000000..378b69dc965e57f7713ad62c3d1276013a53617b GIT binary patch literal 20678 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