Convert the Quansheng UV-K5 radio into a KISS TNC (Terminal Node Controller) for packet radio and APRS using egzumer's custom firmware as the base.
Build a fully functional 1200 baud AFSK KISS TNC that operates over serial, transforming a $30 radio into a capable packet radio modem.
Current Phase: Planning & Build System Complete โ
- โ Feasibility analysis complete (75% success probability)
- โ Architecture designed
- โ Firmware base downloaded
- โ Docker build system ready
- ๐ Ready to begin development
See PROJECT_STATUS.md for detailed roadmap.
# Clone or download this repository
cd UV-TNC
# Build using Docker (recommended)
./build-tnc.sh
# Output will be in compiled-firmware/
ls compiled-firmware/# Using k5prog (Linux/Mac)
k5prog -F -YYY -b compiled-firmware/firmware.packed.bin
# Or use the online flasher
# Visit: https://egzumer.github.io/uvtools| Document | Description |
|---|---|
| FEASIBILITY_ANALYSIS.md | Technical feasibility study and hardware analysis |
| ARCHITECTURE.md | Detailed system architecture and design |
| BUILD_GUIDE.md | Complete build system documentation |
| PROJECT_STATUS.md | Current status and development roadmap |
Host PC (APRS Software)
โ Serial/USB (KISS Protocol)
UV-K5 TNC Firmware
โโโ KISS Protocol Handler
โโโ AFSK Modulator (TX)
โโโ AFSK Demodulator (RX)
โโโ PTT Control
โโโ Carrier Detection
โ RF @ 1200 baud AFSK
BK4819 Transceiver
โ Radio Waves
Antenna
- โ KISS TNC protocol over serial
- โ Bell 202 AFSK modulation (1200 baud)
- โ Compatible with standard APRS software
- โ PTT control with configurable timing
- โ Carrier sense (CSMA)
- โ Configurable via KISS commands
- Modulation: Bell 202 AFSK
- Baud Rate: 1200 baud (1200Hz mark, 2200Hz space)
- Serial: 38400 baud (configurable)
- Protocol: KISS TNC
- Frequency: 144-148 MHz (2m band, configurable)
- Half-duplex: Radio limitation
- 9600 baud G3RUH FSK support
- RSSI-based carrier detection
- Configuration stored in EEPROM
- Low power idle mode
- Radio: Quansheng UV-K5 (~$30)
- Cable: K-type USB programming cable (~$5)
- Computer: Linux, Mac, or Windows (WSL2)
- Better antenna for packet radio
- APRS test station for verification
- Logic analyzer for debugging
UV-TNC/
โโโ build-tnc.sh # Main build script (use this!)
โโโ BUILD_GUIDE.md # Build system documentation
โโโ ARCHITECTURE.md # System design
โโโ FEASIBILITY_ANALYSIS.md # Technical analysis
โโโ PROJECT_STATUS.md # Development roadmap
โโโ README.md # This file
โโโ compiled-firmware/ # Build output (created on build)
โโโ uv-tnc/ # Firmware source code
โโโ driver/ # Hardware drivers
โโโ app/ # Application code
โโโ bsp/ # Board support
โโโ Makefile # Build configuration
โโโ Makefile.tnc # TNC-specific config
- Docker installed and running
- 2GB free disk space
# Build firmware (default)
./build-tnc.sh
# Clean build artifacts
./build-tnc.sh clean
# Rebuild everything from scratch
./build-tnc.sh rebuild
# Open interactive shell for debugging
./build-tnc.sh shell
# Show help
./build-tnc.sh helpSee BUILD_GUIDE.md for complete documentation.
- Flash firmware to UV-K5
- Connect K-type USB cable
- Configure serial port (38400 baud, 8N1)
# Example with Direwolf
direwolf -p -c tnc.conf
# Example with Xastir
# Configure serial TNC at /dev/ttyUSB0, 38400 baudThe TNC implements standard KISS protocol:
- Frame delimiter: 0xC0
- Commands: TX delay, persistence, slot time, etc.
- Compatible with all KISS-aware software
- Hardware research and analysis
- Feasibility study (75% success probability)
- Architecture design
- Firmware base (egzumer) downloaded
- Docker build system
- Build automation script
- Documentation
- Test build original firmware
- Verify firmware size
- Strip firmware to essentials
- Implement KISS protocol handler
- Implement AFSK modulator (TX)
- Implement AFSK demodulator (RX)
- Integration and testing
Estimated development time: 24-36 days of active work
| Phase | Duration | Status |
|---|---|---|
| Planning & Setup | 1-2 days | โ Complete |
| Build System | 1 day | โ Complete |
| Minimal Firmware | 3-5 days | ๐ฒ Planned |
| KISS Protocol | 3-5 days | ๐ฒ Planned |
| AFSK TX | 5-7 days | ๐ฒ Planned |
| AFSK RX | 7-10 days | ๐ฒ Planned |
| Integration | 5-7 days | ๐ฒ Planned |
A Terminal Node Controller is a modem for packet radio. It converts digital data to audio tones (AFSK) that can be transmitted over FM radio, and demodulates received tones back to digital data.
KISS (Keep It Simple, Stupid) is a simple framing protocol that minimizes processing on the TNC side. The host computer handles all packet protocol logic (AX.25), while the TNC only handles the physical layer (modulation/demodulation).
- Cheap (~$30) compared to commercial TNCs ($100-300)
- Open firmware available
- Capable hardware (ARM Cortex-M0+, BK4819 RF chip)
- Active development community
- Amateur radio legal
- Mobilinkd TNC - Similar project, different hardware
- Dire Wolf - Software TNC with excellent algorithms
- Arduino APRS - Simpler implementation
This is an active development project. Contributions welcome!
- AFSK demodulation algorithms
- BK4819 audio path configuration
- Testing with real APRS stations
- Documentation improvements
Based on egzumer's UV-K5 firmware, which is licensed under Apache 2.0.
Copyright 2023 Dual Tachyon
https://github.com/DualTachyon
Licensed under the Apache License, Version 2.0
- egzumer - UV-K5 custom firmware base
- DualTachyon - Original UV-K5 firmware reverse engineering
- OneOfEleven - Many custom firmware features
- fagci - Spectrum analyzer and other mods
- โ Legal for licensed amateur radio operators
- โ Must operate within frequency allocations
- โ Must identify transmissions (handled by host software)
- โ Complies with Part 97 (US) / equivalent regulations
- Primary target: 2m band (144-148 MHz)
- Radio already type-accepted for amateur use
- No additional certification required for TNC mode
- Project Repository: UV-TNC
- Base Firmware: egzumer/uv-k5-firmware-custom
- Documentation Wiki: [Coming Soon]
- Discussion Forum: [Coming Soon]
Project Start: 2026-01-01
Status: Active Development
Success Probability: 75% for 1200 baud AFSK TNC