低功耗蓝牙® 场景下低功耗模式介绍
本节介绍低功耗蓝牙 (Bluetooth LE) 在低功耗模式下的时钟源选择,以及常见相关问题。
低功耗模式下的时钟源选择
在低功耗蓝牙应用场景中,由于协议要求休眠时钟精度需在 500 PPM 以内,light-sleep 和 modem-sleep 模式下所用的时钟源必须满足该要求。如果时钟精度不足,可能会出现 ACL 连接失败或超时断开等问题。因此在使用前请确保所选时钟源及其精度满足要求。
选择主晶振
要选择主晶振作为低功耗蓝牙内部时钟源,请配置以下选项:
CONFIG_BTDM_CTRL_LOW_POWER_CLOCK = Main crystal (CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL)
选择主晶振后,light-sleep 模式下主晶振电源不会关闭,因此电流消耗更高。有关使用主晶振与 32 kHz 外部晶振在 light-sleep 模式下的典型电流消耗,请参考 Power Save README 。
选择 32 kHz 外部晶振
要使用 32 kHz 外部晶振作为低功耗蓝牙内部时钟源,请配置以下选项:
配置路径 1:
CONFIG_BTDM_CTRL_LOW_POWER_CLOCK = External 32 kHz crystal/oscillator (CONFIG_BTDM_CTRL_LPCLK_SEL_EXT_32K_XTAL)
配置路径 2:
CONFIG_RTC_CLK_SRC = External 32 kHz crystal (CONFIG_RTC_CLK_SRC_EXT_CRYS)
注意: 即使在 menuconfig 中选择了 32 kHz 外部晶振,如果低功耗蓝牙初始化时未检测到外部晶振,系统会自动切换为主晶振,可能导致 light-sleep 电流高于预期。
选择 136 kHz RC 振荡器
注意: ESP32 不支持 136 kHz RC 振荡器作为低功耗蓝牙时钟源。
如何确认当前低功耗蓝牙使用的时钟源
可通过低功耗蓝牙初始化时的日志判断当前时钟源:
日志内容 |
时钟源 |
|---|---|
Using main XTAL as clock source |
主晶振 (Main XTAL) |
Using 136 kHz RC as clock source |
内部 136 kHz RC 振荡器 (Internal 136 kHz RC oscillator) |
Using external 32.768 kHz crystal as clock source |
外部 32 kHz 晶振 (External 32 kHz crystal) |
Using external 32.768 kHz oscillator at 32K_XP pin as clock source |
外部 32 kHz 振荡器 (32K_XP 引脚) (External 32 kHz oscillator at 32K_XP pin) |
常见问题
1. 低功耗蓝牙 ACL 连接在低功耗模式下建立失败或断开
如时钟源选择部分所述,ACL 连接建立失败或断开时,请首先检查当前时钟源是否满足低功耗蓝牙精度要求。
2. 实测 light-sleep 电流高于预期
如时钟源选择部分所述,若主晶振为时钟源,light-sleep 模式下主晶振持续供电,电流消耗高于其他时钟源。平均电流可能会因具体应用而异,并取决于低功耗蓝牙的配置以及处于 light-sleep 模式的时间周期。某些应用的平均电流可能会更大,这是因为低功耗蓝牙在其中花费了更高比例的时间进行发射和接收。
3. 无法进入 light-sleep 模式
启用 Auto light-sleep 后,若设备无法进入 light-sleep,通常是 IDLE 时间不足,未满足自动进入条件。这可能由日志过多或低功耗蓝牙配置导致 IDLE 时间过短(如连续扫描)引起。