Can ImpOS either statically or dynamically adjust the clock speed of the STM32F413ZHJ6 on imp006?

I need to scale down the clock speed of the STM32F413ZHJ6. It is using too much power. I am so happy I can use the UARTs to do buffered pulse timing - however my Teensy 3.5 is doing this at 24mhz using just 13ma of power.

My imp006 breakout board is also using more power idle than an Particle Boron, one of the very few ways in which the imp is not superior to the Boron.

How can I scale down the clock speed?

Can this be done dynamically?

What even is the current clock speed - perhaps the full 100Mhz?

All I need is UARTs fast enough for <3khz pulse buffering and basic minutely upload of statistical info (small binary packets) over LTE. Very light computational complexity - HOWEVER needs to be continuously up (no sleep) for the UART continuous pulse timing. However, low power for remote battery/solar deployment is key.

Thanks!

Clock and power management are automatic; however, using a UART in RX mode locks the bus clocks because these can’t be shifted when the receiver is enabled (UART bit clock is derived from the APB bus clock).

CPU clock is 96MHz, or essentially off during shallow sleep (which is entered automatically by the system when there’s nothing to do - the kernel is tickless).

What power are you seeing? I took a devboard and configured a UART, then disconnected from wifi and turned blinkup off (imp.enableblinkup(false)). I’m seeing ~3mA @ 5v being used here, just with a fluke meter.

Obviously, if you’re running the radios, power will be higher; the same experiment, connected to a 5GHz wifi network with imp.setpowersave(true) added - to put the wifi in low power mode, but retain the connection, I see ~10mA with peaks up to ~20mA (again, on a fluke meter so not exact but a decent ballpark).

LTE takes more power, though the power you see will reduce over time as there are some improvements being made to heartbeat timing etc.

@hugo Plugging-in the imp006 breakout board over USB with a blank program, I get minimum of 57ma with higher occasional spikes from LTE. When I use imp.enableblinkup(false); and imp.setpowersave(true);, I get no difference. All 4 jumpers in 2-3. This compares to about 17ma resting on the LTE-connected Boron.

Is something wrong with my setup?

~3mA @ 5v would be phenomenal, but I am getting min 57ma @ 5V over USB with blank imp program.

Thanks Hugo.

My guess is a bug with imp.setpowersave(true); on the imp006 breakout board which does not disable the Murata WiFi chip; I have just confirmed that imp.setpowersave(false); imp.setpowersave(true); and nothing all have no effect.

Or maybe the BG96 has an irremediably poor high idle LTE-connected power consumption, and there is no issue to fix?

The 3mA quoted was, as I said, with radios off. This was as a direct comparison to your 13mA Teensy number - CPU only.

imp.setpowersave(), as the docs indicate, is only a wifi thing. If you’re not on wifi, the wifi chip is powered down and (on the devkit) power gated, taking ~100nA only. This is why calling the API does nothing if you’re on cellular (and don’t have wifi powered up for local networking, which isn’t the default).

The higher power when connected is going to be related to the BG96, but also due to the USB interface that we use to talk to it - and why we’ve seen ~50kB/sec upstream (just with normal agent.send calls), vs the maybe 5kB/sec on a Boron if you’re lucky.

I do remember seeing ~25mA though; when I get a chance I’ll measure it again with a proper rig. If low power when connected to LTE becomes a priority then we should be able to get down to ~5mA ballpark when connected and idle, but at this point our volume customers are either well within their power budgets or they are doing wake/send data/sleep. LTE-M connecting so fast makes this a good approach in many cases - are you needing to keep LTE up all the time?

1 Like

Yes, constant monitoring application with minutely upload of small binary packets means I believe the BG96 has to stay on.

5ma idle for LTE would be phenomenal, which when combined with the MCU 3ma would make the imp006 at 8ma LTE connected probably the best off-the-shelf option in the world for low-power constant LTE.

How can I apply 5V to the imp in a way that bypasses the higher USB power draw and makes for a proper comparison? I’m currently interfacing with it by attaching wires to the +/- power USB pins with all jumpers 2-3, but I am not actually using the USB interface at all.

If

Is the data actually needed every minute? Buffering data for several minutes unless an exception is detected is more efficient (like: if you see a data point out of range, you bring up the radio and send immediately, otherwise you batch readings - you still have the full history).

The USB is between the imp006 and the BG96, it’s not related to the USB plug on the breakout.

Yes, it is needed. That is why I am trying to ascertain optimal LTE idle usage. Right now it is drawing 57ma resting, no traffic, at 5V. If this n could be improved with the existing hardware somehow that would be excellent.

It absolutely can be improved as I said, but that’s not high on the list right now. How are you measuring the 57mA? I doubt that’s the long term average, based on my hazy memory of last time I monitored this.