I2C interface on LC29H

Hello, I am new to using the GNSS module family from Quectel. Ive been given a custom board to verify the I2C interfacing between our IoT processor and the GNSS module. Is there any sample Arduino (or Wiring) code that I can use to quickly evaluate the reading of NMEA data? If there is a Github repo from Quectel, I’d be interested in that, as well. The datasheet I have has some vague code samples. Many thanks for any suggestions.

Dear Sir,
Now I only have LC29H I2C Application Note for your reference.
Quectel_L89 R2.0&LC29H&LC79H_I2C_Application_Note_V1.0.0_Preliminary_20220125.pdf (268.4 KB)

Thank you Berton. This is the document i currently have. It references a “Quectel GNSS SDK Commands” manual which i also was able to find. Is there a Quectel GNSS SDK that is downloadable from somewhere? Thanks again.

Dear Sir,
For LC29H series, no SDK availiable.

Hi Berton,

I have got the polling of the LC29H module working and can view NMEA data via the I2C bus. I am having some troubles sending commands to the device while it is polling. In my design, I stop polling the device and issue commands to stop all the NMEA sentences from reporting ($PAIR062, x, 0). At that point I try and send a command to perform other commands such as cold restart, warm restart, etc. Most of the time the device does not respond. Is there an I2C timing diagram or sequence that needs to be following in order to issue commands to the device? Additionally, is there a way to read if the device has been calibrated while it is running? Thanks very much.

Hi Mehmood, Berton,

I’m trying to communicate to the LC29H via I2C, but I does no send an ACK on writing the Address 0x50 to the bus…
There is no response, but I see with my oscilloscope some output only on the SDA pin, while the SCL pin is not clocking.
I seems like the module is not configured to react to I2C.
My software version:

Any ideas?

Hi Peter,

This is a known issue with I2C version of this module but Quectel hasn’t addressed it. The workaround I found was to wait about 500ms after power up of the module before trying to check for the presence of the module (ie write 0x50 and wait for ACK). In my startup, I also perform a loop of writing 0x50 until an ACK is received. After that point in time, you can start polling for NMEA data, writing config info, etc to the module.

I also realized that you may need a licensed I2C version of firmware for your module. That will have to come from your FAE.

Hi Mehmood,

much thanks, appreciated that you answered that fast!
I see, that on the SDA pin the module sends data - looks like with about 3MBAUD - probably this make issues?
But I will try to check for an ACK by repeating the adress 0x50.

I’m using a master clock of 400kbits/s if that helps. You’ll also need to set your I2C read buffer size to at least 512 bytes. The device eventually stops if you don’t keep up with the “number of bytes available” reported in the I2C-based Quectel protocol message.

Thank you - I will report my experiences…:wink:

@Quectel: any official statements regarding I2C?



  • Do I need a licensed I2C version of firmware for my LC29H module?
  • Can I have this please?
  • Does there work I2C and UART at the same time?


Dear Sir,
Could you provide f/w version like LC29HBANR01A02S_CSA4 at start-up?
LC29H IIC feature needs specific f/w version. I’ll provide tomorrow after confirming your f/w version.

Hi Berton.Peng-Q,

I got the latest SW version from Raphael-Q, which is now running on my device: LC29HBANR01A02S_CSA4.zip


Dear Sir,
Please email to me: berton.peng@quectel.com
I’ll provide you IIC f/w: LC29HBANR01A01SC_CSA4