boards: arm: nrf9160dk_*: Convert to v2

Converts the board to hwmv2

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
This commit is contained in:
Jamie McCrae
2024-02-02 11:38:13 +00:00
committed by Carles Cufi
parent c1565b3d14
commit dd0672a64c
54 changed files with 344 additions and 457 deletions

View File

@@ -1,4 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources(board.c)

View File

@@ -1,12 +0,0 @@
# nRF9160 DK NRF52840 board configuration
# Copyright (c) 2018-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
config BOARD_NRF9160DK_NRF52840
bool "NRF9160 DK NRF52840"
depends on SOC_NRF52840_QIAA
# The GPIO driver is required by this board's initialization code
# (board.c), so it is forced here to be enabled always, not only
# enabled by default (in defconfig).
select GPIO

View File

@@ -1,17 +0,0 @@
# nRF9160 DK NRF52840 board configuration
# Copyright (c) 2018 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
if BOARD_NRF9160DK_NRF52840
config BOARD
default "nrf9160dk_nrf52840"
config BT_CTLR
default BT
config BT_WAIT_NOP
default BT && $(dt_nodelabel_enabled,reset_input)
endif # BOARD_NRF9160DK_NRF52840

View File

@@ -1,7 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)

View File

@@ -1,8 +0,0 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
board_check_revision(
FORMAT MAJOR.MINOR.PATCH
DEFAULT_REVISION 0.14.0
VALID_REVISIONS 0.7.0 0.14.0
)

View File

@@ -1,5 +0,0 @@
# Copyright (c) 2019 Nordic Semiconductor ASA.
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources(nrf52840_reset.c)

View File

@@ -1,14 +0,0 @@
# nRF9160 DK NRF9160 board configuration
# Copyright (c) 2018-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
if SOC_NRF9160_SICA
config BOARD_NRF9160DK_NRF9160
bool "nRF9160 DK NRF9160"
config BOARD_NRF9160DK_NRF9160_NS
bool "nRF9160 DK NRF9160 non-secure"
endif # SOC_NRF9160_SICA

View File

@@ -1,14 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
if(CONFIG_BOARD_NRF9160DK_NRF9160_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()
board_runner_args(jlink "--device=nRF9160_xxAA" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

View File

@@ -1,264 +0,0 @@
.. _nrf9160dk_nrf9160:
nRF9160 DK
##########
Overview
********
The nRF9160 DK (PCA10090) is a single-board development kit for evaluation and
development on the nRF9160 SiP for LTE-M and NB-IoT. The nrf9160dk_nrf9160
board configuration provides support for the Nordic Semiconductor nRF9160 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)`
.. figure:: img/nrf9160dk_nrf9160.jpg
:align: center
:alt: nRF9160 DK
nRF9160 DK (Credit: Nordic Semiconductor)
More information about the board can be found at the
`nRF9160 DK website`_. The `Nordic Semiconductor Infocenter`_
contains the processor's information and the datasheet.
Hardware
********
nRF9160 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 nrf9160dk_nrf9160 board configuration supports 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 |
+-----------+------------+----------------------+
.. _nrf9160dk_additional_hardware:
Additional hardware in v0.14.0+
-------------------------------
Starting from v0.14.0, additional hardware is available on the DK:
* External flash memory (MX25R6435F, 64 Mb)
* I/O expander (PCAL6408A) that can be used to interface LEDs, slide switches,
and buttons
To use this additional hardware, specify the revision of the board that
should be used when building your application (for more information, see
:ref:`application_board_version`). For example, to build for nRF9160 DK v1.0.0:
.. zephyr-app-commands::
:tool: all
:cd-into:
:board: nrf9160dk_nrf9160@1.0.0
:goals: build
:compact:
Remember to also enable routing for this additional hardware in the firmware for
:ref:`nrf9160dk_nrf52840` (see :ref:`nrf9160dk_board_controller_firmware`).
Other hardware features have not been enabled yet for this board.
See `nRF9160 DK website`_ and `Nordic Semiconductor Infocenter`_
for a complete list of nRF9160 DK board hardware features.
Connections and IOs
===================
LED
---
* LED1 (green) = P0.2
* LED2 (green) = P0.3
* LED3 (green) = P0.4
* LED4 (green) = P0.5
Push buttons and Switches
-------------------------
* BUTTON1 = P0.6
* BUTTON2 = P0.7
* SWITCH1 = P0.8
* SWITCH2 = P0.9
* 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
*************************
nrf9160dk_nrf9160 supports the Armv8m Security Extension, and by default boots
in the Secure state.
Building Secure/Non-Secure Zephyr applications with Arm |reg| TrustZone |reg|
=============================================================================
Applications on the nRF9160 may contain a Secure and a Non-Secure firmware
image. The Secure image can be built using either Zephyr or
`Trusted Firmware M`_ (TF-M). Non-Secure firmware images are always built
using Zephyr. The two alternatives are described below.
.. note::
By default the Secure image for nRF9160 is built using TF-M.
Building the Secure firmware using Zephyr
-----------------------------------------
The process requires the following steps:
1. Build the Secure Zephyr application using ``-DBOARD=nrf9160dk_nrf9160`` and
``CONFIG_TRUSTED_EXECUTION_SECURE=y`` in the application project configuration file.
2. Build the Non-Secure Zephyr application using ``-DBOARD=nrf9160dk_nrf9160_ns``.
3. Merge the two binaries together.
Building the Secure firmware with TF-M
--------------------------------------
The process to build the Secure firmware image using TF-M and the Non-Secure
firmware image using Zephyr requires the following action:
1. Build the Non-Secure Zephyr application
using ``-DBOARD=nrf9160dk_nrf9160_ns``.
To invoke the building of TF-M the Zephyr build system requires the
Kconfig option ``BUILD_WITH_TFM`` to be enabled, which is done by
default when building Zephyr as a Non-Secure application.
The Zephyr build system will perform the following steps automatically:
* Build the Non-Secure firmware image as a regular Zephyr application
* Build a TF-M (secure) firmware image
* Merge the output binaries together
* Optionally build a bootloader image (MCUboot)
.. note::
Depending on the TF-M configuration, an application DTS overlay may be
required, to adjust the Non-Secure image Flash and SRAM starting address
and sizes.
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=nrf9160dk_nrf9160``.
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 nRF9160 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: nrf9160dk_nrf9160
: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 nRF9160 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/nrf9160dk_nrf9160/nrf9160dk_nrf9160_common.dtsi`.
References
**********
.. target-notes::
.. _IDAU:
https://developer.arm.com/docs/100690/latest/attribution-units-sau-and-idau
.. _nRF9160 DK website: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF9160-DK
.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com
.. _Trusted Firmware M: https://www.trustedfirmware.org/projects/tf-m/

View File

@@ -1,42 +0,0 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
# NOTE: This file is replicated in nrf9160dk_nrf9160 and nrf9160dk_nrf52840.
# Any changes should be done in both instances.
description: |
nRF9160 DK GPIO interface between nRF9160 and nRF52840
This interface can be used for inter-SoC communication on the DK.
The connections are as follows:
| nRF9160 | | nRF52840 |
| P0.17 | -- nRF interface line 0 -- | P0.17 |
| P0.18 | -- nRF interface line 1 -- | P0.20 |
| P0.19 | -- nRF interface line 2 -- | P0.15 |
| P0.21 | -- nRF interface line 3 -- | P0.22 |
| P0.22 | -- nRF interface line 4 -- | P1.04 |
| P0.23 | -- nRF interface line 5 -- | P1.02 |
| COEX0 | -- nRF interface line 6 -- | P1.13 |
| COEX1 | -- nRF interface line 7 -- | P1.11 |
| COEX2 | -- nRF interface line 8 -- | P1.15 |
| P0.24 | -- nRF interface line 9 -- | P0.18 (nRESET) | (in v0.14.0 or later)
Before particular lines of this interface can be used, the corresponding
analog switches that control the routing of involved nRF9160 pins must be
configured to provide the optional routing (i.e. to nRF52840). To achieve
this, set the status of respective devicetree nodes in the firmware for
the nrf9160dk_nrf52840 board to "okay":
- `nrf_interface_pins_0_2_routing` to enable lines 0-2
- `nrf_interface_pins_3_5_routing` to enable lines 3-5
- `nrf_interface_pins_6_8_routing` to enable lines 6-8
- `nrf_interface_pin_9_routing` to enable line 9 (this line is only
available in nRF9160 DK v0.14.0 or later)
NOTE: In nRF9160 DK revisions earlier than v0.14.0, when the above signals
from nRF9160 are routed to nRF52840, they are not available on the DK
connectors.
compatible: "nordic,nrf9160dk-nrf52840-interface"
include: [gpio-nexus.yaml, base.yaml]

View File

@@ -1,21 +0,0 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
# NOTE: This file is replicated in nrf9160dk_nrf9160 and nrf9160dk_nrf52840.
# Any changes should be done in both instances.
description: GPIO used to reset nRF52840 on nRF9160 DK
compatible: "nordic,nrf9160dk-nrf52840-reset"
include: base.yaml
properties:
status:
required: true
gpios:
type: phandle-array
required: true
description: |
GPIO to use as nRF52840 reset line: output in nRF9160, input in nRF52840.

View File

@@ -1,7 +0,0 @@
# 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
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")

View File

@@ -1,8 +0,0 @@
# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
board_check_revision(
FORMAT MAJOR.MINOR.PATCH
DEFAULT_REVISION 0.14.0
VALID_REVISIONS 0.7.0 0.14.0
)

View File

@@ -0,0 +1,10 @@
# Copyright (c) 2019 Nordic Semiconductor ASA.
# SPDX-License-Identifier: Apache-2.0
if(CONFIG_BOARD_NRF9160DK_NRF9160)
zephyr_library()
zephyr_library_sources(nrf52840_reset.c)
elseif(CONFIG_BOARD_NRF9160DK_NRF52840)
zephyr_library()
zephyr_library_sources(board.c)
endif()

View File

@@ -3,6 +3,12 @@
# Copyright (c) 2018-2020 Nordic Semiconductor ASA # Copyright (c) 2018-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
config BOARD_NRF9160DK
# The GPIO driver is required by this board's initialization code
# (board.c), so it is forced here to be enabled always, not only
# enabled by default (in defconfig).
select GPIO if BOARD_NRF9160DK_NRF52840
if BOARD_NRF9160DK_NRF52840 if BOARD_NRF9160DK_NRF52840
config BOARD_ENABLE_DCDC config BOARD_ENABLE_DCDC
@@ -14,4 +20,4 @@ module = BOARD_NRF9160DK
module-str = Board Control module-str = Board Control
source "subsys/logging/Kconfig.template.log_config" source "subsys/logging/Kconfig.template.log_config"
endif # BOARD_NRF52840_NRF9160DK endif # BOARD_NRF9160DK_NRF52840

View File

@@ -5,9 +5,6 @@
if BOARD_NRF9160DK_NRF9160 || BOARD_NRF9160DK_NRF9160_NS if BOARD_NRF9160DK_NRF9160 || BOARD_NRF9160DK_NRF9160_NS
config BOARD
default "nrf9160dk_nrf9160"
# For the secure version of the board the firmware is linked at the beginning # 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 # 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- # be loaded by MCUboot. If the secure firmware is to be combined with a non-

View File

@@ -0,0 +1,8 @@
# nRF9160 DK NRF9160 board configuration
# Copyright (c) 2018-2020 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
config BOARD_NRF9160DK
select SOC_NRF9160_SICA if BOARD_NRF9160DK_NRF9160 || BOARD_NRF9160DK_NRF9160_NS
select SOC_NRF52840_QIAA if BOARD_NRF9160DK_NRF52840

View File

@@ -0,0 +1,22 @@
# SPDX-License-Identifier: Apache-2.0
if(CONFIG_BOARD_NRF9160DK_NRF9160 OR CONFIG_BOARD_NRF9160DK_NRF9160_NS)
if(CONFIG_BOARD_NRF9160DK_NRF9160_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()
board_runner_args(jlink "--device=nRF9160_xxAA" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
elseif(CONFIG_BOARD_NRF9160DK_NRF52840)
board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
endif()

View File

@@ -0,0 +1,14 @@
board:
name: nrf9160dk
vendor: Nordic Semiconductor
socs:
- name: nrf9160
variants:
- name: 'ns'
- name: nrf52840
revision:
format: major.minor.patch
default: "0.14.0"
revisions:
- name: "0.7.0"
- name: "0.14.0"

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

@@ -1,3 +1,257 @@
.. _nrf9160dk_nrf9160:
nRF9160 DK
##########
Overview
********
The nRF9160 DK (PCA10090) is a single-board development kit for evaluation and
development on the nRF9160 SiP for LTE-M and NB-IoT. The nrf9160dk/nrf9160
board configuration provides support for the Nordic Semiconductor nRF9160 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)`
.. figure:: img/nrf9160dk_nrf9160.jpg
:align: center
:alt: nRF9160 DK
nRF9160 DK (Credit: Nordic Semiconductor)
More information about the board can be found at the
`nRF9160 DK website`_. The `Nordic Semiconductor Infocenter`_
contains the processor's information and the datasheet.
Hardware
********
nRF9160 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 nrf9160dk/nrf9160 board configuration supports 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 |
+-----------+------------+----------------------+
.. _nrf9160dk_additional_hardware:
Additional hardware in v0.14.0+
-------------------------------
Starting from v0.14.0, additional hardware is available on the DK:
* External flash memory (MX25R6435F, 64 Mb)
* I/O expander (PCAL6408A) that can be used to interface LEDs, slide switches,
and buttons
To use this additional hardware, specify the revision of the board that
should be used when building your application (for more information, see
:ref:`application_board_version`). For example, to build for nRF9160 DK v1.0.0:
.. zephyr-app-commands::
:tool: all
:cd-into:
:board: nrf9160dk/nrf9160@1.0.0
:goals: build
:compact:
Remember to also enable routing for this additional hardware in the firmware for
:ref:`nrf9160dk/nrf52840` (see :ref:`nrf9160dk_board_controller_firmware`).
Other hardware features have not been enabled yet for this board.
See `nRF9160 DK website`_ and `Nordic Semiconductor Infocenter`_
for a complete list of nRF9160 DK board hardware features.
Connections and IOs
===================
LED
---
* LED1 (green) = P0.2
* LED2 (green) = P0.3
* LED3 (green) = P0.4
* LED4 (green) = P0.5
Push buttons and Switches
-------------------------
* BUTTON1 = P0.6
* BUTTON2 = P0.7
* SWITCH1 = P0.8
* SWITCH2 = P0.9
* 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
*************************
nrf9160dk/nrf9160 supports the Armv8m Security Extension, and by default boots
in the Secure state.
Building Secure/Non-Secure Zephyr applications with Arm |reg| TrustZone |reg|
=============================================================================
Applications on the nRF9160 may contain a Secure and a Non-Secure firmware
image. The Secure image can be built using either Zephyr or
`Trusted Firmware M`_ (TF-M). Non-Secure firmware images are always built
using Zephyr. The two alternatives are described below.
.. note::
By default the Secure image for nRF9160 is built using TF-M.
Building the Secure firmware using Zephyr
-----------------------------------------
The process requires the following steps:
1. Build the Secure Zephyr application using ``-DBOARD=nrf9160dk/nrf9160`` and
``CONFIG_TRUSTED_EXECUTION_SECURE=y`` in the application project configuration file.
2. Build the Non-Secure Zephyr application using ``-DBOARD=nrf9160dk/nrf9160/ns``.
3. Merge the two binaries together.
Building the Secure firmware with TF-M
--------------------------------------
The process to build the Secure firmware image using TF-M and the Non-Secure
firmware image using Zephyr requires the following action:
1. Build the Non-Secure Zephyr application
using ``-DBOARD=nrf9160dk_nrf9160_ns``.
To invoke the building of TF-M the Zephyr build system requires the
Kconfig option ``BUILD_WITH_TFM`` to be enabled, which is done by
default when building Zephyr as a Non-Secure application.
The Zephyr build system will perform the following steps automatically:
* Build the Non-Secure firmware image as a regular Zephyr application
* Build a TF-M (secure) firmware image
* Merge the output binaries together
* Optionally build a bootloader image (MCUboot)
.. note::
Depending on the TF-M configuration, an application DTS overlay may be
required, to adjust the Non-Secure image Flash and SRAM starting address
and sizes.
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=nrf9160dk/nrf9160``.
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 nRF9160 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: nrf9160dk/nrf9160
: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 nRF9160 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/nordic_nrf/nrf9160dk/nrf9160dk_nrf9160_common.dtsi`.
.. _nrf9160dk_nrf52840: .. _nrf9160dk_nrf52840:
nRF9160 DK - nRF52840 nRF9160 DK - nRF52840
@@ -42,7 +296,7 @@ is 32 MHz.
Supported Features Supported Features
================== ==================
The nrf9160dk_nrf52840 board configuration supports the following The nrf9160dk/nrf52840 board configuration supports the following
hardware features: hardware features:
+-----------+------------+----------------------+ +-----------+------------+----------------------+
@@ -75,7 +329,7 @@ hardware features:
Programming and Debugging Programming and Debugging
************************* *************************
Applications for the ``nrf9160dk_nrf52840`` board configuration can be Applications for the ``nrf9160dk/nrf52840`` board configuration can be
built and flashed in the usual way (see :ref:`build_an_application` built and flashed in the usual way (see :ref:`build_an_application`
and :ref:`application_run` for more details). and :ref:`application_run` for more details).
@@ -108,7 +362,7 @@ Then build and flash the application in the usual way.
.. zephyr-app-commands:: .. zephyr-app-commands::
:zephyr-app: samples/hello_world :zephyr-app: samples/hello_world
:board: nrf9160dk_nrf52840 :board: nrf9160dk/nrf52840
:goals: build flash :goals: build flash
Debugging Debugging
@@ -134,7 +388,7 @@ specific nRF52840 SoC pins.
other components on the DK are not simultaneously available on the DK other components on the DK are not simultaneously available on the DK
connectors. connectors.
When compiling a project for nrf9160dk_nrf52840, the board controller firmware When compiling a project for nrf9160dk/nrf52840, the board controller firmware
will be compiled and run automatically after the Kernel has been initialized. will be compiled and run automatically after the Kernel has been initialized.
By default, the board controller firmware will route the following: By default, the board controller firmware will route the following:
@@ -244,22 +498,33 @@ following:
}; };
A few helper .dtsi files are provided in the directories A few helper .dtsi files are provided in the directories
:zephyr_file:`boards/arm/nrf9160dk_nrf52840/dts` and :zephyr_file:`boards/nordic_nrf/nrf9160dk/dts/nrf52840` and
:zephyr_file:`boards/arm/nrf9160dk_nrf9160/dts`. They can serve as examples of :zephyr_file:`boards/nordic_nrf/nrf9160dk/dts/nrf9160`. They can serve as examples of
how to configure and use the above routings. You can also include them from how to configure and use the above routings. You can also include them from
respective devicetree overlay files in your applications to conveniently respective devicetree overlay files in your applications to conveniently
configure the signal routing between nRF9160 and nRF52840 on the nRF9160 DK. configure the signal routing between nRF9160 and nRF52840 on the nRF9160 DK.
For example, to use ``uart1`` on both these chips for communication between For example, to use ``uart1`` on both these chips for communication between
them, add the following line in the overlays for applications on both sides: them, add the following line in the overlays for applications on both sides, nRF52840:
.. code-block:: devicetree .. code-block:: devicetree
#include <nrf9160dk_uart1_on_if0_3.dtsi> #include <nrf52840/nrf9160dk_uart1_on_if0_3.dtsi>
nRF9160:
.. code-block:: devicetree
#include <nrf9160/nrf9160dk_uart1_on_if0_3.dtsi>
References References
********** **********
.. target-notes:: .. target-notes::
.. _IDAU:
https://developer.arm.com/docs/100690/latest/attribution-units-sau-and-idau
.. _nRF9160 DK website: https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF9160-DK
.. _Trusted Firmware M: https://www.trustedfirmware.org/projects/tf-m/
.. _Nordic Low power cellular IoT: https://www.nordicsemi.com/Products/Low-power-cellular-IoT .. _Nordic Low power cellular IoT: https://www.nordicsemi.com/Products/Low-power-cellular-IoT
.. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com .. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com
.. _J-Link Software and documentation pack: https://www.segger.com/jlink-software.html .. _J-Link Software and documentation pack: https://www.segger.com/jlink-software.html

View File

@@ -1,4 +1,4 @@
identifier: nrf9160dk_nrf52840 identifier: nrf9160dk/nrf52840
name: nRF9160-DK-NRF52840 name: nRF9160-DK-NRF52840
type: mcu type: mcu
arch: arm arch: arm

View File

@@ -1,18 +1,14 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_NRF52X=y
CONFIG_SOC_NRF52840_QIAA=y
CONFIG_BOARD_NRF9160DK_NRF52840=y
# Enable MPU # Enable MPU
CONFIG_ARM_MPU=y CONFIG_ARM_MPU=y
# Enable hardware stack protection # Enable hardware stack protection
CONFIG_HW_STACK_PROTECTION=y CONFIG_HW_STACK_PROTECTION=y
# enable uart driver # Enable UART driver
CONFIG_SERIAL=y CONFIG_SERIAL=y
# enable console # Enable console
CONFIG_CONSOLE=y CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y CONFIG_UART_CONSOLE=y

View File

@@ -1,4 +1,4 @@
identifier: nrf9160dk_nrf9160 identifier: nrf9160dk/nrf9160
name: nRF9160-DK-NRF9160 name: nRF9160-DK-NRF9160
type: mcu type: mcu
arch: arm arch: arm

View File

@@ -1,9 +1,5 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_NRF91X=y
CONFIG_SOC_NRF9160_SICA=y
CONFIG_BOARD_NRF9160DK_NRF9160=y
# Enable MPU # Enable MPU
CONFIG_ARM_MPU=y CONFIG_ARM_MPU=y
@@ -13,12 +9,12 @@ CONFIG_HW_STACK_PROTECTION=y
# Enable TrustZone-M # Enable TrustZone-M
CONFIG_ARM_TRUSTZONE_M=y CONFIG_ARM_TRUSTZONE_M=y
# enable GPIO # Enable GPIO
CONFIG_GPIO=y CONFIG_GPIO=y
# Enable uart driver # Enable UART driver
CONFIG_SERIAL=y CONFIG_SERIAL=y
# enable console # Enable console
CONFIG_CONSOLE=y CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y CONFIG_UART_CONSOLE=y

View File

@@ -1,4 +1,4 @@
identifier: nrf9160dk_nrf9160_ns identifier: nrf9160dk/nrf9160/ns
name: nRF9160-DK-NRF9160-Non-Secure name: nRF9160-DK-NRF9160-Non-Secure
type: mcu type: mcu
arch: arm arch: arm

View File

@@ -1,9 +1,5 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_NRF91X=y
CONFIG_SOC_NRF9160_SICA=y
CONFIG_BOARD_NRF9160DK_NRF9160_NS=y
# Enable MPU # Enable MPU
CONFIG_ARM_MPU=y CONFIG_ARM_MPU=y
@@ -16,12 +12,12 @@ CONFIG_ARM_TRUSTZONE_M=y
# This Board implies building Non-Secure firmware # This Board implies building Non-Secure firmware
CONFIG_TRUSTED_EXECUTION_NONSECURE=y CONFIG_TRUSTED_EXECUTION_NONSECURE=y
# enable GPIO # Enable GPIO
CONFIG_GPIO=y CONFIG_GPIO=y
# Enable uart driver # Enable uart driver
CONFIG_SERIAL=y CONFIG_SERIAL=y
# enable console # Enable console
CONFIG_CONSOLE=y CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y CONFIG_UART_CONSOLE=y