You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32 Bluedroid栈中SCAN_REQ处理路径及SCAN_RSP响应位置问询

ESP32 Bluedroid BLE栈SCAN_REQ处理及SCAN_RSP发送路径

SCAN_REQ请求处理路径

当ESP32以BLE从机模式广播时,SCAN_REQ的处理流程如下:

  1. 蓝牙控制器收到SCAN_REQ包后,向Bluedroid栈上报GAP_LE_SCAN_REQ_EVT事件。
  2. 事件入口在components/bt/host/bluedroid/stack/gap/gap_le.c的gap_le_handle_event()函数,该函数会将事件分发给对应的处理逻辑。
  3. 核心处理函数为components/bt/host/bluedroid/stack/gap/gap_le_adv.c中的gap_le_process_scan_req(),这里会验证SCAN_REQ的合法性(如扫描者地址类型、广播状态等),并决定是否生成SCAN_RSP响应。

SCAN_RSP响应发送位置

SCAN_RSP的发送逻辑嵌入在SCAN_REQ的处理流程中:

  • 在gap_le_process_scan_req()函数内,会根据预配置的扫描响应数据(通过esp_ble_gap_set_scan_rsp_data()设置)组装SCAN_RSP包。
  • 随后调用components/bt/host/bluedroid/stack/hci/hci_le.c中的hci_le_send_scan_rsp()函数,该函数将组装好的SCAN_RSP数据封装为HCI命令,发送给蓝牙控制器,最终由控制器向扫描者发送SCAN_RSP包。

调试建议

针对部分芯片版本不返回SCAN_RSP的问题,可按以下步骤对比排查:

  • 在gap_le_handle_event()中添加日志,确认GAP_LE_SCAN_REQ_EVT事件是否被正常接收,排除控制器上报异常的可能。
  • 在gap_le_process_scan_req()中添加日志,检查是否通过了合法性校验,以及扫描响应数据是否正确加载。
  • 在hci_le_send_scan_rsp()中验证HCI命令是否成功发送,可查看返回的HCI命令状态码。
  • 对比正常与异常芯片版本的日志输出,定位到事件丢失、校验失败或命令发送失败的具体环节。

内容的提问来源于stack exchange,提问作者zapta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:00:49