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 Thread”. Click Next. 
  3. Select the Stack you want to use. Click Next.
    (Note, these step by step instructions assume using Thread 2.0 or later)
  4. Thread offers 3 NCP options here, NCP SPI, NCP UART (Software Flow Control), and NCP UART (Hardware Flow Control). Pick the option which matches your application. Click Next.
  5. Give your project a name, leave it in the default location. Click Next.
  6. On the Project Setup Window pick the BRD4151A board (it will pick the EFR321P232F256GM48 chip). We will change this later, we are just using this to start the project. Hit Finish.
  7. Download and copy the xNCP_board.h file to your project (you can drag and drop it into your Project in Studio, when prompted, make sure to Copy the file into your project).
  8. On the General Tab
    • Selected Architecture – pick the chip you are using
  9. On the HAL Tab
    • Change Board Header from Default to Use Custom Board Header
    • Point the Custom Board Header to xNCP_board.h (it should be in your Studio v4 Workspace
    • Verify that your Bootloader is set to Standalone.
  10. On the Plugins Tab
    • Verify in the HAL section that the NCP type matches the version you are using, either NCP UART Link or NCP SPI Link
      (Because you have selected your NCP type earlier, this should be set)
  11. On the Other Tab
    • In the Additional .c and .h files section Add the following directories:
  12. Open the xNCP_board.h file
    • 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 pins you have selected. You must get the _USART_ROUTELOC0_ definitions from the EFR32MG1 Mighty Gecko Data Sheet, Pages 139-140.
    • Once the modifications are made, save the file
  13. Generate the files for your project
  14. 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


  • ZigBee and Thread
  • Thread SDK
  • Knowledge Base Articles