Also known as: CACH, common announcement channel
The DMR CACH (Common Announcement Channel) is the short 24-bit field a base station interleaves between the two TDMA timeslots on its outbound carrier.1 Because a DMR base station transmits continuously — filling both slots — it uses the gap between one slot’s burst and the next to insert a CACH, giving mobiles a channel that is present on every outbound frame regardless of which timeslot they follow.2 The CACH carries TACT bits describing the access state of the channels, and it also serves as a reliable inter-burst timing landmark.
Structure and TACT
The CACH is 24 bits — 12 dibits — laid out per ETSI TS 102 361-1 §6.2. Seven of those bits form the TACT (Terminator / Access-Type / Channel-Type) block, protected by a short Hamming/QR code, with the remaining bits assigned to the interleaved payload of a slow signalling channel. TACT encodes, among other things, the AT (access type — whether the associated logical channel is idle or busy) and the TC (TDMA channel number, identifying which of the two logical slots the following burst belongs to), plus an LCSS-style pair marking the position of the CACH’s own payload fragment within a longer message. A mobile reads TACT to know, frame by frame, whether a slot is free before it attempts access.
GopherTrunk’s use: cadence only
GopherTrunk does not currently decode TACT. In the voice decode path
(internal/radio/dmr/voice/superframe.go) the CACH is treated purely as a timing artefact:
its presence changes the dibit distance between two same-slot bursts. On a CACH-free stream
(direct mode, or a replayed capture) same-slot bursts are 2 × 132 = 264 dibits apart; on a
live BS-sourced outbound carrier a 12-dibit CACH before each burst stretches that to
2 × (132 + 12) = 288. The interleaved decoder auto-detects which stride is in use per call
(cachDibits = 12, NewInterleavedDecoder) and locks it, so the CACH never has to be decoded
for the cadence to be recovered. Impl-gap: the TACT access-type and channel bits are not
parsed — the field is consumed as a spacing constant, not as signalling. Reading TACT would let
GopherTrunk track slot busy/idle state directly rather than inferring cadence from AMBE FEC
quality.
Relevance to SDR
For a scanner the CACH’s most valuable property today is exactly the timing role GopherTrunk uses: distinguishing an outbound (CACH-bearing, 288-stride) carrier from a direct-mode or replayed (264-stride) stream is what lets the voice decoder slice bursts B–F at the correct same-slot cadence and avoid pulling dibits from the wrong timeslot. Promoting the CACH to a fully-decoded TACT channel is a natural extension: it would surface per-slot access state and give a second, independent cross-check on which logical channel each burst carries.
Sources
-
Digital mobile radio — Wikipedia, on the DMR standard and its outbound common signalling. ↩
-
Time-division multiple access — Wikipedia, on the two-slot framing between which the CACH is interleaved. ↩