GATT专题
蓝牙在扫描,连接过程中,使用GATT技术吗
直接给你一个最清晰、最准确的结论:
结论
蓝牙在「扫描」和「建立连接」的过程中,完全不使用 GATT。
GATT 是连接建立成功之后才开始工作的上层协议。
详细分层说明(BLE 标准架构)
1. 扫描(Scanning)
- 工作在:物理层 → 链路层 → HCI
- 做什么:
- 监听广播包
- 获取设备地址、广播数据
- 判断是否可连接
- 是否用到 GATT?
→ 完全不用
GATT 还没开始工作。
2. 发起连接 / 建立连接
- 工作在:链路层 → HCI → L2CAP
- 做什么:
- 停止扫描
- 发送连接请求
- 建立物理链路
- 加密、配对(可选)
- 是否用到 GATT?
→ 仍然不用
3. 连接建立完成之后
才会进入:
ATT → GATT
这时候才开始:
- 发现服务(Service Discovery)
- 读特征值
- 写特征值
- 订阅通知
- 数据交互
这些才是 GATT 的工作。
用一句话总结流程
广播/扫描 → 建立连接 → 配对/加密 → 启动 GATT → 应用数据交互
- 扫描、连接阶段:底层链路行为,和 GATT 无关
- 连接成功后:GATT 才上场,负责业务数据交互
回到你刚才的代码
你那段 check_pending_conn 做的是:
- 扫描
- 查找待连接对象
- 停止扫描
- 发起连接
- 设置连接状态
全程都在链路层、HCI 层,没有一行代码和 GATT 有关。
如果你愿意,我可以给你画一张
BLE 从开机 → 扫描 → 连接 → GATT 发现服务
的完整流程图,非常清晰。
浙公网安备 33010602011771号