cancel
Showing results for 
Search instead for 
Did you mean: 

SP1ML & SPSGRF Spirit modules inconsistent current with STM32L151 in Stop mode

melt brink
Associate III
Posted on April 23, 2018 at 11:27

Goodday,

After a few months on the  SP1ML (STM32L151+SPIRIT combined) then switching to SPSGRF (STM32L151 seperate from the SPIRIT module) I am experiencing the same phenomena on both designs. My software toggles the system in and out of STOP mode using timer 7 (to go to shutdown) and RTC to wake up. Eight out of ten times current consumption will be 50uA which seems correct with external pull-ups etc, but two out of ten times the current jumps to  220uA.

I have removed all additional semiconductors from my design and reverted back to the original firmware from ST. I am now toggling the unit in and out of shutdown mode with an external wire connected to ground and still every now and then I get 220-300uA in shut down mode instead of 19uA.

My project is current sensitive and will be asleep 99% for months at a time so I cant afford to take a chance where it goes into stop mode drawing 220uA.

I have narrowed it down to the SPIRIT Module if I remove it and only toggle the STM32L151 I get 0.4uA consistently.

To date I have build around 40 different units (SP1ML & SPSGRF ) and they all do the same.  I also looked for eratta on the Spirit module.

I suspect the problem lies here 

spirit_set_mode(SPIRIT_MODE_STANDBY);

Anyone ever came across something similar? Any ideas on how to narrow it down, I looked at clocks, GPIO states, even the ST StDPeriph_Driver_PWR.

Thanks in Advance

Melt

#sp1ml #sp1ml-spirit1-stm32l151rb #stop-mode #current-measurement
1 REPLY 1
melt brink
Associate III
Posted on April 26, 2018 at 09:01

Thanks to the RF ST team this has been solved

One needs to add the following line of code in the RX function when data is received by the spirit

uint8_t tmp = 0x95; SpiritSpiWriteRegisters(PM_CONFIG1_BASE, 1, &tmp); 

or another solution is to switch off the SMPS of the Spirit during shutdown

uint8_t tmp = 0x20; SpiritSpiWriteRegisters(PM_CONFIG2_BASE, 1, &tmp); // DISABLE the SMPS