ARMmbed / ARMmbed/mbed-os-example-lorawan

Can not reach low power state when radio is declared outside of main()

Open
#227 101 comments 1 reaction 0 assignees View on GitHub
IOTOSM-3922 Jira status: OPEN mirrored type: bug
Dominant language
C++
Stars
83
Forks
94
PR merge metrics
No merged PRs in 30d

Description

### Description of defect

Inability to enter sleep mode (or at least reach expected sleep mode average current) after calling
`static LoRaWANInterface lorawan(radio);` when working with NRF52840-DK + SX1262MB2xAS mbed shield

even when building with Develop profile. Results in average "sleep" current of ~6.5mA. Uncommenting all code before main() (except for above line) and removing all code except sleep_for within main() yields expected sleep current (~14uA).

#### Target(s) affected by this defect ?
NRF52840-DK

#### Toolchain(s) (name and version) displaying this defect ?
Mbed Studio 1.4.0

#### What version of Mbed-os are you using (tag or sha) ?
6.3.0

#### What version(s) of tools are you using. List all that apply (E.g. mbed-cli)
Mbed CLI 2

#### How is this defect reproduced ?
Set up 2 NRF52840 DK's: one with PowerProfilerKit, another with SX1262MB2xAS mbed shield. Connect both to PC via microUSB (not nRF USB). Have PPK DK power LoRa shield DK via External supply, switch power on LoRaDK ON, nRF ONLY switch, VEXT->nRF switch to ON. Load up nRF Connect utility for the power profiler kit application, and enable DUT power and monitoring.

Use the default example for this sketch, but remove most of the code such that all that remains looks as below:

```
#include

#include "lorawan/LoRaWANInterface.h"
#include "lorawan/system/lorawan_data_structures.h"
#include "events/EventQueue.h"

// Application helpers
#include "SX126X_LoRaRadio.h"
SX126X_LoRaRadio radio(D11,//MOSI
D12,//MISO
D13,//SCK
D7,//CS/NSS
A0,//RESET
D5,//DIO1
D3,//BUSY
A1,//FREQ_SEL
A2,//DEV_SEL
A3,//XTAL_SEL
D8);//ANT_SW

#include "mbed.h"

//DigitalOut led1(LED1);
using namespace events;
uint8_t tx_buffer[30];
uint8_t rx_buffer[30];
#define TX_TIMER 20000
#define MAX_NUMBER_OF_EVENTS 10
#define CONFIRMED_MSG_RETRY_COUNTER 3
#define PC_9 0

static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
static void lora_event_handler(lorawan_event_t event);
static lorawan_app_callbacks_t callbacks;

static LoRaWANInterface lorawan(radio);

int main()
{
rtos::ThisThread::sleep_for(1000);
}
```

change the following in mbed_app.json:

`"target_overrides": {
"*": {
"platform.stdio-convert-newlines": true,
"platform.stdio-baud-rate": 115200,
"platform.default-serial-baud-rate": 115200,
"lora.over-the-air-activation": true,
"lora.duty-cycle-on": false,
"lora.phy": "US915",
"lora.device-eui": "{ 0x00, 0x80, 0xA0, 0xD0, 0x09, 0xEA, 0x82, 0x37 }",
"lora.application-eui": "{ 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x03, 0xE4, 0x02 }",
"lora.application-key": "{ 0xEE, 0xB6, 0x72, 0x7D, 0xEB, 0x52, 0x08, 0x1C, 0x2E, 0x32, 0xC4, 0x3B, 0xB8, 0x96, 0x86, 0x6D }",
"target.components_add": ["SX126X"],
"lora.app-port": 2,
"lora.fsb-mask": "{0xFF00, 0x0000, 0x0000, 0x0000, 0x0002}"
},`

`"macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_lora_config.h\"", "MBED_TICKLESS=1"]`

Now, compile, upload and compare the average currents when `static LoRaWANInterface lorawan(radio);` is commented, and uncommented. For me, results for commented are ~14uA average sleep current over 52ms period, while uncommented shows an average sleep current of approximately 6.5mA over 52ms period.

Contributor guide

Open the contributing guide

Research direction

Start with the minimal reproduction in the issue and mbed_app.json, comparing sleep current with and without static LoRaWANInterface lorawan(radio);. Read the LoRaWANInterface and SX126X_LoRaRadio initialization paths, then verify the fix by reproducing the expected ~14uA sleep current instead of ~6.5mA on the NRF52840-DK with the SX1262MB2xAS shield.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
embedded-iot, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.