Silabs EFR32 Radio Firmware¶
This section covers the gateway's IEEE 802.15.4 coprocessor: an EFR32MG1B on the Lidl board and an EFR32MG13P on the Sengled Smart Hub G4.
The EFR32 is independent of the RTL8196E Linux processor. It has its own bootloader, application, UART baud, and flow-control requirements. Normal users flash it over Ethernet after Linux is installed; SWD is a recovery/development interface, not part of the standard installation.
Choose before flashing¶
| Firmware | Use it for | Recommended audience |
|---|---|---|
| NCP-UART-HW | Zigbee2MQTT or ZHA coordinator | Most users |
| RCP-UART-HW | cpcd + host-side zigbeed / EmberZNet 8.2 |
Advanced users |
| OT-RCP | Thread Border Router, external OTBR, or Zigbee-on-Host | Thread/advanced users |
| Z3 Router | Standalone Zigbee mesh extender | Users who do not need a coordinator |
| Gecko Bootloader | Radio application updates and specialist recovery | Normally managed automatically |
If those terms are unfamiliar, use the plain-language radio selection guide. NCP is the default choice for a new Zigbee2MQTT or ZHA installation.
Flash a pre-built radio image¶
Run the repository-root script against a gateway already running this project's Linux firmware:
# Interactive selection
./flash_efr32.sh -g <gateway-ip>
# Recommended Zigbee coordinator
./flash_efr32.sh -y -g <gateway-ip> ncp
# Thread Border Router radio
./flash_efr32.sh -y -g <gateway-ip> otrcp
For Sengled, always select the board:
The script checks the live devicetree model, resolves the board-specific image
and safe default baud, obtains exclusive control of the UART bridge, enters the
Gecko bootloader, flashes the application, updates
/userdata/etc/radio.conf, and reboots.
Stop Zigbee2MQTT, ZHA, cpcd, or any other TCP:8888 client before flashing.
Use ./flash_efr32.sh --help for the complete firmware and baud matrix.
Firmware architecture¶
Application client or host stack
|
TCP on Ethernet
|
RTL8196E Linux / UART bridge or otbr-agent
|
board-specific UART
|
EFR32 application + two-stage Gecko bootloader
|
IEEE 802.15.4 radio
NCP¶
The complete EmberZNet 7.5.1 Zigbee stack runs on the EFR32 and exposes EZSP v13. Zigbee2MQTT or ZHA connects directly through the gateway's TCP bridge.
Reference: NCP-UART-HW.
RCP¶
The EFR32 runs only the 802.15.4 radio layer and speaks CPC. cpcd and
zigbeed run on a host, allowing EmberZNet 8.2.2 / EZSP v18 on Series-1 radio
hardware. This path is intentionally more complex than NCP.
References: RCP-UART-HW and EmberZNet 8.x guide.
OT-RCP¶
The EFR32 speaks OpenThread Spinel/HDLC. It can serve native otbr-agent on the
gateway, an OTBR on another host, or Zigbee2MQTT's Zigbee-on-Host adapter. The
application image is the same; the RTL8196E-side service selection changes.
References: OT-RCP and Thread/Matter primer.
Standalone router¶
The EFR32 runs a complete Zigbee 3.0 router application and joins another coordinator's mesh. The gateway no longer presents a coordinator endpoint.
Reference: Z3 Router.
Gateway-side runtime configuration¶
flash_efr32.sh records the chip-side identity and the service-routing state in
/userdata/etc/radio.conf:
| Application | Important host-side state | Service that owns UART1 |
|---|---|---|
| NCP | FIRMWARE=ncp, baud, flow mode, no MODE=otbr |
S50uart_bridge, TCP:8888 |
| RCP | FIRMWARE=rcp, baud, flow mode, no MODE=otbr |
S50uart_bridge, TCP:8888 |
| OT-RCP, native OTBR | FIRMWARE=otrcp, MODE=otbr, baud, flow mode |
S70otbr, direct tty |
| OT-RCP, external host | FIRMWARE=otrcp, no MODE=otbr |
S50uart_bridge, TCP:8888 |
| Router | FIRMWARE=router |
Bridge remains available for maintenance, not coordinator traffic |
Do not manually change FIRMWARE_BAUD to a value the chip was not built for;
the two UART ends would stop communicating. The full key reference is in
Userdata.
Board differences¶
Every build and flash command accepts BOARD (lidl by default or
sengled-e39-g8c). Board data defines:
- exact EFR32 part;
- USART and pin routing;
- hardware, software, or no flow control;
- safe default baud;
- bootloader activation and version data;
- non-Lidl artifact suffixes.
The Lidl board wires RTS/CTS. The Sengled G4 does not, so it uses board-specific software/no-flow builds and lower RCP/OT-RCP defaults. Never choose a firmware only by filename similarity.
The board status and porting table distinguishes images validated on real hardware from images that are built and shipped but not yet field-tested.
Gecko bootloader and recovery¶
The radio boot chain has two stages:
- Stage 1 is installed through SWD and cannot be updated over UART;
- Stage 2 receives application
.gblimages over UART/Xmodem and can itself be updated through Stage 1.
Normal application flashes transit Stage 2 automatically. Do not reflash a
bootloader merely to update an NCP/RCP/OT-RCP application. Bootloader version
ordering is strict, and a same-version Stage-2 update can erase the application
without installing a new bootloader; flash_efr32.sh contains a safety guard.
References: two-stage bootloader, backup/flash/restore, and recovery post-mortem.
Build from source¶
Pre-built .gbl and .s37 artifacts are committed for supported boards. To
modify them, first install the complete
build environment, then use:
cd 2-Zigbee-Radio-Silabs-EFR32
./build_efr32.sh
./build_efr32.sh ncp rcp
BOARD=sengled-e39-g8c ./build_efr32.sh ncp
./build_efr32.sh --help
Every firmware subdirectory holds the SLC project, source/patch overlay, build
script, and committed outputs. Rebuilding against a different Gecko SDK or
without the project patches can silently remove UART routing or flow control;
follow the component guide rather than invoking slc generate by hand.
Reference map¶
| Topic | Page |
|---|---|
| EZSP concepts and compatibility | EZSP reference |
| Simplicity Studio and custom builds | Simplicity Studio |
| Radio backup, flashing, and restore | Backup / Flash / Restore |
| Gecko UART/Xmodem bootloader | Bootloader |
| NCP | NCP-UART-HW |
| RCP and host-side Zigbee | RCP-UART-HW |
| OpenThread RCP | OT-RCP |
| Standalone Zigbee router | Router |