Hello,
We’re using the LC86L (CMD) GPS module for our tracking device.
On a few assemblies, the LC86L doesn’t appear to default to 9600 baud, but instead comes up at what looks like a much faster baud rate. From the datasheet we expect the default to be 9600.
https://www.mouser.com/datasheet/2/1052/Quectel_LC86L_GNSS_Specification_V1_1-2576954.pdf?
When probing with an oscilloscope, I see a pulse width of around 3.2–3.3 µs per bit, which works out to ~300 kHz far faster than the 9600 default.
- We haven’t saved any baud-rate changes to flash.
- The modules always boot with their factory defaults.
- Most assemblies do behave as expected (9600), but a few consistently boot at the higher rate.
Does anyone have any thoughts or experiences with this?
Thanks
Just adding some additional information.
The issue occurs from a cold restart after a long downtime ~24hrs. It’s also the case that when the GPS goes into this state, a power cycle sometimes brings it back to its expected baud.
Hi,
Sudden voltage drops on the module’s supply line (V_BCKP or VCC) can cause such instabilities. A momentary current spike occurs when power is first applied after a long power outage. Adding bypass capacitors, such as 100 µF and 100 nF, to the supply line, or checking the placement of existing capacitors, will help maintain voltage stability.
During the LC86L’s boot-up sequence, check the status of pins such as D_BOOT and D_EN. It’s important to determine whether the module is booting in normal NMEA/GNSS mode or in a software download or debug mode. An incorrect pin configuration or interference can cause the module to skip the standard boot-up sequence. I strongly recommend checking this condition.
Values written to the module’s non-volatile memory (saved with AT&W) can become corrupted in rare cases. Instead of completely powering the module off and on after executing the AT+IPR=9600 command, make the setting permanent with AT&W and then reboot the module using the reset pin (if available) or the power line.
If you have the chance to try these, please share your experience and we can evaluate them.
Thanks for providing the reply.
In the users reference we are using as shown in the original post, we see no detail about using the commands
AT+W
or
AT+IPR=9600
Could you please provide a reference to where these commands are defined and used
Also, on the datasheed forthe LC86L, I do not see the pins D_BOOT or D_EN, are these the reserved pins by any chance
thx
Lee
Hi,
I apologize, I was looking at the wrong file. The file I was looking at belonged to BG96.
I’ve now reviewed three documents for the LC86L.
Low Power Mode Application Note
AGNSS Application Note
GNSS Protocol Specification
If the RESET_N signal is not kept low for ≥100 ms when the VCC is turned off and on, the UART registers may not be fully reset when the module exits the backup domain. This can lead to a “drifted baudrate” boot.
You can send $PMTK104*37 during initial bootup. The module will always start with the factory default baudrate (9600). However, it will also reset the GNSS/NMEA settings.
If you say “I always want the default to be 9600,” then you should send the $PQBAUD,W,9600*67 command once and write it to flash. Regardless of any reset (cold, hot, backup, power cut), the module will always boot with 9600. This is a one-time operation; all devices in the field will remain at 9600. Other GNSS/NMEA settings will remain unchanged; they will simply set the baudrate to permanent.
You may avoid the problem if you follow the MCU startup sequence as follows.
GNSS reset – Wait 500 ms
Send $PQBAUD,W,9600 – Switch UART to 9600
Hardware Recommendations
Add a 47–100 kΩ pull-up to the RX line to prevent noise during startup.
Keep the RESET_N line low for ≥500 ms during startup.
Mute the MCU TX line during startup . Do not send anything until the GNSS is turned on and begins sending NMEA signals.
I hope your problem will be solved.
Hi Emre
Many thanks for the update.
I do have further question which is related to your comment here
If you say “I always want the default to be 9600,” then you should send the $PQBAUD,W,9600*67 command once and write it to flash. Regardless of any reset (cold, hot, backup, power cut), the module will always boot with 9600. This is a one-time operation; all devices in the field will remain at 9600. Other GNSS/NMEA settings will remain unchanged; they will simply set the baudrate to permanent.
At what data rate should the MCU UART be set in order to send this message ?
The problem is at the startup, we do not know the baud rate that the LC86L is listening, if it has indeed undergone the ‘drifted baudrate’, as you refer ?
Also, I presume that the PQBAUD setting saved to flash can still be overridden at runtime, by sending a subsequent PMTK251 message ?
Thx
Lee
Hİ,
As far as I have researched, the baud capture method can also be used.
Open the UART at the following speeds in sequence and listen for 150–300 ms:
115200 → 57600 → 38400 → 19200 → 9600.
As soon as you see the NMEA stream ($Gx…*CS), you’ve “found” that speed.
Send it immediately at the speed you found:
$PQBAUD,W,9600*67\r\n
Yes, but temporarily.
$PQBAUD,W, sets the default baud rate for the NMEA port; it takes effect immediately and is automatically saved to flash (it is permanent). Also, note that if the baud rate is changed to a different value, a response may not be returned.
$PMTK251, sets the runtime baud rate for the NMEA port; the baud rate returns to the default setting when the module performs a full cold restart or enters Standby mode.
You can try the hardware recommendations first, then try these software updates. I’d appreciate it if you could share your results after you try them.