蓝牙协议栈跟蓝牙芯片都是使用统一的数据来交互的,由SIG规定(备注:部分芯片有HCI vendor命令),一般交互的有以下几种类型(注意:如果没有特别声明,所有的数据)

1) HCI command,由蓝牙协议栈给蓝牙芯片发送命令,来控制芯片行为,分几个OGF(Groups)在后面小节讲HCI command的时候会介绍。

2)HCI event,由蓝牙芯片上报事件给蓝牙协议栈的事件

3)HCI acl数据,蓝牙协议栈跟蓝牙芯片双向交互的L2CAP以及上层数据

4)HCI sco,蓝牙协议栈跟蓝牙芯片交互的SCO音频是数据

5)HCI iso,蓝牙协议栈跟蓝牙芯片交互的BLE audio的数据(Core 5.2才增加)

HCI提供了访问bluetooth host/control的统一接口,通俗来讲,就是定义了特定的格式由蓝牙协议栈来控制蓝牙芯片来做相应的动作(比如inquiry,connect,disconnect)。并且由蓝牙芯片回应蓝牙协议栈状态以及事件消息

我个人是把Wireshark分为以下几个部分

1)菜单栏位

2)工具栏位

3)视图栏位

4)选中包汇总栏位

5)选中包raw data栏位

Btsnoop用于记录蓝牙协议栈跟芯片交互的数据,一般用于在分析蓝牙问题的时候有很大的用途,能够快速定位问题所在,当然对于学习蓝牙协议栈也有很大的用途,我们后续的教程也是基于btsnoop来分析协议。

在android手机中也有开启btsnoop的功能,在开发者选项中勾中这个就开启了btsnoop功能。

蓝牙Transport就是蓝牙的硬件发送协议,硬件的传输介质有:UART/USB/SDIO,那么Transport就是在特定的硬件传输介质上增加了一些协议,比如我们本节将的H4就是在UART上增加了一个小协议,H4算是最简单的一个协议,只是在数据前面加一个Type,了解过蓝牙HCI的一般都会知道蓝牙协议栈(Host)跟芯片(Controller)一般是通过HCI数据来沟通,那么H4就是在HCI数据前面加上一个TYPE。一共有5中type,如下:

1)HCI COMMAND:由蓝牙协议栈发送给芯片的命令

2)HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件

3)HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据

4)HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据

5)HCI ISO(这部分是在core5.2才添加):用于发送LE audio