From 7a8f4c2a4248b74c6c839fd09b8d224a2c53f3d6 Mon Sep 17 00:00:00 2001 From: Andrew Hedin Date: Mon, 8 Jul 2024 14:17:30 -0500 Subject: [PATCH 1/3] [nrf noup] bl5340pa_dvk: Add board Add BL5340PA board. Uses hardware model v2 that is used by NCS 2.7.0. PROD-12351 Signed-off-by: Andrew Hedin --- .../lairdconnect/bl5340pa_dvk/CMakeLists.txt | 15 + boards/lairdconnect/bl5340pa_dvk/Kconfig | 62 +++ .../bl5340pa_dvk/Kconfig.bl5340pa_dvk | 9 + .../bl5340pa_dvk/Kconfig.defconfig | 137 ++++++ .../bl5340pa_dvk_nrf5340_cpuapp.dts | 42 ++ .../bl5340pa_dvk_nrf5340_cpuapp.yaml | 22 + ...0pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi | 147 ++++++ .../bl5340pa_dvk_nrf5340_cpuapp_common.dtsi | 381 +++++++++++++++ .../bl5340pa_dvk_nrf5340_cpuapp_defconfig | 28 ++ .../bl5340pa_dvk_nrf5340_cpuapp_ns.dts | 34 ++ .../bl5340pa_dvk_nrf5340_cpuapp_ns.yaml | 21 + .../bl5340pa_dvk_nrf5340_cpuapp_ns_defconfig | 25 + ...0pa_dvk_nrf5340_cpuapp_partition_conf.dtsi | 61 +++ .../bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi | 42 ++ .../bl5340pa_dvk_nrf5340_cpunet.dts | 85 ++++ .../bl5340pa_dvk_nrf5340_cpunet.yaml | 19 + .../bl5340pa_dvk_nrf5340_cpunet_common.dtsi | 67 +++ .../bl5340pa_dvk_nrf5340_cpunet_defconfig | 15 + .../bl5340pa_dvk_nrf5340_cpunet_reset.c | 61 +++ ...dvk_nrf5340_shared_sram_planning_conf.dtsi | 31 ++ boards/lairdconnect/bl5340pa_dvk/board.cmake | 21 + boards/lairdconnect/bl5340pa_dvk/board.yml | 8 + .../doc/img/bl5340pa_dvk_side.png | Bin 0 -> 70016 bytes .../lairdconnect/bl5340pa_dvk/doc/index.rst | 455 ++++++++++++++++++ .../bl5340pa_dvk/pre_dt_board.cmake | 8 + 25 files changed, 1796 insertions(+) create mode 100644 boards/lairdconnect/bl5340pa_dvk/CMakeLists.txt create mode 100644 boards/lairdconnect/bl5340pa_dvk/Kconfig create mode 100644 boards/lairdconnect/bl5340pa_dvk/Kconfig.bl5340pa_dvk create mode 100644 boards/lairdconnect/bl5340pa_dvk/Kconfig.defconfig create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.dts create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.yaml create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_defconfig create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.dts create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.yaml create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns_defconfig create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_partition_conf.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.dts create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.yaml create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_common.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_defconfig create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_reset.c create mode 100644 boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi create mode 100644 boards/lairdconnect/bl5340pa_dvk/board.cmake create mode 100644 boards/lairdconnect/bl5340pa_dvk/board.yml create mode 100644 boards/lairdconnect/bl5340pa_dvk/doc/img/bl5340pa_dvk_side.png create mode 100644 boards/lairdconnect/bl5340pa_dvk/doc/index.rst create mode 100644 boards/lairdconnect/bl5340pa_dvk/pre_dt_board.cmake diff --git a/boards/lairdconnect/bl5340pa_dvk/CMakeLists.txt b/boards/lairdconnect/bl5340pa_dvk/CMakeLists.txt new file mode 100644 index 00000000000..0dedc6b671b --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (c) 2019 Nordic Semiconductor ASA. +# Copyright (c) 2021-2024 Laird Connectivity. +# SPDX-License-Identifier: Apache-2.0 + +if((CONFIG_BOARD_BL5340PA_DVK_NRF5340_CPUAPP OR CONFIG_BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS) + AND CONFIG_BOARD_ENABLE_CPUNET) + zephyr_library() + zephyr_library_sources(bl5340pa_dvk_nrf5340_cpunet_reset.c) + + if(CONFIG_BUILD_WITH_TFM) + zephyr_library_include_directories( + $/api_ns/interface/include + ) + endif() +endif() diff --git a/boards/lairdconnect/bl5340pa_dvk/Kconfig b/boards/lairdconnect/bl5340pa_dvk/Kconfig new file mode 100644 index 00000000000..26065f27ec3 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/Kconfig @@ -0,0 +1,62 @@ +# BL5340-DVK board configuration + +# Copyright (c) 2019-2021 Nordic Semiconductor ASA +# Copyright (c) 2021-2024 Laird Connectivity +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_BL5340PA_DVK_NRF5340_CPUAPP || BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +config BOARD_ENABLE_DCDC_APP + bool "Application MCU DCDC converter" + select SOC_DCDC_NRF53X_APP + default y + +config BOARD_ENABLE_DCDC_NET + bool "Network MCU DCDC converter" + select SOC_DCDC_NRF53X_NET + default y + +config BOARD_ENABLE_DCDC_HV + bool "High Voltage DCDC converter" + select SOC_DCDC_NRF53X_HV + default y + +config BOARD_ENABLE_CPUNET + bool "NRF53 Network MCU" + select SOC_NRF_GPIO_FORWARDER_FOR_NRF5340 if \ + $(dt_compat_enabled,$(DT_COMPAT_NORDIC_NRF_GPIO_FORWARDER)) + help + This option enables releasing the Network 'force off' signal, which + as a consequence will power up the Network MCU during system boot. + Additionally, the option allocates GPIO pins that will be used by UARTE + of the Network MCU. + Note: GPIO pin allocation can only be configured by the secure Application + MCU firmware, so when this option is used with the non-secure version of + the board, the application needs to take into consideration, that the + secure firmware image must already have configured GPIO allocation for the + Network MCU. + default y if (BT || NRF_802154_SER_HOST) + +config DOMAIN_CPUNET_BOARD + string + default "bl5340pa_dvk/nrf5340/cpunet" + depends on BOARD_ENABLE_CPUNET + help + The board which will be used for CPUNET domain when creating a multi + image application where one or more images should be located on + another board. For example hci_ipc on the bl5340pa_dvk_cpunet for + Bluetooth applications. + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUAPP || BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +if BOARD_BL5340PA_DVK_NRF5340_CPUNET + +config DOMAIN_CPUAPP_BOARD + string + default "bl5340pa_dvk/nrf5340/cpuapp" + help + The board which will be used for CPUAPP domain when creating a multi + image application where one or more images should be located on + another board. + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUNET diff --git a/boards/lairdconnect/bl5340pa_dvk/Kconfig.bl5340pa_dvk b/boards/lairdconnect/bl5340pa_dvk/Kconfig.bl5340pa_dvk new file mode 100644 index 00000000000..6f0c46be6e0 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/Kconfig.bl5340pa_dvk @@ -0,0 +1,9 @@ +# BL5340PA-DVK board configuration + +# Copyright (c) 2021-2024 Laird Connectivity +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_BL5340PA_DVK + select SOC_NRF5340_CPUAPP_QKAA if BOARD_BL5340PA_DVK_NRF5340_CPUAPP + select SOC_NRF5340_CPUAPP_QKAA if BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + select SOC_NRF5340_CPUNET_QKAA if BOARD_BL5340PA_DVK_NRF5340_CPUNET diff --git a/boards/lairdconnect/bl5340pa_dvk/Kconfig.defconfig b/boards/lairdconnect/bl5340pa_dvk/Kconfig.defconfig new file mode 100644 index 00000000000..88b8c21832b --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/Kconfig.defconfig @@ -0,0 +1,137 @@ +# BL5340-DVK board configuration + +# Copyright (c) 2019-2020 Nordic Semiconductor ASA +# Copyright (c) 2021-2024 Laird Connectivity +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_BL5340PA_DVK_NRF5340_CPUAPP || BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +config I2C + default GPIO || DAC + +# Code Partition: +# +# For the secure version of the board the firmware is linked at the beginning +# of the flash, or into the code-partition defined in DT if it is intended to +# be loaded by MCUboot. If the secure firmware is to be combined with a non- +# secure image (TRUSTED_EXECUTION_SECURE=y), the secure FW image shall always +# be restricted to the size of its code partition. +# +# For the non-secure version of the board, the firmware +# must be linked into the code-partition (non-secure) defined in DT, regardless. +# Apply this configuration below by setting the Kconfig symbols used by +# the linker according to the information extracted from DT partitions. + +# SRAM Partition: +# +# If the secure firmware is to be combined with a non-secure image +# (TRUSTED_EXECUTION_SECURE=y), the secure FW image SRAM shall always +# be restricted to the secure image SRAM partition (sram-secure-partition). +# Otherwise (if TRUSTED_EXECUTION_SECURE is not set) the whole zephyr,sram +# may be used by the image. +# +# For the non-secure version of the board, the firmware image SRAM is +# always restricted to the allocated non-secure SRAM partition. +# +# Workaround for not being able to have commas in macro arguments +DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition +DT_CHOSEN_Z_SRAM_PARTITION := zephyr,sram-secure-partition + +if BOARD_BL5340PA_DVK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +config SRAM_SIZE + default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_SRAM_PARTITION),0,K) + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUAPP && TRUSTED_EXECUTION_SECURE + +if BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +config FLASH_LOAD_OFFSET + default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +choice BT_HCI_BUS_TYPE + default BT_HCI_IPC if BT +endchoice + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BT_HCI_IPC + +config BT_HCI_VS + default y if BT + +# 2.8" TFT Touch Shield for Arduino w/Capacitive Touch Screen Module +# is mounted to the DVK using standoffs. +# https://www.buydisplay.com/2-8-inch-tft-touch-shield-for-arduino-w-capacitive-touch-screen-module +if DISPLAY + +config INPUT_FT5336_INTERRUPT + default y + +if LVGL + +config LV_Z_VDB_SIZE + default 64 + +config LV_Z_BITS_PER_PIXEL + default 16 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_16 +endchoice + +config LV_COLOR_16_SWAP + default y + +config INPUT + default y + +endif # LVGL + +endif # DISPLAY + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUAPP || BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS + +config IPM_NRFX + default IPM + +config MBOX_NRFX_IPC + default MBOX + +if BOARD_BL5340PA_DVK_NRF5340_CPUNET + +# BT_CTLR depends on BT. When BT is enabled we should default to also +# enabling the controller. +config BT_CTLR + default y if BT + +config BT_ECC + default y if BT + +if MPSL_FEM + +config MPSL_FEM_NRF21540_TX_GAIN_DB + default 20 + +config BT_CTLR_TX_PWR_ANTENNA + default 20 + +choice MPSL_FEM_CHOICE + depends on MPSL_FEM_NRF21540_GPIO_SPI_SUPPORT + default MPSL_FEM_NRF21540_GPIO_SPI +endchoice + +config MAIN_STACK_SIZE + default 2048 + +endif # MPSL_FEM + +endif # BOARD_BL5340PA_DVK_NRF5340_CPUNET diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.dts b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.dts new file mode 100644 index 00000000000..f6d066d1b61 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.dts @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021-2024 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "bl5340pa_dvk_nrf5340_cpuapp_common.dtsi" + +/ { + model = "Laird Connectivity BL5340PA (nRF5340 with nRF21540) Application"; + compatible = "lairdconnect,bl5340pa-dvk-cpuapp"; + + chosen { + zephyr,sram = &sram0_image; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,sram-secure-partition = &sram0_s; + zephyr,sram-non-secure-partition = &sram0_ns; + }; +}; + +zephyr_udc0: &usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; + +&gpio_fwd { + nrf21540-gpio-if { + gpios = <&gpio0 4 0>, /* antenna select */ + <&gpio0 31 0>, /* rx-en-gpios */ + <&gpio0 30 0>, /* tx-en-gpios */ + <&gpio0 29 0>; /* pdn-gpios */ + }; + nrf21540-spi-if { + gpios = <&gpio1 0 0>, /* clk */ + <&gpio1 1 0>, /* mosi */ + <&gpio1 5 0>, /* csn */ + <&gpio1 4 0>; /* miso */ + }; +}; diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.yaml b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.yaml new file mode 100644 index 00000000000..c6657f6b055 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp.yaml @@ -0,0 +1,22 @@ +identifier: bl5340pa_dvk/nrf5340/cpuapp +name: BL5340PA-DVK-application-MCU +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 448 +flash: 1024 +supported: + - counter + - gpio + - i2c + - pwm + - qspi + - spi + - uart + - usb_cdc + - usb_device + - watchdog +vendor: lairdconnect diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi new file mode 100644 index 00000000000..a5d9b72b62e --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2022 Nordic Semiconductor + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + i2c1_default: i2c1_default { + group1 { + psels = , + ; + }; + }; + + i2c1_sleep: i2c1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + spi2_default: spi2_default { + group1 { + psels = , + , + ; + }; + }; + + spi2_sleep: spi2_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spi3_default: spi3_default { + group1 { + psels = , + , + ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spi4_default: spi4_default { + group1 { + psels = , + , + ; + }; + }; + + spi4_sleep: spi4_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + uart0_default: uart0_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + uart1_default: uart1_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart1_sleep: uart1_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + qspi_default: qspi_default { + group1 { + psels = , + , + , + , + , + ; + }; + }; + + qspi_sleep: qspi_sleep { + group1 { + psels = , + , + , + , + , + ; + low-power-enable; + }; + }; + +}; diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi new file mode 100644 index 00000000000..76609ab311f --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2019-2023 Nordic Semiconductor ASA + * Copyright (c) 2021-2024 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "bl5340pa_dvk_nrf5340_cpuapp_common-pinctrl.dtsi" +#include + +/ { + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,display = &ili9340; + zephyr,bt-hci-ipc = &ipc0; + }; + + /* Main LEDs and buttons are on an I2C TCA9538 GPIO port expander */ + /* Note TCA9538 does not have configurable internal pull ups/ downs */ + buttons { + compatible = "gpio-keys"; + boot_button0: boot_button { + gpios = <&gpio1 11 GPIO_ACTIVE_LOW>; + label = "Bootloader button (S4)"; + zephyr,code = ; + }; + + button1: button_1 { + gpios = <&gpio_exp0 0 GPIO_ACTIVE_LOW>; + label = "Push button switch 1 (S1)"; + zephyr,code = ; + }; + + button2: button_2 { + gpios = <&gpio_exp0 1 GPIO_ACTIVE_LOW>; + label = "Push button switch 2 (S2)"; + zephyr,code = ; + }; + + button3: button_3 { + gpios = <&gpio_exp0 2 GPIO_ACTIVE_LOW>; + label = "Push button switch 3 (S9)"; + zephyr,code = ; + }; + + button4: button_4 { + gpios = <&gpio_exp0 3 GPIO_ACTIVE_LOW>; + label = "Push button switch 4 (S10)"; + zephyr,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + led1: led_1 { + gpios = <&gpio_exp0 4 GPIO_ACTIVE_LOW>; + label = "Blue LED 1"; + }; + led2: led_2 { + gpios = <&gpio_exp0 5 GPIO_ACTIVE_LOW>; + label = "Blue LED 2"; + }; + led3: led_3 { + gpios = <&gpio_exp0 6 GPIO_ACTIVE_LOW>; + label = "Blue LED 3"; + }; + led4: led_4 { + gpios = <&gpio_exp0 7 GPIO_ACTIVE_LOW>; + label = "Blue LED 4"; + }; + }; + + lvgl_pointer { + compatible = "zephyr,lvgl-pointer-input"; + input = <&ft5336>; + swap-xy; + invert-x; + invert-y; + }; + + gpio_fwd: nrf-gpio-forwarder { + compatible = "nordic,nrf-gpio-forwarder"; + status = "okay"; + uart { + gpios = <&gpio1 8 0>, <&gpio1 10 0>, <&gpio1 7 0>, <&gpio1 9 0>; + }; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led1; + led1 = &led2; + led2 = &led3; + led3 = &led4; + sw0 = &button1; + sw1 = &button2; + sw2 = &button3; + sw3 = &button4; + mcuboot-button0 = &button1; + mcuboot-led0 = &led1; + sdhc0 = &sdhc0; + watchdog0 = &wdt0; + accel0 = &lis3dh; + bbram0 = &extrtc0; + spi-flash0 = &mx25r64; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; + dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; + spi-dev = <&spi2>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + ili9340: ili9340@0 { + compatible = "ilitek,ili9340"; + reg = <0>; + mipi-max-frequency = <32000000>; + rotation = <270>; + width = <320>; + height = <240>; + }; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c1 { + compatible = "nordic,nrf-twim"; + status = "okay"; + + pinctrl-0 = <&i2c1_default>; + pinctrl-1 = <&i2c1_sleep>; + pinctrl-names = "default", "sleep"; + at24c256@50 { + compatible = "atmel,at24"; + reg = <0x50>; + size = <32768>; + pagesize = <64>; + address-width = <16>; + timeout = <10>; + }; + + lis3dh: lis3dh@18 { + compatible = "st,lis2dh"; + reg = <0x18>; + irq-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>, <&gpio0 24 GPIO_ACTIVE_HIGH>; + }; + + ft5336: ft5336@38 { + compatible = "focaltech,ft5336"; + reg = <0x38>; + int-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>; + }; + + bme680@76 { + compatible = "bosch,bme680"; + reg = <0x76>; + }; + + dac0: mcp4725@60 { + compatible = "microchip,mcp4725"; + reg = <0x60>; + #io-channel-cells = <1>; + }; + + extrtc0: mcp7940n@6f { + compatible = "microchip,mcp7940n"; + reg = <0x6f>; + status = "okay"; + }; + + gpio_exp0: tca9538@70 { + compatible = "ti,tca9538"; + reg = <0x70>; + gpio-controller; + #gpio-cells = <2>; + ngpios = <8>; + nint-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; + }; +}; + +&spi2 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio0 25 GPIO_ACTIVE_LOW>; + + pinctrl-0 = <&spi2_default>; + pinctrl-1 = <&spi2_sleep>; + pinctrl-names = "default", "sleep"; + enc424j600@0 { + compatible = "microchip,enc424j600"; + reg = <0>; + spi-max-frequency = <8000000>; + int-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; + }; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>; + + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + sdhc0: sdhc@0 { + reg = <0>; + compatible = "zephyr,sdhc-spi-slot"; + status = "okay"; + spi-max-frequency = <8000000>; + mmc { + compatible = "zephyr,sdmmc-disk"; + status = "okay"; + }; + }; +}; + +&spi4 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + + pinctrl-0 = <&spi4_default>; + pinctrl-1 = <&spi4_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart1 { + current-speed = <115200>; + pinctrl-0 = <&uart1_default>; + pinctrl-1 = <&uart1_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&qspi { + status = "okay"; + pinctrl-0 = <&qspi_default>; + pinctrl-1 = <&qspi_sleep>; + pinctrl-names = "default", "sleep"; + mx25r64: mx25r6435f@0 { + compatible = "nordic,qspi-nor"; + reg = <0>; + /* MX25R64 supports only pp and pp4io */ + writeoc = "pp4io"; + /* MX25R64 supports all readoc options */ + readoc = "read4io"; + sck-frequency = <8000000>; + jedec-id = [c2 28 17]; + sfdp-bfp = [ + e5 20 f1 ff ff ff ff 03 44 eb 08 6b 08 3b 04 bb + ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 0f 52 + 10 d8 00 ff 23 72 f5 00 82 ed 04 cc 44 83 68 44 + 30 b0 30 b0 f7 c4 d5 5c 00 be 29 ff f0 d0 ff ff + ]; + size = <67108864>; + has-dpd; + t-enter-dpd = <10000>; + t-exit-dpd = <35000>; + }; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* 64K */ + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x00010000>; + }; + /* 640K */ + slot0_partition: partition@10000 { + label = "image-0"; + }; + /* 256K */ + slot0_ns_partition: partition@b0000 { + label = "image-0-nonsecure"; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/NVS + * if enabled. 32K + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; + +&mx25r64 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* 640K */ + slot1_partition: partition@0 { + label = "image-1"; + }; + /* 256K */ + slot1_ns_partition: partition@A0000 { + label = "image-1-nonsecure"; + }; + /* 128K */ + scratch_partition: partition@e0000 { + label = "image-scratch"; + reg = <0x000e0000 0x00020000>; + }; + /* 7MB */ + lfs_partition: partition@100000 { + label = "lfs_storage"; + reg = <0x00100000 0x00700000>; + }; + }; +}; + +/ { + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + sram0_image: image@20000000 { + /* Zephyr image(s) memory */ + }; + + sram0_s: image_s@20000000 { + /* Secure image memory */ + }; + + sram0_ns: image_ns@20040000 { + /* Non-Secure image memory */ + }; + }; +}; + +/* Include partition configuration file */ +#include "bl5340pa_dvk_nrf5340_cpuapp_partition_conf.dtsi" diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_defconfig b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_defconfig new file mode 100644 index 00000000000..b584dd950ac --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_defconfig @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable TrustZone-M +CONFIG_ARM_TRUSTZONE_M=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Setup clocks +CONFIG_CLOCK_CONTROL_NRF_K32SRC_250PPM=y +CONFIG_SOC_LFXO_CAP_INT_7PF=y +CONFIG_SOC_HFXO_CAP_INTERNAL=y +CONFIG_SOC_HFXO_CAP_INT_VALUE_X2=27 + +CONFIG_PINCTRL=y diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.dts b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.dts new file mode 100644 index 00000000000..969b573d779 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.dts @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021-2024 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "bl5340pa_dvk_nrf5340_cpuapp_common.dtsi" + +/ { + model = "Laird Connectivity BL5340PA (nRF5340 with nRF21540) Application"; + compatible = "lairdconnect,bl5340pa-dvk-cpuapp"; + + chosen { + zephyr,sram = &sram0_ns; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_ns_partition; + }; +}; + +zephyr_udc0: &usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; + +&qspi { + status = "disabled"; + + /* Drop the flash and partitions to avoid the config being used for DFU + * samples. + */ + /delete-node/ mx25r6435f@0; +}; diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.yaml b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.yaml new file mode 100644 index 00000000000..a79fe27f738 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns.yaml @@ -0,0 +1,21 @@ +identifier: bl5340pa_dvk/nrf5340/cpuapp/ns +name: BL5340PA-DVK-application-MCU-Non-Secure +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 192 +flash: 192 +supported: + - counter + - gpio + - i2c + - pwm + - spi + - uart + - usb_cdc + - usb_device + - watchdog +vendor: lairdconnect diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns_defconfig b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns_defconfig new file mode 100644 index 00000000000..11ad4bacc89 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_ns_defconfig @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable TrustZone-M +CONFIG_ARM_TRUSTZONE_M=y + +# This board implies building Non-Secure firmware +CONFIG_TRUSTED_EXECUTION_NONSECURE=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_PINCTRL=y diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_partition_conf.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_partition_conf.dtsi new file mode 100644 index 00000000000..5c837e376da --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_partition_conf.dtsi @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2019-2020 Nordic Semiconductor ASA + * Copyright (c) 2021 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * Default Flash planning for bl5340_dvk CPUAPP (Application MCU). + * + * Zephyr build for BL5340 with ARM TrustZone-M support + * implies building Secure and Non-Secure Zephyr images. + * + * Secure image will be placed, by default, in flash0 + * (or in slot0, if MCUboot is present). + * Secure image will use sram0 for system memory. + * + * Non-Secure image will be placed in slot0_ns, and use + * sram0_ns for system memory. + * + * Note that the Secure image only requires knowledge of + * the beginning of the Non-Secure image (not its size). + */ + +&slot0_partition { + reg = <0x00010000 0xa0000>; +}; + +&slot0_ns_partition { + reg = <0x000b0000 0x40000>; +}; + +&slot1_partition { + reg = <0x00000000 0xa0000>; +}; + +&slot1_ns_partition { + reg = <0x000a0000 0x40000>; +}; + +/* Default SRAM planning when building for nRF5340 with + * ARM TrustZone-M support + * - Lowest 256 kB SRAM allocated to Secure image (sram0_s) + * - Middle 192 kB allocated to Non-Secure image (sram0_ns) + * - Upper 64 kB SRAM allocated as Shared memory (sram0_shared) + * (see bl5340_dvk_shared_sram_planning_conf.dtsi) + */ +&sram0_image { + reg = <0x20000000 DT_SIZE_K(448)>; +}; + +&sram0_s { + reg = <0x20000000 0x40000>; +}; + +&sram0_ns { + reg = <0x20040000 0x30000>; +}; + +/* Include shared RAM configuration file */ +#include "bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi" diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi new file mode 100644 index 00000000000..54dd604f82c --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 Nordic Semiconductor + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + , + , + ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + spi0_default: spi0_default { + group1 { + psels = , + , + ; + }; + }; + + spi0_sleep: spi0_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.dts b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.dts new file mode 100644 index 00000000000..2f655889e33 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.dts @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021-2024 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "bl5340pa_dvk_nrf5340_cpunet-pinctrl.dtsi" +#include "bl5340pa_dvk_nrf5340_cpunet_common.dtsi" + +/ { + model = "Laird Connectivity BL5340PA (nRF5340 with nRF21540) Network"; + compatible = "lairdconnect,bl5340pa-dvk-cpunet"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram1; + zephyr,flash = &flash1; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci-ipc = &ipc0; + }; + + aliases { + watchdog0 = &wdt0; + }; + + nrf_radio_fem: nrf21540_fem { + compatible = "nordic,nrf21540-fem"; + rx-en-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; + tx-en-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; + pdn-gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; + spi-if = <&nrf_radio_fem_spi>; + supply-voltage-mv = <3300>; + }; + + /* The Laird Connectivity driver that ensures regulatory compliance and + * proper GPIO control requires the Nordic Connect SDK (MPSL FEM driver). + * The default is external antenna and FCC/IC region. + * + * Add 'internal-antenna;' to use the internal antenna verison. + * Change to'power-table = <1>;' for Australia/NZ. + */ + lcz_fem: nrf21540_lcz_fem { + compatible = "lairdconnect,nrf21540-lcz-fem"; + ant-sel-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>; + spi-clk-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; + spi-mosi-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>; + spi-csn-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; + spi-miso-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>; + power-table = <0>; + }; +}; + +&radio { + fem = <&nrf_radio_fem>; +}; + +/* Can't be used with SPI0/FEM */ +&uart0 { + status = "disabled"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&spi0 { + status = "okay"; + cs-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spi0_default>; + pinctrl-1 = <&spi0_sleep>; + pinctrl-names = "default", "sleep"; + + nrf_radio_fem_spi: nrf21540_fem_spi@0 { + status = "okay"; + compatible = "nordic,nrf21540-fem-spi"; + reg = <0>; + spi-max-frequency = <8000000>; + }; +}; \ No newline at end of file diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.yaml b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.yaml new file mode 100644 index 00000000000..28f7acd576b --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet.yaml @@ -0,0 +1,19 @@ +identifier: bl5340pa_dvk/nrf5340/cpunet +name: BL5340PA-DVK-network-MCU +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 64 +flash: 256 +supported: + - ble + - counter + - gpio + - i2c + - spi + - uart + - watchdog +vendor: lairdconnect diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_common.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_common.dtsi new file mode 100644 index 00000000000..d0f3f30a74b --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_common.dtsi @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021-2023 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&flash1 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* 48K */ + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0xc000>; + }; + /* 88K */ + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x16000>; + }; + /* 88K */ + slot1_partition: partition@22000 { + label = "image-1"; + reg = <0x00022000 0x16000>; + }; + /* 32K */ + storage_partition: partition@38000 { + label = "storage"; + reg = <0x00038000 0x8000>; + }; + }; +}; + +/* Include shared RAM configuration file */ +#include "bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi" diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_defconfig b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_defconfig new file mode 100644 index 00000000000..bc698cb29cb --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_defconfig @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable UART driver +CONFIG_SERIAL=y + +CONFIG_PINCTRL=y diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_reset.c b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_reset.c new file mode 100644 index 00000000000..cce782e4a98 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpunet_reset.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2019-2021 Nordic Semiconductor ASA. + * Copyright (c) 2021-2024 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#include +#include + +LOG_MODULE_REGISTER(bl5340pa_dvk_cpuapp, CONFIG_LOG_DEFAULT_LEVEL); + +#if defined(CONFIG_BT_CTLR_DEBUG_PINS_CPUAPP) +#include <../subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/debug.h> +#else +#define DEBUG_SETUP() +#endif + +static void remoteproc_mgr_config(void) +{ +#if !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) || defined(CONFIG_BUILD_WITH_TFM) + /* Route Bluetooth Controller Debug Pins */ + DEBUG_SETUP(); +#endif /* !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) || defined(CONFIG_BUILD_WITH_TFM) */ + +#if !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) + /* Retain nRF5340 Network MCU in Secure domain (bus + * accesses by Network MCU will have Secure attribute set). + */ + NRF_SPU->EXTDOMAIN[0].PERM = 1 << 4; +#endif /* !defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) */ +} + +static int remoteproc_mgr_boot(void) +{ + + /* Secure domain may configure permissions for the Network MCU. */ + remoteproc_mgr_config(); + +#if !defined(CONFIG_TRUSTED_EXECUTION_SECURE) + /* + * Building Zephyr with CONFIG_TRUSTED_EXECUTION_SECURE=y implies + * building also a Non-Secure image. The Non-Secure image will, in + * this case do the remainder of actions to properly configure and + * boot the Network MCU. + */ + + /* Release the Network MCU, 'Release force off signal' */ + nrf_reset_network_force_off(NRF_RESET, false); + + LOG_DBG("Network MCU released."); +#endif /* !CONFIG_TRUSTED_EXECUTION_SECURE */ + + return 0; +} + +SYS_INIT(remoteproc_mgr_boot, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE); diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi new file mode 100644 index 00000000000..fbb059494c3 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_shared_sram_planning_conf.dtsi @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2019 Nordic Semiconductor ASA + * Copyright (c) 2021 Laird Connectivity + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* Default shared SRAM planning when building for BL5340 DVK. + * This file is included by both nRF5340 CPUAPP (Application MCU) + * and nRF5340 CPUNET (Network MCU). + * - 64 kB SRAM allocated as Shared memory (sram0_shared) + * - Region defined after the image SRAM of Application MCU + */ + +/ { + chosen { + /* shared memory reserved for the inter-processor communication */ + zephyr,ipc_shm = &sram0_shared; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + sram0_shared: memory@20070000 { + /* SRAM allocated to shared memory */ + reg = <0x20070000 0x10000>; + }; + }; +}; diff --git a/boards/lairdconnect/bl5340pa_dvk/board.cmake b/boards/lairdconnect/bl5340pa_dvk/board.cmake new file mode 100644 index 00000000000..5441735c28e --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/board.cmake @@ -0,0 +1,21 @@ +# Copyright (c) 2019 Nordic Semiconductor ASA +# Copyright (c) 2021 Laird Connectivity +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS) + set(TFM_PUBLIC_KEY_FORMAT "full") +endif() + +if(CONFIG_BOARD_BL5340PA_DVK_NRF5340_CPUAPP OR CONFIG_BOARD_BL5340PA_DVK_NRF5340_CPUAPP_NS) + board_runner_args(jlink "--device=nrf5340_xxaa_app" "--speed=4000") +elseif(BOARD_BL5340PA_DVK_NRF5340_CPUNET) + board_runner_args(jlink "--device=nrf5340_xxaa_net" "--speed=4000") +endif() + +if(CONFIG_TFM_FLASH_MERGED_BINARY) + set_property(TARGET runners_yaml_props_target PROPERTY hex_file tfm_merged.hex) +endif() + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/lairdconnect/bl5340pa_dvk/board.yml b/boards/lairdconnect/bl5340pa_dvk/board.yml new file mode 100644 index 00000000000..64bbed6b67c --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/board.yml @@ -0,0 +1,8 @@ +board: + name: bl5340pa_dvk + vendor: lairdconnect + socs: + - name: 'nrf5340' + variants: + - name: 'ns' + cpucluster: 'cpuapp' diff --git a/boards/lairdconnect/bl5340pa_dvk/doc/img/bl5340pa_dvk_side.png b/boards/lairdconnect/bl5340pa_dvk/doc/img/bl5340pa_dvk_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ff81c2ef6aa5ee3976833eb5f31e807df578d885 GIT binary patch literal 70016 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∈c>@OJQFV*CgkJ;yyCvwwy^IH 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, run this command for more + details on the related ``--recover`` option: + + .. code-block:: console + + west flash -H -r nrfjprog --skip-rebuild + +.. note:: + + Flashing and debugging applications on the BL5340PA DVK requires + upgrading the nRF Command Line Tools to version 10.12.0 or newer. + Further information on how to install the nRF Command Line Tools can + be found in :ref:`nordic_segger_flashing`. + +Here is an example for the :ref:`hello_world` application running on the +BL5340PA's application core. + +First, run your favorite terminal program to listen for output. + +.. code-block:: console + + $ minicom -D -b 115200 + +Replace :code:`` with the port where the BL5340PA DVK board +can be found. For example, under Linux, :code:`/dev/ttyACM0`. + +Then build and flash the application in the usual way. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: bl5340pa_dvk/nrf5340/cpuapp + :goals: build flash + +Debugging +========= + +Refer to the :ref:`nordic_segger` page to learn about debugging +boards with a Segger IC. + +Testing Bluetooth on the BL5340PA DVK +************************************* +Many of the Bluetooth examples will work on the BL5340PA DVK. +Try them out: + +* :ref:`ble_peripheral` +* :ref:`bluetooth-eddystone-sample` +* :ref:`bluetooth-ibeacon-sample` + +Regulatory Warning +****************** + +Note that the FEM on the BL5340PA module can boost the power of the +output signal by up to 20dBm, however this may not be compliant with +regulatory limits. The Nordic default gain for the FEM is 10 dBm. +The Laird Connectivity FEM driver defaults to 20 dBm and limits +the power at the antenna based on antenna type and region (by decreasing +the output power of the nRF5340). +Note that Laird Connectivity accepts no responsibility for regulatory issues +with end products. It is entirely the responsibility of the +device/end product manufacturer and/or designer. + +References +********** + +.. target-notes:: + +.. _IDAU: + https://developer.arm.com/docs/100690/latest/attribution-units-sau-and-idau +.. _BL5340 homepage: https://www.lairdconnect.com/wireless-modules/bluetooth-modules/bluetooth-5-modules/bl5340-series-multi-core-bluetooth-52-802154-nfc-modules +.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com +.. _TI TCA9538 datasheet: https://www.ti.com/lit/gpn/TCA9538 +.. _Macronix MX25R6435FZNIL0 datasheet: https://www.macronix.com/Lists/Datasheet/Attachments/8868/MX25R6435F,%20Wide%20Range,%2064Mb,%20v1.6.pdf +.. _Giantec GT24C256C-2GLI-TR datasheet: https://www.giantec-semi.com/juchen1123/uploads/pdf/GT24C256C_DS_Cu.pdf +.. _Bosch BME680 datasheet: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf +.. _ST Microelectronics LIS3DH datasheet: https://www.st.com/resource/en/datasheet/lis3dh.pdf +.. _Microchip ENC424J600 datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/39935c.pdf +.. _ER_TFTM028_4 datasheet: https://www.buydisplay.com/download/manual/ER-TFTM028-4_Datasheet.pdf +.. _ILI9341 datasheet: https://www.buydisplay.com/download/ic/ILI9341.pdf +.. _FT6206 datasheet: https://www.buydisplay.com/download/ic/FT6206.pdf +.. _Microchip MCP7940N datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/20005010H.pdf +.. _Microchip MCP4725 datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/22039d.pdf +.. _Trusted Firmware M: https://www.trustedfirmware.org/projects/tf-m/ diff --git a/boards/lairdconnect/bl5340pa_dvk/pre_dt_board.cmake b/boards/lairdconnect/bl5340pa_dvk/pre_dt_board.cmake new file mode 100644 index 00000000000..fb045e38545 --- /dev/null +++ b/boards/lairdconnect/bl5340pa_dvk/pre_dt_board.cmake @@ -0,0 +1,8 @@ +# Copyright (c) 2021 Linaro Limited +# SPDX-License-Identifier: Apache-2.0 + +# Suppress "unique_unit_address_if_enabled" to handle the following overlaps: +# - flash-controller@39000 & kmu@39000 +# - power@5000 & clock@5000 +# - /reserved-memory/image@20000000 & /reserved-memory/image_s@20000000 +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") From cc4701d64fb00537e19a0f52533dc6047c691123 Mon Sep 17 00:00:00 2001 From: Andrew Hedin Date: Wed, 19 Jul 2023 14:18:26 -0500 Subject: [PATCH 2/3] [nrf noup] bl5340pa_dvk: Increase main stack size for netcore Prevent stack overflow when FEM driver is enabled that results in an HCI driver open failure (endpoint binding failed). Bluetooth hci_ipc sample is used by many applications. The change must also be in this location because it overrides the defconfig. Signed-off-by: Andrew Hedin --- samples/bluetooth/hci_ipc/prj.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/bluetooth/hci_ipc/prj.conf b/samples/bluetooth/hci_ipc/prj.conf index 39c20b23cab..7ed2a31a32f 100644 --- a/samples/bluetooth/hci_ipc/prj.conf +++ b/samples/bluetooth/hci_ipc/prj.conf @@ -3,7 +3,7 @@ CONFIG_MBOX=y CONFIG_HEAP_MEM_POOL_SIZE=8192 -CONFIG_MAIN_STACK_SIZE=512 +CONFIG_MAIN_STACK_SIZE=2048 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512 CONFIG_BT=y From d60cc29d371a3172b95fd7526e673ab39f38e48f Mon Sep 17 00:00:00 2001 From: Andrew Hedin Date: Wed, 17 Jul 2024 09:13:59 -0500 Subject: [PATCH 3/3] bl5430: Fix SPI device used for mipi display Sets the correct SPI device to use when using MIPI display. Signed-off-by: Andrew Hedin --- .../bl5340_dvk/bl5340_dvk_nrf5340_cpuapp_common.dtsi | 2 +- .../bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boards/lairdconnect/bl5340_dvk/bl5340_dvk_nrf5340_cpuapp_common.dtsi b/boards/lairdconnect/bl5340_dvk/bl5340_dvk_nrf5340_cpuapp_common.dtsi index ff29e1f176e..b10199649d0 100644 --- a/boards/lairdconnect/bl5340_dvk/bl5340_dvk_nrf5340_cpuapp_common.dtsi +++ b/boards/lairdconnect/bl5340_dvk/bl5340_dvk_nrf5340_cpuapp_common.dtsi @@ -112,7 +112,7 @@ compatible = "zephyr,mipi-dbi-spi"; reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; - spi-dev = <&spi2>; + spi-dev = <&spi4>; write-only; #address-cells = <1>; #size-cells = <0>; diff --git a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi index 76609ab311f..94e6792cd84 100644 --- a/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi +++ b/boards/lairdconnect/bl5340pa_dvk/bl5340pa_dvk_nrf5340_cpuapp_common.dtsi @@ -112,7 +112,7 @@ compatible = "zephyr,mipi-dbi-spi"; reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; - spi-dev = <&spi2>; + spi-dev = <&spi4>; write-only; #address-cells = <1>; #size-cells = <0>;