Bricked radio: firmware recovery (DFU/bootloader) by model

Category: RepairDifficulty: ★★★~11 minutes

You were reflashing the radio, the power flickered mid-process or the utility crashed — and now the radio won't boot: a black screen, no response to the buttons, or it hangs on the logo. This is a "brick": the hardware is fine, but the firmware is corrupted and won't start normally. It sounds like a death sentence, but in the overwhelming majority of cases it isn't. Inside handheld DMR radios, alongside the main firmware, lives a separate emergency bootloader, which is invoked by a special button combination at power-on and lets you reflash the firmware from scratch. Let's go model by model: how to enter that mode, what to flash with, and in which rare cases a brick really does need a programmer or a service shop.

The main rule: don't panicA "brick" after a failed flash is almost always reversible. The bootloader sits in a separate, protected area of memory and does not erase itself when the main firmware fails. As long as it's alive, you can reflash the radio ten times in a row. The real dead end is damage to the bootloader itself, and a simple failed flash almost never reaches that far. So take a breath and read on.

What a "brick" is and why it's curable

The memory of a modern DMR radio is roughly split into two parts. A small bootloader runs first at power-on, checks which buttons are pressed, and decides: load the main firmware or enter flash mode (DFU / recovery / update mode). The main firmware lives separately and takes up most of the flash. When people say "the radio bricked," in 95% of cases they mean exactly that — corrupted main firmware, with the bootloader still intact and accessible.

Signs of a "curable" brick:

If at least one of those last two conditions holds — congratulations, the bootloader works, and the brick can almost certainly be removed by reflashing. But if no combination revives the unit and the computer doesn't see it at all — then suspicion falls on the bootloader itself, and that's a different conversation (final section).

The golden rule of flashing: don't yank!While the firmware is being written, you absolutely must not pull the USB cable, turn the radio off, remove the battery, or shut down the computer. An interrupted write is exactly the situation that turns a "half-working" radio into a brick, and a brick into a deep brick at risk of damaging the bootloader. The utility often looks frozen (especially near the end): that's normal — flashing takes longer than it seems. Let the process finish calmly. A charged battery and a stable USB port (preferably direct, no hubs) are mandatory.

First — a backup, always

Before flashing anything (whether for the first time or during recovery), take a dump. Reviving a brick is only half the job; it would be a shame to lose your calibration and channels in the process.

When a backup saves you, and when it doesn'tA calibration/codeplug backup saves you if the main firmware is damaged: reflash it, restore the calibration, and the radio is as good as new. A backup won't help if the bootloader is physically damaged: in that case you first have to restore the bootloader itself in hardware (programmer/service shop), and only then will there be somewhere to load the dump. That's why you take the dump while the radio is still alive and readable.

TYT MD-380 / MD-390 (and the RT3/RT8 clones)

A single-band classic built on the STM32F405 processor (1 MB flash, 192 KB RAM) with the HR-C5000 DMR baseband. It has no separate vocoder chip — the AMBE codec is emulated in software right on the STM32F405, so the "brain" and the "voice" are the same die. The radio has the standard STM32 bootloader in DFU mode — the most recovery-friendly one in our whole lineup.

Entering DFU:

  1. Turn the radio off with the volume knob. Remove the cover from the headset/microphone jack and connect the programming cable.
  2. Hold down both the PTT and the button above the PTT (the upper side button, not the one marked with an "M").
  3. While holding both buttons, turn the radio on with the volume knob, then release the buttons.
  4. The LED should flash alternately red and green — you are in flash (DFU) mode.

What to flash with: the vendor's Tytera Upgrade.exe ("Open Update File" → pick the .bin → "Download Update File"), or cross-platform via dfu-util / the md380-dfu wrapper from the md380tools kit. Note: TYT uses a slightly non-standard DFU variant (a fork of the STMicro example), so the easiest thing is precisely their utility or the purpose-built md380-dfu. For details about firmware and tweaks, see the md380tools article.

Keep a recovery image on handKeep a known-good stock image (the official TYT firmware for your model) or a verified md380tools build downloaded in advance. If an experiment goes wrong — enter DFU and load that "rescue" image. After reflashing stock, you restore the calibration from the backup and rebuild the codeplug.

GD-77, DM-1801, RD-5R on OpenGD77

Completely different hardware: NXP MK22 + AT1846S + HR-C6000. The OpenGD77 firmware and its native bootloader. The dual-band TYT MD-UV380/UV390 and the Retevis RT-3S belong here too in terms of flashing method — but note that inside they use an STM32F405 (like the MD-380), not the MK22, so both their entry combination and their LED indication are different (see below and the table).

Entering bootloader mode (GD-77/DM-1801/RD-5R): hold SK1 + SK2 (on the GD-77 these are the two buttons under the PTT: black SK1 and blue SK2) and, while holding them, turn the radio on. On the MD-UV380/UV390/RT-3S the combination is different — SK1 (upper side button) + PTT at power-on.

OpenGD77 ⇄ stock: a two-way roadYou can also return the manufacturer's official firmware to these radios — that is, "roll back" from OpenGD77 to stock in the normal supported way. But OpenGD77 has its own codeplug: after returning to stock, the stock codeplug won't fit, and vice versa. So during any back-and-forth, keep dumps in both formats as well as known-good .bin files for both stock and OpenGD77.

AnyTone (AT-D878UV and relatives)

AnyTone has its own update mode and its own firmware format. There are two noticeably different hardware revisions on the market (V1 and V2/UVII), and firmware is not interchangeable between them — that's a common cause of bricking: loading a file from the wrong revision. Always verify the hardware version.

Entering update (rescue) mode: hold the PTT and the top PF3 button (blue, on the end, also the Alarm button) and turn the radio on. The red LED will start blinking — you are in flash mode.

Format specifics: AnyTone firmware is a set of several files (.spi, .CDI, .CDD) with the same base name; all of them must be in the same folder. It's flashed with the vendor's update utility over the chosen COM port; there are also third-party flash-tools that take the .spi file and the port as arguments.

Verify the combination for your modelThe buttons and indication differ across models and revisions. The combinations above are a guideline, verified for the common versions, but before you hold the PTT and toggle the power, check the official manual for YOUR model and revision (Powerwerx/BridgeCom/manufacturer). A wrong combination will, in the worst case, simply do nothing, but loading the wrong firmware is a real way to make the brick worse.
ModelEntering flash modeIndicationWhat to flash with
TYT MD-380/390, RT3/RT8PTT + button above PTT, then power onLED flashes red↔greenTytera Upgrade / dfu-util / md380-dfu
GD-77, DM-1801, RD-5R (OpenGD77)SK1 + SK2, then power onGreen steadily litOpenGD77 CPS (firmware loader)
MD-UV380/390, RT-3S (OpenGD77, STM32 inside)SK1 (upper side button) + PTT, then power onLED flashes red↔greenOpenGD77 CPS
AnyTone AT-D878UV (V1/V2)PTT + PF3 (top), then power onRed blinkingVendor utility / flash-tools

Reflashing: step by step

The universal recovery procedure when the bootloader is alive:

  1. Charge the battery, take a reliable USB cable straight into the computer's port (not through a hub and not through a "charging" cord without data lines).
  2. Prepare a recovery image: a known-good stock build for your model/revision or a verified alternative firmware. The file must exactly match the hardware.
  3. Put the radio into flash mode with the right combination, confirm via the LED and that the PC sees it.
  4. Launch the utility, select the file, start the write — and don't touch anything until an explicit "Done/Success".
  5. Turn the radio off with the volume knob, disconnect the cable, power it on normally.
  6. Load the calibration from the backup (if needed) and rebuild/restore the codeplug.

Example dfu-util invocation for an STM32 radio of the MD-380 family (the device name and address are for illustration; check against your own utility):

# check whether the system sees the DFU device
dfu-util --list

# flash the firmware (md380-dfu does it with the correct offsets)
md380-dfu upgrade firmware.bin
Law and the airwavesFirmware recovery itself is legal, but remember: once revived, the radio must transmit only on the bands and powers you are authorized for. Alternative firmware often "expands" the TX range — that doesn't mean you may operate there. The right to transmit comes from your license and the frequency allocation, not from the firmware.

When the bootloader is dead: a programmer or a service shop

There's a rare but genuine brick: the radio won't enter any flash mode, the LED doesn't react, and the computer doesn't see the device as either DFU or a COM port. That means the bootloader itself is damaged — a simple failed flash almost never causes this; more often the culprit is an ESD discharge, a power surge, a botched attempt to flash a wrong/corrupted bootloader, or a hardware defect.

This can only be fixed in hardware, through the processor's service pins:

If you don't solder and don't work with SWD/JTAG — that's a clear reason to take the unit to a service shop or to an experienced ham with a programmer. Bootloader recovery is a delicate operation, and damaging the processor in the process is a real risk.

ESD and power — at every stepAn exposed board is defenseless against static: work on an antistatic mat, with a grounding wrist strap, and not in synthetic clothing. A single discharge across the processor pins turns a curable brick into a corpse. For the programmer, use a stable 3.3V — overvoltage kills the MCU; don't apply more to the debug lines than the datasheet allows. And again: neither during DFU flashing, and certainly not during an SWD write, should you pull the power or cable — an interruption here is fatal.

Revived it — get on the air

A removed brick is a good reason to flash fresh firmware and our codeplug, then register with DMRhub: private calls by DMR ID, SMS, and groups are already waiting. No coverage nearby? Build a hotspot and bring up your own network node where there isn't one.

Sources

  1. md380tools — firmware and DFU tools for the TYT MD-380/390 (entering DFU, dfu-util) — github.com/travisgoodspeed/md380tools
  2. Updating MD-380 Firmware — entering DFU (PTT + top button), Tytera Upgrade — learn.adafruit.com
  3. HOWTO: Flash the OpenGD77 firmware — SK1+SK2, bootloader indication, the 0x7F800 signature, patched bootloaders — opengd77.com
  4. Anytone AT-D878UV DMR Firmware Update (Powerwerx) — update mode, PTT+PF3, .spi/.CDI/.CDD files — powerwerx.com
  5. Corrupted STM32 Bootloader Recovery — bootloader recovery via ST-Link/SWD — lukeslab.info