Skip to content

Commit

Permalink
[nrf fromtree] boards: arm: add nrf9151dk_nrf9151
Browse files Browse the repository at this point in the history
This patch adds the nRF9151-DK board.

Signed-off-by: Maximilian Deubel <[email protected]>
(cherry picked from commit ecf6287b8ce9508f04a7591367869719b99d23ca)
  • Loading branch information
maxd-nordic authored and rlubos committed Jan 19, 2024
1 parent bc1d191 commit 79858b9
Show file tree
Hide file tree
Showing 17 changed files with 911 additions and 0 deletions.
14 changes: 14 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/Kconfig.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# nRF9151 DK NRF9151 board configuration

# Copyright (c) 2023 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

if SOC_NRF9151_LACA

config BOARD_NRF9151DK_NRF9151
bool "nRF9151 DK NRF9151"

config BOARD_NRF9151DK_NRF9151_NS
bool "nRF9151 DK NRF9151 non-secure"

endif # SOC_NRF9151_LACA
47 changes: 47 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# nRF9151 DK NRF9151 board configuration

# Copyright (c) 2023 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

if BOARD_NRF9151DK_NRF9151 || BOARD_NRF9151DK_NRF9151_NS

config BOARD
default "nrf9151dk_nrf9151"

# 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_NRF9151DK_NRF9151 && TRUSTED_EXECUTION_SECURE

if BOARD_NRF9151DK_NRF9151_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_NRF9151DK_NRF9151_NS

config BT_HCI_VS
default y if BT

config BT_WAIT_NOP
default BT && $(dt_nodelabel_enabled,nrf5340_reset)

config I2C
default $(dt_compat_on_bus,$(DT_COMPAT_NXP_PCAL6408A),i2c)

endif # BOARD_NRF9151DK_NRF9151 || BOARD_NRF9151DK_NRF9151_NS
14 changes: 14 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# SPDX-License-Identifier: Apache-2.0

if(CONFIG_BOARD_NRF9151DK_NRF9151_NS)
set(TFM_PUBLIC_KEY_FORMAT "full")
endif()

if(CONFIG_TFM_FLASH_MERGED_BINARY)
set_property(TARGET runners_yaml_props_target PROPERTY hex_file tfm_merged.hex)
endif()

# TODO: change to nRF9151_xxAA when such device is available in JLink
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)
203 changes: 203 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/doc/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
.. _nrf9151dk_nrf9151:

nRF9151 DK
##########

Overview
********

The nRF9151 DK (PCA10171) is a single-board development kit for evaluation and
development on the nRF9151 SiP for DECT NR+ and LTE-M/NB-IoT with GNSS. The nrf9151dk_nrf9151
board configuration provides support for the Nordic Semiconductor nRF9151 ARM
Cortex-M33F CPU with ARMv8-M Security Extension 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
`nRF9151 DK website`_. The `Nordic Semiconductor Infocenter`_
contains the processor's information and the datasheet.


Hardware
********

nRF9151 DK has two external oscillators. The frequency of
the slow clock is 32.768 kHz. The frequency of the main clock
is 32 MHz.

Supported Features
==================

The nrf9151dk_nrf9151 board configuration supports the following
hardware features:

+-----------+------------+----------------------+
| Interface | Controller | Driver/Component |
+===========+============+======================+
| ADC | on-chip | adc |
+-----------+------------+----------------------+
| CLOCK | on-chip | clock_control |
+-----------+------------+----------------------+
| FLASH | on-chip | flash |
+-----------+------------+----------------------+
| FLASH | external | spi |
+-----------+------------+----------------------+
| GPIO | on-chip | gpio |
+-----------+------------+----------------------+
| GPIO | external | i2c |
+-----------+------------+----------------------+
| 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 | nRF53 | console |
+-----------+------------+----------------------+
| SPI(M/S) | on-chip | spi |
+-----------+------------+----------------------+
| SPU | on-chip | system protection |
+-----------+------------+----------------------+
| UARTE | on-chip | serial |
+-----------+------------+----------------------+
| WDT | on-chip | watchdog |
+-----------+------------+----------------------+


.. _nrf9151dk_additional_hardware:

Other hardware features have not been enabled yet for this board.
See `nRF9151 DK website`_ and `Nordic Semiconductor Infocenter`_
for a complete list of nRF9151 DK board hardware features.

Connections and IOs
===================

LED
---

* LED1 (green) = P0.0
* LED2 (green) = P0.1
* LED3 (green) = P0.4
* LED4 (green) = P0.5

Push buttons and Switches
-------------------------

* BUTTON1 = P0.8
* BUTTON2 = P0.9
* SWITCH1 = P0.18
* SWITCH2 = P0.19
* BOOT = SW5 = boot/reset

Security components
===================

- Implementation Defined Attribution Unit (`IDAU`_). The IDAU is implemented
with the System Protection Unit and is used to define secure and non-secure
memory maps. By default, all of the memory space (Flash, SRAM, and
peripheral address space) is defined to be secure accessible only.
- Secure boot.


Programming and Debugging
*************************

nrf9151dk_nrf9151 supports the Armv8m Security Extension, and by default boots
in the Secure state.

Building Secure/Non-Secure Zephyr applications with Arm |reg| TrustZone |reg|
=============================================================================

The process requires the following steps:

1. Build the Secure Zephyr application using ``-DBOARD=nrf9151dk_nrf9151`` and
``CONFIG_TRUSTED_EXECUTION_SECURE=y`` in the application project configuration file.
2. Build the Non-Secure Zephyr application using ``-DBOARD=nrf9151dk_nrf9151_ns``.
3. Merge the two binaries together.

When building a Secure/Non-Secure application, the Secure application will
have to set the IDAU (SPU) configuration to allow Non-Secure access to all
CPU resources utilized by the Non-Secure application firmware. SPU
configuration shall take place before jumping to the Non-Secure application.

Building a Secure only application
==================================

Build the Zephyr app in the usual way (see :ref:`build_an_application`
and :ref:`application_run`), using ``-DBOARD=nrf9151dk_nrf9151``.

Flashing
========

Follow the instructions in the :ref:`nordic_segger` page to install
and configure all the necessary software. Further information can be
found in :ref:`nordic_segger_flashing`. Then build and flash
applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Here is an example for the :ref:`hello_world` application.

First, run your favorite terminal program to listen for output.

.. code-block:: console
$ minicom -D <tty_device> -b 115200
Replace :code:`<tty_device>` with the port where the nRF9151 DK
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: nrf9151dk_nrf9151
:goals: build flash

Debugging
=========

Refer to the :ref:`nordic_segger` page to learn about debugging Nordic boards with a
Segger IC.


Testing the LEDs and buttons in the nRF9151 DK
**********************************************

There are 2 samples that allow you to test that the buttons (switches) and LEDs on
the board are working properly with Zephyr:

* :zephyr:code-sample:`blinky`
* :zephyr:code-sample:`button`

You can build and flash the examples to make sure Zephyr is running correctly on
your board. The button and LED definitions can be found in
:zephyr_file:`boards/arm/nrf9151dk_nrf9151/nrf9151dk_nrf9151_common.dtsi`.

References
**********

.. target-notes::

.. _IDAU:
https://developer.arm.com/docs/100690/latest/attribution-units-sau-and-idau
.. _nRF9151 DK website: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF9151-DK
.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com
.. _Trusted Firmware M: https://www.trustedfirmware.org/projects/tf-m/
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2023 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

description: GPIO used to reset nRF5340 on nRF9151 DK

compatible: "nordic,nrf9151dk-nrf5340-reset"

include: base.yaml

properties:
status:
required: true

gpios:
type: phandle-array
required: true
description: |
GPIO to use as nRF5340 reset line: output in nRF9151, input in nRF5340.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

&pcal6408a {
status = "okay";
};

&button0 {
gpios = <&pcal6408a 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
};

&button1 {
gpios = <&pcal6408a 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
};

&button2 {
gpios = <&pcal6408a 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
};

&button3 {
gpios = <&pcal6408a 3 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

&pcal6408a {
status = "okay";
};

&led0 {
gpios = <&pcal6408a 4 GPIO_ACTIVE_HIGH>;
};

&led1 {
gpios = <&pcal6408a 5 GPIO_ACTIVE_HIGH>;
};

&led2 {
gpios = <&pcal6408a 6 GPIO_ACTIVE_HIGH>;
};

&led3 {
gpios = <&pcal6408a 7 GPIO_ACTIVE_HIGH>;
};
19 changes: 19 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/nrf9151dk_nrf9151.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

/dts-v1/;
#include <nordic/nrf9151_laca.dtsi>
#include "nrf9151dk_nrf9151_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;
};
};
22 changes: 22 additions & 0 deletions boards/arm/nrf9151dk_nrf9151/nrf9151dk_nrf9151.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
identifier: nrf9151dk_nrf9151
name: nRF9151-DK-NRF9151
type: mcu
arch: arm
toolchain:
- gnuarmemb
- xtools
- zephyr
ram: 88
flash: 1024
supported:
- arduino_gpio
- arduino_i2c
- arduino_serial
- arduino_spi
- gpio
- i2c
- pwm
- spi
- watchdog
- counter
vendor: nordic
Loading

0 comments on commit 79858b9

Please sign in to comment.