Dennis Milbert

Original:  2002-may-2
Updated :  2005-oct-27

The program, garbin, will tell a 12XL or a GPSmap76 to send asynchronous binary, and then collect the output through your PC serial port, COM1, into a file.

WARNING: I have just received a report (27-Oct-2005) of corrupted NMEA output after use of asynchronous binary on a GPS 60. I can not recommend use of this program on anything but a 12XL or a GPSmap76.

DISCLAIMER: This program uses undocumented and unsupported commands. This may cause loss of data stored in your GPS receiver. The official policy of Garmin is to discourage the use of undocumented commands. These were only created for testing purposes and could be discontinued. This program is supplied as is. No warranty is given or implied. Use at your own risk. Garmin is a registered trademark of Garmin Corporation. (this disclaimer is an amalgam of other software disclaimers -- see links)

This page is dedicated to the work of Professor Antonio Tabernero Galán, who built freeware for "obtaining raw data from some Garmin units".



The program operates in the DOS window. It takes one argument. The argument is an integer -- the number of seconds to log data. If the argument is missing, it will log for 5 seconds and then stop.

> garbin 3600          < =====  log data for one hour

One file is generated as output. It's name is garbin.bin. The file will be in the subdirectory where you are working.


A serial cable from the handheld to the COM1 serial port on your PC.

Be really, really sure that your handheld is set to transmit/receive GARMIN, 9600 baud.

Output File:

garbin.bin -- asynchronous binary format.


First, the program sets up the serial port (COM1). Then it transmits an initialization message to the Garmin to begin the asynchronous binary stream. The initialization message is not documented nor supported by Garmin. There is no guarantee that the initialization message will not cause your handheld to permanently fail. For what it's worth, I have personally used this program with a Garmin GPS 12XL (ver 4.57) and a Garmin GPSmap76 (ver 2.08). And, based on the work of Professor Galán, I think it would work with an eTrex. But, no guarantees.

The program counts the number of seconds it has been logging. To stop the program before it would normally finish, press "ctrl" and "c" at the same time. The communication parameters are COM1 port, 9600 baud, 8 data bits, parity-none, 1 stop bit. These can be easily changed in the source code.

Once you've logged this mass of binary, you'll need to convert it into RINEX. If you are logging a 12XL, use g12rin. If you are logging a GPSmap76 (or an eTrex, I think), use g76rin. The formats of the 0x38 message are different, so choose the right program.

Asynchronous Binary Format

This program differs from Professor Galán's async in that garbin logs everything -- every single bit. It saves the Garmin binary protocol headers and trailers. It saves the "stuffed" DLE's. It saves the checksums. Everything.

I do this because of the behavior of the Garmin GPSmap76. It writes a number of ill-formed packets, some recoverable, some not. To work out a robust method of dealing with the "informal" GPSmap76 output, everything had to be logged. (But, hey, that's all right -- no guarantees.)

Here is the basic Garmin communication protocol document. The asynchronous messages are encased by this protocol. But, they are sent in a continuous stream once they are activated, instead of by handshakes. The asynchronous messages, themselves, are not documented or supported by Garmin. For more information on the asynchronous messages, I can highly recommend "obtaining raw data from some Garmin units". The messages, 0x38 in particular, seem to contain pseudorange, full and fractional carrier phase, signal strength, and timestamp.

Error Messages

stop 10001 -- could not get COM1 port

stop 10002 -- could not cancel any I/O in progress thru COM1

stop 10003 -- could not set COM1 to 9600 baud, 8-N-1

stop 10004 -- reserved

stop 10005 -- could not set timeout for COM1

stop 10006 -- could not write initialization message to COM1

stop 10007 -- could not read asynchronous data from COM1

stop 10008 -- could not release COM1 port


This is "no frills" software. There are no warranties of any sort. No Windows GUI. Just the core function.

The program will overwrite any existing "garbin.bin" file in the working directory.

The program runs until the timer expires -- premature stopping with a "ctrl-c" is not elegant. And, the comm parameters are hardwired. It would be nice if the program could log directly into a RINEX format. It's on my list of things to do (so much fun, so little time).

Source Code and Binary Executable

The Fortran source code is garbin.for. This uses a Compaq Fortran package for serial communications called "SPORT" (SPORT = Serial PORT; kewl). If you use some other flavor of Fortran, the SPORT calls will have to be converted to some other RS232 function.

The compiled executable (zipped) is garbin.exe.

Links to Other Pages

This is the "kewlest" site. Salute!

These are other softwares for async binary logging and translation.

To Contact Me

My e-mail user name is the first initial of my first name followed by all the letters of my last name (see above). My ISP is "comcast", and it is a "dot-net", not a "dot-com". Sorry for not spelling out my e-mail address, but I try to keep the spam-bots from fingering me. But, just so the spam-bots don't feel left out, they can always go to abuse@comcast.net

Back To Home