NMEA-0183 serial bus decoding

NMEA (National Marine Electronics Association) 0183 is a UART-based protocol that has been in use since 1983. Originally developed for marine applications, it can now be found in other varying applications such as GPS devices. It utilizes a sentence structure to send its messages and displays them in human-readable ASCII text strings - each sentence consists of a ‘$’ to indicate the start of a message, followed by a 2-character talker identifier, 3-character sentence identifier, relevant data fields specific to the sentence ID and then an optional checksum (denoted by ‘*’ followed by a 2 character hex checksum) before finishing off the message with ‘<CR><LF>’ (carriage return and line feed). Each field in the sentence is separated by a comma. Note that some manufacturers utilize proprietary sentence structures which may deviate from the specification. 

There are two main variations of NMEA-0183 which is the standard version and a high-speed variant. The only difference between them is the baud rate used - NMEA-0183 uses a default baud rate of 4800 BPS (bits per second), and NMEA-0183 High Speed uses a default baud rate of 38,400 BPS. Both variants feature 8 bits of data, no parity and one stop bit. Although these are the default values some manufacturers might have tweaked the default configuration to work for their applications, so keep this in mind when decoding. 

Capturing and analyzing NMEA-0183 communications with PicoScope 7

This guide will show you how to use the NMEA-0183 decoder in Picoscope 7.

Select Serial Decoding from the tab on the left. If it does not appear on the main page, select the More... tab, and you will find it there:

Next, select NMEA-0183 from the list of available protocols:

Select the corresponding input for Data. NMEA-0183 specifies default values for some variables. They are as follows: 8 data bits, baud rate 4800 BPS (bits per second), 1 stop bit and no parity bits. Baud rate, threshold and hysteresis will automatically be calculated - note that these might need tweaking for some signals:

In the Display tab, ASCII is the preset option for Graph display format and Table display format. NMEA-0183 messages are sent using ASCII encoding. This shouldn’t need changing unless a proprietary version of the protocol is used:

Double-click a packet in the graph view to see the same packet in the table view, and vice versa or use the zoom feature to focus in on the appropriate areas of the decoder packets: