No I2C connection to ZOE-M8Q board

I have done as much as I possibly can to get the ZOE-M8Q board to connect to any microcontroller. I bought 2, and they both worked fine the first time I plugged them in, they were recognized at address 0x42, and I was able to connect to them.

But after unplugging them to test them in the open air with satellite data, they just refuse to connect over I2C. I first connected to them using an ESP32, then again with a Teensy 4.1, and again with an Arduino Uno from Elegoo, and none have worked. Enabling debugging proves that the initial connection is not being made. I am using the Example1_BasicNMEARead example code, and I’ve verified my wiring many times.

Running I2C scanning code gives normal behaviour when the GPS is disconnected, but returns error code 5 for each address when it is connected.

Can you share a photo of the wiring/setup?

The board/chip is not 5V compatible, so Arduino UNO probably inadvisable.

Using pull-ups? JP2 solder bridges made?

JP1 SPI D_SEL jumper made? Would break UART/I2C usability.

Common grounding?

There should be pull-up resistors on the GPS module already, and the jumpers for them are already connected when you receive the board, I double-checked with a multimeter to verify that they were closed. The SPI jumper is also not connected, I verified that with a multimeter as well.

There is common ground between the microcontrollers and the board as well.

This is the wiring setup, just 4 wires connecting 3V, GND, SCL, and SDA. Running the example code with debugging enabled just outputs this:

SparkFun u-blox Example
createFileBuffer: Warning. fileBufferSize is zero. Data logging is not possible.
begin: isConnected - second attempt
begin: isConnected - third attempt
u-blox GNSS not detected at default I2C address. Please check wiring. Freezing.

Also, I do have an antenna, but I didn’t connect it here since I doubt that’s what is stopping the board from communicating at all.

Could you try GPIO6 for I2C_SDA and GPIO7 for I2C_SCL per ESP32-C6-DevKitC-1 docs

I tried this when I was trying to get it to work, behavior was the same.

I’m wondering if something you’ve tried has disabled I2C on the board.

Have you tried connecting to a computer via USB and running Ucenter to verify I2C is turned on?

I have not yet, as I don’t have an FTDI to USB cable yet. I could try getting one, but I have no idea what I could have done to completely disable I2C on the chip, I only uploaded the example code.

Kind of at the point where I’d break out a scope or logic analyzer, or I2C EEPROM and sanity check the pins and I2C functionality at the basic level.

Perhaps show the Arduino code, including board info, pin associativity, wire class initalization and reading register 0xFD on I2C address 0x42

Hi Colin (@coolin ),

Might you have tried Example9_ChangeI2CAddress? That would have changed the address from 0x42 to 0x3F, and saved the changes.

If you do a bus scan with only the GNSS attached, and it finds a device, you can attempt to connect to it using myGNSS.begin(Wire, newAddress).

I hope this helps,
Paul

1 Like

I only ran the Example1_BasicNMEARead right when I got it, the board stopped working after only running it one time. It connected that first time when I ran the code and was outputting normally, but when I unplugged it, brought it outside and plugged it back in, it no longer worked.

Running a bus scan gives timeout errors on all I2C addresses when the GPS is connected for some reason. Tried my ESP with a different I2C device and it worked fine, so it seems to be on the GPS end.

Here is the code I’m using, essentially just the example code but I pass 6 for SDA and 7 for SCL on Wire.begin(), as I’m using an ESP32, and I enabled the debugging messages:

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

#include <SparkFun_u-blox_GNSS_Arduino_Library.h> //Click here to get the library: http://librarymanager/All#SparkFun_u-blox_GNSS
SFE_UBLOX_GNSS myGNSS;

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10);

  Serial.println("SparkFun u-blox Example");

  Wire.begin(6, 7);

  myGNSS.enableDebugging();

  if (myGNSS.begin() == false)
  {
    Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
    while (1);
  }

  myGNSS.setI2COutput(COM_TYPE_UBX | COM_TYPE_NMEA); //Set the I2C port to output both NMEA and UBX messages
  myGNSS.saveConfigSelective(VAL_CFG_SUBSEC_IOPORT); //Save (only) the communications port settings to flash and BBR

  //This will pipe all NMEA sentences to the serial port so we can see them
  myGNSS.setNMEAOutputPort(Serial);
}

void loop()
{
  myGNSS.checkUblox(); //See if new data is available. Process bytes as they come in.

  delay(250); //Don't pound too hard on the I2C bus
}

Trying to read register 0xFD on the default address does not return anything.

Can the setup detect other i2c devices normally? Try and test with an alternate sensor of some kind if possible

The setup works with other I2C devices, I tried the same pins and setup with both an Adafruit IMU and a 16x2 LCD and they both connected and worked no problem.

Arighty, I think it’s likely defective - Was it purchased from us? If so head over to Return Policy - SparkFun Electronics (contact vendor if purchased elsewhere) and we’ll get ya squared away

Will I still be able to return it if I’ve soldered pin headers to the I2C and power pins?

Not generally but I’ll make an exception in this case :slight_smile: This did make me curious about what the soldering on the backside looks like though if you have time to share a photo

Not the greatest solder joints, but they don’t seem to have any issues visually.

They look decent, try making a bigger gap between MOSI and 3v3…they appear to either be touching or nearly so

Then clean that whole area with IPA, the shiny stuff around the solder joints is leftover flux that can cause issues

Then if neither of those get it going we’ll swap it out :slight_smile: