1. 蓝牙低功耗(BLE)主从设备交互时序解析
在物联网设备开发中,蓝牙低功耗(BLE)的主从设备(Central/Peripheral)首次交互时序就像两个陌生人在舞会上建立联系的过程。作为在蓝牙协议栈开发领域摸爬滚打多年的工程师,我见过太多因为时序理解不到位导致的连接失败案例。今天我们就来彻底拆解这个"第一支舞"的完整步骤。
典型的BLE连接建立包含三个关键阶段:广播阶段、扫描阶段和连接建立阶段。Peripheral设备会持续发送广播报文(Advertising Packet),就像举着写有个人信息的牌子;Central设备则处于扫描状态(Scanning),如同在人群中寻找合适的舞伴。当Central发现符合要求的Peripheral时,会发送连接请求(CONNECT_IND),这个瞬间就是时序确定的起点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 广播与扫描阶段的时序细节
2.1 Peripheral广播参数配置
广播间隔(Advertising Interval)是首个需要关注的时序参数。根据蓝牙核心规范v5.2,这个值必须在20ms到10.24s之间,且必须是0.625ms的整数倍。在实际项目中,我通常这样设置:
c复制// 典型的广播间隔设置(单位:0.625ms)
#define ADV_INTERVAL 160 // 100ms (160 * 0.625)
#define ADV_TIMEOUT 0 // 无限广播
广播类型(Advertising Type)同样影响时序:
- 可连接的非定向广播(ADV_IND)
- 可连接的定向广播(ADV_DIRECT_IND)
- 不可连接的非定向广播(ADV_NONCONN_IND)
- 可扫描的非定向广播(ADV_SCAN_IND)
重要提示:定向广播(ADV_DIRECT_IND)会显著缩短首次交互时间,但会大幅增加功耗,在电池供电设备中需谨慎使用。
2.2 Central扫描参数优化
Central设备的扫描窗口(scanWindow)和扫描间隔(scanInterval)决定了发现设备的概率和响应速度。这两个参数也必须满足0.625ms的整数倍要求:
c复制// 推荐的扫描参数设置
#define SCAN_WINDOW 48 // 30ms
#define SC
