Field Guide · term

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.

CACH TS1 burst CACH TS2 burst CACH TS1 burst same-slot stride = 288 dibits (2×132 + 2×12 CACH)
On an outbound DMR carrier a 12-dibit CACH precedes each burst, so two bursts of the same logical call sit 288 dibits apart rather than the 264 of a CACH-free stream.

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

  1. Digital mobile radio — Wikipedia, on the DMR standard and its outbound common signalling. 

  2. Time-division multiple access — Wikipedia, on the two-slot framing between which the CACH is interleaved. 

See also