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 <florijan.plohl@norik.com>
This commit is contained in:
Florijan Plohl 2024-06-11 09:04:11 +02:00 committed by Benjamin Cabé
parent c41570871b
commit 00cbdf86a8
19 changed files with 521 additions and 0 deletions

10
boards/norik/index.rst Normal file
View file

@ -0,0 +1,10 @@
.. _boards-norik:
Norik Systems
#############
.. toctree::
:maxdepth: 1
:glob:
**/*

View file

@ -0,0 +1,5 @@
# Copyright (c) 2024 Norik Systems
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources(board.c)

View file

@ -0,0 +1,10 @@
# Copyright (c) 2024 Norik Systems
# SPDX-License-Identifier: Apache-2.0
config BOARD_OCTOPUS_SOM
select BOARD_LATE_INIT_HOOK
select GPIO
module = OCTOPUS_SOM_CONTROL
module-str = Board Control
source "subsys/logging/Kconfig.template.log_config"

View file

@ -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

View file

@ -0,0 +1,5 @@
# Copyright (c) 2024 Norik Systems
# SPDX-License-Identifier: Apache-2.0
config BOARD_OCTOPUS_SOM
select SOC_NRF9160_SICA

View file

@ -0,0 +1,32 @@
/*
* Copyright (c) 2024 Norik Systems
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/init.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(board_control, CONFIG_OCTOPUS_SOM_CONTROL_LOG_LEVEL);
#define SIM_SELECT_NODE DT_PATH(sim_select)
void board_late_init_hook(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;
}
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");
}
}

View file

@ -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)

View file

@ -0,0 +1,8 @@
board:
name: octopus_som
full_name: Octopus SoM
vendor: norik
socs:
- name: nrf9160
variants:
- name: 'ns'

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -0,0 +1,125 @@
.. zephyr:board:: 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)`
More information about the board can be found at the `Octopus SoM Product Page`_ and
in the `Octopus SoM Documentation`_.
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`` board target for building examples.
Some examples don't require non secure mode and can be built with ``octopus_som/nrf9160`` board 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
**********
.. target-notes::
.. _Octopus SoM Product Page: https://www.norik.com/2024/09/16/octopus-som/
.. _Octopus SoM Documentation: https://www.norik.com/wp-content/uploads/2024/09/Octopus_SoM_Datasheet.pdf

View file

@ -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)

View file

@ -0,0 +1,51 @@
/*
* Copyright (c) 2024 Norik Systems
* SPDX-License-Identifier: Apache-2.0
*/
&pinctrl {
uart0_default: uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 23)>,
<NRF_PSEL(UART_RX, 0, 24)>;
};
};
uart0_sleep: uart0_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 23)>,
<NRF_PSEL(UART_RX, 0, 24)>;
low-power-enable;
};
};
pwm0_default: pwm0_default {
group1 {
psels = <NRF_PSEL(PWM_OUT0, 0, 7)>;
};
};
pwm0_sleep: pwm0_sleep {
group1 {
psels = <NRF_PSEL(PWM_OUT0, 0, 7)>;
low-power-enable;
};
};
spi3_default: spi3_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 10)>,
<NRF_PSEL(SPIM_MISO, 0, 8)>,
<NRF_PSEL(SPIM_MOSI, 0, 9)>;
};
};
spi3_sleep: spi3_sleep {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 10)>,
<NRF_PSEL(SPIM_MISO, 0, 8)>,
<NRF_PSEL(SPIM_MOSI, 0, 9)>;
low-power-enable;
};
};
};

View file

@ -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 <common/nordic/nrf91xx_partition.dtsi>

View file

@ -0,0 +1,20 @@
# 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

View file

@ -0,0 +1,23 @@
/*
* Copyright (c) 2024 Norik Systems
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <nordic/nrf9160_sica.dtsi>
#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>;
};

View file

@ -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

View file

@ -0,0 +1,16 @@
/*
* Copyright (c) 2024 Norik Systems
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <nordic/nrf9160ns_sica.dtsi>
#include "octopus_som_common.dtsi"
/ {
chosen {
zephyr,flash = &flash0;
zephyr,sram = &sram0_ns_app;
zephyr,code-partition = &slot0_ns_partition;
};
};

View file

@ -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

View file

@ -0,0 +1,23 @@
# 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