Skip to content

Commit bf0fc9c

Browse files
committed
Disable NMEA (and RTCM3) over I2C to decrease reset occurance.
NMEA at 4Hz including GxGSV increases the number of bytes to the ESP32. The ZED-F9x is known to have issues creating bad I2C traffic. These bad transmissions lead to possible ESP32 un-recoverable errors and resets. By decreasing I2C traffic we reduce the possibility of a reset.
1 parent b4aa69b commit bf0fc9c

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

Firmware/RTK_Surveyor/System.ino

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -177,44 +177,42 @@ bool configureUbloxModule()
177177
//but the phone can also provide RTCM data and a user may want to configure the ZED over Bluetooth.
178178
//So let's be sure to enable UBX+NMEA+RTCM on the input
179179
getPortSettings(COM_PORT_UART1); //Load the settingPayload with this port's settings
180-
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3) || settingPayload[INPUT_SETTING] != (COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3))
181-
{
180+
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3))
182181
response &= i2cGNSS.setPortOutput(COM_PORT_UART1, COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3); //Set the UART1 to output UBX+NMEA+RTCM
182+
183+
if (settingPayload[INPUT_SETTING] != (COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3))
183184
response &= i2cGNSS.setPortInput(COM_PORT_UART1, COM_TYPE_NMEA | COM_TYPE_UBX | COM_TYPE_RTCM3); //Set the UART1 to input UBX+NMEA+RTCM
184-
}
185185

186186
//Disable SPI port - This is just to remove some overhead by ZED
187187
getPortSettings(COM_PORT_SPI); //Load the settingPayload with this port's settings
188-
if (settingPayload[OUTPUT_SETTING] != 0 || settingPayload[INPUT_SETTING] != 0)
189-
{
188+
if (settingPayload[OUTPUT_SETTING] != 0)
190189
response &= i2cGNSS.setPortOutput(COM_PORT_SPI, 0); //Disable all protocols
190+
if (settingPayload[INPUT_SETTING] != 0)
191191
response &= i2cGNSS.setPortInput(COM_PORT_SPI, 0); //Disable all protocols
192-
}
193192

194193
getPortSettings(COM_PORT_UART2); //Load the settingPayload with this port's settings
195-
if (settingPayload[OUTPUT_SETTING] != COM_TYPE_RTCM3 || settingPayload[INPUT_SETTING] != COM_TYPE_RTCM3)
196-
{
194+
if (settingPayload[OUTPUT_SETTING] != COM_TYPE_RTCM3)
197195
response &= i2cGNSS.setPortOutput(COM_PORT_UART2, COM_TYPE_RTCM3); //Set the UART2 to output RTCM (in case this device goes into base mode)
196+
if (settingPayload[INPUT_SETTING] != COM_TYPE_RTCM3)
198197
response &= i2cGNSS.setPortInput(COM_PORT_UART2, COM_TYPE_RTCM3); //Set the UART2 to input RTCM
199-
}
200198

201199
//Turn on RTCM over I2C port so that we can harvest RTCM over I2C and send out over WiFi
202200
//This is easier than parsing over UART because the library handles the frame detection
203201
getPortSettings(COM_PORT_I2C); //Load the settingPayload with this port's settings
204-
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_UBX | COM_TYPE_RTCM3) || settingPayload[INPUT_SETTING] != COM_TYPE_UBX)
205-
{
206-
response &= i2cGNSS.setPortOutput(COM_PORT_I2C, COM_TYPE_UBX | COM_TYPE_RTCM3); //Set the I2C port to output UBX (config), NMEA (logging), and RTCM3 (casting)
202+
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_UBX))
203+
response &= i2cGNSS.setPortOutput(COM_PORT_I2C, COM_TYPE_UBX); //Set the I2C port to output UBX (config)
204+
//response &= i2cGNSS.setPortOutput(COM_PORT_I2C, COM_TYPE_UBX | COM_TYPE_RTCM3); //Not a valid state. Goes to UBX+I2C+ RTCM3 - Set the I2C port to output UBX (config), and RTCM3 (casting)
205+
206+
if (settingPayload[INPUT_SETTING] != COM_TYPE_UBX)
207207
response &= i2cGNSS.setPortInput(COM_PORT_I2C, COM_TYPE_UBX); //Set the I2C port to input UBX only
208-
}
209208

210209
//The USB port on the ZED may be used for RTCM to/from the computer (as an NTRIP caster or client)
211210
//So let's be sure all protocols are on for the USB port
212211
getPortSettings(COM_PORT_USB); //Load the settingPayload with this port's settings
213-
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3) || settingPayload[INPUT_SETTING] != (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3))
214-
{
212+
if (settingPayload[OUTPUT_SETTING] != (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3))
215213
response &= i2cGNSS.setPortOutput(COM_PORT_USB, (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3)); //Set the USB port to everything
214+
if (settingPayload[INPUT_SETTING] != (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3))
216215
response &= i2cGNSS.setPortInput(COM_PORT_USB, (COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3)); //Set the USB port to everything
217-
}
218216

219217
response &= configureConstellations(); //Enable the constellations the user has set
220218

0 commit comments

Comments
 (0)