Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

ble_app_uart Lowest Power Consumption Configuration

I am using Fanstel BT832 module based on nRF52832. I am using 'nRF5_SDK_14.2.0_17b948a' with 's132_nrf52_5.1.0_softdevice.hex'.

I am using this module as the BLE peripheral device and Raspberry Pi3 as BLE central. 

My slave module is battery operated contains BT832 and e-ink display connected via SPI.

In my application Host(Raspberry Pi) sends Image Data to Slave(BT832) on user update event. Currently, I have tested this application by modifying ble_app_uart and it works perfectly.

I have changed MIN_CONN_INTERVAL to 7.5ms for lower data transmission time. And it takes around 30 sec for sending 60KB of data. 

Below is the power consumption results. 

BLE advertisement: 3.9 mA

BLE data transmission: 5.7 mA

Image Update to E-Ink Display via SPI : 11.7 mA 

As this is a battery operated device I need to minimize the power consumption. I am thinking below points

1. As Host needs to send data to slave only a few times in a day. I am thinking to advertise on a 10-20 sec period. And after sending 1-2 advertisement packet module goes into System OFF Mode to save power. So what changes do I need in ble_app_uart application to achieve this? I have tried ble_app_pwr_profiling but I am confused between 2 modes, Connectable modeNon-connectable mode. So which mode suits best for my application. Slave module just need to ask the host periodically that is there any image update request? If yes, start data transmission and if no go to sleep. So which mode suits for this?

2. And after receiving the image data over Bluetooth, It takes another 30 sec to update the image on e-ink display. So is there anyway so I completely turn off Bluetooth and only run MCU for SPI transmission?

Parents
  • Hi,

    First off, in System OFF mode your system’s core functionality is powered down and you can only wake up again using a couple of peripherals. I think what you need is System ON IDLE mode. Then you can have your RTC timer running and use that to wake up periodically, 

    Second, advertising in Non-connectable mode means that you transmit advertising packets, but you don't allow any centrals (such as your RPi) to connect. It sounds like you want your RPi to be able to connect so I don't think you want that either.

    Q1) What you refer to as slave module is often called peripheral in the BLE world. If it is the peripheral that decides when it wants data I suggest that you configure a timer that periodically starts the exchange of data. Between the exchanges you can put your System ON Idle mode. In this mode the system should only draw a couple of micro amps. 

    Q2) To disable BLE altogether you can use the function nrf_sdh_disable_request() (in SDK 14.2.0). 

Reply
  • Hi,

    First off, in System OFF mode your system’s core functionality is powered down and you can only wake up again using a couple of peripherals. I think what you need is System ON IDLE mode. Then you can have your RTC timer running and use that to wake up periodically, 

    Second, advertising in Non-connectable mode means that you transmit advertising packets, but you don't allow any centrals (such as your RPi) to connect. It sounds like you want your RPi to be able to connect so I don't think you want that either.

    Q1) What you refer to as slave module is often called peripheral in the BLE world. If it is the peripheral that decides when it wants data I suggest that you configure a timer that periodically starts the exchange of data. Between the exchanges you can put your System ON Idle mode. In this mode the system should only draw a couple of micro amps. 

    Q2) To disable BLE altogether you can use the function nrf_sdh_disable_request() (in SDK 14.2.0). 

Children
No Data
Related