AN-001: NMEA 0183 Protocol Structure & Sentence Dictionary
Scope
AN-001 is a field-level NMEA 0183 reference for GNSS receiver output. It is designed for engineers who need to look up sentence fields, version differences, protocol value codes, and GNSS ID handling during integration. For checksum code, Python/C examples, serial-stream handling, and RTK workflow interpretation, see Mastering NMEA 0183.
Part 1 — Protocol Structure and Parsing Rules
NMEA 0183 defines how navigation devices transmit line-based ASCII sentences over a serial link. For GNSS receivers, the important parsing units are the talker ID, sentence formatter, comma-separated fields, checksum, and CR/LF line ending.
1.1 Transport Model: Single Talker, Multiple Listeners
NMEA 0183 is designed around a single talker sending printable ASCII sentences to one or more listeners. The protocol does not provide guaranteed delivery, retransmission, or high-bandwidth data transfer. For GNSS integration, the receiver output should be treated as a one-way navigation and status stream, not as a transactional bus.
This is why NMEA 0183 stays common in GNSS modules: it is easy to inspect, log, and bring up on UART or RS-422 links. The tradeoff is on the host side: dropped lines, partial reads, null fields, and vendor-specific sentences must be handled explicitly.
1.2 General Sentence Structure
NMEA 0183 sentences use a line-based ASCII structure: a start delimiter, a talker ID, a sentence formatter, comma-separated fields, a checksum delimiter, and a CR/LF line ending.
$TTSSS,field1,field2,...,fieldN*HH<CR><LF>
The core structure of standard NMEA 0183 GNSS sentences follows a fixed ASCII sequence of delimiters, talker IDs, sentence formatters, comma-separated fields, checksum, and CR/LF line ending:
| Element | Meaning | Parser Note |
|---|---|---|
$ |
Start delimiter | Must appear at the beginning of a sentence. |
TT |
Talker ID | Identifies source constellation or combined solution context. |
SSS |
Sentence formatter | Defines the field layout, such as GGA, RMC, or GSV. |
, |
Field delimiter | Empty fields are valid and must be preserved. |
fieldN |
Data field | Meaning depends on sentence formatter and field index. |
* |
Checksum delimiter | Ends the checksum scope. |
HH |
Checksum | 8-bit XOR formatted as two uppercase hexadecimal digits. |
<CR><LF> |
Line ending | Terminates the sentence. |
Parser rule: do not remove empty fields before indexing. Empty fields preserve field positions, and dropping them shifts every field after the gap.
Parser Rule — Length Limit
Classic NMEA 0183 sentences are conventionally limited to 82 characters including $ and <CR><LF>. Modern proprietary or vendor-specific sentences may exceed that limit, so a GNSS parser should allocate a larger receive buffer, commonly 256 bytes or more, and log overlength lines instead of crashing.
1.3 Standard, Query, and Proprietary Sentences
NMEA 0183 streams may contain standard GNSS sentences, query-style sentences, and proprietary vendor sentences. A field dictionary should treat these differently. Standard GNSS sentences such as GGA, RMC, GSA, and GSV have broadly documented field layouts. Proprietary sentences, often starting with a vendor prefix such as $P..., should be parsed only when the receiver manual defines them.
Production parsers should accept the standard formatters they need and log unknown vendor sentences without rejecting the entire stream. For an example of vendor command and output documentation, see the SCOUT PRO Protocol Reference and GUIDE Module Protocol.
1.4 Talker Identifiers
The NMEA 0183 talker identifier is the first two characters after the $ symbol and describes the source system or combined GNSS context:
| Talker ID | Source | Version Context | Parser Note |
|---|---|---|---|
GP |
GPS | Legacy / common | Do not hard-code as the only valid prefix. |
GL |
GLONASS | Multi-GNSS | May appear in GSA/GSV output. |
GA |
Galileo | Multi-GNSS | May appear in GSA/GSV output. |
GB |
BeiDou | v4.11 relevance | Important in Asia-Pacific receiver output. |
GQ |
QZSS | v4.11 relevance | Japan regional system. |
GI |
NavIC / IRNSS | v4.11 relevance | India regional system. |
GN |
Combined GNSS | Modern receiver output | Common for fused multi-constellation position solutions. |
Production parsers should match the sentence formatter, such as GGA or RMC, rather than the full address field, such as GPGGA or GNGGA.
1.5 Null Fields
NMEA 0183 represents missing data with an empty field, not with zero. A parser must preserve empty fields and treat numeric zero as a real value unless the status or quality field says the fix is invalid.
| Pattern | Meaning | Parser Behavior |
|---|---|---|
,, |
Missing field | Treat as null / unknown. |
0 |
Numeric zero | Treat as a real numeric value. |
0.000,N,0.000,E |
Real coordinate pair | Do not infer “no data” from coordinate value alone. |
GGA Quality = 0
|
Invalid fix | Ignore position fields even if present. |
1.6 Checksum Field
The checksum is the XOR of all bytes after $ and before *, formatted as two uppercase hexadecimal digits. This application note defines the field and scope only. For Python, C, and manual checksum examples, see Mastering NMEA 0183 §Checksum.
Part 2 — NMEA 0183 v3.01 vs v4.x: Version-Related Parsing Differences
NMEA 0183 version differences matter because older GPS-era parsers often assume fixed talker IDs and field counts, while v4.x-era GNSS receivers may output combined talkers, trailing status fields, System IDs, and Signal IDs.
2.1 Why Version Matters
NMEA 0183 v3.01, the last widely referenced GPS-era revision, often appears in older parser examples and legacy receiver integrations. v4.10-era GNSS output may include multi-GNSS talkers, trailing fields, mode indicators, System ID fields, and Signal ID fields that older parsers were not written to expect.
2.2 Version Summary Table
The evolution from legacy GPS-era NMEA 0183 v3.01 to multi-constellation v4.10 and v4.11 introduced several parser-facing changes:
| Version | Engineering Context | Main Change | Parser Impact |
|---|---|---|---|
v3.01 |
Legacy GPS-era reference | GPS-centric field expectations | Older parsers often expect $GP.... |
v4.10 |
Common GNSS integration reference | GN talker, navigation status, system / signal fields in some output | Parser must tolerate extra trailing fields. |
v4.11 |
Multi-constellation expansion | BeiDou / QZSS / NavIC talker and System ID assignments | Parser must not hard-code GP/GN only. |
v4.30 |
Latest official revision | Latest published specification revision and maintenance updates | Adoption varies by receiver vendor and firmware generation. |
2.3 v3.01 → v4.10: Field-Level Diff
A v3.01-era parser usually fails on current GNSS receiver logs because it assumes GPS-only talkers, shorter field layouts, and fixed field counts.
| Sentence | v3.01-Era Layout | v4.10-Era Behavior | Parser Impact |
|---|---|---|---|
GGA |
Core structure largely stable | Most integrations still parse the same core fields | Low risk; avoid hard-coding $GPGGA. |
RMC |
Older layouts may omit trailing status fields | Mode / navigation status may appear as trailing fields | Old parser may reject or misread trailing fields. |
GSA |
GPS-centric assumptions common | System ID may appear in multi-GNSS output | Needed for constellation-level grouping. |
GSV |
Satellite blocks without signal-level context | Signal ID may appear in extended output | Needed for signal-level diagnostics. |
| Area | v3.01-Era Assumption | v4.10-Era Receiver Behavior | Risk |
|---|---|---|---|
| Talker ID |
$GP... expected |
$GN..., $GA..., $GB... may appear |
Valid fixes dropped. |
| Field count | Fixed shorter layouts | Extra trailing fields may appear | Index errors or false rejection. |
| GSA/GSV | GPS-centric satellite model | Multi-constellation output | Incomplete sky model. |
| RMC status | Minimal trailing fields | Mode / navigation status fields may appear | Wrong field mapping. |
| Signal info | Not expected | Signal ID may appear | Unknown trailing field handling needed. |
2.4 v4.10 → v4.11: Talker ID Expansion
In v4.11-era output, BeiDou, QZSS, and NavIC/IRNSS talker identifiers become important for multi-constellation receivers. A parser should treat these as valid GNSS talkers and should tolerate future or vendor-specific talkers without crashing.
| Talker ID | System | Parsing Requirement |
|---|---|---|
GB |
BeiDou | Treat as valid GNSS talker. |
GQ |
QZSS | Treat as valid GNSS talker. |
GI |
NavIC / IRNSS | Treat as valid GNSS talker. |
| Unknown future talker | Vendor / future system | Preserve raw sentence; do not crash. |
2.5 v4.30 Note
NMEA 0183 v4.30 is the latest official revision. For GNSS integrators, its practical significance is ongoing standard maintenance, not a reason to rewrite every v4.10/v4.11 parser. Many receiver manuals and firmware outputs still document v4.10/v4.11-era behavior around talker IDs, System ID, Signal ID, and sentence-specific trailing fields. Always check the receiver vendor manual for exact field support.
2.6 Backward Compatibility Checklist
Use this checklist when adapting older GPS-era parser examples to current multi-GNSS receiver output.
| Check | Why |
|---|---|
| Match formatter, not full talker prefix | Avoid $GPGGA vs $GNGGA failures. |
| Count fields before indexing | Avoid crashes on shorter or longer layouts. |
| Preserve null fields | Avoid shifting field positions. |
| Ignore unknown trailing fields safely | Support newer receiver output. |
| Validate checksum before parsing fields | Avoid interpreting corrupted bytes. |
| Preserve raw sentence in logs | Enable later debugging when vendor output differs. |
Part 3 — NMEA 0183 Sentence Dictionary (Messages & Field Tables)
In NMEA 0183, GGA carries fix quality and RTK status, RMC carries date and velocity, GSA reports satellites used in the solution, and GSV reports satellites in view. The field tables below preserve NMEA field order; empty fields should be preserved by the parser.
3.1 GGA Message — Global Positioning System Fix Data
The NMEA 0183 GGA sentence is the core fix-data string for GNSS receivers. It reports position, altitude, fix quality, satellite count, HDOP, correction age, and station ID:
$GNGGA,072446.00,3114.562,N,12128.050,E,4,21,0.6,15.2,M,8.9,M,1.0,0031*50
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNGGA |
Talker + formatter | Parse formatter GGA. |
| 1 | UTC Time | 072446.00 |
Fix time | No date. |
| 2 | Latitude | 3114.562 |
DDMM.MMMM | Convert before map use. |
| 3 | N/S Indicator | N |
Latitude hemisphere |
S = negative. |
| 4 | Longitude | 12128.050 |
DDDMM.MMMM | Convert before map use. |
| 5 | E/W Indicator | E |
Longitude hemisphere |
W = negative. |
| 6 | Quality Indicator | 4 |
Fix status | See Part 4.1. |
| 7 | Satellites Used | 21 |
Satellites in solution | Not satellites in view. |
| 8 | HDOP | 0.6 |
Horizontal dilution | Geometry indicator. |
| 9 | Altitude | 15.2 |
Altitude above MSL | Unit in field 10. |
| 10 | Altitude Unit | M |
Meters | Usually M. |
| 11 | Geoid Separation | 8.9 |
Separation from ellipsoid | Unit in field 12. See Beyond WGS84. |
| 12 | Geoid Unit | M |
Meters | Usually M. |
| 13 | Correction Age | 1.0 |
Age of differential / RTK correction | Optional. See RTCM Unpacked. |
| 14 | Station ID | 0031 |
Base station ID | Optional. |
| Checksum | Checksum | *50 |
XOR checksum | Not a comma field. |
Coordinate Warning
NMEA latitude and longitude use DDMM.MMMM / DDDMM.MMMM format, not decimal degrees. Passing 3114.562 directly to a map API as decimal degrees will produce a wrong location.
- GGA does not contain date.
- GGA Field 6 carries RTK fix status.
- Satellites used is not the same as satellites in view.
- Altitude and geoid separation should not be mixed.
- For engineering interpretation of Quality 4/5, see Mastering NMEA 0183 §RTK Applications.
3.2 RMC Message — Recommended Minimum Specific GNSS Data
The NMEA 0183 RMC sentence is the minimum navigation record. Compared with GGA, it adds date, speed over ground, and course over ground in one string:
$GNRMC,072446.00,A,3114.562,N,12128.050,E,10.5,180.0,200625,0.0,E,R,S*71
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNRMC |
Talker + formatter | Parse formatter RMC. |
| 1 | UTC Time | 072446.00 |
Fix time | Combine with date field. |
| 2 | Status | A |
Data validity |
A valid, V warning. |
| 3 | Latitude | 3114.562 |
DDMM.MMMM | Position. |
| 4 | N/S | N |
Hemisphere |
S = negative. |
| 5 | Longitude | 12128.050 |
DDDMM.MMMM | Position. |
| 6 | E/W | E |
Hemisphere |
W = negative. |
| 7 | Speed Over Ground | 10.5 |
Knots | Convert if needed. |
| 8 | Course Over Ground | 180.0 |
Degrees true | Course, not heading. |
| 9 | Date | 200625 |
DDMMYY | RMC’s key advantage. |
| 10 | Magnetic Variation | 0.0 |
Degrees | Often empty. |
| 11 | Variation Direction | E |
E/W | Often empty. |
| 12 | Mode Indicator | R |
Positioning mode | Version-dependent. |
| 13 | Navigation Status | S |
Status flag | Version-dependent / optional. |
| Checksum | Checksum | *71 |
XOR checksum | Not a comma field. |
GGA vs RMC: GGA carries altitude and fix quality but no date; RMC carries date and course over ground but no altitude.
- RMC includes date; GGA does not.
- RMC does not include altitude.
- Course over ground is not true heading.
- Mode / navigation status fields are version-dependent; count fields before indexing.
3.3 GLL — Geographic Position
The NMEA 0183 GLL sentence carries geographic position, UTC time, and validity status in a compact position-only format.
$GNGLL,3114.562,N,12128.050,E,072446.00,A,R*6C
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNGLL |
Talker + formatter | Parse formatter GLL. |
| 1 | Latitude | 3114.562 |
DDMM.MMMM | Position only. |
| 2 | N/S | N |
Hemisphere |
S = negative. |
| 3 | Longitude | 12128.050 |
DDDMM.MMMM | Position only. |
| 4 | E/W | E |
Hemisphere |
W = negative. |
| 5 | UTC Time | 072446.00 |
Time | No date. |
| 6 | Status | A |
Data valid / warning |
A valid, V warning. |
| 7 | Mode Indicator | R |
Positioning mode | Version-dependent. |
| Checksum | Checksum | *6C |
XOR checksum | Not a comma field. |
- GLL has no altitude.
- GLL has no GGA-style RTK quality field.
- It is common in legacy and marine-style logs.
3.4 GNS — GNSS Fix Data
The NMEA 0183 GNS sentence is the multi-constellation alternative to GGA and can expose a per-system mode indicator string when the receiver supports it.
$GNGNS,072446.00,3114.562,N,12128.050,E,RR,21,0.6,15.2,8.9,1.0,0031*7F
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNGNS |
Talker + formatter | Parse formatter GNS. |
| 1 | UTC Time | 072446.00 |
Fix time | No date. |
| 2 | Latitude | 3114.562 |
DDMM.MMMM | Position. |
| 3 | N/S | N |
Hemisphere |
S = negative. |
| 4 | Longitude | 12128.050 |
DDDMM.MMMM | Position. |
| 5 | E/W | E |
Hemisphere |
W = negative. |
| 6 | Mode Indicators | RR |
Mode per constellation | GNS-specific value; receiver support varies. |
| 7 | Satellites Used | 21 |
Satellites in solution | Not satellites in view. |
| 8 | HDOP | 0.6 |
Horizontal dilution | Geometry indicator. |
| 9 | Altitude | 15.2 |
Altitude above MSL | Unit implied by receiver context. |
| 10 | Geoid Separation | 8.9 |
Geoid / ellipsoid separation | Optional. |
| 11 | Correction Age | 1.0 |
DGNSS / RTK correction age | Optional. |
| 12 | Station ID | 0031 |
Differential reference station ID | Optional. |
| Checksum | Checksum | *7F |
XOR checksum | Not a comma field. |
- GNS is useful when output distinguishes fix modes by constellation.
- The mode indicator string is the key field that separates GNS from a simple GGA substitute.
- Receiver support varies; treat GNS as optional unless your vendor manual requires it.
3.5 VTG — Course Over Ground and Ground Speed
The NMEA 0183 VTG sentence carries course over ground and ground speed, usually in knots and kilometers per hour.
$GNVTG,180.0,T,180.0,M,10.5,N,19.4,K,A*35
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNVTG |
Talker + formatter | Parse formatter VTG. |
| 1 | Course True | 180.0 |
Track made good, true | Course, not heading. |
| 2 | True Indicator | T |
True reference | Usually T. |
| 3 | Course Magnetic | 180.0 |
Track made good, magnetic | May be empty. |
| 4 | Magnetic Indicator | M |
Magnetic reference | May be empty. |
| 5 | Speed Knots | 10.5 |
Speed over ground | Knots. |
| 6 | Knots Unit | N |
Nautical miles per hour | Usually N. |
| 7 | Speed km/h | 19.4 |
Speed over ground | Kilometers per hour. |
| 8 | km/h Unit | K |
Kilometers per hour | Usually K. |
| 9 | Mode Indicator | A |
Positioning mode | Version-dependent. |
| Checksum | Checksum | *35 |
XOR checksum | Not a comma field. |
- VTG reports course over ground, not true heading.
- Low-speed robots may see noisy or unstable course-over-ground values.
- Use HDT or a dual-antenna / INS heading source when true heading is required.
3.6 HDT — Heading, True
The NMEA 0183 HDT sentence carries true heading when the receiver or host system has a heading-capable source.
$GNHDT,123.4,T*2F
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNHDT |
Talker + formatter | Parse formatter HDT. |
| 1 | Heading | 123.4 |
Degrees true | True heading value. |
| 2 | True Indicator | T |
True north reference | Usually T. |
| Checksum | Checksum | *2F |
XOR checksum | Not a comma field. |
HDT typically appears with dual-antenna GNSS, INS integration, or another heading-capable source. A single moving antenna can provide course over ground, but not true heading while stationary.
3.7 GSA Message — GNSS DOP and Active Satellites
The NMEA 0183 GSA sentence reports the satellites used in the current solution and the DOP values that describe satellite geometry:
$GNGSA,A,3,03,07,11,14,,,,,,,,,1.5,0.6,1.2,1*31
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNGSA |
Talker + formatter | Parse formatter GSA. |
| 1 | Mode 1 | A |
Manual / automatic | See Part 4.3. |
| 2 | Mode 2 | 3 |
Fix type | 1 no fix, 2 2D, 3 3D. |
| 3–14 | Satellite IDs | 03,07,11,14... |
Satellites used in solution | Empty fields are valid. |
| 15 | PDOP | 1.5 |
Position dilution of precision | 3D geometry. |
| 16 | HDOP | 0.6 |
Horizontal dilution of precision | Horizontal geometry. See GNSS Accuracy Decoded. |
| 17 | VDOP | 1.2 |
Vertical dilution of precision | Vertical geometry. |
| 18 | System ID | 1 |
GNSS system identifier | Optional / version-dependent. See Part 4.6. |
| Checksum | Checksum | *31 |
XOR checksum | Not a comma field. |
GSV lists satellites in view; GSA lists satellites used in the current navigation solution.
- Multi-GNSS receivers may output multiple GSA sentences.
- System ID support and location may vary by receiver and NMEA revision; count fields before indexing.
- Preserve empty satellite ID fields rather than compressing the list.
3.8 GSV Message — GNSS Satellites in View
The NMEA 0183 GSV sentence lists satellites currently in view. Because one GSV sentence can carry up to four satellite blocks, multi-satellite sky views are reported through pagination:
$GPGSV,3,1,12,03,45,150,42,07,30,210,39,11,62,080,45,14,15,310,35,1*60
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GPGSV |
Talker + formatter | Parse formatter GSV. |
| 1 | Total Messages | 3 |
Total GSV pages in this cycle | Use for pagination. |
| 2 | Message Number | 1 |
Current GSV page | Starts at 1. |
| 3 | Satellites in View | 12 |
Total visible satellites | Not satellites used. |
| 4–7 | Satellite Block 1 | 03,45,150,42 |
ID, elevation, azimuth, SNR | One satellite. |
| 8–11 | Satellite Block 2 | 07,30,210,39 |
ID, elevation, azimuth, SNR | One satellite. |
| 12–15 | Satellite Block 3 | 11,62,080,45 |
ID, elevation, azimuth, SNR | One satellite. |
| 16–19 | Satellite Block 4 | 14,15,310,35 |
ID, elevation, azimuth, SNR | One satellite. |
| 20 | Signal ID | 1 |
Signal / frequency context | Optional / version-dependent. See Part 4.5. |
| Checksum | Checksum | *60 |
XOR checksum | Not a comma field. |
- GSV lists satellites in view, not satellites used in the fix.
- Read Field 1 and Field 2 before reconstructing a sky-view cycle.
- Group GSV pages by talker ID, message number, and Signal ID when Signal ID is present.
3.9 GST — GNSS Pseudorange Error Statistics
The NMEA 0183 GST sentence reports pseudorange residual statistics and error estimates used during receiver diagnostics.
$GNGST,072446.00,1.2,0.8,0.6,45.0,0.5,0.4,0.9*7E
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNGST |
Talker + formatter | Parse formatter GST. |
| 1 | UTC Time | 072446.00 |
Time of statistics | No date. |
| 2 | RMS | 1.2 |
RMS pseudorange residual | Diagnostics. See GNSS Accuracy Decoded. |
| 3 | Semi-major Error | 0.8 |
Error ellipse semi-major axis | 1-sigma style output context. |
| 4 | Semi-minor Error | 0.6 |
Error ellipse semi-minor axis | 1-sigma style output context. |
| 5 | Orientation | 45.0 |
Error ellipse orientation | Degrees. |
| 6 | Latitude Error | 0.5 |
Latitude error estimate | Diagnostics. |
| 7 | Longitude Error | 0.4 |
Longitude error estimate | Diagnostics. |
| 8 | Altitude Error | 0.9 |
Altitude error estimate | Diagnostics. |
| Checksum | Checksum | *7E |
XOR checksum | Not a comma field. |
- GST is not always enabled by default.
- GST reports pseudorange residual statistics used during receiver diagnostics.
- Use GGA/RMC for fix state; use GST for error statistics.
3.10 ZDA — Time and Date
The NMEA 0183 ZDA sentence carries UTC time and calendar date without position fields.
$GNZDA,072446.00,20,06,2025,00,00*7A
| # | Field Name | Format / Example | Description | Parser Note |
|---|---|---|---|---|
| 0 | Address | $GNZDA |
Talker + formatter | Parse formatter ZDA. |
| 1 | UTC Time | 072446.00 |
Time | hhmmss.ss. |
| 2 | Day | 20 |
UTC day | Calendar date. |
| 3 | Month | 06 |
UTC month | Calendar date. |
| 4 | Year | 2025 |
UTC year | Four digits. |
| 5 | Local Zone Hours | 00 |
Local zone offset hour | Often zero for UTC workflows. |
| 6 | Local Zone Minutes | 00 |
Local zone offset minute | Often zero for UTC workflows. |
| Checksum | Checksum | *7A |
XOR checksum | Not a comma field. |
- ZDA is useful for timestamping when date is needed separately from position.
- GGA has time but no date; ZDA can provide the missing date context.
- ZDA has no position fields.
Part 4 — NMEA 0183 Codes, Field Values, and GNSS IDs
NMEA 0183 encodes fix quality, positioning mode, navigation status, signal context, and constellation identity as compact numeric or single-character codes. The tables below enumerate the values a GNSS parser should recognize without hard-failing on unknown future values.
4.1 GGA Quality Indicator — Spec Enumeration
This table is a value reference. For RTK workflow interpretation and expected field behavior, see Mastering NMEA 0183 §RTK Applications.
| Value | Name | Related RMC Mode | Note |
|---|---|---|---|
0 |
Invalid | N |
No usable fix. |
1 |
GNSS fix / Autonomous | A |
Basic GNSS fix. |
2 |
DGNSS / Differential | D |
Differential corrections applied. |
3 |
PPS / Precise | P |
Precise service. |
4 |
RTK Fixed | R |
Fixed ambiguity. |
5 |
RTK Float | F |
Float ambiguity. |
6 |
Estimated / DR | E |
Estimated / dead reckoning. |
7 |
Manual Input | M |
Manually entered. |
8 |
Simulator | S |
Test mode. |
4.2 RMC Mode Indicator — Spec Enumeration
Older RMC sentences may omit this field. Treat a missing mode indicator as unknown, not invalid.
| Mode | Name | Related GGA Quality |
|---|---|---|
A |
Autonomous | 1 |
D |
Differential | 2 |
E |
Estimated / DR | 6 |
F |
Float RTK | 5 |
M |
Manual Input | 7 |
N |
No Fix | 0 |
P |
Precise | 3 |
R |
RTK Fixed | 4 |
S |
Simulator | 8 |
4.3 GSA Mode Fields
GSA uses two mode fields: one for manual/automatic selection and one for fix dimension. These values should be parsed before the satellite ID list.
| Field | Value | Meaning |
|---|---|---|
| Mode 1 | M |
Manual. |
| Mode 1 | A |
Automatic. |
| Mode 2 | 1 |
No fix. |
| Mode 2 | 2 |
2D fix. |
| Mode 2 | 3 |
3D fix. |
4.4 Navigation Status Values
Navigation status fields may be absent depending on NMEA version, sentence layout, and receiver firmware. Use these values only when the field is present and documented by the receiver vendor.
| Value | Meaning | Parser Note |
|---|---|---|
S |
Safe | Use with receiver documentation. |
C |
Caution | Treat as degraded / context-dependent. |
U |
Unsafe | Do not use for safety-critical decisions without validation. |
V |
Not valid / unavailable | Vendor/version dependent. |
4.5 Signal ID Reference / Handling Notes
Signal ID fields are version- and receiver-dependent. Treat them as optional metadata unless your application explicitly needs signal-level diagnostics. Signal ID numbering is per-constellation: the same numeric value can map to different signals depending on the system, so always interpret Signal ID together with the talker ID or System ID.
| Context | Meaning | Parser Guidance |
|---|---|---|
| Signal ID present | Identifies signal / frequency context | Preserve value; do not reject unknown values. |
| Signal ID missing | Older or simpler output | Treat as unknown. |
| Multi-frequency output | Multiple signal contexts may appear | Group by talker/system and satellite ID. |
| Vendor-specific output | May not follow generic expectations | Check receiver manual. |
Do not reject a valid GSA or GSV sentence only because the Signal ID is missing, unfamiliar, or outside your hard-coded map. For signal and frequency background, see GNSS Constellations and L1/L2/L5 Frequencies.
| Constellation | Common Signal Context | Parser Note |
|---|---|---|
| GPS | L1 C/A, L2C, L5 | Vendor support varies. |
| Galileo | E1, E5 | Vendor support varies. |
| BeiDou | B1, B2, B3 | Talker may be GB or GN. |
| GLONASS | G1/G2 | Slot / frequency handling varies. |
| QZSS | L1/L5 | Regional system. |
| NavIC | L5 / S-band | Regional system. |
4.6 GNSS System ID
GNSS System ID assignments differ between v4.10 and v4.11: v4.10 defines 1–3 for GPS, GLONASS, and Galileo, while BeiDou, QZSS, and NavIC/IRNSS appear in v4.11-era expansion.
| System ID | v4.10 Meaning | v4.11-Era Meaning | Parser Note |
|---|---|---|---|
1 |
GPS | GPS | Core v4.10 context. |
2 |
GLONASS | GLONASS | Core v4.10 context. |
3 |
Galileo | Galileo | Core v4.10 context. |
4 |
Reserved | BeiDou | Do not interpret as BeiDou unless receiver/version context supports it. |
5 |
Reserved | QZSS | Verify receiver manual. |
6 |
Reserved | NavIC / IRNSS | Verify receiver manual. |
7–F |
Reserved | Reserved / future / vendor context | Preserve raw value; do not crash. |
4.7 Satellite ID / SV ID Allocation — Common NMEA Context
In v4.10-era GSA/GSV output, constellation context should be interpreted through talker ID and System ID first. Satellite ID values are local to that system context; global ranges used by some receivers are implementation conventions, not a universal parsing rule.
| Context | Common Meaning | Parser Guidance |
|---|---|---|
| System ID + Satellite ID | v4.10-style constellation-aware identification | Prefer system/talker context before interpreting the numeric satellite ID. |
1–32 |
Common GPS satellite ID range | Safe as a GPS-context reference. |
33–64 |
Common SBAS context | Some receivers use alternative SBAS ranges. |
65–96 |
Common GLONASS receiver convention | Do not treat as the official v4.10 global mechanism without system context. |
| Galileo / BeiDou / QZSS / NavIC | Often identified by talker or system context | Do not infer constellation from number alone. |
| Unknown ID range | Vendor / future behavior | Preserve raw value and log if needed. |
Part 5 — Frequently Asked Questions
What changed between NMEA 0183 v3.01 and v4.10?
NMEA 0183 v4.10-era receiver output is more tolerant of multi-GNSS operation than v3.01-era parser examples usually assume. A modern receiver may output combined talkers such as GN, extra trailing fields, System IDs, Signal IDs, and version-dependent mode/status fields that older GPS-only parsers may reject or misread.
How does NMEA 0183 handle negative coordinates?
NMEA 0183 does not use minus signs in latitude or longitude fields. Latitude uses the N/S indicator, where S means negative latitude; longitude uses the E/W indicator, where W means negative longitude.
What is the difference between GGA and RMC?
GGA carries fix quality, satellite count, HDOP, altitude, correction age, and station ID, but it does not include date. RMC carries date, time, position, speed over ground, course over ground, and validity, but it does not include altitude.
Why does my NMEA parser crash on the GSV sentence?
GSV is paginated. A receiver tracking more than four satellites sends multiple GSV sentences per cycle, so the parser must read the Total Messages and Message Number fields before reconstructing the full sky view.
What is the difference between an empty field and zero in NMEA 0183?
An empty field means the value is null, unknown, or unavailable. A zero is a valid numeric value. Parsers must preserve empty fields so comma-separated field indexes do not shift.
How should a parser handle unknown Talker IDs, System IDs, or Signal IDs?
A parser should preserve unknown Talker IDs, System IDs, and Signal IDs instead of hard-failing. Match the sentence formatter first, validate checksum, parse the fields you support, and keep unknown identifiers in logs for receiver-specific debugging.