蓝牙协议栈概览
HW层:蓝牙芯片层
RF(RADIO):射频层,本地蓝牙数据通过射频信号发送给空中设备,并通过射频接收来自空中的蓝牙信号和数据
BB(BASEBAND):基带层,射频信号和数字(音频)信号转换,实现基带协议和其他底层连接规程
LMP(LINK MANAGER PROTOCOL):链路管理层,负责管理蓝牙设备之间的通信,实现链路建立、验证、链路配置等操作
HCI(HOST CONTROLLER INTERFACE):主机控制器接口层,HCI层在芯片以及协议栈都有,芯片层HCI负责将协议栈数据处理,转换为芯片内部动作,并受到远端数据,通过HCI上报给协议栈;
BLE PHY:BLE物理层
BLE LL:BLE链路层
TRANSPORT层:在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互
H2: USB的transport
H4:UART的transport(是UART传输种最简的一个Transport,只是在HCI raw data的前面加一个type就行,如下HCI一共有五种HCI data)
* HCI COMMAND:由蓝牙协议栈发送给芯片的命令
* HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件
* HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据
* HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
* HCI ISO(这部分是在core5.2才添加):LE audio用的数据包格式
BT Controller:指蓝牙芯片,包括BR/EDR芯片(蓝牙2.1),AMP芯片(蓝牙3.0),LE芯片(蓝牙4.0)
BT Host:指蓝牙协议栈
图中内容简介:
HW层:蓝牙芯片
RF:射频
BB:基带
LMP:链路管理
HCI:主控制器接口
AUDIO:音频
BLE PHY:低功耗蓝牙物理层
BLE LL:低功耗蓝牙链路层TRANSPORT层:在硬件接口(UART/USB/SDIO)实现HOST跟CONTROLLER的交互
H2:USB的transport
H4:UART的transport(是UART传输种最简的一个Transport,只是在HCI raw data的前面加一个type就行,如下HCI一共有五种HCI data)
* HCI COMMAND:由蓝牙协议栈发送给芯片的命令
* HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件
* HCI ACL:蓝牙协议栈跟蓝牙芯片双向交互的普通数据
* HCI SCO:蓝牙芯片跟蓝牙协议栈双向交互的通话/语音识别等音频数据
* HCI ISO(这部分是在core5.2才添加):LE audio用的数据包格式
交互数据格式:
|- 1 byte - | ---- N byte HCI raw data ----|
|- H4 byte - | ---- HCI RAW DATA ----------|
其中H4 type定义如下:
| HCI packet type | HCI packet indicator |
| HCI ACLpacket | 0x01 |
| HCI Event packet | 0x02 |
| HCI ISO Data packet | 0x03 |
H5:UART的transport
BCSP:UART的transport
SDIO Transport:
注意:其中2,3,4的主要差别在于H4需要BT CHIP UART_TX/UART_RX/UART_CTS/UART_RTS/VCC/GND接到MCU,而H5,BCSP只需要BT CHIP的UART_TX/UART_RX/VCC/GND接到MCU就可以通信
HOST层:
HOST层:蓝牙协议栈HCI(HOST CONTROLLER INTERFACE):主机控制层接口,主要负责透过transport把协议栈的数据发送给蓝牙芯片,并且接受来自蓝牙芯片的数据,数据主要分为HCI COMMAND(HOST->CONTROLLER),HCI EVENT(HOST-CONTROLLER),HCI ACL(HOSTCONTROLLER),HCI SCO(这个有点些微差异,因为部分芯片的SCO数据不是透过TRANSPORT直接跟HOST沟通,而是通过特殊的引脚,PCM IN/OUT/SYNC/CLK脚来传输数据),core文档HCI的架构如上;
L2CAP(Logical Link Control and Adaptation Protocol):逻辑链路控制与适配协议,将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务,L2CAP还屏蔽了低层传输协议中的很多特性,使得高层协议应用开发人员可以不必了解基层协议而进行开发。架构如下:
SDP(SERVICE DISCOVERY PROTOCOL):服务发现协议,服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用服务的特征
PDU Format:
Header: | PDU ID | Transaction ID | ParameterLength |
1 byte 2 bytes 2 bytes
Parameters: | Parameter 1 | Parameter 2 | --- | Parameter N |
Parameter Length bytes
PDU ID:
| Value | Parameter Description |
| 0x01 | SDP_ERROR_RSP |
| 0x02 | SDP_SERVICE_SEARCH_REP |
| 0x03 | SDP_SERVICE_SEARCH_RSP |
| 0x04 | SDP_SERVICE_ATTR_REP |
| 0x05 | SDP_SERVICE_ATTR_RSP |
| 0x06 | SDP_SERVICE_ATTR_SEARCH_REP |
| 0x07 | SDP_SERVICE_ATTR_SEARCH_RSP |
| 0x08 | Reserved for future use |
| 0x09 | Reserved for future use |
RFCOMM(Serial Port Emulation):串口仿真协议,上层协议蓝牙电话,蓝牙透传SPP等协议都是直接走的RFCOMM
Frame Structure:
| Address | Control | Length Indicator | Information | FCS |
| 1 octet | 1 octet | 1 or 2 octets | 整数倍octet | 1 octet |
Address Field:
0 1 2 3 4 5 6 7 8
| EA-1 | CR | D | server channel |
Control Field:
| 帧类型 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 标注 |
| SABM (SetAsyncronousBalancedModel)| 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | |
| UA(Unnumbered Acknowledgement) | 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | |
| DM (Disconnected Mode | 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | |
| DISC (Disconnect) | 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | |
| UIH (UnnumberedInformationWithHcheck | 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | |
| UI (Unnubered Information) | 1 | 1 | 1 | 1 | P/F | 1 | 0 | 0 | 可选 |
OBEX:对象交换协议,蓝牙电话本,蓝牙短信,文件传输等协议都是走的OBEX
HFP(Hands-Free):蓝牙免提协议
Audio Gateway:比如手机,作为手机提供发现外设,连接外设,和双向传输能力;
Hands-Free unit(HF):比如耳机,手表,车载设备,具备广播能力,被手机连接后和手机通信;
HSP:蓝牙耳机协议,最开始的蓝牙耳机协议,目前已经没有产品在用这个了吧,至少我没有看到了。算是一个简化版的HFP。
SPP(SERIAL PORT PROFILE):蓝牙串口协议,架构如下:
IAP:苹果的特有协议,分为IAP1/IAP2,一般做Carplay或者iPod功能的人肯定接触过这块,有需要这块的私下联系我10)
PBAP(Phone Book Access):蓝牙电话本访问协议,架构如下:
PCE->PSE:蓝牙电话本客户端通过服务端设备查看电话本内容
MAP(MESSAGE ACCESS PROFILE):蓝牙短信访问协议,架构如下:
OPP(OBJECT PUSH PROFILE):对象推送协议,架构如下
AVCTP(AUDIO/VIDEO CONTROL TRANSPORT PROTOCOL):音视频控制传输协议,是AVRCP的地方,架构如下
AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL):音视频分布传输协议,是A2DP的底层,架构如下
HID(HUMAN INTERFACE DEVICE):人机接口协议,架构如下:
A2DP(Advanced Audio Distribution): 蓝牙音乐协议
AVRCP(AUDIO/VIDEO REMOTE CONTROL PROFILE):蓝牙音乐控制协议
ATT:蓝牙属性协议
GATT:蓝牙通用属性协议
SM: 蓝牙安全管理协议
参考链接:
http://pianyifa.com/index.php/en/business-news/104-2020-08-10-02-52-40
https://www.crifan.com/files/doc/docbook/bluetooth_intro/release/pdf/bluetooth_intro.pdf
https://github.com/sj15712795029/bluetooth_stack/blob/master/README_English.md