Hello!
I am trying to improve the GPS-performance of our custom board. It is difficult to know if it is my hardware, firmware, antenna or something else that needs to be improved.
So right now it would be nice to know if there is anything firmware-wise that I can do to improve my performance.
I start with:
- Setting NRF_SO_GNSS_USE_CASE to "multiple hot starts"
- NRF_SO_GNSS_FIX_RETRY to 0
- NRF_SO_GNSS_FIX_INTERVAL to 1
- NRF_SO_GNSS_NMEA_MASK to NRF_CONFIG_NMEA_GLL_MASK
- Then start GPS
Then for 10 minutes I run this code until I have a position. (If I have misunderstood something here it would be nice to know ):
u8_t flags = 0; u32_t received_bytes = 0; nrf_gnss_data_frame_t gps_data_frame; while (true) { received_bytes = nrf_recv(fd, &gps_data_frame, sizeof(nrf_gnss_data_frame_t), NRF_MSG_WAITALL); if (received_bytes > 0) { switch (gps_data_frame.data_id) { case NRF_GNSS_PVT_DATA_ID: flags = gps_data_frame.pvt.flags; if (gps_data_frame.pvt.accuracy != 0) { if (!(flags & NRF_GNSS_PVT_FLAG_FIX_VALID_BIT)) { //Save raw GPS position } } break; case NRF_GNSS_NMEA_DATA_ID: if (flags & NRF_GNSS_PVT_FLAG_FIX_VALID_BIT) { //Save NMEA string } break; default: break; } } k_sleep(K_MSEC(250)); }
The idea is if I don't have any full NMEA string, that is if I have no NRF_GNSS_PVT_FLAG_FIX_VALID_BIT, I will use the raw position data if available.
The thing is that in some cases this works alright. But there are many cases where I get 8-10 satellites during these 10 mins and still have no position (raw or NMEA).
Earlier we used the "cold start" approach instead and only looked for position for 2-3 mins. That almost seemed to work better. Is there any caveats to use the serveral hot starts? Wouldn't the first fix be acquired in the same manner as during a cold start?
We use:
sdk v1.0.0
mdm_fw v1.0.1
So the main question is why we can get many satellites during a long time but don't get a fix? Can I do anything to improve this?
Thanks alot