ublox MAX M10s and Power Saving Modes

Hello!

I’m currently evaluating the power consumption characteristics of the Sparkfun ublox MAX M10S, and am thus interested in getting the module into some kind of power saving mode. The integration manual describes the tracking and acquisition engines in continuous mode, as well as some characteristics of a “Hardware backup” and “Software Standby” mode (page 16). In the interface manual mentions no such power saving modes other than a “psmState” field in the UBX-NAV-STATUS message.

However, trying to poll the message using “Example20_SendCustomCommand” using 0x01 as class and 0x03 as id yields “SFE_UBLOX_STATUS_TIMEOUT” from using the sendCommand() method.

So, I have the following questions:

  1. Does the ublox MAX M10S have any kind of power saving mode that sacrifices GPS accuracy for reduced power consumption? If so, how would one configure it?

  2. Why do some commands such as “UBX_CFG_RATE” work but ones such as NAV_STATUS run into issues?

I’m using V2.0 of the Sparkfun_u-blox_GNSS_Arduino_Library from the MAX M10S product page. Many thanks in advance!

Hi @Tester01213,

The original power-saving examples we wrote for the M8 use the method powerSaveMode and the UBX_CFG_RXM message to configure the receiver power save mode. The M10 - 5.00 or 5.10 - does not support that message and I suspect NAV-STATUS psmState is only there for backward-compatibility. But it looks like UBX-RXM-PMREQ is supported. So the commands powerOff and powerOffWithInterrupt should work. Please give Example22 a try. If your module is running SPG 5.00, it looks like only powerOffWithInterrupt will work. If you have a new module running 5.10, then both should work (according to the interface description, 5.10 supports both the short and long versions of RXM-PMREQ).

I hope this helps,

Paul

Thank you very much for the prompt reply! I’ve just given Example22 a try and it all seems to work with no errors thrown up. Using Example21, I’ve also confirmed that my module is running SPG 5.10.

I have a bit of a follow up question though. As you mentioned that the older powerSaveMode messages are no longer supported by the M10, and the RXM-PMREQ message seems to just shut the module down (allowing the hardware to go into backup mode), am I right in assuming that the M10 no longer has the “power optimised tracking” mode? In other words, is it a simpler either “ON” or “OFF” state for the M10, rather than having multiple “ON” modes?

A second follow-up involves the sfe_ublox_status_e enum. Is there any documentation regarding what each of the statuses mean? Most are fairly self-explanatory I suppose, but I’m curious what SFE_UBLOX_STATUS_SUCCESS is used for? The examples all seem to look for DATA_SENT or DATA_RECEIVED to indicate successful transmission/reception of data.

Thanks!

Melvin

Hi Melvin,

The MAX-M10S Integration Manual, section 2.3 Power Management, only mentions Continuous Mode:

2.3.1.1 Continuous mode

The MAX-M10S uses dedicated signal processing engines optimized for signal acquisition and

tracking. The acquisition engine actively searches for and acquires signals during cold starts or

when insufficient signals are available during navigation. The tracking engine continuously tracks

and downloads all the almanac data and acquires new signals as they become available during

navigation. The tracking engine consumes less power than the acquisition engine.

A lower current consumption will be achieved when a valid position is obtained quickly after start

of the receiver navigation, the entire almanac has been downloaded and the ephemeris for each

satellite in view is valid. If these conditions are not met, the search for the available satellites will

take more time and consumes more power.

Other than RXM-PMREQ, I haven’t seen any other mentions of “power saving”…

You might be able to use AssistNow Autonomous to help reduce the power consumption. AssistNow Autonomous allows you to save and restore the module configuration (including the almanac) in your own memory. You can restore it to speed up the Time To First Fix and - presumably - significantly reduce the power consumption of a cold- or warm-start. Have a look at the examples:

https://github.com/sparkfun/SparkFun_u- … /AssistNow

sfe_ublox_status_e is defined here:

https://github.com/sparkfun/SparkFun_u- … .h#L80-L97

There are notes in the code about the return values from waitForACKResponse and waitForNoACKResponse:

https://github.com/sparkfun/SparkFun_u- … 4962-L4970

https://github.com/sparkfun/SparkFun_u- … 5151-L5157

Let me know if you spot any other weirdness. Officially, the M10S SPG 5.10 no longer supports UBX-CFG-PRT (used by .begin to detect the module) and UBX-CFG-MSG (to set the message rate for “auto” messages). However, I think they are actually still working for now - but will likely disappear at the next release. Others like UBX-CFG-GEOFENCE are - I believe - no longer supported as of 5.10. So you will have problems with the geofence examples. I am working on a new version of the library for the F9 and M10 modules which uses only the configuration interface. It’s working but I haven’t yet got all the examples ported over. If you want to be a Beta Tester, let me know and I’ll get a copy to you.

Best wishes,

Paul

Specifically, sendCommand uses SFE_UBLOX_STATUS_SUCCESS to indicate that a command was sent successfully - and that no bus errors occurred.

Hey Paul,

For “Power Optimised Tracking”, it is referenced as to one of the possible responses of byte 7 of “UBX-NAV-STATUS” under “psmState”. However, as you mentioned, this could very well be a legacy item for backwards compatibility. I will certainly look into AssistNow Autonomous though, that seems rather interesting.

Thanks for your elaboration on the SUCCESS status, it would seem that despite being “successful” it doesn’t appear to yield much success as I didn’t really get a response. I have yet to spot any other major weirdness though, since I’ve just been fiddling around with Example20 to try and send various commands to the ublox via Arduino. It’s just that sometimes, sendCommand() returns status 3 (SFE_UBLOX_STATUS_TIMEOUT), which I can only assume is because the message I tried is no longer supported.

If you’re willing to share the work in progress library for the M10 module I’d be very grateful and be willing to test it and report any bugs that I encounter to you.

Many Thanks!

Melvin

Hi Melvin,

I’ve made the v3 library public:

https://github.com/sparkfun/SparkFun_u-blox_GNSS_v3

It is still Work-In-Progress. I’m slowly working my way through the examples, updating and testing each one as I go. But I’m confident the library is useable as-is.

Please give it a try and let me know if you spot any gremlins. Thanks!

You won’t be able to install it via the Arduino Library Manager. For now, you will need to download it and install it manually.

Thanks for the help. Let me know what you find. If you do find a problem, please open an Issue here:

https://github.com/sparkfun/SparkFun_u- … _v3/issues

All the best,

Paul

Hey Paul,

Many thanks for sending the link for V3.0 of the library. I’ll take a look at it and report if I find any oddities.

Melvin