第1章:BLE连接参数概述

大家好,我是老李,做嵌入式这些年,和BLE打交道的项目少说也有二十几个了。这一章咱们聊聊连接参数——听起来基础,但很多泄漏问题、功耗异常、甚至断连,根源都在这几个数字上。

1.1 什么是连接参数

说白了,连接参数就是BLE连接双方(Central和Peripheral)之间怎么“约好”通信节奏的一组配置。你想想看,两个人打电话,不能说一句话就挂断,也不能一直占着线不走。BLE的连接参数就是用来定义这个“通话节奏”的。

主要的连接参数有这几个:

参数说明单位典型范围
连接间隔(Connection Interval)两次连接事件之间的时间,决定了主从设备多久交互一次数据1.25ms的倍数7.5ms ~ 4s
从设备延迟(Slave Latency)从设备可以跳过多少个连接事件而不发送数据,用于省电整数(个)0 ~ 499
监督超时(Supervision Timeout)如果超过这个时间还没收到任何数据,连接就被视为断开10ms的倍数100ms ~ 32s
有效连接间隔实际发生数据交互的间隔 = 连接间隔 × (从设备延迟 + 1)ms由前两者计算得出

我个人的习惯是:先把监督超时设在连接有效间隔的2~3倍,避免因为个别事件丢失就断连。但也不能太大,不然设备掉线后用户要等很久才能发现。

1.2 为什么这些参数这么重要

我曾经在做一个智能穿戴设备时,发现设备每隔几小时就频繁掉线,用户投诉不断。查了两天,最后发现是连接间隔设了7.5ms(最小值),而另一端芯片处理不过来,数据还没准备好就被强制重传,导致链路层不断发送空包,最终触发监督超时断连。你看,连接参数没调好,后果很严重。

连接参数直接影响三个方面:

  1. 功耗:连接间隔越短,双方唤醒越频繁,耗电越快。从设备延迟越大,设备可以睡得更久。
  2. 数据吞吐量:间隔短,传输机会多,吞吐量高;但每包载荷有限,还要配合MTU和PDU。
  3. 连接稳定性:参数设置不当(比如间隔太短、延迟太大、超时太小)会直接导致频繁连接事件丢失,进而断连。

重点来了:所谓“BLE泄漏”,指的是连接不稳定导致的频繁断连、重连和数据传输失败。这些问题中,超过六成和连接参数设置不当有关——这不是我瞎说的,是我在几个项目里统计的。

1.3 连接参数与BLE协议栈的关系

BLE协议栈的核心是链路层(Link Layer),它负责维护连接状态机。连接参数就是让链路层知道:什么时候该发数据,什么时候可以睡,什么时候算断线。我画了一张图,帮大家理清这些关系。

BLE连接参数与连接状态关系 应用层 BLE协议栈(链路层) 射频物理层 用户需求 功耗 & 吞吐量目标 连接参数请求 连接间隔 从设备延迟 监督超时 连接事件时序 (调度 & 重传) 无线收发 信号质量 丢包 / 重传 关键结论:连接参数是应用需求与物理层传输之间的“调度契约” 应用层提出需求 → 协议栈调度 → 射频物理层执行;任何一层不匹配都会导致泄漏

1.4 连接参数怎么导致泄漏?

这里说的“泄漏”,不是射频信号的物理泄漏,而是 连接状态的异常泄漏——比如设备在重连过程中反复发送空包、链路层资源无法释放、应用层收不到数据导致超时等。我总结了几个常见雷区:

  • 连接间隔过短:比如设成7.5ms,但主芯片处理能力跟不上,链路层不断重传空包,最终超时断连。
  • 从设备延迟过大:延迟设到300,设备可以睡很久不响应,一旦错失一个连接事件,累积下来容易超时。
  • 监督超时太严苛:典型比值——有效连接间隔 × 3 是下限,设小了容易误判断连。
  • 参数协商失败:Central和Peripheral对参数要求不同,一旦拒绝请求,连接会断开或者退回到默认参数。

我曾经遇到一个坑:有一款设备在低功耗模式下,从设备延迟设了最大值(499),连接间隔36ms,结果有效连接间隔变成了18秒。监督超时设了20秒——就差2秒的余量。一次重传稍微慢了点,就断连了。后来我把监督超时改到30秒,问题解决。记住,留够余量!

1.5 本章小结(知识点快照)

这一章咱们把连接参数的概念和重要性理清楚了。我把它列成一张速查表,方便你记忆:

概念一句话总结
连接间隔通信的“节拍器”,决定基础频率
从设备延迟允许从设备“偷懒”跳过几次节拍来省电
监督超时如果一直没听到节拍,就判定断连
连接参数的重要性直接影响功耗、吞吐量、连接稳定性
泄漏的本质参数设置与实际处理能力不匹配,导致链路层异常

嗯,这些东西都是基础,但基础不牢,后面排查泄漏的时候就会很痛苦。下一章我们会深入 连接参数的具体计算方法与常见误区,到时候我会拿真实的项目案例来拆解。

一个小贴士:如果你在调试中看到空包(Empty PDU)特别多,或者设备莫名掉线,先别急着怀疑射频,先把连接参数调出来看看。80%的情况下,问题就在那里。