FreeBSD NTP GPS Experiment #5

Using a Garmin GPS-18 LVC unit as a NTP time source

Setup

The server is an eMachines eTower PC, with a Cyrix MII 250 MHz CPU, 164 MB of RAM, 15 GB hard drive, and running FreeBSD 4.9. The computer is attached to a Garmin GPS-18 LVC GPS through a 9-pin DB9F connector, with the Pulse Per Second (PPS) line connected to pin 1 (DCD). A USB cable was also modified to provide +5VDC to the GPS unit (the serial portion of the USB cable was not used). The GPS unit itself is attached via it's internal magnets to a steel plate laid on the building roof. The 5 meter cable runs through an access conduit to the computer.

The GPS-18 LVC was configured using Garmin's snsrcfg.exe program, available at the Garmin website. All NMEA sentences were turned off except GPRMC, which is what ntpd expects by default. The PPS line was enabled, and all other settings were left in default mode.

Software configuration involved enabling the ntp daemon by setting 'xntpd_enable="YES"' in /etc/rc.conf. In /etc/ntp.conf the NMEA and PPS drivers were configured thus:
# NMEA GPS driver
server  127.127.20.0 prefer

# Pulse Per Second (PPS) driver           
server  127.127.22.0
Logging of ntp statistics were also enabled:
# Tell ntpd to keep statistics
statsdir        /var/log/ntp/
filegen clockstats      file clockstats type day        enable
filegen peerstats       file peerstats  type day        enable
filegen loopstats       file loopstats  type day        enable
statistics clockstats peerstats loopstats
# Send log output to a seperate file for NTP
logfile /var/log/ntp/messages

The NMEA and PPS drivers require symbolic links in the /dev directory to repoint them to the actual hardware serial port where the GPS is connected. Links were made as such:
/dev/gps0 -> /dev/ttyd0
/dev/pps0 -> /dev/ttyd0
These point to comm port 1 (COM 1). Note: modern versions of FreeBSD use /dev/cuad0 instead of /dev/ttyd0 for COM 1.

Results:
So far the system has worked quite well, tracking local stratum-2 ntp servers within 100 microseconds. The GPS receiver has not lost lock a single time in the two months it has been running (at this writing), despite occasional temperatures below the specified operating limits.

The system graphs internal NTP statistics once per day, though since the server has only one time source, the stats are more a comparison of the servers internal clock to the GPS, and not the performance of the GPS itself. The performance of the server as compared to other NTP servers can be seen here.

Links:
NTP server using PC gnu/linux and FreeBSD
Adding a FreeBSD NTP server based on an GPS 18 LVC
Using a GPS receiver as a NIST traceable frequency standard
NIST GPS data archive
NIST Time and Frequency Lab
NIST Ion Storage Group