BG96 power saving help

Hi, I’m having trouble understanding/using the power saving on the BG96 module. (I’ve read the PSM, Hardware Design and Power Consumption documents and tried to use the methods described)
I have a custom board which uses the BG96 and I’m seeing the idle power use for the module at ~50mA but I don’t seem to be able to trigger standby or sleep states. Also I don’t seem to be seeing any urc messages for power saving.

A typical log where I power up the module initialise it is below.

<info> app: Off, turn on
RX: RDY
TX: ATE0
RX: OK
    +CFUN: 1
    +QGPSURC: "xtradataexpire",0,"1980/01/05,19:00:00"
    +CPIN: READY
    +QUSIM: 1
    +QIND: SMS DONE
    +QIND: "csq",22,99
TX: AT+QURCCFG="urcport","uart1" 
RX: OK
TX: AT+QCFG="psm/urc",1 
RX: OK
TX: AT+QCFG="airplanecontrol",1 
RX: OK
TX: AT+CFUN=1 
RX: OK
TX: AT+CPSMS=1 
RX: OK
TX: AT+QCSCON=1 
RX: OK
TX: AT+CEDRXS? 
RX: +CEDRXS: 5,"0000"
    OK
TX: AT+CEDRXS=2 
RX: ERROR
TX: AT+CEREG? 
RX: +CEREG: 4,5,"1812","6151E",8,,,,
    OK
TX: AT+CEREG=4 
RX: OK
TX: AT+QINDCFG="csq",1 
RX: OK
TX: AT+QCSCON? 
RX: +QCSCON: 1,0
    OK
TX: AT+CPSMS=1,,,"10100001","00001010"
RX: OK
TX: AT+CPSMS?
RX: +CPSMS: 1,,,"01111110","00001010"
OK
TX: AT+QPSMS=1,,,"10100001","00001010"
RX: OK
TX: AT+QPSMS?
RX: +QPSMS: 0,,,,
OK

TX: AT+QSCLK? 
RX: +QSCLK: 0
    OK
RX: +QIND: "csq",26,99
RX: +QIND: "csq",23,99

TX: AT+QSCLK=1 
RX: OK
RX: +QIND: "csq",25,99

GSM_DISABLE_PIN - 1
RX: +QCSCON: 1,1
    +QCSCON: 1,0
    +QIND: airplanestatus,1
    +QIND: "csq",99,99
    +CEREG: 0,,,,,,,"00001010","01111110"

GSM_DISABLE_PIN - 0
RX: +QIND: airplanestatus,0
    +QIND: SMS DONE
    +CEREG: 2,,,,,,,,
    +QCSCON: 1,1
    +CEREG: 5,,,,,,,,
RX: +QIND: "csq",23,99
RX: +QCSCON: 1,0

As you can see when I try/call QSCLK=1 (and set DTR) nothing happens. I can activate and deactivate airplane mode OK as shown, but found this has insignificant effect on the power (~3mA). Similarly the settings for CPSMS/QPSMS don’t appear to be having any effect.

The attached graph shows the module starting up, registering then idling:

(average power use before powering on the bg96 is 20mA, rises to 70mA on startup, 132mA during connection, registers at 74mA, then idles at 64mA)

I also attempted to use the AT+QCFG="psm/enter",1 call, but this also appeared to have no effect whatsoever, and gave no URC messages.

The microcontroller is connected to the BG96 with the uart pins and there is no USB connection, what else can I try or check? Obviously I could just power down and up the module, but I thought it should be possible to use the power saving features? Could there be some other pin or connection that I have that’s preventing the power saving?

forgot to add this is using the firmware: BG96MAR02A10M1G

Hi Ivor,
power saving features depend as well on network/provider availability especially when roaming.
As well there might be differences between NB-IoT and LTE-M.
There are no PSM and/or eDRX in case of an 2G connection.
You need to be attached/active (CFUN=1) to get the features activated,

So…which MNO and RAT are you using?
Are you sure the raoming SIM is supporting PSM/eDRX within that network?

BG96 is based on MDM9206 chipset which is a little picky with PSM and eDRX.
Try to set the eDRX & PSM values, enable the needed flags and then restart the module (maybe even without a serial connection) and monitor the power consumption.
After attach peaks there is a timeframe for RRC connected. Depending on the MNO this can be 2-10 seconds (sometime even more). After the RRC connection release the idle time starts (T3324) which should be one of your values set. After idle time expired, the module should go to sleep (PSM) for T3412.
There is a useful tool here: PSM Calculator | Generator & Decoder for T3412, T3324, and AT+cpsms

Thanks Markus,
That’s given me some things to play with, I’ll keep tweaking and testing.
I was hoping the power saving would just work automatically, or if not that there would be a a simple way to instruct the module to idle or powersave.
I’m also going to experiment with explicitly turning off the GPS and using CFUN to disconnect the mobile on a schedule that might be a simpler and more predictable method for power saving.
Basically this is for a custom GPS tracker I’ve been developing for a few years now, I’m very happy with the hardware and the BG96 which has provided a superb performance (paired with an NRF52840), but I’m now curious if I can improve on the systems 75mA use to stretch out the runtime.

Hi Ivor,
tracking…Ok.
As the MDM9206 share the receiver part with GPS it is recommended to use a long eDRX cycle and do the GPS part within this cycle. eDRX will happen in the idle phase only.
Therefore a long idle phase is needed as well or PSM should be deactivated during GNSS retrival.

Just example value…e.g. wake up ev.5min and have 2min idle time:

at+cpsms=1,10100101,00100010
at+cereg=4
at+cereg? → to check if the network confirmed your request

Set eDRX accordingly (here in LTE-M - for NB-IoT use 1,5): 0110 - 102.4 seconds:

AT+CEDRXS=1,4,"0110 "
AT+CEDRXRDP → to read if the network confirmed your request

Within the 102.4seconds the device should retrieve the GPS fix.
Push the data.
Unfortunately I think MDM9206 does not support RAI (release assistence indicator).
With RAI it would be possible to drop into PSM right after a data push.

In case you are able to use the DIAG port of the BG96, there is free tool on Github - QCSuper with which you are able to monitor layer messages in wireshark.

to enable modem log , pls send AT+QCFG=“dbgctl”,0
to disable modem log ,pls send AT+QCFG=“dbgctl”,1

E.g. in the attach message your PSM/eDRX values set are present (as well in the TAU messages) and in the accept messages from the network the values ‘granted’ from the network can be seen. Granted, as the MNOs might modify the requested values or does have minimum values etc.
Hope this might help you more…
BR,
markus

1 Like