../gps

GPS protocol

Details

This note is for an RF challenge. I only cover what a basic legacy receiver (L1 C/A, L2 P(Y)) sees — not L2C/L5.

Frame

A GPS “frame” (LNAV subframe) = 5 frames × 10 words × 30 bits = 1500 bits total.

Frame 1Frame 2Frame 3Frame 4Frame 5
Clock & statusEphemeris 1/2Ephemeris 2/2Almanac 1/2Almanac 2/2

Each frame starts with 2 header words (time refs + housekeeping).
Every 30-bit word ends with 6 bits parity (Hamming, shortened).

Word 1

PreambleMessageIntegrityReservedParity
8 b14 b1 b1 b6 b

Word 2

TOW*AlertAnti-SpoofIDPaddingParity
17 b1 b1 b3 b2 b (t)6 b
Details

Frame 1 : Clock and status

Word 3

WNL2 codeAccuracy (URA)HealthIODC (MSB)Parity
10 b2 b4 b6 b2 b6 b

Word 4

L2 P-dataReservedParity
1 b23 b6 b

Word 5

ReservedParity
24 b6 b

Word 6

ReservedParity
24 b6 b

Word 7

ReservedTGDParity
16 b8 b6 b

Word 8

IODC (LSB)t_ocParity
8 b16 b6 b

Word 9

af2af1Parity
8 b16 b6 b

Word 10

af0PaddingParity
22 b2 b (t)6 b

Details
  • L2 code: 01 = P-code on L2; 10 = C/A on L2; others = invalid.
  • WN (week number): GPS week mod 1024 (since 1980-01-06).
  • L2 P-data: 0 = data ON on L2/P; 1 = data OFF.
  • Accuracy (URA): error bound index; e.g. 0000→2.4 m, 0100→9.65 m, 1111→no prediction.
  • Health: 3 MSB = L1 state, 3 LSB = L2 state: 000 healthy, 001 bad timing, 010 bad signal, 011 bad nav data, 111 out of service (others reserved).
  • TGD: L1–L2 group delay (seconds), signed Q0.31 on 8 bits.
  • IODC: Issue Of Data — Clock (dataset version).
  • t_oc / af0..2: clock model reference & coefficients.
    Correction polynomial:
    Δt_sv(t) = af0 + af1·(t − t_oc) + af2·(t − t_oc)^2.

Frame 2 : Ephemeris 1/2

Word 3

IODEC_rsParity
8 b16 b6 b

Word 4

ΔnM₀[31..24]Parity
16 b8 b6 b

Word 5

M₀[23..0]Parity
24 b6 b

Word 6

C_uce[31..24]Parity
16 b8 b6 b

Word 7

e[23..0]Parity
24 b6 b

Word 8

C_us√A[31..24]Parity
16 b8 b6 b

Word 9

√A[23..0]Parity
24 b6 b

Word 10

t_oeFitAODOPaddingParity
16 b1 b5 b2 b (t)6 b
Details

Frame 3 : Ephemeris 2/2

Word 3

C_icΩ₀[31..24]Parity
16 b8 b6 b

Word 4

Ω₀[23..0]Parity
24 b6 b

Word 5

C_isi₀[31..24]Parity
16 b8 b6 b

Word 6

i₀[23..0]Parity
24 b6 b

Word 7

C_rcω[31..24]Parity
16 b8 b6 b

Word 8

ω[23..0]Parity
24 b6 b

Word 9

Ω̇[23..0]Parity
24 b6 b

Word 10

IODEIDOTPaddingParity
8 b14 b2 b (t)6 b
Details

Frames 4–5

Constellation/almanac pages. Not needed for my use case.

/RF/ /satellite/