NEO-M8U breakout bad out of the box?

Hello,

I recently bought a NEO-M8U dead reckoning breakout board, and it appears to be bad out of the box. I have it connected via QWIIC, and I can see that there is a device at the correct address (0x42 on Wire1 in my case), but myGNSS.begin() always fails. I have tried multiple QWIIC cables and microcontrollers to no avail. When I enable debugging in the sparkfun GNSS library (I’m on the latest version of v3 in the arduino IDE) examples, I see messages like this:

Send I2C Command failed
getVal: sendCommand returned: I2C Comm Failure
begin: isConnected - second attempt
\getVal key: 0x10710001

Sending: CLS:CFG ID:0x8B Len: 0x8 Payload: 0 0 0 0 1 0 71 10

This exact same setup works just fine with a MAX-M10S breakout module connected in the same way to the same microcontroller (not concurrently obviously) and the same code. When running the PositionVelocityTime example I get:

Lat: 0 Long: 0 (degrees * 10^-7) Alt: -17000 (mm)

I am getting data from the unit, and if I take it out side and get a GNSS lock, it updates to correct values for my location.

I have also tried to talk to this board over serial via the USB-C port, but that doesn’t work either. The com port comes up in windows device manager, but u-center does not show it.

So yeah, is this unit bad out of the box? Are there other troubleshooting steps I can take?

Hi Brian (@bjf10 ),

To communicate with the NEO-M8U, you need to use Version 2 of our GNSS library.

Version 2 uses older UBX commands to communicate with M8 modules; e.g. UBX-CFG-PRT.

Version 3 uses the newer configuration interface to communicate with newer F9 / M10 modules; UBX-CFG-VALSET and UBX-CFG-VALGET replace UBX-CFG-PRT.

There is more information here. Migration instructions - from 2 to 3 - are here.

You can have both versions of the library installed at the same time. But your code needs to be slightly different when swapping between the two. Please compare the V2 and V3 examples to see the differences.

u-center should work fine on both modules. Please check you are selecting the correct COM port and baud rate. The default baud should be 9600 on both, but I do have an early MAX-M10S which defaults to 38400 instead.

If you need more help, please just say.

Best wishes,
Paul

Hi Paul,

Aha, thanks for the tip; I’ll try V2 of the GNSS library.

Unfortunately no COM ports show up in u-center (the software freezes for a few seconds when I try to view the list), despite the module showing up as a valid com port in Windows device manager.

Thanks,
Brian.

My windows security gets mad if I don’t ‘run as admin’ when opening u-center

You might also try swapping cables/ports to rule those out as suspects

OK, progress. Running u-center in admin mode does indeed allow me to connect to the NEO-M8U over USB.

However, after installing v2 of the sparkfun GNSS library I still cannot talk to it over i2c. I know I am using the correct bus and address, and an i2c scan on that bus does indeed show a target at 0x42, but the GNSS library reports that it cannot find a ublox device there. It never gets out of this loop in setup():

#include <Wire.h> //Needed for I2C to GNSS

#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //http://librarymanager/All#SparkFun_u-blox_GNSS
SFE_UBLOX_GNSS myGNSS;

long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to u-blox module.

void setup()
{
  Serial.begin(115200);
  while (!Serial); //Wait for user to open terminal
  Serial.println("SparkFun u-blox Example");

  Wire1.begin();

  //myGNSS.enableDebugging(); // Uncomment this line to enable helpful debug messages on Serial


  while (myGNSS.begin(Wire1, 0x42) == false) // Connect to the u-blox module using i2c
  {
    Serial.println(F("u-blox GNSS not detected at default I2C address. Retrying..."));
    delay(1000);
  }


One thing I’m wondering is if the I2C settings on the unit are correct. I can inspect them via u-center, but I do not know what the GNSS library expects:

Aha, I figured it out. V2 of the library seems to require the address in hex, whereas V3 does not.

In V3 having the address as 66 works; this fails in V2, you have to use 0x42

1 Like

Victory! Wahoo

Yes indeed, thanks for the help!