-
Notifications
You must be signed in to change notification settings - Fork 0
PSS_Chrony_setup
aniket_thor edited this page Jul 16, 2025
·
1 revision
This guide walks you through setting up a PPS-enabled GPS for time synchronization using chrony
, gpsd
, and Jetson GPIOs.
Connections:
GPS Pin | Jetson Pin | Description |
---|---|---|
TP2 | PIN 7 | PPS |
GND | PIN 6 | Ground |
TX2 | PIN 10 | UART RXD |
git-repo-example
-
device-tree-information
– includes an excellent explainer video gpio-header-pinout
-
NVIDIA Pinmux Tool
– search for "pinmux"
- Jetson Orin NX PIN 7 =
GPIO09
= GPIO number144
=gpio492
-
PAC.06
→ Soc:TEGRA234_MAIN_GPIO_PORT_AC = 20
- PPS GPIO calculation:
20 * 8 + 6 = 166
sudo apt-get install gpiod
sudo gpiomon gpiochip0 144
Should output rising edge timestamps when PPS signal is received.
sudo apt install nano
sudo nano pps-pin7.dts
Paste:
/dts-v1/;
/plugin/;
/ {
compatible = "nvidia,p3768-0000+p3767-0003";
overlay-name = "PPS Overlay";
jetson-header-name = "Jetson 40pin Header";
fragment@0 {
target-path = "/";
__overlay__ {
pps: pps-gpio {
status = "okay";
compatible = "pps-gpio";
gpios = <&gpio 166 0>;
assert-rising-edge;
};
};
};
};
dtc -O dtb -o pps-pin7.dtbo pps-pin7.dts
sudo cp pps-pin7.dtbo /boot
sudo /opt/nvidia/jetson-io/jetson-io.py
- Select:
Configure Jetson 40pin Header
→Compatible hardware
→PPS Overlay
- Save and reboot
sudo gpiomon gpiochip0 144 # Should say 'busy'
sudo apt-get install pps-tools
sudo dmesg | grep pps
ls /dev/pps* # Should show /dev/pps1 and /dev/pps0
sudo ppstest /dev/pps1 # Should output pulse data (Should update at 1 Hz)
sudo apt install minicom gpsd gpsd-clients chrony
sudo apt install pps-tools
sudo stty -F /dev/ttyTHS1 115200
sudo cat /dev/ttyTHS1
Quick test with:
sudo minicom -b 115200 -D /dev/ttyTHS1
echo 'KERNEL=="pps1", GROUP="_chrony", MODE="0660"' | sudo tee /etc/udev/rules.d/99-pps.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo reboot
Edit:
sudo nano /etc/default/gpsd
Paste:
GPSD_OPTIONS="-n"
DEVICES="/dev/ttyTHS1 /dev/pps1"
USBAUTO="false"
ps aux | grep gpsd
sudo systemctl stop gpsd.socket gpsd
sudo killall gpsd
sudo rm -f /var/run/gpsd.sock
sudo gpsd -n -b -D 4 /dev/ttyTHS1 /dev/pps1 -F /var/run/gpsd.sock
Test:
sudo stty -F /dev/ttyTHS1 115200
cgps # Should show live GPS data
sudo ppstest /dev/pps1 # Should tick every second
sudo nano /etc/chrony/chrony.conf
Paste at the top:
refclock SHM 0 delay 0.5 refid NMEA
refclock PPS /dev/pps1 refid PPS lock NMEA
Comment out all default pool
lines, or add noselect
to refclock lines for testing:
# pool 2.debian.pool.ntp.org iburst
Then:
sudo systemctl restart chrony
chronyc sources -v
sudo killall gpsd
sudo systemctl stop gpsd.socket gpsd
sudo rm /var/run/gpsd.sock
Start with debug info:
sudo gpsd -n -N -D 4 /dev/ttyTHS1 /dev/pps1 -F /var/run/gpsd.sock
sudo date -s "2025-06-19 17:35:00"