HowTo

Build your own TetraSpot.

The complete guide: what to buy, how to put it together, how to set up the system and where to get the software. One afternoon, no soldering iron required — everything plugs together. The result is your own TETRA station visible on the network map.

Finished TetraSpot — Raspberry Pi 5 in a case with two antennas and two Motorola radios registered to the network
The goal: TetraSpot HS — two antennas bolted to the case, radios registered on TG10.

Before you start

  • No soldering — everything connects with plugs and screws
  • You need a Phillips screwdriver and an 8 mm spanner for the SMA nuts
  • Assembly takes about an hour, the system and setup about the same
  • Transmitting requires an amateur radio licence
You transmit under your own callsign. TetraSpot operates in the 430–440 MHz amateur band, so the usual rules apply — operator certificate, radio licence and the band plan.
01 — Shopping list

Eight things, that's all.

Nothing here is arbitrary — for every item we explain why it has to be that one, because three of them are easy to get wrong: the memory card, the power supply and the cooling.

RequiredSoC

Raspberry Pi 5

Minimum 2 GB RAM · version 5 recommended

The heart of the station — the whole TETRA stack runs in real time on the CPU. Get a Pi 5 with at least 2 GB of RAM. A Pi 4 will run it too, but expect stability problems — we explain why in the questions below.

RequiredHIGHENDUR.

High Endurance microSD card

32 GB · class A2 / U3 / V30 · “High / Max Endurance” series

TetraSpot writes logs and recordings continuously, 24/7. An ordinary card dies after a few months of that — High Endurance cards (SanDisk Max Endurance, Samsung PRO Endurance) are built for sustained writing.

RequiredTMO HAT — the SX1255 HAT board designed by SQ8MXP and SP8MB

TMO HAT (SX1255)

RX 430 MHz · TX 440 MHz · TCXO · 2× U.FL

Our own design (SQ8MXP and SP8MB) — an SDR board that plugs straight onto the GPIO header and handles the entire radio side. Every board is calibrated in-housebefore it ships, so the local oscillator leakage is already dealt with and there is nothing for you to trim. Costs about 350 PLN; for availability contact SP8MB, as the boards are made in batches.

Required5A

Official USB-C power supply

Raspberry Pi 27 W USB-C PD · 5.1 V / 5 A

This is not the place to save money. A Pi 5 with a radio board can draw serious current in bursts; a phone charger ends in throttling, reboots mid-transmission and a corrupted memory card.

Required

Active cooling

Official Active Cooler or a case with a fan

The station runs DSP non-stop inside a closed case. Without a fan the Pi hits its thermal limit and drops its clock — you hear that as choppy audio.

RequiredU.FLSMA

U.FL → SMA pigtails

2 pcs · 10–15 cm · panel-mount SMA female

The HAT has tiny U.FL sockets, antennas use SMA — the pigtail bridges them and brings the connector out to the case wall. Get the panel-mount version (with a nut) so the antenna bolts to the case instead of dangling on a cable.

Required

70 cm antennas

2 pcs · SMA · 430–440 MHz

Separate antennas for transmit and receive — TetraSpot works in duplex, transmitting and receiving at the same time. Space them as far apart as you can; the better the isolation, the more sensitive the receiver.

Required

Enclosure

3D print or aluminium · 2 holes for SMA

What matters is being able to bolt the antennas to the case — the SMA connectors pass through the wall. A 3D print is perfectly fine; aluminium additionally shields and carries heat away.

Complete from~1300 PLNRaspberry Pi 5 with accessories, the TMO HAT and a used TETRA radio. The 10 W BTS variant adds roughly 2000 PLN more (driver, class-A power amplifier, duplexer, filters, rooftop antenna).
02 — Assembly

Four steps, no soldering.

The whole thing goes together with a screwdriver. The only part that needs a light touch is the U.FL connectors — they are tiny and hate sideways force.

01

Seat the HAT on the GPIO header

Push the TMO HAT onto the 40-pin header — straight, all pins at once, no tilting. Bolt it down on M2.5 standoffs: without them the board flexes when you plug in the pigtails and eventually cracks.

02

Connect the U.FL pigtails

Press the U.FL plugs onto the RX and TX sockets — straight down, with a finger or a plastic tool, until they click. The connector is rated for a few dozen cycles, so treat it as a one-time connection, not a serviceable one.

03

Mount the SMA connectors in the case

Push the panel-mount ends of the pigtails through the holes and tighten the nuts from outside (8 mm spanner). Route the cables so they do not rest on the heatsink or block the fan.

04

Close the case and fit the antennas

Cooling, ventilation, lid — and the antennas last. Space them as far apart as you can. Never transmit without antennas connected: the power stage would be driving into an open circuit and can be damaged.

03 — Station image

A ready image, no system to assemble.

You do not install Raspberry Pi OS by hand and you compile nothing. You fill in the wizard questionnaire, receive a card image set up for your callsign and frequencies, write it to the card — and the station configures itself on the first boot.

01

Get an invite code

The wizard lives at update.tetra-poland.pl and is open to everyone, but image generation only starts with an invite code. The code exists because the process ends with your station joining the fleet VPN — ask SP8MB or the TETRA-POLAND Telegram group. That is also when you agree on the talkgroup number for your station.

02

Work through the questionnaire

One form, a few minutes. You give your callsign (it becomes the station name), the transmit and receive frequencies — checked live against the channel calculator, so an off-grid pair will not go through — and the SDR type with its board revision. Then the network side: joining the TetraPoland network and your assigned talkgroup, your BrandMeister login and password (the station ISSI is derived from them), the Wi-Fi network, your own system password and the update channel. Packet data with WAP, the talking clock and the street name on the radio display are ticked by default — leave them unless you have a reason not to.

03

Confirm by e-mail and collect the image

After you submit the form you get an e-mail with a confirmation link — only that starts the build. A typical release takes around 12 minutes and the page shows the progress. At the end you get a download link to an .img.xz file and a note with the passwords, shown only once — save it straight away. The image stays on the server for 24 hours, then it is gone.

04

Write the image to the card

In the Raspberry Pi Imager choose Use custom and point it at the downloaded file — the Imager unpacks it for you. Do not enable the Imager’s own customisation (gear icon / Ctrl+Shift+X): the user, password, SSH and the whole questionnaire are already inside the image, and the Imager’s settings would overwrite them. If you prefer the console, plain dd works on Linux and macOS — just be certain about the device letter, because a mistake wipes another disk.

# console route (Linux / macOS)
xz -d tetraspot-SP8MB-2026.08.08.img.xz
lsblk                      # check the card's letter!
sudo dd if=tetraspot-SP8MB-2026.08.08.img of=/dev/sdX \
        bs=4M status=progress conv=fsync
05

First boot — the station does the rest

Insert the card, fit the antennas, apply power. The first boot personalizes the system and reboots once along the way — give it a few minutes. The station then comes up on its own, checks in and appears on the map, and the panel waits in your browser at https://tetraspot-callsign.local (no login by default). While you are there, confirm power and cooling hold up: throttled=0x0 means nothing is limiting the CPU. If the first boot fails, its log stays on the card’s boot partition — readable by putting the card back into a computer.

ssh tetraspot@tetraspot-<callsign>.local

vcgencmd get_throttled     # 0x0 = power and cooling are fine
vcgencmd measure_temp
systemctl status tetra-switch tetra-hotspot
04 — Software

The TetraSpot package.

You do not install the stack separately — it rides inside the wizard’s image as systemd services. After the first boot it starts together with the system and everything is configured from the browser.

Updates arrive on their own. The station checks for new releases and fetches them itself; every release is digitally signed and one without a valid signature is rejected. Your configuration, databases and logs are left untouched. No compiler and no manual install — and if something is missing, or you need an invite code, get in touch with SP8MB.

What the package gives you

05 — The radio

What to set in the handset.

The station is only half the job — the other half sits in the radio’s codeplug. Below are the network parameters to enter, and then the two things most guides skip: internet access from the handset (packet data) and the WAP browser on its display.

01

Enter the network parameters into the codeplug

The radio has to know which network to look for and on which frequencies. These are the same values TetraSpot starts with after installation — if you change them on the station, change them here too. You are transmitting in the amateur band, so keep to the 430–440 MHz band plan.

MCC ............... 901
MNC ............... 9998
Band .............. 430-440 MHz (TETRA band 4)
Radio receives (DL) 440.000 MHz
Radio transmits(UL) 430.000 MHz
Duplex shift ...... 10 MHz
Talkgroups ........ 10-90  (TetraPoland hub)
                    91+    (BrandMeister)
02

Add the talkgroups

Talkgroups 10–90 are served by the TetraPoland hub — that is where you meet the rest of the network, and traffic from your station is heard nationwide on them. From 91 upwards runs an independent link to BrandMeister. Start with TG20: it is the calling group, the easiest place to find someone for a first test. Need a talkgroup that is not on the list — for your own country, a region or a group of operators? Just ask and we will create it; the list is not closed.

03

Turn on packet data — internet from the handset

TetraSpot assigns the radio an IP address and forwards its traffic to the internet. In Motorola’s CPS you will find this under Codeplug → Data Services. You do not type the address in — the station hands one out from its own pool, the radio only has to ask for it. CHAP authentication is handled on the station side, so you can leave User Authentication as you have it.

Codeplug -> Data Services -> Packet Data Parameters

Request a Dynamic IP Address ... tick
Default Packet Data Mode ....... Voice & Data
Static IP Address .............. 0.0.0.0 (unused)
User Authentication ............ either way (CHAP supported)
04

Set the WAP gateway and the home page

The radio’s built-in browser goes through the WAP gateway on the station — which is why the proxy points at 10.0.0.1, the station’s own address on the data subnet. Set the TetraSpot portal as your home page; ordinary lightweight http:// pages work too (modern HTTPS will not render — that is a WAP limit, not the station’s).

Codeplug -> Data Services -> WAP -> Proxy Table 1

Proxy IP Address ... 10.0.0.1      (station on the data subnet)
Remote Port ........ 9201          (9200 = fallback)
Bearer Index ....... 0             (Bearer Table 1: TETRA_PACKET)
Active ............. tick          (without it the radio ignores the table)

Codeplug -> Data Services -> WAP -> WAP Parameters

Active proxy ....... Proxy Table 1
Homepage ........... http://10.0.0.1:4440/wap
05

Check that it works

Open the browser on the radio and go to the home page. You will see the portal menu: cell status, the call log with callsigns (hub-bridged calls carry their own mark), the SDS log and the list of attached radios. If the page loads, the radio has an IP address, the data channel is up and the gateway answers — the whole path verified in one move.

These are the defaults. MCC, MNC, the frequencies and the duplex shift can be set to anything on the TetraSpot side — the values above are what the station starts with after installation. Packet data and WAP are enabled by default in the distribution image, so usually only the radio side needs work.
06 — Questions

Before you order.

Do I need an amateur radio licence?

Yes. TetraSpot is a transmitter operating in the 430–440 MHz amateur band, so you need an operator certificate and a radio licence, and the station runs under your callsign. Without a licence you can build the hardware and listen, but not transmit.

Is the network Poland-only?

No — do not let the domain fool you. The address is Polish because that is where the project started, but the network is for everyone, regardless of nationality. Stations and operators from outside Poland join on exactly the same terms. If you need extra talkgroups beyond the ones already running — for another country, a region or a group of operators — write to the TETRA-POLAND Telegram group or to marcin@sp8mb.pl, and they will be created.

What does it all cost?

The TMO HAT is about 350 PLN, the rest of the electronics a few hundred more, and a used TETRA radio starts at around 400 PLN — the whole build usually lands near 1300 PLN. Details and the 10 W BTS variant are described on the TetraSpot project page.

Will it work on a Raspberry Pi 4?

It will run, but do not count on stable operation. Audio from the HAT arrives over I2S via DMA and the program has to drain the buffer before it fills up. When the system is busy writing logs or doing something else, the process falls behind and drops samples (an XRUN) — you hear that as clicks and broken audio. The Pi 5 has the headroom in CPU and memory bandwidth that the Pi 4 simply lacks.

What about a regular PC?

Yes — besides the Raspberry Pi the stack runs properly on x86-64, so a mini PC is a sensible alternative if a small enclosure is not a priority.

Do I have to use your HAT?

No — TetraSpot supports the SX1255, AD9363 and AD9361 chipsets, so in theory any board built around them will fit. What decides the quality, though, are three things: the TCXO reference, the filters and the calibration. A weaker TCXO drifts with temperature — the station heats up inside a closed case, the frequency wanders off and terminals start losing synchronisation. Poor filters pass through what they should be cutting out. And a third-party board will most likely arrive uncalibrated, leaving the oscillator leaking right in the middle of your own channel and degrading the signal you transmit. The TMO HAT is simply the easiest route: it plugs straight into the Pi, costs about 350 PLN, comes calibrated and there is nothing to source yourself.

Where do I get a TMO HAT?

The boards are made in small community batches — for one, contact SP8MB or ask on the TETRA-POLAND Telegram group.

Are two antennas really necessary?

With this design, yes — TetraSpot transmits and receives simultaneously (10 MHz duplex), so the RX and TX paths have separate outputs. The alternative is a duplexer and a single antenna, but that belongs to the far more expensive BTS variant.

What does it take to turn this into a full BTS?

The HAT alone gives you hotspot power. A base station adds a driver, a power amplifier, a duplexer and filters. The amplifier is the awkward part: TETRA uses a non-constant-envelope modulation (π/4-DQPSK), so the PA has to run linearly, in class A — otherwise the spectrum spreads and you start interfering with the neighbouring channels. The price of that linearity is poor efficiency and a serious amount of heat to get rid of. The duplexer lets you work off a single antenna, and the filters keep you from spilling outside your own channel.