问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

蓝牙HCI协议详解

创作时间:
作者:
@小白创作中心

蓝牙HCI协议详解

引用
CSDN
1.
https://blog.csdn.net/hdmsfhfg1/article/details/144478346

1 蓝牙协议栈框图

以上框图中说明参见:# 吐血推荐历史最全的蓝牙协议栈介绍

2. Transport层的交互方式

  1. HCI(Host Contorl Interface)位于上述蓝牙协议框图中的TRANSPORT层:

  2. TRANSPORT层:此部分在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互,交互可选以下几个协议,

1)H2USB方式的transport

2)H4:UART方式的transport

3)H5:UART方式的transport

4)BCSP:UART方式的transport

5)SDIO Transport,一般很少用到SDIO, 但确实有

3. 重点–HCI-H4格式介绍

3.1 H4

H4是UART传输种最简单也是最常用的一个Transport(带流控)。

3.2 HCI数据格式

H4是UART传输种最简的一个Transport,只是在HCI raw data的前面加一个Packet type就行。

3.2.1 HCI Packet TYPE

如下HCI_H4 一共有五种HCI Packet TYPE:

Packet ID Packet type 说明 备注
0x01 HCI COMMAND 由蓝牙协议栈发送给芯片的命令
0x02 HCI EVENT 由蓝牙芯片上报给蓝牙协议栈的事件7
0x03 HCI ACL 蓝牙协议栈跟蓝牙芯片双向交互的普通数据
0x04 HCI SCO 蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
0x05 HCI ISO 这部分是在core5.2才添加):LE audio用的数据包格式

一般常用的是H4:Packet Type代码封装如下

  
//---hci\include\hci_hal.h
typedef enum {
  DATA_TYPE_UNKNOWN = 0,
  DATA_TYPE_COMMAND = 1,
  DATA_TYPE_ACL = 2,
  DATA_TYPE_SCO = 3,
  DATA_TYPE_EVENT = 4
} serial_data_type_t;
  

一般常用的是H4:收发代码封装如下

3.2.2 HCI raw date–Command packet

查看

Core_v5.3.pdf

文档可知:

3.2.3 实例–HCI_Reset

以HCI_Reset命令为例说明

HCI_Type=0x01

(HCI raw data=0x03 0x0c 0x00)

按3.1.2.2 HCI raw date–Command packet和

蓝牙的Core_v5.3.pdf

文档可知:

以下为抓包实例验证:

3.2.4 HCI命令如何查询

扩展:当然HCI命令还有很多, 可以在

蓝牙的Core_v5.3.pdf

中查看:

PS:

如有需要

蓝牙的Core_v5.3.pdf

文档的同学,可-关.注-我的同名_公-众.号“慢慢Coding”,回复

HCI

即可;

3.3 H4 uart硬件要求与连接

H4 uart硬件要求:

3.4 H4与H5的区别

主要差别在于:

  1. H4 带流控: 即需要BT CHIP

UART_TX/UART_RX/UART_CTS/UART_RTS/VCC/GND

接到MCU,

  1. 而H5,BCSP不带流控:只需要BT CHIP的

UART_TX/UART_RX/VCC/GND

接到MCU就可以通信。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号