蓝牙协议栈概览
蓝牙协议栈概览
蓝牙协议栈是蓝牙设备实现无线通信的核心组件,它定义了从硬件层到应用层的完整通信流程。本文将从硬件层的蓝牙芯片开始,逐层介绍蓝牙协议栈的各个组成部分,包括射频层、基带层、链路管理层、主机控制器接口层等。同时,本文还将详细讲解蓝牙协议栈中的主要协议,如L2CAP、SDP、RFCOMM、OBEX等,以及它们在实际应用中的作用。
蓝牙底层结构
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用的数据包格式
- HCI蓝牙架构
- BT Controller:指蓝牙芯片,包括BR/EDR芯片(蓝牙2.1),AMP芯片(蓝牙3.0),LE芯片(蓝牙4.0)
- BT Host:指蓝牙协议栈
HCI架构协议简要介绍
图中内容简介:
- 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的架构如上;
Overview of the lower software layer
端对端传输示意
- L2CAP(Logical Link Control and Adaptation Protocol):逻辑链路控制与适配协议,将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务,L2CAP还屏蔽了低层传输协议中的很多特性,使得高层协议应用开发人员可以不必了解基层协议而进行开发。架构如下:
L2CAP architectural blocks
- 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):蓝牙免提协议
Hand-Free Protocol
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):对象推送协议,架构如下
OPP(对象推送协议)AVCTP(AUDIO/VIDEO CONTROL TRANSPORT PROTOCOL):音视频控制传输协议,是AVRCP的地方,架构如下
AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL):音视频分布传输协议,是A2DP的底层,架构如下
蓝牙音频控制(传输)协议
HID(HUMAN INTERFACE DEVICE):人机接口协议,架构如下:
HID协议A2DP(Advanced Audio Distribution): 蓝牙音乐协议
AVRCP(AUDIO/VIDEO REMOTE CONTROL PROFILE):蓝牙音乐控制协议
Advanced Audio Distribution
Audio/Video Remote Control ProfileATT:蓝牙属性协议
GATT:蓝牙通用属性协议
SM: 蓝牙安全管理协议
参考资料