+
Skip to content

muzkr/k5_fw1

Repository files navigation

k5_fw1: One Firmware for Both V1 & V2 Hardware Versions of Quansheng UV-K5/K6 Radios!

The firmware in this repository is a port of DualTachyon's code for both V1 & V2 hardwares.

To date, most of the work has focused on compatibility with the V2 hardware, which is now largely complete. Regarding application features, I'm taking a conservative approach for now. The current plan is to keep things as bare-bones as possible, staying close to the original functionality and design of the Quansheng firmware. There won't be any fancy new features, such as backlight brightness adjustment.

I privately ported the egzumer firmware to the hardware driver layer of this repo. It runs well, although I'm having trouble reducing the firmware size to fit in the 60 KB flash while retaining common functionalities. If you have some crazy ideas want to realise on V2 hardware, don't wait for me—just get started yourself. On that I hope this repo will be helpful.

Versioning

As I understand it, the firmware version for Quansheng radios follows the format m.nn.vv. Here, m.nn represents the model version, which can essentially be understood as the hardware version. Some real model versions, based on my experience, are:

  • K5 V1: 2.00, 3.00
  • K5 V2: 1.01
  • K6 V2: 1.02

The vv portion, consisting of two digits, denotes the firmware/software version.

I generally follow this convention, though with a slight adjustment to the common practice of incrementing version numbers starting from 01. Specifically,

  • Until it is decent enough (stable and complete in functionality), the version number will use "large" numbers, such as starting from 99 and descending to 98, 97, etc
  • The "decent" releases will begin from 01 and go upward as usual
  • Unless there's any other reason, the model version remains at 1.01

Serial Tool

There's a serialtool directory at the repo root, which contains a Python CLI tool that can be used to flash firmware to radios, dump or restore configuration and / or calibration data.

To perform flashing you can execute the command like this:

python serialtool/cli.py flash --port /dev/ttyUSB0 --bl-ver 1.01 build/Release/k5_v2_fw1-1.0.97.bin

Here, /dev/ttyUSB0 is the serial port device. I believe on the Windows platform it should be something like COM1, COM2 and so on. The --bl-ver option specifies the model version as mentioned ealier. It must match the device's version. build/Release/k5_v2_fw1-1.0.97.bin is the firmware image, such as generated by the build process. We talk about it soon.

Execute the command with -h option to view detailed usage:

python serialtool/cli.py -h

Building

Requires CMake, Ninja or make, along with GCC for building.

You can build the project with

cmake -B build/ --preset Release && \
cmake --build build/

Or with docker:

docker build -t k5_fw1 .
docker run --rm -it -v "$(pwd):/repo" k5_fw1

Discussions

Let's use github Discussions.

Credits

My work is built upon the following projects. To the wonderful authors I extend my deepest gratitude:

Third-party softwares and their copyright information are recorded in third_party_licenses.md

License

Copyright 2025 muzkr

    https://github.com/muzkr

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载