Skip to content
Josh Blake edited this page Nov 9, 2025 · 1 revision

Hardware

  • Raspberry Pi 5 Compute Module Lite (16GB RAM in my case but anything greater than 4GB RAM should suffice); you can also use a standard RPi5 but forego PTP pulse discipline
  • Waveshare CM5 Carrier Board https://www.waveshare.com/compute-module-5-io-board.htm; I have also purchased the metal enclosure for this board as well that I have modified to accommodate the GPS module
  • Uputronics GPS/RTC Expansion Board for Raspberry Pi https://store.uputronics.com/products/raspberry-pi-gps-rtc-expansion-board

Premise

This is a derivative project that is inspired by work done from others:

  • https://github.com/tiagofreire-pt/rpi_uputronics_stratum1_chrony
  • https://www.jeffgeerling.com/blog/2025/diy-ptp-grandmaster-clock-raspberry-pi
  • https://github.com/by/RT-Kernel?tab=readme-ov-file

And a whole bunch of tinkering ...

The goals of the project are to create a relatively low cost and accurate time server.

The Uputronics GPS/RTC Expansion Board uses the UBlox M8 GPS receiver and a Micro Crystal RV-3028-C7 Real Time Clock Module over I2C to provide a GPS disciplined time base to the Raspberry Pi 5 and NIC. This project takes advantage of the SYNC pin exposed on the CM5 Carrier Board to discipline the BCM54213PE NIC included on the RPI5 (and RPI4) series boards.

Using a realtime kernel build with CPU isolation, the setup reduces latency and provides a stable time base with jitter in the ~10ns range; well and truly within the limits of what the GPS receiver can deliver. This time base is delivered via a Chrony server for System Time synchronisation as well as NTP service. It also delivers the time via PTP (IEEE 1588v2) for local synchronisation of devices on a network including other RPi's running the BCM54213PE NIC or other PTP compatible NICs.

The CM5/Carrier Board is powered over POE to limit how many cables I am running; in effect there is simply an ethernet cable to the server and the active SMA antenna cable.

The repo contains my current configuration files, but this Wiki is where I document the build instructions, workarounds, etc.

Clone this wiki locally