Skip to content

Hardware

BerryGPS-IMU v4 (Ozzmaker) on a Raspberry Pi 4. The GPS is a u-blox CAM-M8C — 72-channel M8 engine, concurrent GPS/GLONASS/Galileo/BeiDou, with an onboard antenna and a uFL connector for an external one.

Reported by the module itself:

Terminal window
$ ubxtool -p MON-VER
swVersion ROM CORE 3.01 (107888)
hwVersion 00080000 # M8 generation
extension FWVER=SPG 3.01
extension PROTVER=18.00
extension GPS;GLO;GAL;BDS

This costs people hours, so: the BerryGPS-IMU’s PPS is not wired to any GPIO.

The board’s normal header connection carries power, the GPS UART (GPIO14/15), and the IMU’s I²C — but the timepulse comes out of a separate T_PULSE pad, and you have to run a wire from it yourself.

The schematic confirms it: the CAM-M8C’s TIMEPULSE pin goes through a 2N2222 buffer that drives both the on-board PPS LED and the T_PULSE pad. Nothing routes it to the Pi.

We soldered a jumper from T_PULSE → GPIO18 (physical pin 12), then:

/boot/firmware/config.txt
dtoverlay=pps-gpio,gpiopin=18

Verify with a hardware-timestamped check, not a polling loop — a 100 ms pulse is easy to miss by polling:

Terminal window
$ sudo ppstest /dev/pps0
source 0 - assert 1783875773.176667184, sequence: 28
source 0 - assert 1783875774.176667944, sequence: 29 # 1.000000760 s later

The Pi 4’s good UART (PL011) is wired to Bluetooth by default; GPIO14/15 get the flaky mini-UART whose baud drifts with the CPU clock. And a serial console may be sitting on the port. Both must go:

/boot/firmware/config.txt
enable_uart=1
dtoverlay=disable-bt
# /boot/firmware/cmdline.txt — remove this:
console=serial0,115200