Within our EmberZNet and Silicon Labs Thread stacks we provide a number of pre-built NCP images.  However, with the customability EFR32 Mighty Gecko, these NCP images don't always meet every application.  This guide, along with reading AN1010: Building a Customized NCP Application, should give you the tools to build your own xNCP image.


  1. Go to File -> New -> Project. This will bring up the New Project Wizard
  2. Select “Silicon Labs AppBuilder Project”. Click Next.
  3. Select “Customizable network coprocessor (NCP) application”. Click Next.
  4. Select the Stack you want to use. Click Next.
  5. Select xNCP LED. Click Next.
  6. Give your project a name, leave it in the default location. Click Next.
  7. On the Project Setup Window remove any boards that are selected in the top section.  In the bottom section select the chip you are using. Hit Finish.
  8. Download the board header below for your particular stack and copy it into your project (you can drag and drop it into your Project in Studio, when prompted, make sure to Copy the file into your project).
    EmberZNet 5.9.2 and prior: xNCP_board.h
    EmberZNet 5.10.0 and later: xNCP_board_5.10.x.h
  9. On the General Tab
    • Selected Architecture – verify the chip you selected is there
  10. On the HAL Tab
    • Change Board Header from Default to Use Custom Board Header
    • Point the Custom Board Header to file you downloaded in step 8 (it should be in your Studio v4 Workspace)
  11. On the Plugins Tab
    • In the Core section pick the Plug for either NCP-SPI or NCP-UART for the NCP version you are using
    • If you are building a Smart Energy NCP, you will need to enable the CBKE and ECC plugins required for your build.
  12. On the Other Tab
      • (EmberZNet 5.9.2 and prior only) In the Additional .c and .h files section Add the following directories:
  13. Open the board header file from step 8 and make these changes:
    • (EmberZNet 5.9.2 and prior)
      •  Find the #define statements for which build to use
        #define UART_XNCP_BUILD
        #define SPI_XNCP_BUILD
        Comment out the one you aren’t using and make sure the one you need is defined
      • Modify the section to match the interface you have selected.  For UART, setup the Tx, Rx, CTS and RTS pins.  For SPI, setup MOSI, MISO, CS and CLK as well as the nHOST, nWAKE and nSSEL (CS) pins.
        See below for where to find ROUTELOC definitions to match these pins.
    • (EmberZNet 5.10.x)
      • If you are building a UART NCP, edit the section titled /* USART0 */.  Setup Tx, Rx, CTS and RTS pins that you are using for your NCP.
        See below for where to find ROUTELOC definitions to match these pins.
      • If you are building a SPI NCP, edit the section titled /* USART1 */.  Setup the MOSI, MISO, CS and CLK pins.
        Additonally, edit the section titled /* SPINCP */.  You shouldn't have to change the USART port, but match the nHOST and nWAKE pins to your design.
        See below for where to find ROUTELOC definitions to match these pins.
    • You can get the ROUTELOC definitions from the Mighty Gecko datasheet corresponding to your model of Mighty Gecko (MG1, MG12 or MG13).  Links to the datasheets are below.
    • Once the modifications are made, save the file
  14. Generate the files for your project
  15. Build your project

 Use the following KBA for building a bootloader:

Make customized ZigBee bootloader for the EFR32MG1 QFN32 parts

 Additional Information:

AN1010: Building a Customized NCP Application

EFR32MG1 Mighty Gecko ZigBee & Thread SoC Family Data Sheet (Section 6.4)

EFR32MG12 Mighty Gecko Multi-Protocol Wireless SoC Family Data Sheet (Section 6.4)

EFR32MG13 Mighty Gecko Multi-Protocol Wireless SoC Family Data Sheet (Section 6.6)


  • ZigBee and Thread
  • Thread SDK
  • Knowledge Base Articles