Skip to content

Troubleshooting

A cold start under open sky takes 26 seconds. A hot start (ephemeris still cached from recent use) takes about 1 second. If neither is happening, work through these checks.

  1. Verify antenna connection

    The L1/L5 antenna plugs into the IPEX socket on the HAT. It should click firmly into place. A loose connection kills signal reception entirely.

  2. Check sky visibility

    GNSS signals do not penetrate buildings, metal roofs, or dense tree canopy. The antenna needs a direct line of sight to the sky. L5 signals are more sensitive to obstructions than L1.

    Terminal window
    # Check how many satellites the module can see
    lc29h satellites

    You need at least 4 satellites for a 3D fix. Fewer than that means obstructed sky or antenna problem.

  3. Watch the PPS LED

    When the PPS LED blinks once per second, the module has a fix. No blink means no fix.

  4. Try a cold restart

    If the module has stale ephemeris data (moved a long distance while powered off, or battery died), a cold restart forces it to reacquire from scratch:

    Terminal window
    lc29h restart cold

    This resets to a 26-second TTFF under open sky.

  5. Check module orientation

    The module label should face downward (toward ground) with the antenna facing sky. Upside-down mounting inverts the antenna pattern.

PermissionError: [Errno 13] Permission denied: '/dev/ttyS0'

Add your user to the dialout group:

Terminal window
sudo usermod -aG dialout $USER

Then log out and back in (or reboot). The group change does not take effect in your current session.

ConnectionDevice
GPIO UART (jumper B)/dev/ttyS0
USB (jumper A)/dev/ttyUSB0

The factory default baud rate is 115200 for GPIO UART and 460800 for USB. If you get no response at 115200, try:

Terminal window
# Try factory default
lc29h --port /dev/ttyS0 --baud 9600 info
# Try USB default
lc29h --port /dev/ttyUSB0 --baud 460800 info

If the baud rate was previously changed and you don’t know the current value, you need to try common rates until one responds: 9600, 38400, 57600, 115200, 230400, 460800.

If /dev/ttyS0 (Pi 4B) or /dev/ttyAMA0 (Pi 5) does not exist:

  1. Enable serial port

    Terminal window
    sudo raspi-config
    # Interface Options -> Serial Port -> Yes
  2. Add UART overlay (if raspi-config alone does not create the device)

    Add to /boot/firmware/config.txt (Pi 5) or /boot/config.txt (Pi 4B):

    dtoverlay=uart0
  3. Reboot

    Terminal window
    sudo reboot

If the device exists but you get zero output:

  • Verify the yellow jumper matches your connection method (B = UART, A = USB)

  • Check that the antenna is connected (module may not output NMEA without a satellite search in progress on some firmware versions)

  • Try reading raw serial data to rule out CLI issues:

    Terminal window
    # Read raw bytes from the port (Ctrl+C to stop)
    stty -F /dev/ttyS0 115200 raw -echo
    cat /dev/ttyS0

    If you see NMEA sentences here but lc29h does not work, the issue is in the CLI configuration, not the hardware.

Terminal window
lc29h ntrip start \
--host rtk2go.com \
--port 2101 \
--mount YOUR_MOUNT \
--user your@email.com \
--password none

The mount point name is case-sensitive and must exist on the caster. Browse available mount points:

Terminal window
# List all mount points from a caster
lc29h ntrip sources --host rtk2go.com --port 2101

Or check the web status page: rtk2go.com:2101/SNIP::STATUS

Common causes:

SymptomLikely CauseFix
Connection refusedWrong portStandard NTRIP port is 2101
Timeout after 10sFirewall blocking outbound TCPOpen port 2101 outbound
DNS resolution failureNo internetCheck ping rtk2go.com
Intermittent dropsUnstable networkUse wired ethernet instead of WiFi

NTRIP corrections degrade with distance. As a rule of thumb:

Baseline DistanceExpected Accuracy
< 10 km1—2 cm (RTK Fixed typical)
10—30 km2—5 cm (RTK Fixed possible)
30—50 kmFloat only in many cases
> 50 kmCorrections effectively useless

Use lc29h ntrip sources to find the closest mount point to your location. If nothing is within 30 km, consider setting up your own base station with the LC29H(BS).

RTK Float (GGA quality 5) means the module is receiving and applying corrections, but has not resolved the carrier-phase integer ambiguities. This gives decimeter accuracy (~20 cm) rather than centimeter.

RTK Fixed (GGA quality 4) means full ambiguity resolution — centimeter accuracy.

The typical progression after starting corrections:

No Fix (0) -> Autonomous (1) -> RTK Float (5) -> RTK Fixed (4)

If you are stuck at Float:

  1. Check baseline distance — move to a closer mount point if possible (see table above)

  2. Verify constellation overlap — the base and rover must track the same satellites. A single-band (L1-only) base station paired with the LC29H’s dual-band receiver will still work, but convergence is slower.

  3. Confirm RTCM message types — for full dual-band RTK, the base should send:

    MessageContent
    1005Station coordinates (antenna reference point)
    1077GPS MSM7 (full observables)
    1087GLONASS MSM7
    1097Galileo MSM7
    1127BeiDou MSM7

    Missing messages reduce the number of satellites used for ambiguity resolution.

  4. Wait longer — in marginal conditions (long baseline, partial sky), convergence from Float to Fixed can take 5+ minutes. Do not move the antenna during initial convergence.

  5. Check antenna quality — multipath from nearby buildings, metal surfaces, or the ground degrades carrier-phase measurements. Raise the antenna above obstructions.

If the fix oscillates between Fixed and Float:

  • Multipath — metal roofs, glass buildings, and vehicles near the antenna cause carrier-phase cycle slips. Move the antenna to a clearer location.
  • Baud rate too low — RTCM3 data at 1 Hz with MSM7 for 4 constellations is roughly 2—3 KB/s. At 9600 baud (~960 bytes/s), the serial link cannot keep up. Use 115200 or higher.
  • Correction stream interruptions — check your internet connection stability. A 10-second gap in RTCM data can cause the module to drop from Fixed back to Float.

The Pi 5 uses /dev/ttyAMA0 for GPIO serial, not /dev/ttyS0 like the Pi 4B. This is because the Pi 5 uses the PL011 UART peripheral rather than the mini UART.

Terminal window
# Pi 4B
lc29h --port /dev/ttyS0 info
# Pi 5
lc29h --port /dev/ttyAMA0 info

On both Pi 4B and Pi 5, Bluetooth uses the PL011 UART by default, which can conflict with GPIO serial. If you see garbled data or intermittent communication failures:

Add to /boot/firmware/config.txt (Pi 5) or /boot/config.txt (Pi 4B):

dtoverlay=disable-bt

This frees the PL011 UART entirely for the LC29H.

Reboot after changing config.txt.

$PAIR001,<cmd>,0*XX — Command Acknowledged

Section titled “$PAIR001,<cmd>,0*XX — Command Acknowledged”

This is not an error. Result code 0 means success. The module accepted and executed the command.

The command was recognized but could not be executed. Common causes:

  • Sending an RTK command to a non-RTK variant (e.g., PAIR432 to an LC29H(AA))
  • Module is in a state that does not support the command

The command ID is not recognized by this firmware version or variant.

A parameter is out of range. Check the PAIR Command Reference for valid ranges.

If you send a command and get nothing back:

  1. Check baud rate — the module will not respond if you are transmitting at the wrong speed
  2. Check wiring — TX from the host must connect to RX on the module, and vice versa
  3. Verify command format — every command needs the $ prefix, * checksum delimiter, and correct two-character hex checksum followed by \r\n
  4. Check for echo — if you see your own command echoed back, TX and RX may be swapped

During base station survey-in, the module reports status periodically. valid=0 means the survey has not yet converged to the configured accuracy threshold.

$PQTMSVINSTATUS,1,0,3600,542,2.3451*XX
FieldMeaning
1Survey-in mode active
0Not yet valid
3600Target duration (seconds)
542Elapsed time so far
2.3451Current 3D accuracy estimate (meters)

This is normal — survey-in for a 1 m accuracy target typically takes the full configured duration. Wait for valid=1 before switching to fixed mode.

If nothing else has worked, run through this sequence to isolate the problem layer by layer:

Terminal window
# 1. Does the serial device exist?
ls -la /dev/ttyS0 # or /dev/ttyAMA0 on Pi 5
# 2. Can we open the port?
lc29h --port /dev/ttyS0 info
# 3. Is the module producing NMEA data?
lc29h --port /dev/ttyS0 monitor
# 4. How many satellites are visible?
lc29h satellites
# 5. What is the current fix status?
lc29h --port /dev/ttyS0 monitor
# Look for "Fix: 3D" vs "Fix: No Fix"

If step 1 fails, the problem is OS/driver configuration. If step 2 fails, the problem is serial communication (baud rate, wiring, permissions). If step 3 shows data but no fix, the problem is antenna/sky view. If satellites are visible but fix quality is poor, the problem is environmental (multipath, obstructions) or configuration (wrong variant for your use case).