NEO-M8N i2c communication fail

0 votes
I have a board with a neo-m8n gps module and a HMC5983 compass. Now, I can communicate with HMC5983 via I2C, but the neo-m8n doesn't respond, when I call it. (send start "bit", than 7 bit address (0x42) with read bit and for this I don't get ack...) everything is out of box, so there're every settings has the default values. I see with u-center the gps module works. I tried to configure it via u-center, but I can't... (it seems it doesn't save the configuration)

I think I need to enable the I2C port, but how?

And how can I change this settings via u-center for permanent (so, if I remove the power and I add back the power the configuration doesn't lose)?
by golddragon007 asked Dec 14, 2015
I had the same problem. I opened the module and it turns out the SCL/SDA (I2C) pins weren't connected to the I2C-bus.
+1 vote
Did they give you a schematic of the board?  If not try tracing the SCL and SDA pins and see if they actually go to the ublox module.  Most of the combo GPS/Mag boards on the market only wire the mag chip to the I2C and expect you to use the serial port to talk to the GPS.
by hwh answered Dec 25, 2015
0 votes
(1) My understanding is that the PIN2 (D_SEL) needs to be high at startup in order to enable the DDC (I2C) interface.   Have you checked this?

(2) My understanding is that if you can communicate to the target NEO-M8N via the USB - then you should be able to issue the UBX CFG-CFG "save" command to store settings to FLASH memory in the NEO-M8N module (i.e.make permanent)
by √Črei answered Dec 15, 2015

1. pin (D_SEL) must be high
2. Send UBX-CFG-PRT-DDC with slave address 0x42(default) or 0x07 < slaveAddr < 0x78. (mentioned in neo-m8n receiver description document) .If you are using u-center then just send UBX-CFG-PRT-DDC message no need to worry about slave address because they already included in message.
3. If you are set Ackaiding in CFG-NAVX5 then only you receive ACK/NACK. Ackaiding is '0' by default.if you want to see what value in ackaiding issue "Poll-cfg-navx5". If you are running with default settings then don't worry about ack.
4.Now issue save configuration message using UBX-CFG-CFG. it will save your modified configuration into permanent memory,then issue  Load configuration message using UBX-CFG-CFG. It loads the permanent configuration to current configuration.
5. Now you can able to communicate through I2C.
I think this process will work.
Remember, if you configured this successfully then you are not able to use u-center until you change your communication port to UART, using configuration port change message through I2C port. So make sure your I2C port communication code is good. Or you can use Clear configuration message also.Clear configuration message resets the current configuration to default configuration. See NEO-M8N receiver description datasheet to know more about configuration.

thanks & regards,

I bought a fully esembled version ( ), so there's no D_SEL outpin (also, now I don't have any device ie multimeter or oscilloscope for check that pin...:( ) So, I start the u-center, than I open the configuration view.
1. prt left, then on the right I select 0 at the target, than down send.
2. cfg left, then on the right "save current configuration" (at devices 0 and 1 selected, 2 and 4 unselected), than send
3. same tab, revert to last saved configuration, than send.
4. restart u-center, reconnect GPS module
5. I see the default values... ?!?! what the....?

The default i2c address is 0x42 (from docs and u-center), also, I try to use this, and I set to this.
i have the same problem, no data from I2C. Using the I2C scanner from Arduino i can't see any i2c device in the list
0 votes
I2C port is enabled by default - no need to configure anything.

You need to start reading data from the port first.  Then, after 1 second (at default settings) you should start getting default NMEA messages on I2C port.  This is done to avoid stale data on I2C port.
by grumpy answered Dec 17, 2015
I start to read first form i2c but doesn't answer... (it dies at the first part, when I send out the device address (0x42))
According to recvdrscr document,after sending device address, gps receiver acknowledge ( logic low). If it is possible just probe at SDA line ( atleast at microcontroller side).
Yes, after you send a device address, it's need to send an ACK. But the MC doesn't get it... The code stucks in the waiting for ACK state... This is why I thinked, the module doesn't have allowed the I2C communication. Also, on the same board (GPS') theres a compass too, and I can communicate with it the same code (rewrite the device and register addresses). The ACK logic low is defined in i2c standard, right? so there's no difference between other devices and this device in this.
 I think  just neo kept SDA line in (logic low).Are polling for ack( logic low ). Just verify are you looking for same i/o line. Once check recvrdescr document page 31.