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
架构图从最底下开始大概说明,在后续章节也会逐一展开
HW层:这里就是蓝牙芯片层,包含以下几个部分
1)RF(RADIO):射频层,本地蓝牙数据通过射频发送给远端设备,并且通过射频接收来自远端蓝牙设备的数据
2)BB(BASEBAND):基带层,进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
3)LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作
4)HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI层在芯片以及协议栈都有,芯片层面的HCI负责把协议栈的数据做处理,转换为芯片内部动作,并且接收到远端的数据,通过HCI上报给协议栈。
5)BLE PHY:BLE的物理层
6)BLE LL:BLE的链路层
TRANSPORT层:此部分在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互,此部分会分为以下几个协议,在后续章节会对transport协议做详细的说明
1)H2:USB的transport
2)H4: UART的transport
H4是UART传输种最简的一个Transport,只是在HCI raw data的前面加一个type就行,如下HCI一共有五种HCI data:
* HCI COMMAND:由蓝牙协议栈发送给芯片的命令
* HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件
* HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据
* HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
* HCI ISO(这部分是在core5.2才添加):LE audio用的数据包格式