ble: support esp32c6 power save example

This commit is contained in:
cjin
2023-06-25 15:01:23 +08:00
committed by BOT
parent 0cf0757224
commit 1dbbd97749
5 changed files with 77 additions and 15 deletions

View File

@ -688,7 +688,6 @@ void ble_controller_scan_duplicate_config(void)
esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
{ {
uint8_t mac[6]; uint8_t mac[6];
uint32_t chip_version;
esp_err_t ret = ESP_OK; esp_err_t ret = ESP_OK;
ble_npl_count_info_t npl_info; ble_npl_count_info_t npl_info;
@ -753,7 +752,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
/* Select slow clock source for BT momdule */ /* Select slow clock source for BT momdule */
#if CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL #if CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL
ESP_LOGI(NIMBLE_PORT_LOG_TAG, "Using main XTAL as clock source"); ESP_LOGI(NIMBLE_PORT_LOG_TAG, "Using main XTAL as clock source");
chip_version = efuse_hal_chip_revision(); uint32_t chip_version = efuse_hal_chip_revision();
if (chip_version == 0) { if (chip_version == 0) {
modem_clock_select_lp_clock_source(PERIPH_BT_MODULE, MODEM_CLOCK_LPCLK_SRC_MAIN_XTAL, (400 - 1)); modem_clock_select_lp_clock_source(PERIPH_BT_MODULE, MODEM_CLOCK_LPCLK_SRC_MAIN_XTAL, (400 - 1));
} else{ } else{

View File

@ -264,6 +264,6 @@ examples/bluetooth/nimble/hci:
examples/bluetooth/nimble/power_save: examples/bluetooth/nimble/power_save:
enable: enable:
- if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3", "esp32h2"] - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3", "esp32c6", "esp32h2"]
temporary: true temporary: true
reason: the other targets are not tested yet reason: the other targets are not tested yet

View File

@ -1,5 +1,5 @@
| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | Supported Targets | ESP32 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | | ----------------- | ----- | -------- | -------- | -------- | -------- |
Bluetooth Power Save Example Bluetooth Power Save Example
================================= =================================
@ -10,18 +10,21 @@ If the modem sleep mode is enabled, bluetooth will switch periodically between a
In sleep state, RF, PHY and BB are turned off in order to reduce power consumption. In sleep state, RF, PHY and BB are turned off in order to reduce power consumption.
This example contains five build configurations. For each configuration, a few configuration options are set: This example contains five build configurations. For each configuration, a few configuration options are set:
- `sdkconfig.defaults.esp32`: ESP32 uses 32kHz XTAL as low power clock in light sleep enabled. - `sdkconfig.defaults.esp32`: ESP32 uses 32kHz XTAL as low power clock in light sleep enabled.
- `sdkconfig.40m.esp32c3`: ESP32C3 uses 32kHz XTAL as low power clock in light sleep enabled. - `sdkconfig.defaults.esp32c3`: ESP32C3 uses 32kHz XTAL as low power clock in light sleep enabled.
- `sdkconfig.esp32c3_40m`: ESP32C3 uses main XTAL as low power clock in light sleep enabled. - `sdkconfig.40m.esp32c3`: ESP32C3 uses main XTAL as low power clock in light sleep enabled.
- `sdkconfig.defaults.esp32c6`: ESP32C6 uses 32kHz XTAL as low power clock in light sleep enabled.
- `sdkconfig.40m.esp32c6`: ESP32C6 uses main XTAL as low power clock in light sleep enabled.
- `sdkconfig.defaults.esp32s3`: ESP32S3 uses 32kHz XTAL as low power clock in light sleep enabled. - `sdkconfig.defaults.esp32s3`: ESP32S3 uses 32kHz XTAL as low power clock in light sleep enabled.
- `sdkconfig.40m.esp32s3`: ESP32S3 uses main XTAL as low power clock in light sleep enabled. - `sdkconfig.40m.esp32s3`: ESP32S3 uses main XTAL as low power clock in light sleep enabled.
- `sdkconfig.defaults.esp32h2`: ESP32H2 uses 32kHz XTAL as low power clock in light sleep enabled. - `sdkconfig.defaults.esp32h2`: ESP32H2 uses 32kHz XTAL as low power clock in light sleep enabled.
- `sdkconfig.40m.esp32h2`: ESP32H2 uses main XTAL as low power clock in light sleep enabled. - `sdkconfig.32m.esp32h2`: ESP32H2 uses main XTAL as low power clock in light sleep enabled.
## How to use example ## How to use example
### Hardware Required ### Hardware Required
This example should be able to run on any commonly available ESP32/ESP32-C3/ESP32-S3/ESP32-H2 development board. This example should be able to run on any commonly available ESP32/ESP32-C3/ESP32-S3/ESP32-C6/ESP32-H2 development board.
### Configure the project ### Configure the project
@ -38,7 +41,7 @@ idf.py menuconfig
- `(1000) configTICK_RATE_HZ` - `(1000) configTICK_RATE_HZ`
- `[*] configUSE_TICKLESS_IDLE` - `[*] configUSE_TICKLESS_IDLE`
- `(3) configEXPECTED_IDLE_TIME_BEFORE_SLEEP` - `(3) configEXPECTED_IDLE_TIME_BEFORE_SLEEP`
#### For Chip ESP32/ESP32-C3/ESP32-S3: #### For Chip ESP32/ESP32-C3/ESP32-S3
4. Enable power down MAC and baseband: 4. Enable power down MAC and baseband:
- `Component config > PHY > [*] Power down MAC and baseband of Wi-Fi and Bluetooth when PHY is disabled` - `Component config > PHY > [*] Power down MAC and baseband of Wi-Fi and Bluetooth when PHY is disabled`
@ -51,19 +54,19 @@ idf.py menuconfig
7. Enable power up main XTAL during light sleep: 7. Enable power up main XTAL during light sleep:
- `Component config > Bluetooth > Controller Options > MODEM SLEEP Options > [*] power up main XTAL during light sleep` - `Component config > Bluetooth > Controller Options > MODEM SLEEP Options > [*] power up main XTAL during light sleep`
#### For Chip ESP32-H2 #### For Chip ESP32-C6/ESP32-H2
4. Enable bluetooth modem sleep: 4. Enable bluetooth modem sleep:
- `Component config > Bluetooth > Controller Options` - `Component config > Bluetooth > Controller Options`
- `[*] Enable BLE sleep` - `[*] Enable BLE sleep`
5. Configure bluetooth low power clock: 5. Configure bluetooth low power clock:
- `Component config Bluetooth Controller Options BLE low power clock source` - `Component config > Bluetooth > Controller Options > BLE low power clock source`
- Use main XTAL as low power clock source during light sleep: - Use main XTAL as low power clock source during light sleep:
- `(X) Use main XTAL as RTC clock source` - `(X) Use main XTAL as RTC clock source`
- Use RTC clock source as low power clock sourceduring light sleep: - Use RTC clock source as low power clock sourceduring light sleep:
- `(X) Use system RTC slow clock source` - `(X) Use system RTC slow clock source`
6. Power down flash during light sleep: 6. Power down flash during light sleep:
* `Component config Hardware Settings Sleep Config` * `Component config > Hardware Settings > Sleep Config`
* `[*] Power down flash in light sleep when there is no SPIRAM` * `[*] Power down flash in light sleep when there is no SPIRAM`
### Build and Flash ### Build and Flash
@ -125,8 +128,9 @@ I (463) NimBLE:
| ESP32 | 231 mA | 14.1 mA | X | 1.9 mA | | ESP32 | 231 mA | 14.1 mA | X | 1.9 mA |
| ESP32C3 | 262 mA | 12 mA | 2.3 mA | 140 uA | | ESP32C3 | 262 mA | 12 mA | 2.3 mA | 140 uA |
| ESP32S3 | 240 mA | 17.9 mA | 3.3 mA | 230 uA | | ESP32S3 | 240 mA | 17.9 mA | 3.3 mA | 230 uA |
| ESP32H2 | 82 mA | 16.0 mA | 4.0 mA | 24 uA | | ESP32H2 | 82 mA | 16.0 mA | 4.0 mA | 24 uA |
X: This feature is currently not supported. | ESP32C6 | 240 mA | 22 mA | 3.3 mA | 34 uA |
X: This feature is currently not supported.
## Example Breakdown ## Example Breakdown

View File

@ -0,0 +1,25 @@
CONFIG_IDF_TARGET="esp32c6"
# Bluetooth Low Power Config
CONFIG_BT_LE_SLEEP_ENABLE=y
# CONFIG_BT_LE_WAKEUP_SOURCE_CPU_RTC_TIMER is not set
CONFIG_BT_LE_WAKEUP_SOURCE_BLE_RTC_TIMER=y
CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y
# CONFIG_BT_LE_LP_CLK_SRC_DEFAULT is not set
#
# Power Management
#
CONFIG_PM_ENABLE=y
CONFIG_PM_DFS_INIT_AUTO=y
CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
# CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP is not set
# end of Power Management
CONFIG_FREERTOS_USE_TICKLESS_IDLE=y
#
# Sleep Config
#
CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y
# end of Sleep Config

View File

@ -0,0 +1,34 @@
CONFIG_IDF_TARGET="esp32c6"
# Bluetooth Low Power Config
CONFIG_BT_LE_SLEEP_ENABLE=y
# CONFIG_BT_LE_WAKEUP_SOURCE_CPU_RTC_TIMER is not set
CONFIG_BT_LE_WAKEUP_SOURCE_BLE_RTC_TIMER=y
# CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL is not set
CONFIG_BT_LE_LP_CLK_SRC_DEFAULT=y
#
# Power Management
#
CONFIG_PM_ENABLE=y
CONFIG_PM_DFS_INIT_AUTO=y
CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y
# end of Power Management
CONFIG_FREERTOS_USE_TICKLESS_IDLE=y
#
# Sleep Config
#
CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y
# end of Sleep Config
#
# RTC Clock Config
#
# CONFIG_RTC_CLK_SRC_INT_RC is not set
CONFIG_RTC_CLK_SRC_EXT_CRYS=y
# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
# CONFIG_RTC_CLK_SRC_INT_RC32K is not set
# end of RTC Clock Config