Skip to content

ThinkNode M6 GPS not supported — CASIC L76K (AT6558) needs $PCAS config; UART TX hangs with SoftDevice active #2862

Description

@benskigomez

Summary

On the Elecrow ThinkNode M6, the MeshCore companion app reports the device has no GPS / GPS not supported, even though the M6 has a GPS module and it works correctly on Meshtastic (confirmed real position fixes with 8 satellites on the same unit). This is a firmware gap, not a hardware fault — and it almost certainly affects the ThinkNode M1 and M5 as well (same GPS family).

Root cause

The M6's "L76K" GPS is an Airoha AG3335. It does not auto-stream NMEA on power-up — it stays completely silent until it receives a UART wake command ($PAIR382,1*2E), and it must be baud-probed (9600 / 115200 / 38400) and then configured for NMEA output.

Meshtastic handles all of this in src/gps/GPS.cpp (the GNSS_AIROHA path: wakeAirohaForActiveProbe() sends $PAIR382,1, followed by $PAIR021 identify and the NMEA-output config commands).

MeshCore's MicroNMEALocationProvider only powers the module (EN pin) and reads — it assumes the GPS free-runs NMEA. On an Airoha chip nothing ever arrives, so EnvironmentSensorManager::initBasicGPS() sees no data, sets gps_detected = false, and the GPS feature is hidden from the app/CLI.

Evidence (on-hardware)

  • With the GPS powered and PIN_GPS_EN / PIN_PWR_EN / PIN_GPS_STANDBY / PIN_GPS_RESET driven in every combination, there is zero serial activity on any GPIO at any baud — confirmed by both UART reads (15 s) and a baud-agnostic GPIO edge-count scan across all pins.
  • Sending the Airoha wake ($PAIR382,1) at 9600/115200/38400 from a standalone sketch did not elicit a response either, so the full Meshtastic probe/config sequence (not just the wake) appears to be required.
  • Meshtastic, which performs that sequence, gets fixes on the same board and pins (GPS EN = pin 6, RX = pin 3 default).

Implementation note / caveat

A naive port that switches the GPS UART baud (Serial1.end()/begin()) inside the companion BLE firmware hangs the nRF52 — re-initializing the UART while the SoftDevice is active locks up. So the Airoha bring-up needs SoftDevice-safe baud handling, not a quick patch.

Affected boards

ThinkNode M6 (confirmed), and very likely M1 / M5 (all L76K / AG3335).

Suggested fix

Add Airoha / AG3335 support to MeshCore's GPS bring-up: send the wake ($PAIR382,1), probe baud, and issue the NMEA-output config commands — portable from Meshtastic's GPS.cpp, with care around UART re-init under the SoftDevice. Happy to test on an M6.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions