Reach M2 randomly Stops accepting correction input via MicroUSB Cable



I am using Emlid RS2+ in the base mode. The corrections from the RS2+ are transferred to a PC via wifi. The base output is in TCP Server mode. The PC is connected to a Emlid Reach M2 module via a Micro-USB cable.

The MicroUSB cable is used to both NMEA receive position output and give correction input. I am using a python script to interface with the M2. The python script uses PySerial and creates a serial connection, the serial connection is then is used concurrently by two seperate threads. One threads reads the serial NMEA data and the other thread writes the RTCM3 Corrections.

Python Code
Firmware Version 31.8 (Both Reach M2 and RS2+)
Host PS OS Ubuntu 22 (Tried on Windows 11 aswell)
Position Output USB to PC Baud Rate 115200
Correction Input USB to PC Baud Rate 115200

Most of the time the setup works perfectly without any issues.


Unfortunately, sometimes the Reach M2 stops accepting serial data. i.e. when I run “Serial.write()”, the thread just stops and the write never completes. I added a “write_timeout” of 1 second when connected, but still the code simply gives the “serial.serialutil.SerialTimeoutException: Write timeout” error.

Meanwhile, the reader thread keeps reading and the serial port is still reported as “open” by the code while the “write” functionality is failing.

The only way I have found to fix this is the power cycle the RTK itself. This is not practical as I am hoping to fix the issue without stopping data flow.

What I have tried to fix this

  • I tried restarting the code multiple times but the issue persists. The code is able to write corrections a few times (even shows receiving corrections on emlid flow) but then it again stops accepting any serial data.

  • I tried changing the MicroUSB Cable ( I have bought 8 new cables now :sob: )

-I tried different computers but the issue still persists.

-Is UART a more reliable communication method? If it is necessary I will connect to emlid using UART and then use a UART to USB converter to connect to the PC.

-Wired connection between the Emlid and PC is required for reliability.
-I cannot receive corrections directly by connecting M2 with RS2+ wifi as in future the corrections will be transferred >2km away using industrial L-Band IP Radios

Hi Nilesh,

Welcome to the forum!

Do I understand correctly that you use M2 as a rover (receive corrections from the base) and stream NMEA messages?

If you can accept corrections on M2 when directly connected to the RS2+ via Emlid Flow, it does look like an issue with your customer code or setup. Reach devices can transfer data via Serial, but it highly depends on the setup and application. I can suggest checking one by one: if M2 can receive corrections and if M2 can output its position. Maybe it can narrow the issue down.

Hi Olesia,

Thank you for the warm welcome! Indeed, you’ve got it right. I utilize M2 as a rover, receiving corrections from the base (RS2+), and stream NMEA messages.

I am able to recieve corrections via Emlid Flow (M2 connected to RS2+ hotspot with TCP settings in Emlid Flow app). I am also able stream position data from M2 via serial (MicroUSB). The M2 acheives fix without any issue at all.

Alternatively, in my deployment setup I would be recieving rtcm3 corrections and streaming position output via MicroUSB Cable. I am also able to acheive fix with this without any issues. Unfortunately, after some random time (10-35mins), the M2 stops recieving rtcm3 corrections. And as Explained above the I get “Write Timeout” in the script which send rtcm3 corrections (Script attached in the main post).

I think MicroUSB is maybe a unreliable cable maybe, the connector itself is at fault. I am thinking of using the UART S1 port for communication to see if that is more reliable.

I would be deploying about 70-80 UGVs, each equipped with a M2 Module, all receiving corrections from a single RS2+ Module. The UGVs will be equipped with an Linux Computer and a Mesh Software Defined Radio for communication. The corrections would be sent via a central computer to each UGV’s Linux Computer. I plan on connecting the Linux Computer to the Reach M2 via a physical connection for reliability.

I am not sure if this is the right place to ask, but could you recommend me a reliable communication system between the Linux Computer and the ReachM2. Are UART to USB converters reliable? Do you know of any such reliable converters.


We haven’t tested any UART to USB converters, but they should work with the M2. Some of our users shared that they could use such converters for different purposes. In these cases, for example:

I think you can find more examples on the forum.