NMEA messages
NMEA protocol
The NMEA framing and behavior is defined by the NMEA 0183 standard (v4.11 and erratas).
In NMEA speak messages are called Sentences. Frames (messages) are in this form:
$TalkerFormatter,field1,field2,…,fieldN*CC\r\n
Where:
The NMEA style framing:
$
– Start character (“$”, ASCII 36)*CC
– Checksum: “*” (ASCII 42) and two digit XOR value of all payload characters in captial hexadecimal notation, for example: “FPX” ='F' ^ 'P' ^ 'X' = 70 ^ 80 ^ 88 = 78 = 0x4e
= checksum4E
\r\n
– Sentence termination characters (CR + LF, ASCII 13 + 10)
A
Talker
er ID – Two capital characters:GP
– Talker ID for GPS, also legacy resp. “compatibility”GL
– Talker ID for GLONASSGA
– Talker ID for GalileoGB
– Talker ID for BeiDouGQ
– Talker ID for QZSSGI
– Talker ID for NavIC (IRNSS)GN
– Talker ID for any combination of GNSS
A
Formatter
er ID – Three capital characters, for example:RMC
for the message containing recommended minimum specific GNSS data…
Data fields (payload)
field1,field2,…,fieldN
– The structure of the message data is defined by themsg_type
andversion
. Each field can contain all printable 7-bit ASCII characters (ASCII 32–126), excluding the reserved characters!
(ASCII 33),$
(ASCII 36),*
(ASCII 42),,
(ASCII 44),\
(ASCII 92),~
(ASCII 126).
Field separators
All fields (identifier, message type, message version, data fields) are separated by a comma (
,
, ASCII 44)
Null fields
Data fields can be null, meaning their value is absent to indicate that no data is available. The data for null fields is the empty string. For example:
Definition:
…,fieldi,fieldi+1,fieldi+2,…
Values:
fieldi
= 123,fieldi+1
= null,fieldi+2
= 456Payload string:
…,123,,456,…
Data field types:
Numeric: Decimal integer number, one or more digits (0-9) and optional leading “-” sign
Float (.x): Decimal floating point number, one or more digits (0-9) and optional leading “-” sign, with x digits fractional part separated by a dot (“.”)
Float (x): Decimal floating point number with x significant digits, optional leading “-“, optional fractional part separated by a dot (“.”)
String: String of allowed payload characters (but not the
,
field separator)