LinHT

From M17 Foundation Wiki
Jump to navigation Jump to search
LinHT, as seen in the wild

Open-source hardware, Linux-based, SDR handheld transceiver. OpenHT successor with greatly simplified hardware - no FPGAs involved. This project offers a replacement board for the Retevis C62 radio, greatly expanding its capabilities.

Hardware

The device uses an MCM-iMX93 System on Module (SoM) running Linux. The RF front-end is based on the Semtech SX1255. The chip is used as a complete IQ modulator/demodulator, allowing for true all-mode support.

Resources

CPU:

  • Dual-core ARM Cortex-A55 @ 1.7GHz
  • ARM Cortex-M33 coprocessor @ 250MHz
  • Floating Point Unit
  • ARM Ethos U-65 microNPU (Neural Processing Unit with TensorFlow Lite support)

Memory:

  • 2GB LPDDR4
  • 32GB eMMC
  • 500kHz bandwidth complete IQ transceiver

Software

Developers can use C/C++/Python as well as (or in conjunction with) GNU Radio flowgraphs. Tools such as gcc are built-in.

Supported modes (so far):

  • FM transmission and reception with pre-/de-emphasis and CTCSS
  • SSB transmission and reception
  • M17 - transmission and reception
  • TETRA - reception only
  • Demo 64QAM transmission at 2Mbps

Other modes can be added later (FreeDV, APRS, etc.).

Images

Prebuilt images for LinHT can be downloaded here.

Building images

Instructions for setting up the Yocto build environment can be found on here.

Flashing

Standard: using the Universal Update Utility (uuu)

To flash the images to LinHT, the Universal Update Utility is needed. LinHT needs to be booted into flash mode (holding the secondary side button while booting). Once in flash mode, plug in the USB-C cable, then the image can be written with uuu:

uuu -v -b emmc_all imx-boot-mcm-imx93-sd.bin-flash_singleboot linht-image-mcm-imx93.rootfs.wic.zst

Alternative: mounting the eMMC drive

Sometimes, the uuu tool fails to flash the image. It will then exit at 15% (or at some other point) with libusb returning error -1 or -9. Luckily, there is another way to flash the device. Its eMMC drive can be mounted using debug UART exposed at the Kenwood connector. The connection parameters are as follows: 115200 baud, 8 bits, no parity, 1 stop bit, CR-LF line ending.

After putting the LinHT into USB boot mode (and USB-C plugged in), connect a USB-UART converter (3.3V logic!) at the Kenwood connector. Issue a U-boot command to mount the eMMC drive:

ums 0 mmc 0

A new drive should appear (looking like an external flash drive). Then, a tool like dd or Rufus (under Windows) can be used to flash the image:

zstdcat /path/to/image.wic.zst | sudo dd of=/dev/sdX bs=1M status=progress

where /dev/sdX is the eMMC's mounting point.

Updating the image

To update the image, use SSH to execute

fw_setenv bootcmd "setenv bootcmd '`fw_printenv -n bootcmd`'; saveenv; ums 0 mmc 0"

then

reboot now

This command tells U-boot to mount the eMMC drive at next boot. The device will reboot. It is now possible to use dd or Rufus with the freshly mounted eMMC to flash the Linux image (see above). After flashing, unmount the drive and reset the device to complete the process. The bootcmd variable will automatically be overwritten with its original contents, such that after reset the device will boot Linux normally.

Driver

To access LinHTs network device under windows, RNDIS driver need to be installed. You can use for example this one (Not provided by the LinHT team! Use at your own risk!)

It should work on most Linux distributions out of the box!

Links

How-tos

LinHT image build

LinHT Image Manual

Blogs

M17Project.org

uart.cz

Zero Retries

Presentations

LinHT – a GNU Radio configurable handheld transceiver (en), Wojciech Kaczmarski (SP5WWP), M17 Conference 2025

LinHT: open-source SDR transceiver (cz), Vlastimil Slinták (OK5VAS), OpenAlt 2025

Repositories

Hardware

Main LinHT-hw: LinHT hardware repository

LinHT-rf-amp: GRF5604 Test board

Software

LinHT-utils: Collection of LinHT tools, scripts and flowgraphs

Yocto layer

meta-linht-software: Installed software, configuration, ...

meta-linht-hardware: Device Tree, driver, ...

meta-linht-sdr: GNU Radio packages

License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

CC BY-NC-SA 4.0