armel/uv-k1-k5v3-firmware-custom
GitHub: armel/uv-k1-k5v3-firmware-custom
为 UV-K1 和 UV-K5 V3 对讲机提供功能大幅增强的开源固件,支持频谱分析、SSB 解调和多场景优化。
Stars: 220 | Forks: 59
# 适用于使用 PY32F071 MCU 的 UV-K1 和 UV-K5 V3 的 F4HWN 固件移植
本仓库是 [F4HWN 自定义固件](https://github.com/armel/uv-k5-firmware-custom) 的一个分支,而后者又是 [Egzumer 自定义固件](https://github.com/egzumer/uv-k5-firmware-custom) 的分支。它扩展了基于 DP32G030 MCU 的 UV-K5 V1 的工作成果,并将其适配到基于 PY32F071 MCU 构建的较新 UV-K1 和 UV-K5 V3。这是 [@muzkr](https://github.com/muzkr) 和 [@armel](https://github.com/armel) 共同努力的成果。
非常感谢 DualTachyon,他通过发布 UV-K5 V1 的首个开源[固件](https://github.com/DualTachyon/uv-k5-firmware) 铺平了道路。如果没有这一初始工作,这一切都不可能实现!
# 致打算 Fork 本项目的开发者
本固件依据 Apache 2.0 许可证分发,保留了 DualTachyon 的原始版权,其工作为 UV-K5 开源生态系统奠定了基础。
如果您创建 Fork 或衍生版本,**我们强烈建议您保持开源**。
保持 Fork 开源:
- 符合 Apache 2.0 许可证的意图和精神
- 支持业余无线电和嵌入式开发社区
- 避免不必要的碎片化
- 允许他人学习、审计和改进固件
这也非常符合 **Ham 精神**:分享知识、共同实验和互助,而不是封锁或将其据为己有。
维护开源 Fork 是帮助为每个人构建健康和可持续生态系统的最佳方式。
## 目录
* [我的功能](#main-features)
* [来自 Egzumer 的主要功能](#main-features-from-egzumer)
* [手册](#manual)
* [使用 Docker 编译和构建](#compiling-and-Building-from-docker)
* [使用 UVTools2 刷写固件](#flashing-the-firmware-with-uvtools2)
* [致谢](#credits)
* [其他信息来源](#other-sources-of-information)
* [许可证](#license)
## F4HWN 的主要功能和改进:
* 多种固件版本:
* Bandscope(包含由 Fagci 制作的频谱分析仪),
* Broadcast(包含商业 FM 广播支持),
* Basic(包含频谱分析仪和商业 FM 广播支持,但不包括 Vox、Aircopy 等某些功能),
* RescueOps(专为急救人员设计:消防员、海上救援、山地救援),
* Game(包含一个小型的打砖块游戏),
* 改进默认功率设置级别:
* Low1 到 Low5(<~20mW, ~125mW, ~250mW, ~500mW, ~1W),
* Mid ~2W,
* High ~5W,
* User(参见 SetPwr),
* 改进 S-Meter(IARU 1区 VHF/UHF 技术建议书 R.1 - [阅读更多](https://hamwaves.com/decibel/en/)),
* Egzumer 固件中引入的 S-Meter(S0/S9)级别 EEPROM 设置现被忽略,并替换为符合 IARU 建议的硬编码值。
* 改进 bandscope(频谱分析仪):
* 添加频道名称,
* 添加部分频谱参数的保存,
* 改进 UI:
* 菜单索引始终可见,即使选中了某个菜单,
* S-Meter 新设计(Classic 或 Tiny),
* MAIN ONLY 屏幕模式,
* DUAL 和 CROSS 屏幕模式,
* VFO RX 上的 RX 闪烁,
* RX LED 闪烁,
* 静噪级别和监听,
* Step 值,
* CTCSS 或 DCS 值,
* KeyLock 消息,
* 最后一次 RX,
* 将 BatTxt 菜单从 34/63 移至 30/63(紧随 BatSave 菜单 29/63 之后),
* 将 BackLt 重命名为 BLTime,
* 将 BltTRX 重命名为 BLTxRx,
* 改进信道存储输入,
* 改进键盘频率输入,
* 为 Air Copy 添加百分比和仪表条,
* 改进音频条,
* 以及更多……
* 新的菜单项和更改:
* 添加 SetPwr 菜单以设置 User 功率(<20mW, 125mW, 250mW, 500mW, 1W, 2W 或 5W),
* 添加 SetPTT 菜单以设置 PTT 模式(Classic 或 OnePush),
* 添加 SetTOT 菜单以设置 TOT 警报(Off, Sound, Visual, All),
* 添加 SetCtr 菜单以设置对比度(0 到 15),
* 添加 SetInv 菜单以设置屏幕反色模式(Off 或 On),
* 添加 SetEOT 菜单以设置 EOT(End Of Transmission,发射结束)警报,
* 添加 SetMet 菜单以设置 S-Meter 样式(Classic 或 Tiny),
* 添加 SetLck 菜单以设置锁定内容(Keys 或 Keys + PTT),
* 添加 SetGUI 菜单以设置 VFO 基线上的字体大小(Classic 或 Tiny),
* 添加 TXLock 菜单以在信道上开放 TX,
* 添加 SetTmr 菜单以设置 RX 和 TX 计时器(Off 或 On),
* 添加 SetOff 菜单以设置收发器进入深度睡眠前的延迟(Off 或 1 分钟到 2 小时),
* 添加 SetNFM 菜单以设置 Narrow 宽度(12.5kHz 或 6.25kHz),
* 将 BatVol 菜单(52/63)重命名为 SysInf,该菜单除电池状态外还显示固件版本,
* 改进 PonMsg 菜单,
* 改进 BackLt 菜单,
* 改进 TxTOut 菜单,
* 改进 ScnRev 菜单(CARRIER 从 250ms 到 20s,STOP,TIMEOUT 从 5s 到 2m)
* 改进 KeyLck 菜单(OFF,延迟从 15s 到 10m)
* 添加 HAM CA F Lock 频段(针对加拿大区域),
* 添加 PMR 446 F Lock 频段,
* 添加 FRS/GMRS/MURS F Lock 频段,
* 移除闪烁和 SOS 功能,
* 移除 AM Fix 菜单(AM Fix 默认为 ENABLED),
* 添加对 3500mAh 电池的支持,
* 改进状态栏:
* 在状态栏中添加 SetPtt 模式,
* 更改字体和位图,
* 将 USB 图标移至电池信息左侧,
* 添加 RX 和 TX 计时器,
* 改进列表和扫描列表选项:
* 添加新列表 3,
* 添加新列表 0(无列表的信道……),
* 添加新扫描列表选项,
* 扫描列表 0(所有无列表的信道),
* 扫描列表 1,
* 扫描列表 2,
* 扫描列表 3,
* 扫描列表 [1, 2, 3],
* 扫描全部(所有有列表或无列表的信道),
* 添加扫描列表快捷方式,
* 添加启动时的恢复模式(扫描、bandscope 和 broadcast FM),
* 新动作:
* RX MODE,
* MAIN ONLY,
* PTT,
* WIDE NARROW,
* 1750Hz,
* MUTE,
* POWER HIGH(RescueOps),
* REMOVE OFFSET(RescueOps),
* 新按键组合:
* 添加 F + UP 或 F + DOWN 按键组合以动态更改静噪级别,
* 添加 F + F1 或 F + F2 按键组合以动态更改 Step,
* 添加 F + 8 以在 BLMin 和 BLMax 之间快速切换背光(这将绕过 BackLt 策略),
* 添加 F + 9 以返回 BackLt 策略,
* 添加在 * SCAN 模式下长按 MENU 以临时排除存储信道,
* 添加在 * SCAN 模式下短按 [0, 1, 2, 3, 4 或 5] 以动态更改扫描列表。
* 许多修复:
* 静噪,
* S-Meter,
* DTMF 重叠,
* 扫描列表 2 被忽略,
* 扫描范围限制,
* 启动时清理显示,
* 不再有 PWM 噪声,
* 以及更多……
* 启用 AIR COPY
* 禁用 ENABLE_DTMF_CALLING,
* 禁用 SCRAMBLER,
* 移除 200Tx, 350Tx 和 500Tx,
* 解锁所有频段的 TX 只需重复 3 次,
* 代码重构和大量内存优化,
* 通过 USB 转串口电缆在电脑上显示 Quansheng K5 的实时屏幕,
* 以及更多……
## 来自 Egzumer 的主要功能:
* 许多 OneOfEleven 的修改:
* AM 修复,接收质量大幅提升
* 复制 F+ 动作的长按按钮功能
* 快速扫描
* 菜单中的信道名称编辑
* 信道名称 + 频率显示选项
* 扫描列表分配的快捷方式(长按 `5 NOAA`)
* 扫描列表切换(扫描时长按 `* Scan`)
* 可从菜单选择的可配置按钮功能
* 状态栏上的电池百分比/电压,可从菜单选择
* 更长的背光时间
* 麦克风条
* RSSI S-Meter
* 更多频率步进
* 静噪更灵敏
* fagci 频谱分析仪(**F+5** 打开)
* 我引入的一些其他修改:
* SSB 解调(采用自 fagci)
* 背光调光
* 菜单中的电池电压校准
* 更好的电池百分比计算,可选 1600mAh 或 2200mAh
* 更多可配置的按钮功能
* 长按 MENU 作为另一个可配置按钮
* 菜单中更好的 DCS/CTCSS 扫描(在 RX DCS/CTCSS 菜单项时使用 `* SCAN`)
* Piotr022 风格的 S-Meter
* 按 EXIT 停止扫描时恢复初始频率/信道,按 MENU 按钮记住最后找到的传输
* 重新排序和重命名的菜单项
* LCD 干扰崩溃修复
* 许多其他……
## 手册
最新手册可在 [Wiki 部分](https://github.com/armel/uv-k5-firmware-custom/wiki) 获取
## 电台性能
请注意,Quansheng UV-Kx 电台并非专业质量的收发器,其性能受到严格限制。RX 前端完全没有跟踪调谐带通滤波,因此在一个大频率范围内对任何和所有信号都是宽频/完全开放的。
在高强度 RF 环境中使用该电台很可能会使接收变得非常困难(AM 模式受影响程度远超 FM),接收器根本没有很大的动态范围,这会导致较强的接收信号产生 AM 音频失真。
一旦我做的 RX 增益调整(AM 修复)达到硬件极限,固件/软件方面就无能为力了,您的 AM 接收音频将几乎不存在(就像 Quansheng 的原厂固件一样)。
另一方面,FM 接收音频将会/应该没问题。
但是,就价格而言,它们是不错的玩具,玩起来很有趣。
## 使用 Docker 编译和构建
本项目提供了一个基于 Docker 的构建系统,用于编译 UV-K1 和 UV-K5 V3 的所有固件版本。一切都通过 `compile-with-docker.sh` 辅助脚本处理。
所有构建输出都在 `build/` 目录中生成,根据 `CMakePresets.json` 中定义的 CMake 预设。
### 前置条件
- 系统上已安装 Docker
- Bash 环境(Linux、macOS、WSL、Windows 上的 Git Bash)
### 构建脚本概述
脚本 `compile-with-docker.sh` 执行以下操作:
1. 构建 Docker 镜像(`uvk1-uvk5v3`),如果它尚不存在。
2. 删除任何以前的 `build` 目录以确保配置干净。
3. 在 Docker 容器内使用选定的预设运行 CMake。
4. 构建固件并输出所选版本的 `.elf`、`.bin` 和 `.hex` 文件。
### 用法
```
./compile-with-docker.sh [extra CMake options]
```
### 可用预设
- **Custom**
- **Bandscope**
- **Broadcast**
- **Basic**
- **RescueOps**
- **Game**
- **Fusion**
- **All**(按顺序构建所有版本)
### 示例
构建单个版本:
```
./compile-with-docker.sh Fusion
./compile-with-docker.sh Bandscope
./compile-with-docker.sh Broadcast
```
构建所有内容:
```
./compile-with-docker.sh All
```
### 传递额外的 CMake 选项
您可以在预设名称后传递额外的配置选项。
这些选项将直接转发给容器内的 `cmake --preset`。
示例:
```
./compile-with-docker.sh Bandscope -DENABLE_SPECTRUM=ON
./compile-with-docker.sh Broadcast -DENABLE_FEAT_F4HWN_GAME=ON -DENABLE_NOAA=ON
./compile-with-docker.sh Bandscope -DSQL_TONE=600
```
### 注意事项
- 首次运行可能需要几分钟,因为 Docker 需要构建基础镜像。
- 使用 `All` 运行将按顺序构建每个固件变体。
- 每次构建都在 Docker 内运行,因此的主机环境保持干净。
## 使用 UVTools2 刷写固件
您可以使用跨平台的基于 WebSerial 的 [UVTools2](https://armel.github.io/uvtools2/) 直接从网络浏览器刷写 UV-K5 V3 和 UV-K1。
它适用于 Chrome、Chromium 和 Edge(桌面版),并且不需要在您的计算机上安装任何驱动程序或软件。
## 刷写固件的步骤
- 以 [flash](https://armel.github.io/uvtools2/?mode=flash) 模式打开 UVTools2(或点击 Flash Firmware 选项卡)。
- 使用兼容的 USB 编程电缆(USB-C 或 Baofeng/Kenwood 风格的双插头 USB 电缆)将您的电台连接到计算机。
- 确保您的电台处于 **DFU 模式(刷写模式)**。
- 在计算机上选择固件 .bin 文件。
- 点击 `Flash Firmware`,然后选择与您的电台关联的串口。
- 进度条将引导您完成刷写步骤。
完成后,您的电台将使用新固件重启。
## 转储 or 恢复校准数据的步骤
[UVTools2](https://armel.github.io/uvtools2/) 还可以转储和恢复校准数据,强烈建议执行此操作。最好在安装 F4HWN 固件后立即创建转储,并在安装其他固件之前(例如恢复到原厂固件时)恢复它。
### 转储 (Dump)
- 以 [dump](https://armel.github.io/uvtools2/?mode=dump) 模式打开 UVTools2(或点击 Dump Calib 选项卡)。
- 以 **正常模式** 开启您的电台。
- 点击 `Dump Calibration Data`。
过程完成后,点击 `Download calibration.dat` 将文件保存到您的计算机。
### 恢复 (Restore)
- 以 [restore](https://armel.github.io/uvtools2/?mode=restore) 模式打开 UVTools2(或点击 Restore Calib 选项卡)。
- 以 **正常模式** 开启您的电台。
- 在计算机上选择您的 calibration.dat 文件。
点击 `Restore Calibration Data` 并等待过程完全完成。
## 其他信息来源
- [k1-teardown](https://github.com/armel/k1-teardown)
## 许可证
Copyright 2023 Dual Tachyon
https://github.com/DualTachyon
根据 Apache 许可证 2.0 版(“许可证”)授权;
除非遵守许可证,否则您不得使用此文件。
您可以在以下位置获取许可证副本:
```
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.
```
标签:Bash脚本, HAM Radio, MCU, PY32F071, Quansheng, UV-K1, UV-K5, 业余无线电, 云资产清单, 刷机, 固件, 固件移植, 客户端加密, 对讲机, 嵌入式开发, 开源固件, 微控制器, 无线电编程, 无线通信, 汉化, 自定义固件, 请求拦截, 逆向工程, 通信设备