Network Co-Processor Support

Network Co-Processor (NCP) designs are supported by OpenThread. There are two main design architectures:

  • Standard NCP — Application layer on the host processor, OpenThread features on the 802.15.4 SoC
  • Host / Controller — Application layer and OpenThread core on the host processor, minimal OpenThread controller on the 802.15.4 SoC

Communication between the NCP and the host processor is via serial interface, typically using SPI or UART, over the Spinel protocol.

When building OpenThread, use the --enable-ncp-app and --with-ncp-bus option flags to create binaries for your desired NCP design. For more information, see Configuration.

Spinel protocol

Spinel is a general management protocol for enabling a host device to communicate with and manage an NCP. Initially designed to support Thread-based NCPs, Spinel has been designed with a layered approach that allows it to be easily adapted to other network technologies in the future.

This protocol is included with OpenThread at /src/ncp. A Python CLI tool called Pyspinel is available for testing purposes.

For more information, see the Internet-Draft for the Spinel Host-Controller Protocol.

wpantund

OT wpantund Architecture

wpantund is a user-space network interface driver/daemon that provides a native IPv6 network interface to an NCP. It was written and developed by Nest Labs to better support Thread connectivity on Unix-like operating systems. It uses Spinel to communicate with an NCP.

wpantund is not included with OpenThread. For more information, see the wpantund GitHub repository.

SPI/HDLC adapter

spi-hdlc-adapter is a tool that presents an SPI interface as an HDLC-lite encoded asynchronous serial stream.

This tool is used to support hardware designs where the Linux host and OpenThread NCP are connected via SPI. The benefit of spi-hdlc-adapter is that wpantund can run unmodified as if it were communicating to the NCP through a standard serial connection.

spi-hdlc-adapter uses the SPI protocol outlined in Appendix A.2 of the Spinel Protocol Internet-Draft. For more information, see the README in the OpenThread GitHub repository.

Send feedback about...

Need help? Visit our support page.