Zero UART output from GNSS Flex pHAT (DAN-F10N) — electrical fault isolated to TX net, requesting RMA/troubleshooting guidance

Product: 2x SparkFun GNSS Flex pHAT - DAN-F10N (SKU GPS-29491)

Summary: The module powers on (PWR LED lit) but produces zero UART output and zero PPS pulses under any configuration. We’ve isolated the fault to a hard electrical short/stuck-low condition on the RX line as seen from the host, reproduced identically across two separate Raspberry Pi 5 boards and two separate DAN-F10N modules on the same carrier pHAT, and ruled out every software/configuration explanation we could find, including checking the official u-blox integration manual and both the module’s and carrier’s own schematics. Requesting your team’s read on this and how you’d like to proceed (RMA, replacement, or a diagnostic step we haven’t thought of).

Setup: Raspberry Pi 5, Raspberry Pi OS (Debian trixie-based), module on the 40-pin GPIO header per your hookup guide, UART on GPIO14/15 at 38400 baud (your documented default). dtoverlay=disable-bt + enable_uart=1 applied (also tried the Pi 5-specific dtoverlay=uart0-pi5, and separately dtparam=uart0=on+dtoverlay=uart0 per your own software setup guide — identical result under both). Serial console removed from the kernel command line so it doesn’t contend for the UART.

What we observed:

  • PWR LED: on (steady).
  • PPS LED: no activity.
  • Zero bytes received on /dev/ttyAMA0 at 38400 baud (confirmed via raw cat/stty, minicom, pyubx2/pygnssutils’s gnssstreamer, and gpsd — four independent tools, same null result every time).
  • ppstest against /dev/pps0 times out waiting for a pulse — no PPS activity detected at the OS level either, not just “no fix yet.”
  • Decisive test: with the UART peripheral/driver bypassed entirely, GPIO15 (RX, physically wired to the module’s TXD per the schematic) reconfigured as a plain GPIO input with the Pi’s internal pull-up enabled still reads a hard LOW — while GPIO14 under identical treatment correctly reads HIGH. A pull-up-overriding LOW like this isn’t consistent with any documented DAN-F10N TXD state we could find (checked the Integration Manual’s own pin-state table: TXD is either actively driving in Continuous/Safeboot mode, or tri-stated with an internal pull-up to VCC in Software Standby — never documented to idle or drive low).

What we ruled out before concluding this is hardware (details available on request):

  • Wrong baud rate — swept all 8 standard rates (4800 through 460800), none produced output.
  • Wrong device path — confirmed /dev/ttyAMA0 is correct (matches GPIO14/15 per pinctrl’s TXD0/RXD0 alt-function labels and the carrier pHAT’s own schematic); /dev/serial0 resolves to a different, physically unconnected UART on our Pi 5 overlay configuration.
  • UART/I2C interface mismatch — confirmed from your own hardware_overview docs and the DAN-F10N data sheet that this module is UART-only, no I2C exists on it; also confirmed empirically with an I2C bus scan (i2cdetect) showing no device at any address.
  • Missing enable/wake sequencing — confirmed from the Integration Manual that no active enable pin exists and the module should self-start on power; RESET_N floating is the documented normal condition, and we confirmed via both schematics that RESET is correctly left unconnected on the carrier board (not accidentally tied to anything that could hold it low).
  • NMEA disabled by default — confirmed from the data sheet’s default interface settings that GGA/GLL/GSA/GSV/RMC/VTG output is enabled out of the box.
  • Console/OS contention for the UART — removed console=serial0 from the kernel command line, confirmed no serial-getty service bound to the relevant ttyAMA device.
  • Connector seating — fully detached and reseated the DAN-F10N module from the carrier pHAT, checked the triangle/pin-1 alignment and full engagement of the 2x10 stacking header (specifically for a one-row offset) — no change.
  • USB-C — no /dev/ttyACM*/ttyUSB* device enumerates when connected via USB-C; consistent with this being a power-only path on this variant, as your own docs describe.
  • Two independent DAN-F10N modules tested on the same carrier pHAT — identical symptom on both, ruling out a single bad GNSS module.
  • Two independent Raspberry Pi 5 boards tested — identical symptom on both (including the plain-GPIO stuck-low result), ruling out a fault specific to one Pi.

What we’re asking: given the above, is this consistent with a known failure mode on your end (e.g., a specific batch issue, a common solder defect location on the carrier board’s TX net)? Is there a further diagnostic step you’d want us to try before an RMA (we don’t have an oscilloscope, but do have a multimeter if there’s a specific continuity/voltage check that would help you narrow it down)? Otherwise, please advise on RMA/replacement process for this SKU.

Happy to provide full command-by-command logs, pinctrl output, or photos of the physical assembly if useful.

Thanks for your time.

Hi Connor (@Connor_Yetter ),

Welcome! I’m sorry you are having problems with the pHAT.

It does sound as if you may have a faulty pHAT:

The DAN-F10N has a single UART interface. For it to pass our production tests, that UART must have been functional, especially the TX pin. In the rare event that the Flex module TX pin were shorted to ground, it is extremely unlikely that same fault would exist on two separate DAN modules.

The DAN-F10N supports its own built-in antenna, or an external antenna via the u.FL connector. By default, the built-in antenna is selected. To select the external antenna, you need to solder the EXT_ANT jumper closed.

Using the built-in antenna, you will only get a PPS signal if you take the board outside so it has a clear view of the sky. If you attempt to use it indoors, you won’t see the PPS signal.

Yes, by default the standard NMEA messages are enabled. Even if you have the module indoors, it should still output “empty” NMEA messages filled with lots of commas. Only when you take the module outdoors will the messages contain valid time, position and other information.

So, some tests you could try:

Take the powered board assembly outdoors so it has a clear view of the sky. Wait a minute or so. Does the PPS LED start to blink? If it does, that means the DAN is functional leaving only the TX issue to resolve.

Leave the pHAT connected to the Pi. Remove the DAN Flex module. Power up the Pi. With your multimeter, measure the DC voltage between the Green (GND) pad and the Yellow GNSS TX1 / GPIO15 pin. What does it read? 0V or 3.3V?

If you want to prove that your Pi GPIO15 and GPIO14 are working correctly, you can repeat your GPIO test: set GPIO14 as an output, drive it high and low, use a jumper wire to connect the Yellow and Blue Flex connector pins together (just hold the wire in place temporarily), with GPIO15 as in input it should follow the GPIO14 output. Does it?

Please report back once you have tried these tests.

If you are still having problems, please post a photo of your set up. It may help us understand why GNSS TX isn’t working as expected.

Best wishes,
Paul