GPS protocol
Scope
For an RF challenge focused on legacy GPS LNAV as seen by a basic receiver (L1 C/A, L2 P(Y)). No L2C/L5.
Structure (navigational message)
- Subframe (SF1..SF5):
10 words × 30 bits = 300 bits = 6 s
. - Frame:
5 subframes = 1500 bits = 30 s
(SF1..SF5). - Superframe:
25 frames = 12.5 min
.
Each 30-bit word = 24 data bits + 6 parity bits (shortened Hamming). Tables below list the 24 data bits only; every word carries +6 parity at the end. Angles are in semi-circles unless stated otherwise. Convert: Times: Scales (ICD style): Signed fields are two’s-complement.Legend (units, scales, sign)
radians = value × π
.TOW
(HOW): start time of the next subframe, step 6 s (17 bits, truncated).t_oc
, t_oe
: seconds-of-week, step 16 s (16 bits).WN
: GPS week mod 1024 (since 1980-01-06).Δn
: semi-circles/s, scale 2^-43
(16 b).M₀
, ω
, Ω₀
, i₀
: semi-circles, scale 2^-31
(32 b).Ω̇
, IDOT
: semi-circles/s, scale 2^-43
(24/14 b).e
: unitless eccentricity, scale 2^-33
(32 b).√A
: sqrt(m), scale 2^-19
(32 b).C_rs
, C_rc
: meters, scale 2^-5
(16 b signed).C_us
, C_uc
, C_is
, C_ic
: radians, scale 2^-29
(16 b signed).TGD
: seconds, int8 × 2^-31 s (8 b signed).Padding (t)
: tail bits with no nav meaning (used by the parity mechanism).
Header - Common to each frames
Word 1 (TLM): Preamble(8) | Message(14) | Integrity(1) | Reserved(1)
Word 2 (HOW): TOW(17) | Alert(1) | Anti-Spoof(1) | ID(3) | Padding(t,2)
Header notes
10001011
1..5
Subframe 1 — Clock & status
Word 3: WN(10) | L2 code(2) | URA(4) | Health(6) | IODC
Word 4: L2 P-data flag(1) | Reserved(23)
Word 5: Reserved(24)
Word 6: Reserved(24)
Word 7: Reserved(16) | TGD(8)
Word 8: IODC | t_oc(16)
Word 9: af2(8) | af1(16)
Word 10: af0(22) | Padding(t,2)
Clock model & statuses
01
P-code on L2; 10
C/A on L2 (others invalid).t
): Δt_sv(t) = af0 + af1·(t − t_oc) + af2·(t − t_oc)^2
Subframe 2 — Ephemeris (1/2)
Word 3: IODE(8) | C_rs(16)
Word 4: Δn(16) | M₀
Word 5: M₀
Word 6: C_uc(16) | e
Word 7: e
Word 8: C_us(16) | √A
Word 9: √A
Word 10: t_oe(16) | Fit(1) | AODO(5) | Padding(t,2)
Notes (SF2)
0
= 4 h fit interval, 1
= > 4 h.
Subframe 3 — Ephemeris (2/2)
Word 3: C_ic(16) | Ω₀
Word 4: Ω₀
Word 5: C_is(16) | i₀
Word 6: i₀
Word 7: C_rc(16) | ω
Word 8: ω
Word 9: Ω̇
Word 10: IODE(8) | IDOT(14) | Padding(t,2)
Notes (SF3)
C_ic
, C_is
(inclination); C_rs
, C_rc
(radius); C_uc
, C_us
(arg. latitude).
Subframes 4–5
Constellation/almanac pages — not required for my use case.