NMEA

NMEA 0183 is an ASCII based streaming format supporting both vendor agnostic and vendor-proprietary data type. It was created by the National Marine Electronics Association for communication of geospatial and marine data between multiple marine avionics devices.

Persistent logging of NMEA messages to files is done in multiple file formats, often with an additional timestamp when the message was received.

Structure
A stream of NMEA data is a series of line-break delimited 7bit safe ASCII "sentences" with comma delimited fields. Each sentences begins with a '$' character followed by five upper-case characters specifying the "data type" of sentence which follows. Each sentence is trailed by a '*' and two characters which comprise a NMEA 0183 data integrity checksum. This checksum is calculated simple XOR of all the individual bytes of the sentence excluding the initial character (usually '!' or '$') and the last three characters ('*' and the checksum characters).

Examples: $GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75 !AIVDM,1,1,,B,177KQJ5000G?tO`K>RA1wUbN0TKH,0*5C

Data types
There are hundreds of different data types which have been implemented over NMEA 0183. Official NMEA documentation is only available by purchasing copies of the copyrighted NMEA 0183 standard. (pricing starting $1000). As a result there is a proliferation of reverse engineered documentation for common standard data types (AIS, GPS, etc) but these, even in aggregate, are from comprehensive for the more obscure data types.

Each data type begins with one of 80+ two-letter talker identifier mnemonics. For example GPS information begin with 'GP' such as the GPGSV (satellites in view) while mobile AIS device messages begin with the 'AI' prefix (e.g. AIVDM 'Received Data from other vessel') with examples above.

Link layer
Each NMEA bus supports one or multiple listeners subscribed to data streams from a single "talker" sending data. NMEA 0183 uses a serial data link layer traditionally done at at 4800bps (RS232 4800 baud 1 start bit, 1 stop bit and No Parity) while NMEA 0183 added NMEA 0183-HS (High Speed) supports 38400baud as well. NMEA 2000 uses Ethernet connected devices instead of Serial.

Modern network/internet implementations providing streaming NMEA data support sending over TCP and/or UDP connections, usually with each sentence sentence sent as a single TCP or UDP packet.

Links

 * NMEA 0183 Version 2.20 from 1997
 * NMEA 0183 Version 3.01 from 2002
 * NMEA FAQ
 * NMEA Types
 * Eric S Raymonds AIS Documention
 * http://aprs.gids.nl/nmea/
 * Wikipedia NMEA 0183
 * Wikipedia NMEA 2000
 * Dale DePriest's GPS Data