Co-Processor designs are supported by OpenThread. When building OpenThread examples, a firmware image for each co-processor design is automatically created. For more information, refer to Binaries.
Radio Co-Processor (RCP)
In an RCP design, the core of OpenThread lives on the host processor with only a minimal MAC layer "controller" on the device with the Thread radio. The host processor typically doesn’t sleep in this design, in part to ensure reliability of the Thread network.
Communication between the RCP and the host processor is managed by OpenThread Daemon through an SPI interface over the Spinel protocol.
The advantage here is that OpenThread can utilize the resources on the more powerful processor.
This design is useful for devices that are less sensitive to power constraints. For example, the host processor on a video camera is always on to process video.
OpenThread Border Router supports an RCP design. For more information, refer to OpenThread Border Router.
To build an RCP, refer to the following Codelabs:
Build a Thread network with nRF52840 Thread Border Router
Network Co-Processor (NCP)
The standard NCP design has Thread features on the SoC and runs the application layer on a host processor, which is typically more capable (but has greater power demands) than the OpenThread device.
Communication between the NCP and the host processor is managed by
wpantund
through a serial interface,
typically using SPI or UART, over the Spinel protocol.
The benefit of this design is that the higher-power host can sleep while the lower-power OpenThread device remains active to maintain its place in the Thread network. And since the SoC is not tied to the application layer, development and testing of applications is independent of the OpenThread build.
This design is useful for gateway devices or devices that have other processing demands like IP cameras and speakers.
Spinel protocol
Spinel is a general management protocol for enabling a host device to communicate with and manage a co-processor. 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. It is used with both the RCP and NCP designs.
This protocol is included with OpenThread at
/src/lib/spinel
. A Python CLI tool called
Pyspinel is available for testing purposes.
For more information, see the Internet-Draft for the Spinel Host-Controller Protocol.