{{tag>[hardware apc gps ntp u-blox ublox timing]}} =====PC Engines APU / u-blox 6 Timing receiver / NTP==== {{:: pd0b-ip5_img_1505.jpg?300|}} {{::pd0b-ip5_img_1508_crop.png?300|}} Prerequisites: * PC Engines APU * Additional serial port(s) * u-blox 6 timing receiver (evaluation kit) Documentation: * {{:u-blox6_receiverdescriptionprotocolspec_gps.g6-sw-10018_.pdf|u-blox6_ReceiverDescriptionProtocolSpec_(GPS.G6-SW-10018)}} * {{::timing_appnote_gps.g6-x-11007_.pdf|Timing_AppNote_(GPS.G6-X-11007)}} * {{::evk-6_userguide_gps.g6-ek-10040_.pdf|EVK-6_UserGuide_(GPS.G6-EK-10040)}} * {{::u-blox6-fw7.03_releasenote_gps.g6-sw-11013_.pdf|u-blox6-FW7.03_ReleaseNote_(GPS.G6-SW-11013)}} ====Install and configure OS==== * Install [[http://linux.voyage.hk|Voyage]] linux using PXE (network) or USB. * After installation, log in as root (password voyage) and remount read/write. # remountrw * Create non root user. useradd username passwd username * Change hostname **/etc/hosts /etc/hostname**, configure network. * Change apt mirrors in /etc/apt/... * Install prerquisites. apt-get install dialog setserial * Update. apt-get update apt-get upgrade * Configure time zone. dpkg-reconfigure tzdata * Configure locale. apt-get install locales dpkg-reconfigure locales * Edit Voyage Linux config to enable writing to ntp drift file. Edit **/etc/default/voyage-util**VOYAGE_SYNC_DIRS="var/lib/ntp" ====Install and configure gpsd==== * Install gpsd. apt-get install gpsd gpsd-clients * Reconfigure gpsd, add the -n option: dpkg-reconfigure gpsd # GPS device /dev/gps0 # Add -n option ====Install and configure NTPd==== * We need to compile NTP to enable ATOM PPS support.(apt-get remove ntp ntp-doc) cd /root apt-get install dpkg-dev dialog devscripts fakeroot pps-tools apt-get source ntp && apt-get build-dep ntp cd ntp-4.2.6.p5+dfsg debuild -us -uc cd .. dpkg --install ntp_4.2.6.p5+dfsg-2+deb7u1_amd64.deb dpkg --install ntp-doc_4.2.6.p5+dfsg-2+deb7u1_all.deb * Configure NTPd to run at the highest priority. Edit **/etc/default/ntp** NTPD_OPTS='-g -N' * Create PPS device and set low_latency. Add udev rules. Create /etc/udev/rules.d/gps.rules.KERNEL=="ttyS2", SYMLINK+="gps0" KERNEL=="ttyS2", RUN+="/bin/setserial -v /dev/%k low_latency" KERNEL=="ttyS2", RUN+="/usr/sbin/ldattach pps /dev/%k" * Configure /etc/ntp/conf.# Allow more distance between GPS (USB) and Serial PPS. # Stratum level 12 when no ref source available tos mindist 0.100 orphan 12 driftfile /var/lib/ntp/ntp.drift leapfile /var/lib/ntp/leap-seconds statsdir /var/log/ntpstats/ statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable # Local servers server ntp1.polaire.nl # ATOM PPS (/dev/pps0) server 127.127.22.0 minpoll 4 maxpoll 4 fudge 127.127.22.0 refid PPS # GPS (USB /dev/ttyACM0) server 127.127.28.0 minpoll 4 maxpoll 4 prefer fudge 127.127.28.0 refid GPSd fudge 127.127.28.0 time1 0.063 # By default, exchange time with everybody, but don't allow configuration. restrict -4 default limited kod notrap nomodify nopeer noquery restrict -6 default limited kod notrap nomodify nopeer noquery # Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict ::1 * Remove **/var/lib/ntp/ntp.conf.dhcp** * Disable automatic update of ntp package. Remember to update it yourself in case of security updates!sudo apt-mark hold ntp ntp-doc * Reboot and check results. ====Leap second file==== Automatic download of new leap second file. * Install lftp. apt-get install lftp * Create leap second download script: [[get_leap_script|/usr/local/bin/get_leap.sh]] * Change executable mode chmod +x /usr/local/bin/get_leap.sh * Download new file weekly. Create **/etc/cron.weekly/leapsecond** #!/bin/bash /usr/local/bin/get_leap.sh * Change executable mode chmod +x /etc/cron.weekly/leapsecond ====Verify==== * Make sure gpsd and ntpd start at boot. If not, enable it.update-rc.d ntp enable update-rc.d gpsd enable * Test PPS reception. # ppswatch /dev/pps0 trying PPS source "/dev/pps0" found PPS source "/dev/pps0" timestamp: 1403289214, sequence: 11, offset: 81613988 timestamp: 1403289214, sequence: 11, offset: 81613988 timestamp: 1403289215, sequence: 12, offset: 81607583 timestamp: 1403289215, sequence: 12, offset: 81607583 timestamp: 1403289216, sequence: 13, offset: 81609303 timestamp: 1403289216, sequence: 13, offset: 81609303 timestamp: 1403289217, sequence: 14, offset: 81601958 ^C * Check ntpq status. The 'o' means, PPS is working.$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ntp1.polaire.nl .PZF. 1 u 47 64 1 0.270 12.367 0.001 ntp2.polaire.nl 95.97.208.29 2 u 48 64 1 0.293 12.720 0.001 ntp3.home.polai .DCF. 1 u 47 64 1 0.300 13.941 0.001 oPPS(0) .PPS. 0 l - 16 7 0.000 12.355 0.102 *SHM(0) .GPSd. 0 l 2 16 7 0.000 1.188 1.431 # After a while... remote refid st t when poll reach delay offset jitter ============================================================================== +ntp1.polaire.nl .PZF. 1 u 56 64 377 0.292 -0.099 0.075 -ntp2.polaire.nl 95.97.208.29 2 u 50 64 377 0.289 0.638 0.086 +ntp3.home.polai .DCF. 1 u 41 64 377 0.237 1.656 0.048 oPPS(0) .PPS. 0 l 15 16 377 0.000 0.027 0.003 *SHM(0) .GPSd. 0 l 16 16 377 0.000 -8.657 2.708 * Show connected clients:ntpdc -c monlist * Verify leap variables:ntpq -c "rv 0" associd=0 status=0118 leap_none, sync_pps, 1 event, no_sys_peer, version="ntpd 4.2.6p5@1.2349-o Tue Jan 6 09:09:39 UTC 2015 (1)", processor="x86_64", system="Linux/3.10.11-voyage", leap=00, stratum=1, precision=-22, rootdelay=0.000, rootdisp=85.497, refid=PPS, reftime=d8562b21.98df89e1 Tue, Jan 6 2015 10:36:33.597, clock=d8562b2d.36477b48 Tue, Jan 6 2015 10:36:45.212, peer=27238, tc=4, mintc=3, offset=0.000, frequency=0.000, sys_jitter=8.116, clk_jitter=65.587, clk_wander=0.000, leapsec=201207010000, expire=201506280000 ====Configure, firmware update ublox 6 module==== The module is attached to an embedded device and you cannot run Windows on the APU system board. The following directions will let you pass through the serial device to a Windows computer over the network. Then you will be able to run the u-center GNSS evaluation software for Windows. ===APU config=== * Install socat. apt-get install socat * Connect serial to TCP port. socat file:/dev/ttyACM0,raw,echo=0 tcp-l:3006,fork& ===Windows config=== I'm using Windows 7 in this example. * The com0com.sys is a test-signed kernel-mode driver that will not load by default. NOTE: Enabling test signing will impair computer security. To enable test signing, enter command: bcdedit.exe -set TESTSIGNING ON * Reboot * Download and install com0com and com2tcp [[http://sourceforge.net/projects/com0com/files/?source=navbar]] * Launch setup to determine virtual com port pair. In my case it's COM5 <=> COM6 * Start cmd.exe, run: com2tcp.exe --ignore-dsr \\.\COM6 1.2.3.4 3006 * Download and install u-center [[http://www.u-blox.com/en/evaluation-software/u-center.html]] * Run u-center, go to Receiver -> Port -> COM5 * Receiver -> Generation -> u-blox 6 ===Screenshot=== {{::u-center.jpg?800|}} ===Recommended settings for timing applications=== * SBAS -> Subsystem: Disabled. * TMODE2 -> Fixed location. As a rule of thumb the position should be known with an accuracy of better than 1 m for a timing accuracy in the order of nanoseconds. If an accuracy is required only in the order of microseconds, a position accuracy of roughly 300 m is sufficient. If the position is known, the receiver can provide an accurate time solution by tracking only one satellite. For an unknown position, the receiver needs a minimum of four satellites to calculate a position fix and to solve for a timing solution. This is known as survey-in and can be chosen using the UBX-CFG-TMODE2 message. It is recommended to use survey-in only for non-moving platform applications. For optimal performance a known fixed position of the antenna should be used. * NAV5 -> Dynamic Model: Stationary * TP5 -> Active, 1Hz, 0, Lock to GNSS, Other setting, 1Hz, 100000us, Align Pulse to TOW, 0-UTC time, clear invert pulse.