diff --git a/components/bt/controller/esp32c6/bt.c b/components/bt/controller/esp32c6/bt.c index 3881045da1..4923857579 100644 --- a/components/bt/controller/esp32c6/bt.c +++ b/components/bt/controller/esp32c6/bt.c @@ -688,7 +688,6 @@ void ble_controller_scan_duplicate_config(void) esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) { uint8_t mac[6]; - uint32_t chip_version; esp_err_t ret = ESP_OK; 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 */ #if CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL 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) { modem_clock_select_lp_clock_source(PERIPH_BT_MODULE, MODEM_CLOCK_LPCLK_SRC_MAIN_XTAL, (400 - 1)); } else{ diff --git a/examples/bluetooth/.build-test-rules.yml b/examples/bluetooth/.build-test-rules.yml index 2ef0908f8e..d36a611378 100644 --- a/examples/bluetooth/.build-test-rules.yml +++ b/examples/bluetooth/.build-test-rules.yml @@ -264,6 +264,6 @@ examples/bluetooth/nimble/hci: examples/bluetooth/nimble/power_save: enable: - - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3", "esp32h2"] + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3", "esp32c6", "esp32h2"] temporary: true reason: the other targets are not tested yet diff --git a/examples/bluetooth/nimble/power_save/README.md b/examples/bluetooth/nimble/power_save/README.md index db9c0bccbe..5772ddb832 100644 --- a/examples/bluetooth/nimble/power_save/README.md +++ b/examples/bluetooth/nimble/power_save/README.md @@ -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 ================================= @@ -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. 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.40m.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.defaults.esp32c3`: ESP32C3 uses 32kHz 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.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.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 ### 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 @@ -38,7 +41,7 @@ idf.py menuconfig - `(1000) configTICK_RATE_HZ` - `[*] configUSE_TICKLESS_IDLE` - `(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: - `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: - `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: - `Component config > Bluetooth > Controller Options` - `[*] Enable BLE sleep` 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: - `(X) Use main XTAL as RTC clock source` - Use RTC clock source as low power clock sourceduring light sleep: - `(X) Use system RTC slow clock source` 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` ### Build and Flash @@ -125,8 +128,9 @@ I (463) NimBLE: | ESP32 | 231 mA | 14.1 mA | X | 1.9 mA | | ESP32C3 | 262 mA | 12 mA | 2.3 mA | 140 uA | | ESP32S3 | 240 mA | 17.9 mA | 3.3 mA | 230 uA | -| ESP32H2 | 82 mA | 16.0 mA | 4.0 mA | 24 uA | -X: This feature is currently not supported. +| ESP32H2 | 82 mA | 16.0 mA | 4.0 mA | 24 uA | +| ESP32C6 | 240 mA | 22 mA | 3.3 mA | 34 uA | +X: This feature is currently not supported. ## Example Breakdown diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32c6 b/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32c6 new file mode 100644 index 0000000000..cdf58be981 --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.40m.esp32c6 @@ -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 diff --git a/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32c6 b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32c6 new file mode 100644 index 0000000000..558871847a --- /dev/null +++ b/examples/bluetooth/nimble/power_save/sdkconfig.defaults.esp32c6 @@ -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