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](https://openthread.io/guides/build#binaries).

## Radio Co-Processor (RCP)

[![OT RCP Architecture](https://openthread.io/static/platforms/images/ot-arch-rcp-vert.png)](https://openthread.io/static/platforms/images/ot-arch-rcp-vert_2x.png)

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](https://openthread.io/platforms/co-processor/ot-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](https://openthread.io/guides/border-router).

To build an RCP, refer to the following Codelabs:

[Build a Thread network
with nRF52840](https://openthread.io/codelabs/openthread-hardware) [Thread Border Router](https://openthread.io/codelabs/openthread-border-router)

## Network Co-Processor (NCP)

[![OT NCP Architecture](https://openthread.io/static/platforms/images/ot-arch-ncp-vert.png)](https://openthread.io/static/platforms/images/ot-arch-ncp-vert_2x.png)

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.

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`](https://github.com/openthread/openthread/tree/master/src/lib/spinel). A Python CLI tool called
[Pyspinel](https://openthread.io/guides/pyspinel) is available for testing purposes.

For more information, see the [Internet-Draft for the Spinel Host-Controller
Protocol](https://tools.ietf.org/html/draft-rquattle-spinel-unified).