Raspberry Pi 5
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.
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.

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.
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.
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.

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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=fsyncInsert 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
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.
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.
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)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.
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)
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
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.
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.
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.
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.
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.
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.
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.
The boards are made in small community batches — for one, contact SP8MB or ask on the TETRA-POLAND Telegram group.
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.
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.