Radio Firmware tool
| Manufacturer | Radio Model | Fw Read | Fw Write | Fw Wrap | Db Read | Db Write |
|---|---|---|---|---|---|---|
| TYT | MD-2017 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-9600 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-UV380 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-UV390 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-390 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-380 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-446 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| TYT | MD-280 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| Baofeng | DM-1701 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| Baofeng | DM-1801 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| Baofeng | RD-5R | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| Baofeng | UV-5R / UV-82 / UV-6 | ✖️ | ✖️ | ✖️ | ✔️ | ✖️ |
| Connect Systems | CS800D | ✖️ | ✖️ | ✔️ | ✖️ | ✖️ |
| Ailunce | HD1 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
| Yaesu | FT-70DR | ✖️ | ✔️ | ✖️ | ✖️ | ✖️ |
| Radioddity | GD-77 | ✖️ | ✔️ | ✔️ | ✖️ | ✖️ |
Fw = Firmware
Db = Codeplug database
Download pre-built binaries from GitHub Actions
Otherwise you can use the instructions below to build
Dependencies Linux (Ubuntu/Debian):
sudo apt install libusb-1.0-0-dev cmake gcc g++ pkg-configDependencies Mac:
brew install libusb cmake pkg-configBuild:
git clone https://github.com/v0l/radio_tool
cd radio_tool
mkdir build && cd build
cmake ..
make -j4
./radio_tool --helpCode documentation: https://data.v0l.io/radio_tool/docs
Usage:
./radio_tool [OPTION...]
General options:
-h, --help <command> Show this message
-l, --list List devices
-d, --device <index> Device to use
-i, --in <file> Input file
-o, --out <file> Output file
-L, --list-radios List supported radios
Programming options:
-f, --flash Flash firmware
-p, --program Upload codeplug
--read-codeplug Download the codeplug from the radio to --out
Firmware options:
--fw-info Print info about a firmware file
--wrap Wrap a firmware bin (use --help wrap, for more info)
--unwrap Unwrap a fimrware file
All radio options:
--info Print some info about the radio
--write-custom <data> Send custom command to radio
--get-status Print the current DFU Status
TYT Radio options:
--get-time Gets the radio time
--set-time Sets the radio time
--dump-reg <register> Dump a register from the radio
--reboot Reboot the radio
--dump-bootloader Dump bootloader (Mac only)
Codeplug options:
--codeplug-info Print info about a codeplug file
Serial radio options:
--port </dev/ttyUSB0> Serial port to use
--list-serial-models List models which can be used with --port
./radio_tool -d 0 -f -i new_firmware.binThese radios clone over a plain USB serial cable, which cannot be told apart from any other serial cable, so the port and the model are given explicitly. Turn the radio off, seat the cable fully in the mic/speaker jack, then turn the radio back on before running:
./radio_tool --port /dev/ttyUSB0 --radio UV5R --read-codeplug -o my_radio.img
./radio_tool --codeplug-info -i my_radio.imgThe image is byte compatible with a CHIRP .img for the same radio, so it can be opened
in CHIRP as well. Run
--list-serial-models for the accepted --radio values.
The UV-17Pro family, which includes the UV-5R Mini and UV-5G Mini, has no programming cable at all and clones over Bluetooth LE. Enable Bluetooth on the radio, then find it and read it:
./radio_tool --list-ble
0C:64:8F:1E:00:75 walkie-talkie
./radio_tool --ble 0C:64:8F:1E:00:75 --radio UV5RMINI --read-codeplug -o my_radio.imgUse --ble-adapter hci1 if the machine has more than one Bluetooth adapter. A BLE link
answers far more slowly than a cable, and a radio only advertises intermittently, so
finding it can take several seconds.
./radio_tool --wrap -o wrapped.bin -r DM1701 -s 0x0800C000:main.binOutput file in this case is a file prefix, the filename will be unwrapped_0x0800C000 and others if you have
firmware will more than one segment
./radio_tool --unwrap -i wrapped.bin -o unwrapped