GPSMAP 66i Virtual Com Port / Serial NMEA-style Output

I'm trying to get my GPSMAP 66i configured to output NMEA-style strings over the USB connection (via a virtual com port). This should be pretty basic functionality. However I haven't had any success.

The manual specifically describes settings for this:

Settings>System>Interface>"Garmin Spanner" which is described as "Allows you to use the device USB port with most NMEA 0183-compliant mapping programs by creating a virtual serial port."

When I connect the GPSMAP 66i to my PC (Windows 10, Fully Updated this week), I do not see any virtual com ports enumerating.

When plugging in the USB I do see a prompt on the GPSMAP 66i "USB cable detected. Would you like to go to Mass Storage?" Neither choice (Yes/No) yields a virtual com port.

My research has turned up a program called "Garmin Spanner" but that only supports Windows XP and appears over a decade old.

There are also scattered forum suggests to use a 3rd party program/driver called GPSGate. However requires licensing for each port and appears to work only on Windows. (I also do development on Linux).

I am also not able to find a virtual com port enumerating when I connect it to a linux box.

Has anyone gotten NMEA-style string output over USB via virtual com ports working yet?

  • Have never tried this. The correct answer to the mass storage question is No. would know if anybody does.

  • I only just obtained a GPSMAP 66i last week, so I have not tested this on the 66i specifically, but with other 'Garmin Spanner' configured devices, when prompted to enter Mass Storage Mode you should select 'No' and the GPSr will remain functioning like normal while sending NMEA data over the USB cable, which will require any number of software solutions on the other end, depending on OS used, etc. There are multiple 'Garmin Spanner' configuration options for how the NMEA data is formatted before it is transmitted.  The data will be there, but you may need to install virtual serial port software or use software titles that can read USB serial data. 


    I just tested the Garmin Spanner NMEA output on my GPSMAP 66i, and it is working.

  • I did a search here in the Garmin Forums and found several posts with multiple NMEA software options, many of which do not work fully with WIN10, but well enough to see the NMEA data stream was present and active.

    Just search 'NMEA'

  • It appears that there are native USB serial port drivers for Win10, but that they are not necessarily installed by default. This article has instructions for enabling them. Look toward the bottom, for the "native method". I assume this is prerequisite to using whatever software actually reads and uses the NMEA stream.

  • Thank you for your link.

    This did not work for me. I followed the later section for the native method. 

    My problem is that the "USB Serial Converter" doesn't show up as a usable device. Some searching online suggests that this is a common problem emerging after a Windows 10 update sometime in 2020.

    If I "Show Hidden Devices" it shows up as a ghost device - something that once existed, but doesn't anymore. I cannot configure it from that state.

  • atlas_cached: I'm also curious to know what software on the PC side you're using view / receive the strings and what version of Windows 10 you have.

    I'm on Windows Version 10.0.19041 Build 19041

  • I have also tried playing around with Zadig, a program which installs generic USB drivers. I was most interested in the USB Serial generic driver. It was a bit of a long shot and did not work.

    I made sure to completely uninstall / delete the drivers I did install using Zadig afterward.

  • After several hours of grueling efforts, I managed to get the NMEA stream from my 66sr.

    Here is the problem (copypasta from gpsd source):

    The actual wire protocol from the Garmin device is very strange.
    There are no delimiters.
    End of packet is signaled by a zero-length read on the USB device, and start of packet is the next read.
    You can't just ignore the zero reads and pass the data through - you'd never be able to tell where the packet boundaries are.
    The garmin_usb module's job is to grab the packet and frame it in DLEs (with DLE stuffing).
    This makes the USB packets look as though they came from a regular Garmin *serial* device, which is how most of the processing for both types can be unified here.

    This was the case for quite some time (since early 00’s), so back then people created a special kernel module named ‘garmin_usb’.

    This module got outdated a while ago, so gpsbabel people created their own way to talk to Garmin GPSr directly through the usb nodes in /dev.

    Alas, garmin_usb is still included in a lot of distros (like my OpenSuSE 15.3). If it is not blacklisted, it will grab your USB-connected GPSr and you’ll see this line in dmesg:

    Garmin GPS usb/tty converter now attached to ttyUSB0

    …except it won’t work. Maybe there is a way to make it, but I found the gpsbabel version easier to set up and use.

    So, here’s the complete step-by-step guide.

    1) Blacklist the garmin_gps kernel module. How to do this depends on your distro; in OpenSuSE you should create a file under /etc/modprobe.d/ containing line blacklist garmin_gps.
    2) Give access to devices with VID/PID 091e:0003 to non-root users. Again, depends on your distro; in OpenSuSE you should create a file under /etc/udev/rules.d/ containing line ATTR{idVendor}=="091e", ATTR{idProduct}=="0003", MODE="666".
    3) Reboot.
    4) Set “Interface” to “Garmin Spanner”. Literally every other option will result in the device being connected as Mass Storage (which looks like a bug to me, I’ll probably start a new topic on this forum after I get some sleep).
    5) Connect your device to USB, answer “No” to “Connect As Mass Storage”. Make sure lsusb shows Garmin International GPS (various models).
    6) gpsbabel -T -i garmin -f usb: -o nmea -F -

    You should see a stream of NMEA messages. The list includes RMC, GGA, VTG and GSA; personally I’d like to get GSV too, to be able to see a nice constellation map, but I’m happy with what I have.