NXP M.2 IEEE 802.15.4 SPI RCP Shield
Overview
This Zephyr shield exposes an IEEE 802.15.4 Radio Co-Processor (RCP) over a SPI
transport, using an NXP M.2 module connected to the host platform through its M.2
interface slot. The RCP runs the 802.15.4 radio and communicates with the host
using the Spinel protocol carried over an HDLC-framed SPI link
(spi,hdlc-rcp-if). This makes the shield suitable for OpenThread host
applications such as the OpenThread Border Router, where the host runs the
OpenThread stack and the M.2 module provides the 802.15.4 radio.
The shield is tested with the following M.2 modules:
Embedded Artist 2EL module - uses Murata 2EL radio module with NXP IW612 chipset
Embedded Artist 2LL module - uses Murata 2LL radio module with NXP IW610 chipset
More information about the supported chipsets, radio modules and M.2 modules can be found in the links below:
Requirements
To use the shield, the requirements below must be satisfied.
An M.2 module with a SPI RCP interface and an NXP IW612 or IW610 SoC.
A host platform with a compatible M.2 interface slot and a free SPI controller exposing SCK, SDI, SDO, a chip-select GPIO and an interrupt GPIO.
The board overlay must enable the host SPI controller (for example
&lpspi4on the MIMXRT1060-EVK Rev-C) withcs-gpiosand pinctrl, and instantiate thespi,hdlc-rcp-ifdevice node with itsint-gpios.
Integration Platform
This shield is validated and tested for use with the host platform listed below. While the shield can be used with other host platforms, other combinations are not actively tested or validated.
MIMXRT1060-EVK Rev-C (
mimxrt1060_evk@C/mimxrt1062/qspi).
Fetch Binary Blobs
The M.2 module requires fetching binary blobs, using the following command:
west blobs fetch hal_nxp
Programming
Use the following shield name with --shield <option> when you invoke
west build.
nxp_m2_2el_2ll_ieee802154: For IEEE 802.15.4 SPI RCP with NXP IW612 (Murata 2EL) or IW610 (Murata 2LL) M.2 modules.
This single shield supports both M.2 modules:
IW612 (Murata 2EL) module
IW610 (Murata 2LL) module
The choice of module is made through the module-specific configuration fragment
passed on the command line (mimxrt1060_evkc_iw612.conf for IW612 or
mimxrt1060_evkc_iw610.conf for IW610). The shield overlay and pin
assignments are identical for both modules.
The OpenThread Border Router is a Wi-Fi + Thread application. It combines the
Wi-Fi/Bluetooth M.2 shield (nxp_m2_2ll_wifi_bt) with this 802.15.4 RCP
shield (nxp_m2_2el_2ll_ieee802154), and requires the RCP host overlay plus
the board-specific and module-specific configuration fragments.
To build for the MIMXRT1060-EVK Rev-C with an IW612 (Murata 2EL) module:
west build -p -b mimxrt1060_evk@C/mimxrt1062/qspi \
-d build_mimxrt1060_evk/border_router_iw612 \
--shield "nxp_m2_2ll_wifi_bt nxp_m2_2el_2ll_ieee802154" \
zephyr/samples/net/openthread/border_router \
-- -DEXTRA_CONF_FILE="overlay-ot-rcp-host-wifi-nxp.conf \
boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evk_mimxrt1062_qspi_C.conf \
boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evkc_iw612.conf"
To build for the MIMXRT1060-EVK Rev-C with an IW610 (Murata 2LL) module, use the IW610 module fragment instead:
west build -p -b mimxrt1060_evk@C/mimxrt1062/qspi \
-d build_mimxrt1060_evk/border_router_iw610 \
--shield "nxp_m2_2ll_wifi_bt nxp_m2_2el_2ll_ieee802154" \
zephyr/samples/net/openthread/border_router \
-- -DEXTRA_CONF_FILE="overlay-ot-rcp-host-wifi-nxp.conf \
boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evk_mimxrt1062_qspi_C.conf \
boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evkc_iw610.conf"
The configuration fragments passed via EXTRA_CONF_FILE are applied in order:
overlay-ot-rcp-host-wifi-nxp.conf: base OpenThread RCP host + NXP Wi-Fi configuration (originally tuned for RW610).boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evk_mimxrt1062_qspi_C.conf: RT1060 EVKC overrides for the M.2 IW612/IW610 RCP setup (disables RW610 specific options, sizes heap and network buffers, sets logging).boards/mimxrt1060_evk_mimxrt1062_qspi_C/mimxrt1060_evkc_iw612.conf(ormimxrt1060_evkc_iw610.conf): module-specific settings selecting the IW612 or IW610 module respectively.
Note
The shield selects the HDLC RCP SPI interface and enables OpenThread L2 by
default. The host SPI controller pinmux and GPIO assignments are provided by
the board-specific overlay in boards/<board>.overlay.
Pin Assignments (MIMXRT1060-EVK Rev-C)
On the MIMXRT1060-EVK Rev-C the RCP link uses LPSPI4 with the following signals:
Signal |
Pin |
Notes |
|---|---|---|
SPI SDI |
GPIO_B0_01 |
LPSPI4 SDI |
SPI SDO |
GPIO_B0_02 |
LPSPI4 SDO |
SPI SCK |
GPIO_B0_03 |
LPSPI4 SCK |
SPI CS |
GPIO_B0_00 (GPIO2.00) |
Chip select, active low |
SPI INT |
GPIO_B0_04 (GPIO2.04) |
RCP host interrupt, active low |
Note
The board overlay disables the LCD interface (&lcdif) to free the
GPIO_B0_xx pins used by LPSPI4.