Build and Installation Instructions for the NCP Images#

NCP Architecture Overview#

In the standard NCP (Network Co-Processor) design, Thread network features run on the SoC while the application layer runs on a separate host processor. The host processor is typically more powerful than the OpenThread device, though it has higher power consumption.

This architecture offers power management advantages: the higher-power host can enter sleep mode while the lower-power OpenThread device stays active to maintain its Thread network connection. Additionally, since the SoC handles only the Thread stack and not the application layer, application development and testing can proceed independently of the OpenThread build.

Build NCP Images#

Note: The following instructions only apply to NCP images built using Simplicity Studio for a given Simplicity SDK release.

To build an NCP image using the latest OpenThread, follow instructions on the ot-efr32 repo.

Use Precompiled NCP Images#

Silicon Labs has precompiled NCP images available for these boards with their associated image locations. The default precompiled images are configured for UART interface.

Note: By default, the Silicon Labs Simplicity SDK uses Thread protocol version 1.4. A set of prebuilt NCP demo applications are provided with the OpenThread SDK.

Build NCP Images Using Simplicity Studio#

Silicon Labs has sample applications for several standard OpenThread NCP images.

  1. Select ot-ncp-ftd or ot-ncp-mtd as an example for the default NCP image for the OpenThread Border Router over UART interface.

  2. With your target part connected to your computer, open Simplicity Studio's Project tab and select Create New Project.

  3. The Example Project & demos selection dialog opens. Use the Keyword filter to search for ot-ncp as an example for the default NCP image for the OpenThread Border Router. Select ot-ncp-ftd for Full Thread Device or ot-ncp-mtd for Minimal Thread Device and click Create.

  4. The Project Configuration dialog opens. Rename your project, change the default project file location, and determine if you will link to or copy project files. Note that, if you change any linked resource, it is changed for any other project that references it. Click FINISH.

  5. The Simplicity Project Configurator opens to the OVERVIEW tab. See the online Simplicity Studio 6 Overview for details about the functionality available through the Project Configurator.

    screenshotscreenshot

  6. Compile and flash the application image as described in the OpenThread Quick Start Guide.

Configure OpenThread Options in the NCP Images Using Simplicity Studio#

  1. Under the SOFTWARE COMPONENTS tab in your NCP project (.slcp), expand the OpenThread menu. Select Stack (FTD) for an NCP FTD build or Stack (MTD) for an NCP MTD build.

  2. Click Configure to change the settings associated with the OpenThread build.

    Note: You can select the Configurable Components and Installed Components checkboxes to filter only those components you can configure successfully.

    screenshotscreenshot

  3. Configure the various compile-time settings for your NCP project. The various build options are explained in the OpenThread documentation at https://openthread.io/guides/build.

    screenshotscreenshot

Enable Host Wakeup GPIO Functionality#

Overview#

The Host Wakeup GPIO feature enables the NCP to wake a sleeping host processor using a dedicated GPIO pin. When the NCP needs host attention (incoming data, network events, etc.), it sets the GPIO HIGH for a configurable duration, allowing the host to remain in low-power sleep states until needed.

Configuration#

  1. Open your NCP project in Simplicity Studio and navigate to the SOFTWARE COMPONENTS tab.

  2. Under the OpenThread menu, locate the Stack (FTD) or Stack (MTD) component and click Configure.

  3. In the configuration editor, find the Host wakeup GPIO functionality section.

    screenshotscreenshot

  4. Enable Enable host wakeup using a GPIO pin using the toggle button.

  5. Configure the timeout duration (in milliseconds) for clearing the host wakeup GPIO pin using SL_OPENTHREAD_HOST_CLEAR_PIN_TIMEOUT_MS (default: 10ms).

    screenshotscreenshot

  6. Configure the GPIO pin assignment:

    • Navigate to the Pin Tool section or GPIO configuration

    • Set SL_OPENTHREAD_HOST_WAKEUP_GPIO_PORT to the desired port (e.g., SL_GPIO_PORT_C)

    • Set SL_OPENTHREAD_HOST_WAKEUP_GPIO_PIN to the desired pin number (e.g., 0)

    screenshotscreenshot

  7. Save your configuration and rebuild the project.

NAT64 functionality on a NCP based OTBR#

Overview#

In an RCP based OpenThread Border Router (OTBR), the host runs the stack and performs NAT64 translation. Openthread's native NAT64 implementation provides this translation on the host. Since this responsibility is delegated to the host, the RCP does not need knowledge of NAT64.

On a border router with an NCP, the stack runs on the co-processor. There is a division of responsibilities for NAT64 management. In this configuration, the host handles infrastructure connectivity and NAT64 translation, and the NCP handles prefix management. Silicon Labs uses tayga as the NAT64 implementation on the host, though you can use any similar third-party utility.

As the translation happens on the host, the favored prefix needs to synchronize between the host and NCP. To achieve this, the NCP notifies the host over Spinel when there is a change in the favored NAT64 prefix. The host then updates tayga and the corresponding configuration on the host's networking stack.

Configuration#

To ensure that the NCP sets the favored prefix on host on prefix updates, make sure that the NCP is built with the OPENTHREAD_CONFIG_NAT64_FAVORED_PREFIX_NOTIFICATION_ENABLE option enabled.

Verify the prefix#

On the host, with Thread running, run the following commands:

sudo ot-ctl br nat64prefix favored
sudo ot-ctl netdata show
grep '^prefix' /etc/tayga.conf
ip -6 route show dev nat64
systemctl status tayga

The prefix from sudo ot-ctl br nat64prefix favored should match the prefix line in /etc/tayga.conf and the IPv6 route on the nat64 interface.