-
Notifications
You must be signed in to change notification settings - Fork 2
Board programmed with example 16 randomly stops sending GPS updates via Iridium #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Small update / clarification Previously I thought of using "OK" as terminator string instead of "OK[CR][LF]" as a workaround, but this now does not seem to be an option either. For running these tests I enabled (uncommented)
I then just let it run, while monitoring the communication on the serial line. This should work indefinitely. However, most of the time (but not always) it stopped after 10s of minutes to hours with the above errors. |
Just copying my reply from the Forum:
|
Hi Adrian (@adrian-bodenmann ), Please try enabling the extra diagnostic messages:
They may provide more clues? Best, |
Please also tell me how you are powering the board:
Do you have the Serial Monitor open? Please copy and paste the complete output from before and after the failure. Thank you, |
Thank you for your reply. The reason why I used 2.2.1 is that 2.1.0 causes another other issue, and I assumed that the issue from 2.1.1 would have been fixed by 2.2.1. Version 2.1.0 causes the following issue: If the program is (re)started while the Iridium modem is on (red LED on), it gets stuck at modem.begin() forever. This does not happen with version 2.2.1. The boards are connected by the USB cable. No extra batteries attached. I've been running the code with the DIAGNOSTICS enabled, and I added more This is an example of the code running well to start with, using Version 2.2.1 of Apollo3 core:
And this is 6 minutes later, where the linefeed ([LF]) character is read late, presumably due to the bug in Version 2.2.1 of Appollo3:
In this occurence the error happened after 6 minutes, but it it varies between minutes, hours, to not occurring at all, with exactly the same setup. I am a bit surprised the UART bug in Appollo3 has been known for such a long time and is not fixed, because I am sure it causes very hard to debug issues for others as well. Are there plans to fix this in a future release? For the above-mentioned reason rolling back to 2.1.0 is not really a viable solution |
Hi Adrian, Thank you for the update. I won't be able to run any hardware tests for ~two weeks. I will investigate why re-begin fails on 2.1.0 when I have access to hardware again. With version 2.2.1 of the core, UnbufferedSerial and serial_api especially require patching. We had to do this on the OpenLog_Artemis. Details are here: https://github.com/sparkfun/OpenLog_Artemis/blob/main/COMPILE_BINARY.md#patch-the-apollo3-core Paulvha provided the patch. His notes are here: sparkfun/OpenLog_Artemis#117 (comment) I realize it's a big ask but if you have the time please try patching the 2.2.1 core and re-run your tests. I'm hoping the issue goes away...? Best wishes, |
Hi Paul, Unfortunatley the code now crashes. I believe this is due to an unnecessary assert in the patched serial_api.c.
I believe this happens when attempting to The
though |
We are using the SparkFun WRL-18712 board programmed with the code in example 16 and it sometimes stops transmitting GPS messages.
When monitoring the serial communication from the board, it eventually sends the following lines:
*** modem.clearBuffers failed with error 3 ***
followed by
*** modem.begin failed with error 5 ***
, which is then sent repeatedly, and it never recovers until the board is restarted.This happens randomly. Sometimes within 10s of minutes, sometimes within hours, sometimes it does not happen at all (tested for several days). We have now 3 SparkFun WRL-18712 boards and it happens on all of them. We originally had 1 that we noticed stopped transmitting GPS, so we initially thought there was an electrical issue, so bought 2 new ones, but the new ones have the same issue.
I did a lot of debugging, and it looks like the serial strings sent from the Iridium 9603 modem sometimes stop sending the line feed (LF), and sometimes the carriage return (CR) at the end of the terminator, i.e. "OK[CR]" or "OK" instead of "OK[CR][LF]".
waitForATResponse() in IridiumSBD.cpp then times out because it does not see the terminator it is expecting. That then causes an ISBD_PROTOCOL_ERROR (3) and afterwards an ISBD_NO_MODEM_DETECTED (5) error.
(Note: The missing "[LF]" or the "[CR][LF]" characters are sent at the start of the next transmission from the Iridium 9603 modem, but that does not happen until a new prompt (e.g. "AT") is sent to it).
The text was updated successfully, but these errors were encountered: