From 954ce4ca91b542b67096a7d6ddb87acba4066240 Mon Sep 17 00:00:00 2001 From: Florijan Plohl Date: Tue, 11 Jun 2024 09:04:11 +0200 Subject: [PATCH] boards: norik: Add support for Norik Octopus SoM Add support for Norik Systems Octopus SoM based on nRF9160 SiP. Supported features: - LTE-M/NB-IoT - GPS - LED - 3-axis accelerometer Signed-off-by: Florijan Plohl --- boards/norik/index.rst | 10 ++ boards/norik/octopus_som/CMakeLists.txt | 5 + boards/norik/octopus_som/Kconfig | 15 +++ boards/norik/octopus_som/Kconfig.defconfig | 33 +++++ boards/norik/octopus_som/Kconfig.octopus_som | 5 + boards/norik/octopus_som/board.c | 38 ++++++ boards/norik/octopus_som/board.cmake | 6 + boards/norik/octopus_som/board.yml | 7 + .../doc/img/Norik_Octopus_SoM_front.webp | Bin 0 -> 47752 bytes boards/norik/octopus_som/doc/index.rst | 126 ++++++++++++++++++ .../dts/bindings/norik,sim_select.yaml | 26 ++++ .../octopus_som_common-pinctrl.dtsi | 51 +++++++ .../norik/octopus_som/octopus_som_common.dtsi | 94 +++++++++++++ .../norik/octopus_som/octopus_som_defconfig | 21 +++ .../norik/octopus_som/octopus_som_nrf9160.dts | 23 ++++ .../octopus_som/octopus_som_nrf9160.yaml | 17 +++ .../octopus_som/octopus_som_nrf9160_ns.dts | 16 +++ .../octopus_som/octopus_som_nrf9160_ns.yaml | 17 +++ .../octopus_som_nrf9160_ns_defconfig | 24 ++++ 19 files changed, 534 insertions(+) create mode 100644 boards/norik/index.rst create mode 100644 boards/norik/octopus_som/CMakeLists.txt create mode 100644 boards/norik/octopus_som/Kconfig create mode 100644 boards/norik/octopus_som/Kconfig.defconfig create mode 100644 boards/norik/octopus_som/Kconfig.octopus_som create mode 100644 boards/norik/octopus_som/board.c create mode 100644 boards/norik/octopus_som/board.cmake create mode 100644 boards/norik/octopus_som/board.yml create mode 100644 boards/norik/octopus_som/doc/img/Norik_Octopus_SoM_front.webp create mode 100644 boards/norik/octopus_som/doc/index.rst create mode 100644 boards/norik/octopus_som/dts/bindings/norik,sim_select.yaml create mode 100644 boards/norik/octopus_som/octopus_som_common-pinctrl.dtsi create mode 100644 boards/norik/octopus_som/octopus_som_common.dtsi create mode 100644 boards/norik/octopus_som/octopus_som_defconfig create mode 100644 boards/norik/octopus_som/octopus_som_nrf9160.dts create mode 100644 boards/norik/octopus_som/octopus_som_nrf9160.yaml create mode 100644 boards/norik/octopus_som/octopus_som_nrf9160_ns.dts create mode 100644 boards/norik/octopus_som/octopus_som_nrf9160_ns.yaml create mode 100644 boards/norik/octopus_som/octopus_som_nrf9160_ns_defconfig diff --git a/boards/norik/index.rst b/boards/norik/index.rst new file mode 100644 index 000000000000000..11d8f1353f5d02e --- /dev/null +++ b/boards/norik/index.rst @@ -0,0 +1,10 @@ +.. _boards-norik: + +Norik Systems +############# + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/norik/octopus_som/CMakeLists.txt b/boards/norik/octopus_som/CMakeLists.txt new file mode 100644 index 000000000000000..2e35c87b81db63c --- /dev/null +++ b/boards/norik/octopus_som/CMakeLists.txt @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +zephyr_library() +zephyr_library_sources(board.c) diff --git a/boards/norik/octopus_som/Kconfig b/boards/norik/octopus_som/Kconfig new file mode 100644 index 000000000000000..35b72c108ad9008 --- /dev/null +++ b/boards/norik/octopus_som/Kconfig @@ -0,0 +1,15 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_OCTOPUS_SOM + select PINCTRL + +config OCTOPUS_SOM_CONTROL_INIT_PRIORITY + int "Init priority" + default 99 + help + Init priority for board control. + +module = OCTOPUS_SOM_CONTROL +module-str = Board Control +source "subsys/logging/Kconfig.template.log_config" diff --git a/boards/norik/octopus_som/Kconfig.defconfig b/boards/norik/octopus_som/Kconfig.defconfig new file mode 100644 index 000000000000000..6fe9d1618a5b1c9 --- /dev/null +++ b/boards/norik/octopus_som/Kconfig.defconfig @@ -0,0 +1,33 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_OCTOPUS_SOM + +# 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. + +# Workaround for not being able to have commas in macro arguments +DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + depends on BOARD_OCTOPUS_SOM && TRUSTED_EXECUTION_SECURE + +if BOARD_OCTOPUS_SOM_NRF9160_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_OCTOPUS_SOM_NRF9160_NS + +endif # BOARD_OCTOPUS_SOM diff --git a/boards/norik/octopus_som/Kconfig.octopus_som b/boards/norik/octopus_som/Kconfig.octopus_som new file mode 100644 index 000000000000000..c249d541948f7a2 --- /dev/null +++ b/boards/norik/octopus_som/Kconfig.octopus_som @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_OCTOPUS_SOM + select SOC_NRF9160_SICA diff --git a/boards/norik/octopus_som/board.c b/boards/norik/octopus_som/board.c new file mode 100644 index 000000000000000..4080620bebb1d45 --- /dev/null +++ b/boards/norik/octopus_som/board.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 Norik Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_REGISTER(board_control, CONFIG_OCTOPUS_SOM_CONTROL_LOG_LEVEL); + +#define SIM_SELECT_NODE DT_PATH(sim_select) + +static int octopus_som_init(void) +{ + const struct gpio_dt_spec simctrl = GPIO_DT_SPEC_GET(DT_PATH(sim_select), sim_gpios); + + if (!gpio_is_ready_dt(&simctrl)) { + LOG_ERR("SIM select GPIO not available"); + return -ENODEV; + } + + if (DT_ENUM_IDX(SIM_SELECT_NODE, sim) == 0) { + (void)gpio_pin_configure_dt(&simctrl, GPIO_OUTPUT_LOW); + LOG_INF("On-board SIM selected"); + } else { + (void)gpio_pin_configure_dt(&simctrl, GPIO_OUTPUT_HIGH); + LOG_INF("External SIM selected"); + } + + return 0; +} + +SYS_INIT(octopus_som_init, POST_KERNEL, CONFIG_OCTOPUS_SOM_CONTROL_INIT_PRIORITY); diff --git a/boards/norik/octopus_som/board.cmake b/boards/norik/octopus_som/board.cmake new file mode 100644 index 000000000000000..e1ae7b4e9b23736 --- /dev/null +++ b/boards/norik/octopus_som/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=nRF9160_xxAA" "--speed=4000") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/norik/octopus_som/board.yml b/boards/norik/octopus_som/board.yml new file mode 100644 index 000000000000000..122f3b3391d6473 --- /dev/null +++ b/boards/norik/octopus_som/board.yml @@ -0,0 +1,7 @@ +board: + name: octopus_som + vendor: norik + socs: + - name: nrf9160 + variants: + - name: 'ns' diff --git a/boards/norik/octopus_som/doc/img/Norik_Octopus_SoM_front.webp b/boards/norik/octopus_som/doc/img/Norik_Octopus_SoM_front.webp new file mode 100644 index 0000000000000000000000000000000000000000..9bd8e8ed2ddd5ff0806dd7dce18a2e3410b4af09 GIT binary patch literal 47752 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 literal 0 HcmV?d00001 diff --git a/boards/norik/octopus_som/doc/index.rst b/boards/norik/octopus_som/doc/index.rst new file mode 100644 index 000000000000000..91a1b7cab18a34e --- /dev/null +++ b/boards/norik/octopus_som/doc/index.rst @@ -0,0 +1,126 @@ +.. _octopus_som: + +Norik Octopus SOM +################# + +Overview +******** + +Octopus SoM is a System on Module (SoM) built around the nRF9160 SiP +offering NB-IoT and LTE-M connectivity, GPS and accelerometer. +It supports on board eSIM and external nano SIM connector. It's purpose +is to provide flexible hardware platform for IoT applications. + +nRF9160 SiP contains ARM Cortex-M33 application processor and the +following devices: + +* :abbr:`ADC (Analog to Digital Converter)` +* CLOCK +* FLASH +* :abbr:`GPIO (General Purpose Input Output)` +* :abbr:`I2C (Inter-Integrated Circuit)` +* :abbr:`MPU (Memory Protection Unit)` +* :abbr:`NVIC (Nested Vectored Interrupt Controller)` +* :abbr:`PWM (Pulse Width Modulation)` +* :abbr:`RTC (nRF RTC System Clock)` +* Segger RTT (RTT Console) +* :abbr:`SPI (Serial Peripheral Interface)` +* :abbr:`UARTE (Universal asynchronous receiver-transmitter with EasyDMA)` +* :abbr:`WDT (Watchdog Timer)` +* :abbr:`IDAU (Implementation Defined Attribution Unit)` + +.. figure:: img/Norik_Octopus_SoM_front.webp + :align: center + :alt: Norik Octopus SOM front view + + Norik Octopus SoM + +Hardware +******** + +The ``octopus_som/nrf9160`` and ``octopus_som/nrf9160/ns`` board targets support the +following hardware features: + ++-----------+------------+----------------------+ +| Interface | Controller | Driver/Component | ++===========+============+======================+ +| ADC | on-chip | adc | ++-----------+------------+----------------------+ +| CLOCK | on-chip | clock_control | ++-----------+------------+----------------------+ +| FLASH | on-chip | flash | ++-----------+------------+----------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+----------------------+ +| I2C(M) | on-chip | i2c | ++-----------+------------+----------------------+ +| MPU | on-chip | arch/arm | ++-----------+------------+----------------------+ +| NVIC | on-chip | arch/arm | ++-----------+------------+----------------------+ +| PWM | on-chip | pwm | ++-----------+------------+----------------------+ +| RTC | on-chip | system clock | ++-----------+------------+----------------------+ +| RTT | Segger | console | ++-----------+------------+----------------------+ +| SPI(M/S) | on-chip | spi | ++-----------+------------+----------------------+ +| SPU | on-chip | system protection | ++-----------+------------+----------------------+ +| UARTE | on-chip | serial | ++-----------+------------+----------------------+ +| WDT | on-chip | watchdog | ++-----------+------------+----------------------+ +| ACCEL | Analog | adxl362 | ++-----------+------------+----------------------+ + +Connections and IOs +=================== + +Accelerometer +------------- +* MISO = P0.05 +* MOSI = P0.09 +* SCK = P0.10 +* CS = P0.05 +* INT1 = P0.12 + +LED +--- +* LED1 (green) = P0.07 + +SIM select switch +----------------- +* Select = P0.25 + +Programming and Debugging +************************* + +Norik Octopus SoM can be programmed and debugged using the exposed SWD pins. + +Building an application +======================= + +In most case you'll need to use ``octopus_som/nrf9160/ns`` target for building examples. +Some examples don't require non secure mode and can be built with ``octopus_som/nrf9160`` target. + +Flashing +======== +Refer to the instruction in the :ref:`nordic_segger` page to install and +configure all the necessary software. + +Use the :zephyr:code-sample:`blinky` sample to test if Zephyr is running correctly on your board. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: octopus_som/nrf9160 + :goals: build flash + +Debugging +========= +Refer to the instruction in the :ref:`nordic_segger` page for information on +debugging. + +References +********** diff --git a/boards/norik/octopus_som/dts/bindings/norik,sim_select.yaml b/boards/norik/octopus_som/dts/bindings/norik,sim_select.yaml new file mode 100644 index 000000000000000..2745afaac9434b2 --- /dev/null +++ b/boards/norik/octopus_som/dts/bindings/norik,sim_select.yaml @@ -0,0 +1,26 @@ +# Copyright (c) 2024 Norik Systems +# SPDX-License-Identifier: Apache-2.0 + +description: | + The Octopus SoM provides the user 2 options for connecting + a SIM card to the nRF9160. Option one is to use on-board eSIM or + external nano SIM. Which SIM is used can be selected using the 'sim' + property of the 'sim_select' dt node. + +compatible: "norik,sim_select" + +include: base.yaml + +properties: + sim-gpios: + type: phandle-array + required: true + description: Pin used to select which SIM is used + + sim: + type: string + required: true + enum: + - "on-board" + - "external" + description: SIM choice (on-board eSIM or external nano SIM) diff --git a/boards/norik/octopus_som/octopus_som_common-pinctrl.dtsi b/boards/norik/octopus_som/octopus_som_common-pinctrl.dtsi new file mode 100644 index 000000000000000..52e65b6302c9d36 --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_common-pinctrl.dtsi @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2024 Norik Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + ; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + spi3_default: spi3_default { + group1 { + psels = , + , + ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/norik/octopus_som/octopus_som_common.dtsi b/boards/norik/octopus_som/octopus_som_common.dtsi new file mode 100644 index 000000000000000..538dfa3c0ec45ff --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_common.dtsi @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024 Norik Systems + * SPDX-License-Identifier: Apache-2.0 + */ +#include "octopus_som_common-pinctrl.dtsi" + +/ { + model = "Norik Octopus SoM"; + compatible = "norik,octopus-som"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + }; + + leds { + compatible = "gpio-leds"; + + led0: led_0 { + gpios = <&gpio0 7 0>; + label = "Green LED 1"; + }; + + }; + + pwmleds { + compatible = "pwm-leds"; + + pwm_led0: pwm_led_0 { + pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + }; + }; + + sim_select: sim_select { + compatible = "norik,sim_select"; + sim-gpios= <&gpio0 25 GPIO_ACTIVE_HIGH>; + sim = "external"; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + pwm-led0 = &pwm_led0; + watchdog0 = &wdt0; + accel0 = &adxl362; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + + adxl362: adxl362@0 { + compatible = "adi,adxl362"; + spi-max-frequency = <8000000>; + reg = <0>; + int1-gpios = <&gpio0 12 0>; + }; +}; + +/* Include default memory partition configuration file */ +#include diff --git a/boards/norik/octopus_som/octopus_som_defconfig b/boards/norik/octopus_som/octopus_som_defconfig new file mode 100644 index 000000000000000..4a21d278a39bd7c --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_defconfig @@ -0,0 +1,21 @@ +# 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 +CONFIG_INPUT_GPIO_KEYS=n + +# Enable uart driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/boards/norik/octopus_som/octopus_som_nrf9160.dts b/boards/norik/octopus_som/octopus_som_nrf9160.dts new file mode 100644 index 000000000000000..b0e9f77fe0db515 --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_nrf9160.dts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 Norik Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "octopus_som_common.dtsi" + +/ { + chosen { + zephyr,sram = &sram0_s; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,sram-secure-partition = &sram0_s; + zephyr,sram-non-secure-partition = &sram0_ns; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; +}; diff --git a/boards/norik/octopus_som/octopus_som_nrf9160.yaml b/boards/norik/octopus_som/octopus_som_nrf9160.yaml new file mode 100644 index 000000000000000..44a13234b8afa72 --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_nrf9160.yaml @@ -0,0 +1,17 @@ +identifier: octopus_som/nrf9160 +name: Norik Octopus SoM +type: mcu +arch: arm +ram: 88 +flash: 1024 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio + - i2c + - spi + - pwm + - watchdog +vendor: norik diff --git a/boards/norik/octopus_som/octopus_som_nrf9160_ns.dts b/boards/norik/octopus_som/octopus_som_nrf9160_ns.dts new file mode 100644 index 000000000000000..3cd80c2ca33a62d --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_nrf9160_ns.dts @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 Norik Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include "octopus_som_common.dtsi" + +/ { + chosen { + zephyr,flash = &flash0; + zephyr,sram = &sram0_ns_app; + zephyr,code-partition = &slot0_ns_partition; + }; +}; diff --git a/boards/norik/octopus_som/octopus_som_nrf9160_ns.yaml b/boards/norik/octopus_som/octopus_som_nrf9160_ns.yaml new file mode 100644 index 000000000000000..85bb40d75ab196d --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_nrf9160_ns.yaml @@ -0,0 +1,17 @@ +identifier: octopus_som/nrf9160/ns +name: Norik Octopus SoM Non-Secure +type: mcu +arch: arm +ram: 128 +flash: 192 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio + - i2c + - spi + - pwm + - watchdog +vendor: norik diff --git a/boards/norik/octopus_som/octopus_som_nrf9160_ns_defconfig b/boards/norik/octopus_som/octopus_som_nrf9160_ns_defconfig new file mode 100644 index 000000000000000..767842f7419e394 --- /dev/null +++ b/boards/norik/octopus_som/octopus_som_nrf9160_ns_defconfig @@ -0,0 +1,24 @@ +# 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 +CONFIG_INPUT_GPIO_KEYS=n + +# Enable uart driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y