docs(ble): Optimized the BLE low power guide

This commit is contained in:
Wei Yu Han
2025-10-30 16:04:30 +08:00
committed by Wei Yuhan
parent bf173da75a
commit 85769c6450
4 changed files with 63 additions and 146 deletions
@@ -10,70 +10,49 @@
在低功耗蓝牙应用场景中,由于协议要求休眠时钟精度需在 500 PPM 以内,light-sleep 和 modem-sleep 模式下所用的时钟源必须满足该要求。如果时钟精度不足,可能会出现 ACL 连接失败或超时断开等问题。**因此在使用前请确保所选时钟源及其精度满足要求。**
选择主晶振
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要选择主晶振作为低功耗蓝牙内部时钟源,请配置以下选项:
.. only:: esp32 or esp32c3 or esp32s3
.. only:: esp32
**配置路径:**
:ref:`CONFIG_BTDM_CTRL_LOW_POWER_CLOCK` = Main crystal (`CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL`)
``Component config → Bluetooth → Controller Options → MODEM SLEEP Options → Bluetooth modem sleep → Bluetooth Modem sleep Mode 1 → Bluetooth low power clock``
.. only:: esp32c3 or esp32s3
**配置选项:**
- \ (X) Main crystal
:ref:`CONFIG_BT_CTRL_LOW_POWER_CLOCK` = Main crystal (`CONFIG_BT_CTRL_LPCLK_SEL_MAIN_XTAL`)
.. only:: esp32c2 or esp32c6 or esp32h2 or esp32c5 or esp32c61
**配置路径:**
:ref:`CONFIG_BT_LE_LP_CLK_SRC` = Use main XTAL as RTC clock source (`CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL`)
``Component config → Bluetooth → Controller Options → BLE low power clock source``
选择主晶振后,light-sleep 模式下主晶振电源不会关闭,因此电流消耗更高。有关使用主晶振与 32 kHz 外部晶振在 light-sleep 模式下的典型电流消耗,请参考 :example_file:`Power Save README <bluetooth/nimble/power_save/README.md>` 。
**配置选项:**
- \ (X) Use main XTAL as RTC clock source
选择主晶振后,light-sleep 模式下主晶振电源不会关闭,因此电流消耗更高。
有关使用主晶振与 32kHz 外部晶振在 light-sleep 模式下的典型电流消耗,请参考 :example_file:`Power Save README <bluetooth/nimble/power_save/README.md>` 。
选择 32kHz 外部晶振
选择 32 kHz 外部晶振
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
要使用 32kHz 外部晶振作为低功耗蓝牙内部时钟源,请配置以下选项:
要使用 32 kHz 外部晶振作为低功耗蓝牙内部时钟源,请配置以下选项:
.. only:: esp32 or esp32c3 or esp32s3
**配置路径 1:**
**配置路径 1:**
.. only:: esp32
``Component config → Bluetooth → Controller Options → MODEM SLEEP Options → Bluetooth modem sleep → Bluetooth Modem sleep Mode 1 → Bluetooth low power clock``
:ref:`CONFIG_BTDM_CTRL_LOW_POWER_CLOCK` = External 32 kHz crystal/oscillator (`CONFIG_BTDM_CTRL_LPCLK_SEL_EXT_32K_XTAL`)
**配置选项:**
.. only:: esp32c3 or esp32s3
- \ (X) External 32kHz crystal/oscillator
:ref:`CONFIG_BT_CTRL_LOW_POWER_CLOCK` = External 32 kHz crystal/oscillator (`CONFIG_BT_CTRL_LPCLK_SEL_EXT_32K_XTAL`)
.. only:: esp32c2 or esp32c6 or esp32h2 or esp32c5 or esp32c61
**配置路径 1:**
``Component config → Bluetooth → Controller Options → BLE low power clock source``
**配置选项:**
- \ (X) Use system RTC slow clock source
:ref:`CONFIG_BT_LE_LP_CLK_SRC` = Use system RTC slow clock source (`CONFIG_BT_LE_LP_CLK_SRC_DEFAULT`)
**配置路径 2:**
``Component config → Hardware Settings → RTC Clock Config → RTC clock source``
**配置选项:**
- \ (X) External 32 kHz crystal
**注意:** 即使在 menuconfig 中选择了 32kHz 外部晶振,如果低功耗蓝牙初始化时未检测到外部晶振,系统会自动切换为主晶振,可能导致 light-sleep 电流高于预期。
:ref:`CONFIG_RTC_CLK_SRC` = External 32 kHz crystal (`CONFIG_RTC_CLK_SRC_EXT_CRYS`)
**注意:** 即使在 menuconfig 中选择了 32 kHz 外部晶振,如果低功耗蓝牙初始化时未检测到外部晶振,系统会自动切换为主晶振,可能导致 light-sleep 电流高于预期。
选择 136 kHz RC 振荡器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -84,11 +63,7 @@
**配置路径 1:**
``Component config → Bluetooth → Controller Options → MODEM SLEEP Options → Bluetooth modem sleep → Bluetooth Modem sleep Mode 1 → Bluetooth low power clock``
**配置选项:**
- \ (X) Internal 136kHz RC oscillator
:ref:`CONFIG_BT_CTRL_LOW_POWER_CLOCK` = Internal 136kHz RC oscillator (`CONFIG_BT_CTRL_LPCLK_SEL_RTC_SLOW`)
一般来说,136 kHz RC 振荡器难以满足低功耗蓝牙的精度要求,仅适用于对时钟精度要求不高的场景,如传统广播 (ADV) 或扫描 (SCAN)。它不支持以中心角色或外设角色建立连接。
@@ -102,25 +77,17 @@
**配置路径 1:**
``Component config → Bluetooth → Controller Options → BLE low power clock source``
**配置选项:**
- \ (X) Use system RTC slow clock source
:ref:`CONFIG_BT_LE_LP_CLK_SRC` = Use system RTC slow clock source (`CONFIG_BT_LE_LP_CLK_SRC_DEFAULT`)
.. only:: not esp32
**配置路径 2:**
``Component config → Hardware Settings → RTC Clock Config → RTC clock source``
**配置选项:**
- \ (X) Internal 136 kHz RC oscillator
:ref:`CONFIG_RTC_CLK_SRC` = Internal 136 kHz RC oscillator (`CONFIG_RTC_CLK_SRC_INT_RC`)
.. only:: esp32c2 or esp32c6 or esp32h2 or esp32c5 or esp32c61
对于需要低功耗且没有 32kHz 外部晶振的场景下,可以选择 136 kHz R C振荡器。然而这个时钟无法满足低功耗蓝牙的 500PPM 的休眠时钟精度需求。不过如果对端设备使用的是 ESP 芯片,仍能支持低功耗蓝牙行为。但是如果对端设备并非使用 ESP 芯片,则使用下面低功耗蓝牙行为将无法支持:
对于需要低功耗且没有 32 kHz 外部晶振的场景,可以选择 136 kHz RC 振荡器。然而,该时钟无法满足低功耗蓝牙的 500 PPM 的休眠时钟精度需求。如果对端设备使用 ESP 芯片,低功耗蓝牙功能仍可正常工作;但如果对端设备不是 ESP 芯片,则以下低功耗蓝牙行为将无法支持:
1. 作为连接的 Central 方
2. 作为 Periodic Advertising 的广播方
@@ -129,17 +96,13 @@
**配置路径:**
``Component config → Bluetooth → Controller Options``
**配置选项:**
- \ [*] Enable to set constant peer SCA
- \ (3000) Constant peer sleep clock accuracy value
- :ref:`CONFIG_BT_LE_LL_PEER_SCA_SET_ENABLE` = y
- :ref:`CONFIG_BT_LE_LL_PEER_SCA` = 3000
**注意:** 使用 136 kHz RC 振荡器可能偶发连接断开或连接失败。
**如何确认当前低功耗蓝牙使用的时钟源**
如何确认当前低功耗蓝牙使用的时钟源
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
可通过低功耗蓝牙初始化时的日志判断当前时钟源:
@@ -163,22 +126,18 @@
常见问题
--------------------------------------
**1. 低功耗蓝牙 ACL 连接在低功耗模式下建立失败或断开**
1. 低功耗蓝牙 ACL 连接在低功耗模式下建立失败或断开
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如时钟源选择部分所述,ACL 连接建立失败或断开时,请首先检查当前时钟源是否满足低功耗蓝牙精度要求。
**2. 实测 light-sleep 电流高于预期**
2. 实测 light-sleep 电流高于预期
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如时钟源选择部分所述,若主晶振为时钟源,light-sleep 模式下主晶振持续供电,电流消耗高于其他时钟源。
如时钟源选择部分所述,若主晶振为时钟源,light-sleep 模式下主晶振持续供电,电流消耗高于其他时钟源。平均电流可能会因具体应用而异,并取决于低功耗蓝牙的配置以及处于 light-sleep 模式的时间周期。某些应用的平均电流可能会更大,这是因为低功耗蓝牙在其中花费了更高比例的时间进行发射和接收。
平均电流可能会因具体应用而异,并取决于低功耗蓝牙的配置以及处于 light-sleep 模式的时间周期。某些应用的平均电流可能会更大,这是因为低功耗蓝牙在其中花费了更高比例的时间进行发射和接收。
**3. 无法进入 light-sleep 模式**
3. 无法进入 light-sleep 模式
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
启用 Auto light-sleep 后,若设备无法进入 light-sleep,通常是 IDLE 时间不足,未满足自动进入条件。
这可能由日志过多或低功耗蓝牙配置导致 IDLE 时间过短(如连续扫描)引起。
启用 Auto light-sleep 后,若设备无法进入 light-sleep,通常是 IDLE 时间不足,未满足自动进入条件。这可能由日志过多或低功耗蓝牙配置导致 IDLE 时间过短(如连续扫描)引起。