Reach Base Rover corrections UART baud issue

Pretty simple setup. Two Reach units (original) connected together with a 6 inch long “null modem” cable (i.e. only 3 wires, ground, Tx to Rx and Rx to Tx between the two units connected to the connector on the same side of the PCB as the micro USB connector as per docs.

Both Reach units are connected to my home Wifi as are the two iPhones that I am using to connect with them. One iPhone connects to the Base_GPS using Reach app V3 then I connect to the Reach Panel. the second iPhone is connecting to the Rover_GPS.

Both Reach units updated to firmware 28.4 but I have been having issues for a while and I am just getting around to diving into diagnosing the issue.

I am adjusting the Base_GPS UART settings in the Base Mode section of the Reach panel on the base
I am adjusting the Rover_GPS UART settings in the Correction Input section of the Reach panel on the rover.

No grey (gray) bars on the rover status.

So I change both baud rates from 38400 (Base mode and Correction Input) to 57600 and as soon as I do that I have grey bars on the rover status. Wuhoo they are talking.

Then they go away.

On the base I go to the Base mode panel and change baud for the UART from 57600 to 38400 then back to 57600 the grey bars appear for a bit and then disappear.

If I then go change the rover Corrections Inut baud to 115200 (the base still shows being set to 57600) the grey bars appear.

When I have the rover set to 115200 it doesn’t seem to matter what I set the base to… I get grey bars on the rover.

I then discovered that if I turn off a bunch of RTCM3 messages in the base mode page on the base, things seem to start working. Then I turned them back on and things stayed working.

I am confused as to what I am doing wrong and why this whole baud thing is giving me such grief.

All thoughts welcome.

  1. Firmware 28,4 base and rover ReachView 3
  2. [System report]
    Base System Report
Simple system report
app version: 28.4-r0
current_network:
  ip: 192.168.0.112
  security: wpa-psk
  ssid: TJHS_P
enabled: true
mode: client
base_mode:
  base_coordinates:
    accumulation: 60
    mode: single-and-hold
  output:
    io_type: serial
    settings:
      ntripcaster:
        mount_point: REACH
        password: '***'
        port: 2101
        username: reach
      ntripsvr:
        address: ''
        mount_point: ''
        password: '***'
        port: -1
      serial:
        baud_rate: 38400
        device: ttyEXTS0
      tcpcli:
        address: localhost
        port: 9001
      tcpsvr:
        port: 9000
  rtcm3_messages:
    message_1002:
      enabled: true
      frequency: 1
    message_1006:
      enabled: true
      frequency: 0.1
    message_1010:
      enabled: true
      frequency: 0.5
    message_1097:
      enabled: true
      frequency: 0.5
    message_1107:
      enabled: true
      frequency: 0.5
    message_1117:
      enabled: true
      frequency: 1
    message_1127:
      enabled: true
      frequency: 0.5
bluetooth:
  enabled: false
  pairing:
    discoverable: false
    no_input_no_output: null
    pin: '***'
camera_trigger:
  duty_cycle: 20
  enabled: false
  period: 2
  reverse_polarity: true
correction_input:
  base_corrections:
    io_type: 'off'
    settings:
      bluetooth:
        send_position_to_base: false
      ntripcli:
        address: ''
        mount_point: ''
        password: '***'
        port: -1
        send_position_to_base: true
        username: ''
      serial:
        baud_rate: 38400
        device: ttyEXTS0
        send_position_to_base: true
      tcpcli:
        address: localhost
        port: 10001
        send_position_to_base: false
      tcpsvr:
        port: 10000
        send_position_to_base: false
device:
  privacy_policy_accepted: true
  role: null
  rv3_banner_shown: true
  usage_analysis_accepted: false
logging:
  logs:
    base:
      autostart: false
      format: RTCM3
      started: true
    raw:
      autostart: false
      format: UBX
      rinex_options:
        logging_interval: 1
        marker_name: null
        pole_height: null
        preset: custom
        satellite_systems:
          beidou: false
          galileo: false
          glonass: true
          gps: true
          qzss: false
          sbas: false
        time_adjustments_enabled: false
      started: true
    solution:
      autostart: false
      format: LLH
      started: true
  settings:
    debug: false
    interval: 24
    overwrite: true
    simultaneous_logging: false
position_output:
  output1:
    io_type: 'off'
    nmea_settings:
      bluetooth:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      serial:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpcli:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpsvr:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
    settings:
      bluetooth:
        format: NMEA
      serial:
        baud_rate: 57600
        device: ttyEXTS0
        format: ERB
      tcpcli:
        address: localhost
        format: ERB
        port: 9000
      tcpsvr:
        format: LLH
        port: 9001
  output2:
    io_type: 'off'
    nmea_settings:
      bluetooth:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      serial:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpcli:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpsvr:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
    settings:
      bluetooth:
        format: NMEA
      serial:
        baud_rate: 57600
        device: ttyEXTS0
        format: ERB
      tcpcli:
        address: localhost
        format: ERB
        port: 9000
      tcpsvr:
        format: LLH
        port: 9001
positioning_settings:
  elevation_mask_angle: 15
  glonass_ar_mode: true
  gnss_settings:
    positioning_systems:
      beidou: false
      galileo: true
      glonass: true
      gps: true
      qzss: true
      sbas: true
    update_rate: 1
  gps_ar_mode: fix-and-hold
  max_horizontal_acceleration: 5
  max_vertical_acceleration: 1
  positioning_mode: kinematic
  snr_mask: 36

Rover system Report

Simple system report
app version: 28.4-r0
current_network:
  ip: 192.168.0.121
  security: wpa-psk
  ssid: TJHS_P
enabled: true
mode: client
base_mode:
  base_coordinates:
    accumulation: 120
    mode: single-and-hold
  output:
    io_type: 'off'
    settings:
      ntripcaster:
        mount_point: REACH
        password: '***'
        port: 2101
        username: reach
      ntripsvr:
        address: ''
        mount_point: ''
        password: '***'
        port: -1
      serial:
        baud_rate: 38400
        device: ttyEXTS0
      tcpcli:
        address: localhost
        port: 9001
      tcpsvr:
        port: 9000
  rtcm3_messages:
    message_1002:
      enabled: true
      frequency: 1
    message_1006:
      enabled: true
      frequency: 0.1
    message_1010:
      enabled: true
      frequency: 1
    message_1097:
      enabled: false
      frequency: 1
    message_1107:
      enabled: false
      frequency: 1
    message_1117:
      enabled: false
      frequency: 1
    message_1127:
      enabled: false
      frequency: 1
bluetooth:
  enabled: false
  pairing:
    discoverable: false
    no_input_no_output: null
    pin: '***'
camera_trigger:
  duty_cycle: 20
  enabled: false
  period: 2
  reverse_polarity: true
correction_input:
  base_corrections:
    io_type: serial
    settings:
      bluetooth:
        send_position_to_base: false
      ntripcli:
        address: ''
        mount_point: ''
        password: '***'
        port: -1
        send_position_to_base: true
        username: ''
      serial:
        baud_rate: 38400
        device: ttyEXTS0
        send_position_to_base: true
      tcpcli:
        address: localhost
        port: 10001
        send_position_to_base: false
      tcpsvr:
        port: 10000
        send_position_to_base: false
device:
  privacy_policy_accepted: true
  role: null
  rv3_banner_shown: true
  usage_analysis_accepted: false
logging:
  logs:
    base:
      autostart: false
      format: RTCM3
      started: true
    raw:
      autostart: false
      format: UBX
      rinex_options:
        logging_interval: 1
        marker_name: null
        pole_height: null
        preset: custom
        satellite_systems:
          beidou: false
          galileo: false
          glonass: true
          gps: true
          qzss: false
          sbas: false
        time_adjustments_enabled: false
      started: true
    solution:
      autostart: false
      format: LLH
      started: true
  settings:
    debug: false
    interval: 24
    overwrite: true
    simultaneous_logging: false
position_output:
  output1:
    io_type: 'off'
    nmea_settings:
      bluetooth:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      serial:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpcli:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpsvr:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
    settings:
      bluetooth:
        format: NMEA
      serial:
        baud_rate: 38400
        device: ttyEXTS0
        format: ERB
      tcpcli:
        address: localhost
        format: ERB
        port: 9000
      tcpsvr:
        format: LLH
        port: 9001
  output2:
    io_type: 'off'
    nmea_settings:
      bluetooth:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      serial:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpcli:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
      tcpsvr:
        gga:
          enabled: true
          update_rate: 1
        gsa:
          enabled: true
          update_rate: 1
        gst:
          enabled: true
          update_rate: 1
        gsv:
          enabled: true
          update_rate: 1
        main_talker_id: gn
        rmc:
          enabled: true
          update_rate: 1
        vtg:
          enabled: true
          update_rate: 1
        zda:
          enabled: true
          update_rate: 1
    settings:
      bluetooth:
        format: NMEA
      serial:
        baud_rate: 57600
        device: ttyEXTS0
        format: ERB
      tcpcli:
        address: localhost
        format: ERB
        port: 9000
      tcpsvr:
        format: LLH
        port: 9001
positioning_settings:
  elevation_mask_angle: 15
  glonass_ar_mode: true
  gnss_settings:
    positioning_systems:
      beidou: false
      galileo: true
      glonass: true
      gps: true
      qzss: true
      sbas: true
    update_rate: 1
  gps_ar_mode: fix-and-hold
  max_horizontal_acceleration: 5
  max_vertical_acceleration: 1
  positioning_mode: kinematic
  snr_mask: 35

Hi Terry,

Indeed, it seems logical to assume that the number and the update frequency of RTCM3 messages may be too much for some specific baud rates. Still, I’d need to double-check it with our team.

From your simple reports, I can see that you used standard RTCM3 settings as described in our guide. Can you please specify what kind of variants you tried with the 38400 baud rate so that it worked for you?

Also, to check the connection here, we would need to look at the Full System Reports. There are more logs to understand the internal processes of the solution calculation. Can you please share them with us at support@emlid.com? Just to avoid publicly posting some sensitive info.

Thanks for the prompt reply. Before I read your reply, I made a screen recording showing some of the weird behaviour and it actually misbehaved on queue for the recording. The recording is the full video start to finish uncut but in places I sped it up to keep it shorter. I added comments as to what I was doing throughout. Gets really interesting near the end!!

What it seems like to me is that some other task or process on the Reach units are fighting for the UART and resetting the baud rate but anything else that uses UART is turned off which I believe you can see in the simple system report.

I will generate the Full System Report and email them shortly.

I was fighting with a stable connection between the units using 3DR (SIK) radios and gave up on the whole project for a while because of the comms issues but just restarted diagnosing this issue. I removed the 3DR radios from the equation as they introduce a lot of variables in themselves and went to a simple three wire connection between the UART ports for the most simple possible connection… gnd, tx, rx, tx and rx crossed over. If you need a picture of the hardware let me know but it is just the two modules sitting a few cm apart with a 10cm crossover cable between the ports. Yes satellite signals are weak because I am indoors with the antennas just in the window ledge.

By the way, if I were to guess as to what is going on, I would guess that some other process, like position output or base mode corrections or bluetooth or something else that could potentially use a UART that is SUPPOSED to be off according to the configuration and system reports is not actually off and every so often is waking up and resetting UART baud rates or maybe grabbing the UART and preventing either base corrections out or rover corrections input from getting corrections. Just my hunch.

1 Like

Hi Terry,

I’ve received all of the reports from you, thanks! We’ll take a closer look here with the devs. The video does really get interesting near the end, with all of this age of differential growing rapidly :sweat_smile:

We’ll need some time to process everything, so I’ll come back a bit later.

Just for completeness for those reading this thread, there has been some email back and forth from Emlid that apparently does not get attached to the thread.

Still trying to resolve the UART issue, BUT… I changed the way I cabled things and it is a MUCH cleaner cable setup now and corrections seem to be working.

While I was testing with a “null modem” (crossover) wire connecting my two reach modules, my real config is having each reach module connected to a 3DR (SIK) radio. When that was having issue I went to direct wire connection to reduce complexity for diagnosis.

What I am now doing is using a slight variation on the usual micro USB OTG cable. The normal OTG cable typically has micro USB on one end that plugs into the Reach module and the other end is a female full size USB that you can plug a 3DR radio directly into. No special cables to make. The variation I am using also has a FEMALE micro USB connector that I can use to supply power from a USB power bank. So the OTG cable is sort of a Y cable with one side going to 3DR radio and the other supplying power.

So corrections work fine with TCP/IP connection or USB-OTG connection… which makes me lean towards a hardware issue of some form but Emlid is having a look at my detailed logs. Will report anything I learn here for future reference and closure…

Hi there,

Just wanted to come back here for a quick word. We’re still looking into the logs. However, at the moment, it looks like an issue with the number of RTCM3 messages being transmitted on the specific baud rates. We’re checking this.

Not thinking the baud issue is correct given that with the direct wire UART to UART I had tried at 115200 baud and that did not stay connected. It has to be able to handle the default messages at that baud. Also at one point I had tried using only the mandatory messages reducing the bandwidth requirements and still lost connection.

Hi Terry,

Sorry for keeping you waiting here! We’ve been checking out the system reports from your devices to see what can be the issue here. We can’t reproduce it on our devices which leads us to believe that the issue is specific to your modules.

As we can’t see anything amiss in the logs, it would seem like there are some hardware limitations that keep you from working on some of the baud rates. With the pretty old devices, there’s not much we can do about it now. So the workaround would be to work on the possible baud rates or use the radios over USB as you’ve described before.

No worries on the delay… lots of projects on the go.

Pretty certain it is not a baud rate issue itself. When I switch from UART to USB and monitor the USB traffic at 57600 baud (same as UART) there is LOTS of dead time between packets so it is not that there is more data than can be transmitted in that period of time at that baud rate.

I will shortly have a third Reach module that I can test and see if it has the same issue.

I just picked up another Reach module to test. This is a “new old stock” module from eBay that apparently is running version V0.0.3 on the module so I think I will have to recover some old brain cells that recall a complicated procedure to upgrade the edison engine and Reach seperately unless you know of a really easy way to flash it from that ancient version to current in one step…