Come avere un orologio preciso (ordine di microsecondi) in casa? Basta prendere un ricevitore GPS!
Come prima cosa c'è da individuare i pin necessari per il collegamento. Per il GPS basta collegare alimentazione (Vcc e GND), comunicazione (RX, TX) e il pin di PPS. Il PPS deve essere collegato a un pin con interrupt.
PA*
, PG
, PL
(vedi data sheet Allwinner H3 p. 74)
Innanzitutto bisogna dire al kernel di usare i pin come UART e come PPS. Questo si fa configurando il device tree. Il modo in cui farlo dipende da distribuzione a distribuzione (alcuni hanno supporto dei DTB overlay).
Su Fedora, si fa con fdtput
, che permette di modificare il device tree compilato.
NB: Per rendere effettive le modifiche è necessario un riavvio.
fdt=/boot/dtb-4.14.5-300.fc27.armv7hl/sun8i-h3-orangepi-pc.dtb # setup TTY fdtput -t s $fdt '/soc/serial@01c28c00' status okay # setup pps pin ## Setup pinctrl fdtput -c $fdt '/soc/pinctrl@01c20800/pps0' fdtput -t s $fdt '/soc/pinctrl@01c20800/pps0' pins PD14 fdtput -t s $fdt '/soc/pinctrl@01c20800/pps0' function "gpio_in" # setup PPS device fdtput -c $fdt /soc/pps fdtput -t s $fdt /soc/pps compatible pps-gpio fdtput $fdt /soc/pps gpios 6 0 12 0
Su armbian basta aprire il file /boot/armbianEnv.txt
e inserire le seguenti linee (occhio a non avere un overlay=
duplicato!)
overlays=uart1 pps-gpio param_pps_pin=PA7
Basta inserire nella configurazione GPSd in /etc/default/gpsd
:
# Devices gpsd should collect to at boot time. # They need to be read/writeable, either by user gpsd or the group dialout. DEVICES="/dev/ttyS1" # Other options you want to pass to gpsd GPSD_OPTIONS="-n"
E far partire GPSd all'avvio con systemctl enable –now gpsd
Per attivare il GPS + PPM su Chrony basta aggiungere queste linee al suo config.
refclock SHM 0 refid GPS precision 1e-1 offset 0.134 delay 0.2 noselect refclock PPS /dev/pps0 lock GPS
Un po' di cose extra che ho deciso di aggiungere.
Un display LCD comandato via USB che è supportato da LCD4linux, che ho configurato per mostrare l'ora corrente.
Per fare in modo che il tempo venga salvato a OrangePI spenta. (work in progress)
Ulteriore sicurezza per la OrangePi.