ble HCI 数据格式


一、H4 串口设置

  • 数据位:8bit
  • 奇偶校验位:无
  • 停止位:1bit
  • 硬件流控:RTS/CTS

二、hci 数据类型

  • 0x01 - HCI CMD: 由蓝牙协议栈发送给芯片的命令
  • 0x02 - HCI ACL: 蓝牙协议栈跟蓝牙芯片双向交互的普通数据
  • 0x03 - HCI SCO: 蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
  • 0x04 - HCI EVENT: 由蓝牙芯片上报给蓝牙协议栈的事件
  • 0x05 - HCI ISO:(core5.2添加)蓝牙协议栈跟蓝牙芯片双向交互的 LE audio 等音频数据

1. cmd

在这里插入图片描述

a. OGF

  • 0x01: Link Control commands,控制蓝牙芯片跟remote沟通
  • 0x02: Link Policy commands,比如转换角色等
  • 0x03: Controller and Baseband commands,控制本地芯片跟基带,如 reset 本地芯片等
  • 0x04: Informational parameters,读取信息,比如读取本地芯片的LMP版本,支持的command, 蓝牙地址等
  • 0x05: Status parameters,状态参数,比如读取RSSI等
  • 0x06: Testing commands,测试命令,比如让芯片进入测试模式(DUT,device under test)
  • 0x08: LE Controller commands,BLE 的命令
  • 0xFF: Vendor-specific Debug commands,芯片厂商为了扩展core文档的HCI command定义

b. OCF

每个 OGF 下都有一堆的 OCF 定义

c. Parameter Total Length

后续参数的长度,不包括OGF,OCF和自己

d. Parameter

不同 command 对应的参数不同

在这里插入图片描述

2. acl

在这里插入图片描述

a. Handle

连接句柄,对应某一个对端设备,用于蓝牙连接后跟对端设备交互ACL数据,ACL为上层L2CAP层的应用数据

b. PB flag

上层数据(L2CAP),是否是分包数据:0b10 - 首包,0b01 - 后续包

c. BC flag

是否为广播:0b00 - 点对点,0b01 - BR/EDR 广播,BLE不使用此字段

d. Data total length

后续 Data 长度,不包括handle,PB flag, BC flag 和 自己

在这里插入图片描述

分包示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. sco

在这里插入图片描述

a. Handle

连接句柄,对应某一个对端设备,用于蓝牙连接后跟对端设备交互SCO音频数据

b. Packet_Status_Flag

c. Data_Total_Length

后续 Data 的长度

4. event

在这里插入图片描述

a. Event code

唯一的 event编码

b. Parameter Total Length

后续参数的长度,不包括Event Code和自己

Parameter

每个 Event 对应的参数不同

在这里插入图片描述

### 调试蓝牙低功耗(BLEHCI命令的方法 为了有效调试蓝牙低功耗(BLE)主机控制器接口(HCI)命令,可以采取多种工具和技术来确保通信正常并解决问题。以下是几种常用的方法和工具: #### 使用专用软件工具 许多制造商提供了专门用于调试HCI命令的软件工具。这些工具通常具有图形界面,能够显示详细的日志信息,并提供交互式的命令输入功能。 - **nRF Connect for Desktop**: Nordic Semiconductor 提供的一款强大工具,适用于 Windows 和 macOS 平台。通过此应用程序可以直接向设备发送自定义 HCI 命令,并查看响应结果[^1]。 - **HCITool (Linux)**: 对于 Linux 用户来说,`hcitool` 是一个非常有用的命令行工具集,可用于扫描附近 BLE 设备、建立连接以及执行各种 HCI 操作。虽然 `hcitool` 正逐渐被更现代的 BlueZ API 所取代,但在某些情况下仍然很有帮助[^2]。 ```bash sudo hcitool lescan ``` #### 利用开发板上的串口监视器 如果正在使用的硬件平台带有 UART 接口,则可以通过 USB 连接电脑并通过终端程序访问该端口。这样不仅可以监控来自 MCU 的打印消息,还能直接注入 HCI 数据包来进行测试。 - 设置合适的波特率并与目标模块正确配对之后,在串口中输入特定格式的数据帧即可触发相应的动作。例如,要读取远程设备的服务列表,可能需要构建如下所示的一个请求报文: ```c // 发送 GATT Discover All Primary Services 请求 uint8_t cmd[] = {0x01, 0x0C, 0x20}; // Opcode | Length | Parameter(s) uart_write(cmd, sizeof(cmd)); ``` #### 查阅官方文档与社区资源 大多数芯片供应商都会为其产品线准备详尽的技术手册,其中包含了有关如何配置和操作其产品的指导说明。此外,活跃在线论坛如 Stack Overflow 或 Reddit 上也有很多经验丰富的工程师愿意分享他们的见解和支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值