Also known as: IDEN_UP, identifier update, band plan
A P25 Identifier Update (IDEN_UP) is the control-channel message that defines a
site’s band plan — the mapping from an abstract channel number to an actual downlink
frequency.1 A channel grant never names a frequency
directly; it carries a 4-bit channel ID and a 12-bit channel number. The IDEN_UP
supplies the base frequency and step size for each channel ID, so a decoder can compute
frequency = base + number × spacing and retune to follow a call. A site repeats these
alongside its status broadcasts, and a receiver accumulates one slot per channel ID.
The three variants
Three opcodes carry the same frequency fields with different byte-0 semantics, all parsed
into one IdentifierUpdate struct in internal/radio/p25/phase1/identifier.go:
| Opcode | Mnemonic | Form | Byte-0 low nibble |
|---|---|---|---|
0x3D |
IDEN_UP | 700/800/900 MHz | 9-bit bandwidth (×125 Hz), 9-bit offset (×250 kHz) |
0x34 |
IDEN_UP_VU | VHF/UHF | 4-bit bandwidth code, sign + 13-bit offset (× spacing) |
0x33 |
IDEN_UP_TDMA | Phase 2 TDMA | 4-bit channel-type code (slot count + access mode) |
The fields
| Field | Meaning | Encoding |
|---|---|---|
| Channel ID | 4-bit band-plan slot (0–15) | byte 0 high nibble |
| Base frequency | Downlink frequency for channel 0 | 32-bit field × 5 Hz |
| Channel spacing | Channel-to-channel step | 10-bit field × 125 Hz |
| Transmit offset | Signed uplink offset (uplink = downlink + offset) | ±, unit varies by variant |
| Bandwidth | Nominal channel bandwidth | informational only |
The base frequency is transmitted in units of 5 Hz, and the channel spacing in units of
125 Hz. The transmit offset gives the uplink relative to the downlink — a monitor listening
to the downlink does not need it, but it completes the picture of the channel. Bandwidth is
carried for logging only: GopherTrunk’s frequency resolver uses just base, spacing, and the
grant’s channel number. The Phase 2 TDMA variant (0x33)
additionally flags the channel ID as TDMA, which the Phase 1 control channel uses to route a
grant on that channel into the Phase 2 voice path rather than the Phase 1 FDMA path.
Relevance to SDR
GopherTrunk’s BandPlan accumulates one IdentifierUpdate per channel ID and exposes
Frequency(channelID, channelNumber) to resolve a grant. Until an IDEN_UP has been seen for
a channel ID, grants on it cannot be tuned — the resolver returns ErrUnknownChannelID and
the control channel records a no-bandplan decode gap so the missing band plan is visible in
metrics. Because a P25 site rebroadcasts its Identifier Updates continuously, a scanner that
camps on the control channel long enough learns the full band plan and can then follow any
grant. Snapshot surfaces the accumulated slots so a discovered system’s band plan can be
documented and exported.
Sources
-
Project 25 — Wikipedia, on the P25 standard. Field encodings follow TIA-102.AABF Tables 14/14a/16, cross-checked against OP25 and SDRTrunk. ↩