Co-Processor designs are supported by OpenThread. There are two main design architectures:
- Network Co-Processor (NCP) — Application layer on the host processor, OpenThread features on the 802.15.4 SoC
- Radio Co-Processor (RCP) — 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 examples, firmware images for your desired NCP design should automatically be created. For more information, see Binaries.
For downloads of select pre-built NCP firmware images, along with flashing instructions, see Pre-built NCP firmware.
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

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.