蓝牙协议栈概览

蓝牙底层结构

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 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

你可能感兴趣的:(蓝牙协议栈概览)