Hello! I recently purchased a “SparkFun GNSS L1/L5 Breakout - NEO-F10N, SMA”. It was a little confusing to get it working at first, I wasn’t seeing any messages in u-center (which I had to use the soda WINE fork with Bottles in order to run on my Linux machine) but I eventually figured out the baudrate is set to 38400 by default. It’s been working great, except for one small problem, I accidentally set CFG-UART1-BAUDRATE
to 11520 (instead of 115200, with an extra zero, oops) in BBR and Flash . The problem is that I can’t control my breakout anymore! I also think I set
CFG-UART1-PARITY
to “1 - ODD”, but I know parity bits have been working already with standard baudrates…
I don’t know if it’s a limitation of the CH340, but when I try setting a custom baudrate in u-center to 11520 it doesn’t start communicating… I have a handheld oscilloscope and by probing the TX pin I can confirm that each bit is ~86.8 μs, which comes out to almost exactly 11520, still without the extra zero… Thankfully, I have an Arduino UNO R3, which I think can talk at arbitrary baudrates, but unfortunately I have no clue how to send the message to set the baudrate back to something standard, like 38400. Either that or I am wiring my Arduino incorrectly, I have tried using a jumper to connect the GND pin on my NEO-F10N breakout and Arduino, and another jumper, resistor, potentiometer etc. to the RX pin on the NEO-F10N breakout but the baudrate still seems to be stuck at 38400
Using the config view in u-center, I found the “Show Hex Toggle” output for setting “UART1” to “0+1 - UBX+NMEA” protocol in and out with a baudrate of 38400 looks like this:
0000 24 50 55 42 58 2C 34 31 2C 31 2C 30 30 30 33 2C 30 30 $PUBX,41,1,0003,00
0012 30 33 2C 33 38 34 30 30 2C 30 2A 32 34 0D 0A 03,38400,0*24
So, I whipped up a little program for my Arduino that outputs this message over serial:
const char message[] = "\x0D\x0A$PUBX,41,1,0003,0003,38400,0*24\x0D\x0A";
void setup() {
Serial.begin(11520, SERIAL_8O1);
}
void loop() {
delay(1000);
Serial.write(message, sizeof(message));
}
But no luck. I noticed the Arduino is set to HIGH when Serial is idle, so I modified my program to turn it off when unused (and added some extra line returns for good measure):
const char message[] = "\x0D\x0A\x0D\x0A\x0D\x0A\x0D\x0A$PUBX,41,1,0003,0003,38400,0*24\x0D\x0A\x0D\x0A\x0D\x0A\x0D\x0A";
void setup() {
pinMode(1, OUTPUT);
digitalWrite(1, LOW);
}
void loop() {
delay(1000);
Serial.begin(11520, SERIAL_8O1);
Serial.write(message, sizeof(message));
Serial.end();
pinMode(1, OUTPUT);
digitalWrite(1, LOW);
}
Still nothing. So does anybody have any ideas?