Measuring systematic PPS bias on the Raspberry Pi 5
Many enthusiasts build stratum 1 NTP servers using Raspberry Pis. It’s a great platform to do it on. I built my first time server on a Raspberry Pi 3B back i...
The goal of the SatPulse project is to provide a suite of open-source software for making use of a GPS receiver connected to a computer. It has an emphasis on precision timing and has especially deep support for the Raspberry Pi, from the Pi Zero to the Pi 5. It supports a wide range of GPS receivers.
The SatPulse implementation is under intensive development. A 0.3 prerelease is available, which brings a large set of new features. The rest of the website marks these with a new in 0.3 marker. It now supports Linux, macOS and Windows. The blog also describes recent changes in SatPulse.
The Setup guide describes how to get started with SatPulse.
SatPulse supports not only timing, but also RTK positioning, and GPS receiver configuration, evaluation and monitoring. In particular, you can:
SatPulse consists of three programs:
satpulsewb, SatPulse Workbench: a web-based, graphical interface for GNSS receiver configuration and monitoring; it includes an Ntrip client allowing use of RTK positioning new in 0.3
SatPulse has a distinctive approach to GPS configuration: it supports high-level configuration, which allows the intended configuration to be expressed in GNSS terms, independently of any vendor-specific configuration protocol. This is complemented by support for low-level configuration using vendor-specific configuration messages. The three programs all use a shared configuration engine.
Timing is the most mature part of SatPulse. A typical NTP stratum-1 server, running on, for example, a Raspberry Pi, connects the PPS (pulse-per-second) output of a GPS receiver to a GPIO or a serial port pin. SatPulse can take advantage of hardware designed for PTP (Precision Time Protocol). The key difference is that the PPS output of the GPS receiver is connected to a PPS input pin on the ethernet controller. This is supported only on Linux. The Raspberry Pi CM4 and CM5 have this capability when used with a suitable IO board. For more details, see the introduction to precision network timing. Without this special hardware, SatPulse can still supply timing information to an NTP server. SatPulse can supply time-of-day information, leaving the NTP server to access the PPS device. Alternatively, SatPulse can make use of a PPS signal over the serial connection, including with USB-serial adapters. new in 0.3
This means that timing functionality is now available on macOS.
The development of SatPulse started in 2022, before AI coding agents were a thing. As AI tooling has become more capable, the project has increasingly adopted it. This has not only allowed the project to increase its ambition beyond precision timing, but has also enabled improved quality through AI review and testing infrastructure developed with AI assistance.
Many enthusiasts build stratum 1 NTP servers using Raspberry Pis. It’s a great platform to do it on. I built my first time server on a Raspberry Pi 3B back i...
I am excited about a new program that is included in the latest SatPulse 0.3 pre-release. I call it SatPulse Workbench. It provides a graphical interface for...
I have been wondering whether there are any SBCs out there that might have advantages over Raspberry Pis for connection to GNSS receivers. I am happy to repo...
I have released SatPulse 0.2. This is a major new release with a lot of new functionality (more than 60% of the code is new since 0.1).
One of the major changes in SatPulse 0.2 is a new architecture for the PHC synchronization subsystem. The PHC synchronization subsystem has two inputs: a str...
I have set up 12 different machines for automated testing of SatPulse. I have chosen the hardware to provide coverage along multiple dimensions: CPU architec...
I have been working on a desktop GUI for SatPulse. Here are a couple of demo videos.
In version 0.1 SatPulse focused on a specialized use case: transferring time from a GPS to a PTP hardware clock (PHC). In version 0.2, SatPulse’s scope is mu...
In an earlier post, I described how SatPulse can now work without the specialised PHC hardware it previously required. This means, in particular, that it is ...
I just made the first pre-release of SatPulse 0.2.
For the last 8 months, I have been working on broadening the range of GNSS hardware supported by SatPulse. In 0.1, there was support only for u-blox modules....
Up to now, using SatPulse for timing has required some very specialized hardware. Over the last couple of days, I have implemented a feature that removes thi...
In this post, I want to describe some recent improvements in how SatPulse supports GPS configuration.
I released version 0.1 of SatPulse today. This is the first stable release of SatPulse. The initial commit was back in December 2022, over 3 years ago.
The tinyGTC is a delightful little device released towards the end of 2025. It turns out that the tinyGTC is very useful for working with precision network t...
It can be hard to understand how everything fits together with a PTP/NTP time server. This post explains how things work when using SatPulse.
I have been doing some more systematic testing on SatPulse. I have 6 different systems set up for testing. I ran SatPulse on them for 3 days, with SatPulse p...
SatPulse makes it easy and inexpensive to run PTP on a network. Personally, I tinker with PTP because I find it interesting. Why be satisfied with your compu...
The SatPulse GitHub repository has now been made public.