蓝牙低能耗连接事件需要精确的时序,以确保器件间数据包可靠交换。蓝牙核心规范允许高达 ±500ppm + 16µs 的睡眠时钟精度 (SCA),该参数规定了低频时钟源在待机间隔内允许的最大漂移。
内部 LFOSC 是一个自由运行的振荡器,其频率随器件工作条件而变化。为了补偿 LFOSC 频率漂移,系统采用周期性硬件校准机制。系统以超低泄漏 (ULL) 时钟测量 LFOSC 周期,该时钟在工作模式期间用作精确基准。在相同模式下,ULL 时钟 (CLKULL) 在 24MHz 下运行,它由高频振荡器 (HFOSC) 产生,而 HFOSC 则由高频晶体振荡器 (HFXT) 产生。当器件进入待机模式时,CLKULL 会切换到使用已配置的低频时钟 (LFCLK)。
通过此次测量可得出换算系数 LFINC,实时时钟 (RTC) 应用该系数实现精准计时。该机制可验证,器件在整个使用寿命周期内,蓝牙低能耗 (LE) 连接事件的时序调度始终符合蓝牙核心规范所规定的睡眠时钟时序精度要求。
此校准机制要求高频晶体振荡器 (HFXT) 处于工作状态。在待机期间,HFXT 会关断以最大限度地降低电流消耗,LFINC 更新随之暂停,该时段内发生的所有 LFOSC 频率漂移无法得到补偿。当发生可重新激活 HFXT 的周期性唤醒事件或 BLE 活动时,LFINC 将重新开始校准。
未启用 LFCAL 时 LFOSC 的简化示例
步骤 1 — 工作模式
- HFXT (48MHz) 处于工作状态并用作 HFOSC 的精确基准,以便 CC27xx 器件输出 96MHz 跟踪型 HFOSC 信号,CC23xx 器件输出 48MHz 跟踪型 HFOSC 信号。
- CLKULL 由跟踪型 HFOSC 分频得到,频率为 24MHz。
- 硬件根据 CLKULL 测量所选的 LFCLK(在本例中为 LFOSC)周期。例如,当频偏约为 –300ppm 时,LFOSC 频率 = 32.758kHz。
- LFINC 更新为 30.527µs。每次 LFTICK 触发时,硬件都会将 LFINC 累加到 RTC TIME 计数器。
- 为了调度下一个连接事件,将比较 (COMPARE) 值设置为当前时间 (TIME) + 所需间隔 (1000ms)。当时间 (TIME) 达到比较 (COMPARE) 值时,RTC 会触发唤醒。
步骤 2 — 待机模式
- HFXT 被禁用,不再为 HFOSC 提供跟踪基准。
- CLKULL 切换为基于所选 LFCLK(本例为 LFOSC)运行;由于没有参考时钟来测量 LFOSC,LFINC 无法更新。
- RTC 与 WDT 保持工作,沿用上次测量得到的 LFINC。
- LFOSC 相对标称频率 (32.7844kHz) 漂移至 +500ppm,整体频率变化约 800ppm,由于 LFINC 数值已过时,该 LFOSC 漂移无法得到补偿。
- RTC 继续对 LFTICK 边沿进行计数,但每个节拍现在代表的实时时间略小于 LFINC 假设的时间。只要漂移未得到补偿,时序误差就会累积。漂移在待机期间发生得越早,唤醒时的误差就越大。在最坏工况下,漂移在禁用 HFXT 后立即发生,在整个待机持续时间内累积。
步骤 3 — RX 窗口时序
- RTC 计数 32,758 个 LFTICK 边沿,预计经过 1000.00ms。实际运行时间:32,758 个周期× 30.5023µs = 999.194ms
- 外设的预估 RX 窗口提早 806µs 开启
- 为简化计算,忽略主机 SCA(通常约为 50ppm),因此主机在 T = 1000.00ms 时发送连接数据包。
- 外设 SCA 为 500ppm,叠加蓝牙规范中规定的 16µs 瞬时抖动容限,RX 窗口在估算的锚点前后各延伸 516µs:
实际数据包在预估锚点后 806µs 到达,此时窗口已关闭 290µs。连接数据包丢失。