This repository contains Dockerfiles and GitHub actions that build Silicon Labs firmware. It also hosts unofficial Zigbee Coordinator and Thread (OpenThread) firmware builds that community members can experiment with at your own risk.
The firmware builder uses the Silicon Labs Gecko SDK (GSDK) and proprietary Silicon Labs tools such as the Silicon Labs Configurator (slc) and the Simplicity Commander standalone utility. This is a fork of the Silabs firmware builder by Nabu Casa, adding support for additional radio adapter hardware models.
Again, please note that the pre-compiled firmware builds hosted in this repository are both unofficial and experimental or cutting-edge releases with minimal testing which may brick your radio adapter so that it requires manual recovery via a compatible debug probe adapter, however, the builds offered via the Web Flasher are the latest versions recommended by the community.
- Sonoff ZBDongle-E by ITead (based on EFR32MG21)
- Sonoff iHost by ITead (also based on EFR32MG21 and uses the same firmware as Sonoff ZBDongle-E)
- EasyIot ZB-GW04 v1.1 and v1.2 (based on EFR32MG21)
- Smlight SLZB-07 (which may require unlocked bootloader first) (based on EFR32MG21)
- Smlight SLZB-06M (based on EFR32MG21)
- Aeotec Zi-Stick (model “ZGA008” based on EFR32MG21)
- Sparkfun Things Matter MGM240P (requires bootloader to be flashed first using Silabs Simplicity Commander) (based on EFR32MG24)
- Elelabs Zigbee USB Adapter ELU013 (based on EFR32MG13P)
- Elelabs Zigbee Raspberry Pi Shield ELR023 (based on EFR32MG13P)
Three network protocol application firmware variants are available:
- EmberZNet NCP = Zigbee NCP (Network Co-Processor) is used as a dedicated Zigbee Coordinator for Zigbee-only environments, for direct use with Zigbee2MQTT, Home Assistant's ZHA integration, other Zigpy based Zigbee Gateway implementations, or other Zigbee gateways/frameworks that support the EZSP (EmberZNet Serial Protocol) interface.
- OpenThread RCP firmware (experimental) = This Thread RCP (Radio Co-Processor) is used directly as a dedicated Thread Border Router in Thread-only environments, used for OpenThread Border Router add-on or wpantund.
- RCP Multi-PAN (no longer recommended) = Multiprotocol firmware for concurrent communication over Zigbee and Thread via Home Assistant SiliconLabs Multiprotocol add-on.
Note! Beware that the RCP MultiPAN in multiprotocol mode is no longer recommended because running multi-protocol with multiple active networks on a single radio adapter has proven to not be stable when using Zigbee and Thread network protocols simultaneously on the same radio adapter, it also increases the complexity of software component dependencies needed, so if already using RCP Multi-PAN then it is highly recommended that you plan to migrate to separate dedicated radio adapters instead, (using Zigbee NCP and Thread RCP firmware respectively), even if using RCP MultiPAN on a single radio adapter dongle has been working fine for you so far.
External reference explaining these different co-processor designs at a high level:
- https://github.com/home-assistant/addons/blob/master/silabs-multiprotocol/DOCS.md
- https://openthread.io/platforms/co-processor
Flash directly from your browser (only Chrome and Edge supported) SL Web Flasher
Read this blog post for more details and instructions for using RCP Multi-pan firmware.
RCP MultiPan firmware ONLY
You can install this HA add-on to keep your dongle up to date with latest the RCP Multi-Pan firmware. This is only for use if you are using the SiliconLabs Multiprotocol add-on.
It can also be used for the initial conversion to MultiPan firmware, however you will need to disable ZHA or Zigbee2MQTT while you do this initial flash. You can then install and configure the Silabs Multiprotocol Add-on.
Firmware builds can be found in the firmware_builds folder.
ncp-uart-hw-
EmberZnet pure Zigbee
rcp-uart-802154-
RCP MultiPan
ot-rcp-
OpenThread Only
ZBDongle-E and ZB-GW04 v1.1 do not support hardware flow control. Yellow, SkyConnect and ZB-GW04 v1.2 are built with hardware flow control. Various baudrates are available as listed at the end of the filename.
Use NabuCasa's Universal-Silabs-Flasher to flash the .gbl
files.
To build a firmware locally the build container can be reused. If you use VSCode then simply open the included devcontainer. Or you can manually start the container locally using Docker, with a build directory bind-mounted, e.g.
docker run --rm -it \
--user builder \
-v $(pwd)/build:/build \
ghcr.io/darkxst/silabs-firmware-builder:4.2.2
To generate a project, use slc generate
. To replicate/debug build issues in
an existing GitHub action, it is often helpful to just copy the command from
the "Generate Firmware Project" step.
slc generate \
--with="MGM210PA32JIA,simple_led:board_activity" \
--project-file="/gecko_sdk/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154.slcp" \
--export-destination=rcp-uart-802154-yellow \
--copy-proj-sources --new-project --force \
--configuration=""
Then build it using commands from the "Build Firmware" step:
cd rcp-uart-802154-yellow
make -f rcp-uart-802154.Makefile release
If you would like to help support further development of my Silabs firmware
projects consider buying me a coffee!