Files
nr-flow-validator/infra/zigbee2mqtt/FLASHING.md
T

3.1 KiB

ThirdReality BL706 USB Dongle — Firmware Flashing Reference

Based on the ThirdReality Zigbee 3.0 USB Dongle repo (cloned at /opt/david/src/ThirdReality-Zigbee-3.0-USB-dongle/).

Hardware

  • Chip: Bouffalo Lab BL706 (NOT BL702 — different firmware!)
  • USB bridge: CH340 (1a86:7523, appears as /dev/ttyUSB0)
  • Protocol: BLZ (not ZiGate — firmware v1.00+)
  • Config: adapter: blz, baudrate: 2000000 in zigbee2mqtt configuration.yaml

CRITICAL: BL702 vs BL706 firmware

The ThirdReality dongle uses a BL706 chip. The DevCube flashing tool takes --chipname=bl702 (flash layout), but the firmware binary itself must be built for BL706, not BL702.

Firmware files named R3_bl702_dongle.bin (v1.00.07, v1.00.12) are for BL702 chips and will NOT boot on BL706. Always use firmware files named R3_706_dongle*.bin.

Working firmware: BLZ v1.00.01 (confirmed on BL706)

Saved in this repo at:

  • infra/zigbee2mqtt/R3_706_dongle_v1.00.01.bin
  • infra/zigbee2mqtt/partition_cfg_2M.toml

Entering Bootloader Mode

Hold the boot button (pinhole on the dongle) while plugging into USB. Release after ~1 second. No LED when in bootloader mode.

Flashing

BFLASH="/opt/david/src/ThirdReality-Zigbee-3.0-USB-dongle/Flashing-Tool
  /BouffaloLabDevCube-v1.9.0/bflb_iot_tool-ubuntu"
FIRMWARE="./infra/zigbee2mqtt/R3_706_dongle_v1.00.01.bin"
PARTITION="./infra/zigbee2mqtt/partition_cfg_2M.toml"

$BFLASH \
  --chipname=bl702 \
  --interface=uart \
  --port=/dev/ttyUSB0 \
  --baudrate=2000000 \
  --xtal=32M \
  --firmware=$FIRMWARE \
  --pt=$PARTITION

Critical flags

Flag Value Why
--chipname bl702 Flash layout (not chip model — BL706 uses BL702 layout)
--interface uart CH340 provides serial passthrough
--baudrate 2000000 Must match the dongle's bootloader rate
--xtal 32M Crystal frequency for bootheader generation
--pt partition_cfg_2M.toml Must use 2M — firmware overflows 1M

After Flashing

  1. Tool prints [All Success] with SHA verification
  2. Fully unplug the dongle (wait 5s for power drain)
  3. Replug without holding any button
  4. LED should light up immediately — chip is running the new firmware

Firmware Compatibility

Version File name BL706 compatible?
BLZ v1.00.01 R3_706_dongle_v1.00.01.bin YES (confirmed working)
BLZ v1.00.07 R3_bl702_dongle.bin (misnamed) NO — built for BL702
BLZ v1.00.12 R3_bl702_dongle.bin (misnamed) NO — built for BL702
Legacy ZiGate v0.00.21 R3_706_dongle.bin Untested (no BLZ support)

The v1.00.01 firmware file is in the ThirdReality repo at Image/Coordinator/blz/v1.00.01/R3_706_dongle_v1.00.01/.

Recurring Issue

After power loss, the BL706 firmware can corrupt itself (reports deviceId: 0xBEEF, addEndpoint fails with frameId:21). The chip responds to UART resets but refuses all application-layer commands. The fix is always to reflash with BL706-compatible firmware — there's no software recovery.