Skip to content

Light sleep and BLE, crash on the 29th wake up #4616

Closed
@SarahDDSp

Description

@SarahDDSp

Hardware:

Board: TTGO-LORA32-V1
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/ttgo-lora32-v1.html
PLATFORM: Espressif 32 (2.1.0) > TTGO LoRa32-OLED V1
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash (ESP32-D0WDQ6 (revision 1))
Core Installation version: 2.1.0, (ESP32 BLE Arduino 1.0.1)
IDE name: Platform.io
Flash Frequency: 40Mhz
PSRAM enabled: no
Upload Speed: automatic one
Computer OS: Ubuntu

Description:

I am currently working on an iOT project. My goal is to save as much power as possible so my product can run as long as possible on battery. Thus I would like to make my system sleep for 7 to 10 sec and then wake up for the same amount of time.
But after 29 wake up, the BLE is crashing when calling startAdvertising.
The bug I am reporting happens either the board is powered through USB or a 1S Li-ion battery (with TL1963A LPO). I am not even connecting to the BLE in the meanwhile so I am not doing anything than putting the board to sleep and waking it up. I am using properly the whole disable deinit process and init enable one.

My BLEsetup funtion is using the BLEDevice::init() function and then define Server, Services, and characteristics as in the setup loop of arduino example for BLE. It ends with BLEDevice::startAdvertising();. According to the back trace, it is where it fails at the 29th wake up.

I try to just let more time (a cycle of wake up/sleep without connecting) after the 28th so that it won't fail, but it had no effect.

I really have no idea of how to solve this issue.

Sketch:

void setup() {
  Serial.begin(115200);
  Serial.printf("Use Lora = %d, Use light sleep = %d \n", USE_LORA, USE_LIGHT_SLEEP);
  
  if(VERBOSE && VERBOSE_MAIN) Serial.println("============= Init Setup =============");
  // ================ INIT SPIFFS ================ //
  bool SPIFFS_init = SPIFFS.begin();
  if (VERBOSE && VERBOSE_MAIN_INIT)
  {
    if(!SPIFFS_init)
    {if(VERBOSE && VERBOSE_MAIN_INIT) Serial.println("An Error has occurred while mounting SPIFFS");}
    else
    {if(VERBOSE && VERBOSE_MAIN_INIT) Serial.println("SPIFFS init sucessful");}

    listDir(SPIFFS, "/", 2);
  }
  
  
  // ================ BLE ================ //
  if(VERBOSE && VERBOSE_MAIN_INIT)Serial.println("Before ble instialisation");
  BLESyst.setupBLE(serial_ID_ble,"1234abcd");

  
  // ================ Lora ================ //
  if(VERBOSE && VERBOSE_MAIN_INIT)Serial.println("Before Lora instialisation");
  if (USE_LORA)
  { 
    System.updateMessageToSendBLEandLora(checkFrequency);
    setMsgLora(System.getMessageLora());
    setupLoRaWAN();}
  
  

  // ================ LIGHT SLEEP ================ //
  if(VERBOSE && VERBOSE_MAIN_INIT)Serial.println("Before Deep sleep instialisation");
  if(USE_LIGHT_SLEEP) 
    {esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);}
  
  checkFrequency=(int)(1000/MAINFREQUENCY);

  if(!USE_LORA) lightsleep=true;
  timeLightSleepInit=millis();
}

void loop ()
{

   if(RESTART)
     {
       delay(5);
      //setup BLE contains the init function of the arduino library for BLE
       BLESyst.setupBLE(serial_ID_ble,"1234abcd");
       RESTART=false;
       timeLightSleepInit=millis();
       Serial.println("Setting counter timer to 0");
       counterTimer = 0 ;
     }

//Some other stuffs in main loop from which counterTimer incrementation

/* Light sleep management */
  if ((!DEVICE_IS_CONNECTED)&&(counterTimer>=70)&&(lightsleep)) //  
  {
    counterTimer=0;
    RESTART=true;
    if(USE_LIGHT_SLEEP) 
    {
        if(VERBOSE && VERBOSE_MAIN) 
        {
          Serial.println("I am going to light sleep");
          delay(250);
        }
        BLEDevice::deinit();
        delay(200);
        // Enter sleep mode 
        esp_light_sleep_start();
    }    
  }

Debug Messages:

Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.
17:21:58.200 > Core 1 register dump:
17:21:58.202 > PC      : 0x4000c2e4  PS      : 0x00060330  A0      : 0x80111ad1  A1      : 0x3ffc9fd0  
17:21:58.210 > A2      : 0x00000000  A3      : 0x3ffffac0  A4      : 0x000001e0  A5      : 0x00000000  
17:21:58.217 > A6      : 0x89abcdef  A7      : 0x01234567  A8      : 0x00000000  A9      : 0x3ffc9f70  
17:21:58.225 > A10     : 0x00000000  A11     : 0x00001800  A12     : 0x00000000  A13     : 0x00000003  
17:21:58.233 > A14     : 0x00060320  A15     : 0x00000000  SAR     : 0x00000018  EXCCAUSE: 0x0000001d  
17:21:58.241 > EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x0000001d  
17:21:58.248 > 
17:21:58.249 > Backtrace: 0x4000c2e4:0x3ffc9fd0 0x40111ace:0x3ffc9fe0 0x4010bdce:0x3ffca000 0x401092b9:0x3ffca030 0x400d6047:0x3ffca090 0x400d789a:0x3ffca0d0 0x400d2334:0x3ffca0f0 0x400d5091:0x3ffca130 0x400dcf8d:0x3ffca1c0 0x4008e94d:0x3ffca1e0
17:21:58.378 >   #0  0x4000c2e4:0x3ffc9fd0 in ?? ??:0
17:21:58.378 >   #1  0x40111ace:0x3ffc9fe0 in btc_gap_ble_arg_deep_copy at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/btc/profile/std/gap/btc_gap_ble.c:1032
17:21:58.378 >   #2  0x4010bdce:0x3ffca000 in btc_transfer_context at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/btc/core/btc_task.c:155
17:21:58.378 >   #3  0x401092b9:0x3ffca030 in esp_ble_gap_config_adv_data at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/bt/bluedroid/api/esp_gap_ble_api.c:517
17:21:58.378 >   #4  0x400d6047:0x3ffca090 in BLEAdvertising::start() at /home/sarah/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src/BLEAdvertising.cpp:485
17:21:58.378 >   #5  0x400d789a:0x3ffca0d0 in BLEDevice::startAdvertising() at /home/sarah/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src/BLEDevice.cpp:570
17:21:58.378 >   #6  0x400d2334:0x3ffca0f0 in BLEFunctions::setupBLE(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) at src/BLEFunctions.cpp:304
17:21:58.378 >   #7  0x400d5091:0x3ffca130 in loop() at src/main.cpp:157 (discriminator 2)
17:21:58.378 >   #8  0x400dcf8d:0x3ffca1c0 in loopTask(void*) at /home/sarah/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:19
17:21:58.378 >   #9  0x4008e94d:0x3ffca1e0 in vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c:355 (discriminator 1)

I hope my demand is sufficiently clear and furnished.
Thanks in advance for any help you could provide about it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Status: StaleIssue is stale stage (outdated/stuck)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions