gps-audit

A detailed contribution from community contributor GPSFan which provides an in-depth look at GNSS modules, specifically focusing on u-blox modules, which could be useful for hardware devs designing devices for integrating GPS functionality into Meshtastic hardware projects.

u-blox Module Types

Clones

Counterfeits

Fakes

Beware, most modules seen on Amazon, eBay, Banggood, Temu or AliExpress are in one of the above three categories.

Genuine u-blox Modules

Digikey, Mouser, Arrow, u-blox and others sell genuine u-blox parts at premium prices.

u-blox Chip Series

Neo-6 Series

The Neo-6 is the oldest (although there are older u-blox 4 and 5 parts), most power hungry, least capable and lowest sensitivity module. The 6010 chip supports 50 channels.

Neo-7 Series

The Neo-7 supports SBAS, GLONASS as well as GPS, and has some nice high precision parts (Neo-7P). The 7020 chip supports 56 channels.

M8 Series

The M8 supports GPS, SBAS, GLONASS, QZSS, BieDou and Galileo, but can only support 3 major ones concurrently. QZSS and GPS should always be either enabled together or both disabled for M8 & above parts. The 8030 chip supports 72 channels.

M9 Series

The M9 supports all the above constellations but can use 4 systems at once (SBAS and QZSS are augmentation systems and don't count in this number). The 9140 chip forms the basis of the M9, D9 and F9 products, the F9P being a very capable L1/L2 or L5 RTK capable product. The 9140 chip supports 92 channels.

M10 Series

It is left as an exercise for the reader to read the product briefs for the M10 series. The 10050 chip supports 72 channels.

Comparison to Other GNSS Chips

As a comparison: - The Unicore UM980 has 1408 channels - The Septentrio mosaic-T has 448 "hardware channels"

u-blox Chip Configurations

The u-blox chips have several configurations that can be customized by the module maker: - Flash size - LNA - TCXO - SAW filter - General circuit layout

u-blox Firmware and Protocol

Each chip series supports a different and increasing protocol version. Beginning with 23.01, the legacy CFG commands were replaced with a different config method using the VALSET/VALGET/VALDEL series of commands. However, even up to protocol 34, many of the CFG commands still work. The new config method allows much finer grained configuration at the cost of complexity. Trying to support both legacy and new config methods can be challenging.

Protocol Specification Levels

There are 3 levels of protocol specifications:

  1. Internal Use Only: No one but u-blox employees see these, and they detail the entire firmware command set.

  2. NDA Restricted: OEMs that buy lots of parts and sign an NDA have access to these. Few if any make it out into the wild, and they detail a subset of the internal specs.

  3. Public: Can be downloaded by anyone off the u-blox website. These are a subset of the NDA restricted, and often contain errors and omissions.

Libraries and Hidden Commands

Future u-blox Chips

There are new u-blox chips/modules in the pipeline, and in R&D, competing with the Chinese designed and produced parts like the UM980 and UC6580 should produce better and cheaper parts from u-blox (one would hope).

Common GPS Problems

Self-inflicted Problems

Attempting Indoor Fix

Unrealistic Fix Time Expectations

Impatient Timeout

Waiting too long for a fix when receiver parameters may have timed out, meaning it will never get a fix after that timeout period.

Using Sub-optimal Constellations

Using only one or two constellations when the receiver can receive many is a waste of hardware resources.

Poor Antenna Placement

Other Causes

Hardware Design and Build Quality

Cost Cutting

An overly aggressive approach to cost reduction can degrade performance incrementally to the point of making the receiver useless.

Aggressive Power Management

Most receivers have aggressive power management modes that can hamper acquisition/tracking if combined with a poor view of the sky.

Incorrect Initialization

Supporting multi-generational products and different receiver manufacturers makes properly initializing the receiver challenging.