Hi everyone,
I am trying to solve a bug I am facing for several days now, it is related to LIBUARTE communication with a GPS module
Communication is init at 115200 BAUD and with a timeout of 100us.
The GPS module sends data every second. This data is composed by several frames, all starting with '$' and ending with " *xx " (xx can be any number)
Here is an example of correct data:
$GNRMC,164352.97,V,,,,,,,060421,,,N,V*11 $GNGGA,164352.97,,,,,0,04,8.0,,M,,M,,*7D $GNGLL,,,,,164352.97,V,N*5D $GPGSV,16,,,31,26,,,20,27,,,32,1*6D $GPGSV,2,2,07,08,,,25,26,,,21,27,,,25,8*60 $GLGSV,1,1,02,82,,,20,81,,,24,1*7D $GNGSA,A,1,,,,,,,,,,,,,16.7,8.0,14.7,4*3C $GNGSA,A,1,,,,,,,,,,,,,16.7,8.0,14.7,5*3D $GNGSA,A,1,,,,,,,,,,,,,16.7,8.0,14.7,6*3E
But here is the data I actually receive from GNSS module:
"NEWFRAME" is to indicate the beginning of a new packet of data in the UART handler.
NEWFRAME$PQGNSS,001*15 $PQVER,MODULE_LC79DANR01A04S,2019/12/18,10:17:15*25 $PQVER,SUB_V03*22 $PQVER,GL_20.23*15 $PQVER,GL_ANEWFRAME000100000000000000000000000000000000000000000000000000000000000000000000*42 $PQSWCONFIG,1,2,4,000000000000000000000000NEWFRAME00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000NEWFRAME101010101010000*3E ER,MODULE_LC79DANR01A04S,2019/12/18,10:17:15*25 $PQVER,SUB_V03*22 $PQVER,GL_20.23*15 $PQVER,GL_ANEWFRAME$GNRMC,164052.86,V,,,,,,,060421,,,N,V*12 $GNGGA,164052.86,,,,,0,00,99.0,,M,,M,,*42 $GNGLL,,,,,164052.86,V,N*5E $GNGSNEWFRAME99.0,3*01 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,4*06 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,5*07 $GNGSA,A,1,,,,,,,,,,NEWFRAME$GNRMC,164053.86,V,,,,,,,060421,,,N,V*13 $GNGGA,164053.86,,,,,0,00,99.0,,M,,M,,*43 $GNEWFRAMENGLL,,,,,164053.86,V,N*5F $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,1*03 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,2*00 $GNGNEWFRAME,1,,,,,,,,,,,,,99.0,99.0,99.0,6*04 $GNVTG,,T,,M,,N,,K,N*32 $GNRMC,164053.88,V,,,,,,,060421,,,N,V*1D $GNGGA,164053.88NEWFRAME,1,,,,,,,,,,,,,99.0,99.0,99.0,2*00 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,3*01 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,4NEWFRAME$GNRMC,164054.86,VNEWFRAME,,,,,,,060421,,,N,V*14 $GNGGA,164054.86,,,,,0,00,99.0,,M,,M,,*44 $GNGLL,,,,,164054.86,V,N*58 $GPGSV,1,1,01,08,,,30,1NEWFRAME $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,4*06 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,5*07 $GNGSA,A,1,,,,,,,,,,,,,99.0,99NEWFRAME$GNRMC,164055.86,V,,,,,,,060421,,,N,V*15 $GNGGA,164055.86,,,,,0,00,99.0,,M,,M,,*45 $GNGLL,,,,,1NEWFRAME64055.86,V,N*59 $GPGSV,1,1,01,16,,,24,1*64 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,1*03 $GNGSA,A,1,,,,,,,,,,,,,99.0,99NEWFRAME9.0,5*07 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,6*04 $GNVTG,,T,,M,,N,,K,N*32 64054.86,V,N*58 $GPGSV,1,1,01,08,,,30,1NEWFRAME$GNRMC,164056.86,V,,,,,,,060421,,,N,V*16 $GNGGA,164056.86,,,,,0,00,99.0,,M,,M,,*46 $GNGLL,,,,,164056.86,V,N*5A $GPGSNEWFRAME0,99.0,99.0,1*03 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,2*00 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,3*01 $GNGSA,A,1,,,NEWFRAME$GNRMC,164057.86,V,,,,,,,060421,,,N,V*17 $GNGGA,164057.86,,,,,0,00,99.0,,M,,M,,*47 $GNGLL,,,,,164057.86,V,N*5B $GPGSNEWFRAME,,,,,,99.0,99.0,99.0,3*01 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,4*06 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,5*07 $GNGNEWFRAME$GNRMC,164058.86,V,,,,,,,060421,,,N,V*18 $GNGGA,164058.86,,,,,0,00,99.NEWFRAME0,,M,,M,,*48 $GNGLL,,,,,164058.86,V,N*54 $GPGSV,1,1,02,16,,,25,27,,,28,1*69 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,1*NEWFRAME$GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,5*07 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,6*04 $GNVTG,,T,,M,,N,,K,N*32 ,V,N*5NEWFRAME$GNRMC,164059.86,V,,,,,,,060421,,,N,V*19 $GNGGA,164059.86,,,,,0,00,99.0,,M,,M,,*49 $GNGLL,,,,,164059.86,V,N*55 $GPGSNEWFRAME$GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,1*03 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,2*00 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.NEWFRAME.0,6*04 $GNVTG,,T,,M,,N,,K,N*32 ,V,N*54 $GPGSV,1,1,02,16,,,25,27,,,28,1*69 $GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0,1*NEWFRAME$GNRMC,164100.86,V,,,,,,,060421,,,N,V*14 $GNGGA,164100.86,,,,,0,00,99.0,,M,,M,,*44
Here are my two problems:
1- UART handler is not called at the end of the gps module packets, but somewhere in the middle of them
2- Sometimes, even inside one uart handler packet, I can see that NMEA frames are truncated (missing several bytes)
I already tried to increase uart timeout between 100 to 10000 whithout any improvement (I am getting the exact same output)
my UART instance is defined this way:
NRF_LIBUARTE_ASYNC_DEFINE(libuarte_gnss, 0, 2, NRF_LIBUARTE_PERIPHERAL_NOT_USED, NRF_LIBUARTE_PERIPHERAL_NOT_USED, 255, 3);
Any idea where this issue could come from?
Best regards