藍(lan)牙(ya)協議棧概覽(lan)

HW層:藍牙芯片層
RF(RADIO):射頻(pin)層,本地(di)藍牙數(shu)據(ju)通過(guo)射頻(pin)信號發送給空中設備,并通過(guo)射頻(pin)接(jie)收來自空中的藍牙信號和數(shu)據(ju)
BB(BASEBAND):基帶層,射頻信號和(he)數字(音(yin)頻)信號轉(zhuan)換,實現(xian)基帶協議和(he)其(qi)他底(di)層連(lian)接規程
LMP(LINK MANAGER PROTOCOL):鏈路(lu)(lu)管(guan)理層,負責管(guan)理藍牙設備之(zhi)間的通(tong)信,實現鏈路(lu)(lu)建(jian)立、驗證(zheng)、鏈路(lu)(lu)配(pei)置(zhi)等操作
HCI(HOST CONTROLLER INTERFACE):主機控(kong)制(zhi)器(qi)接口層,HCI層在芯片(pian)以及協議(yi)棧(zhan)都有,芯片(pian)層HCI負(fu)責將協議(yi)棧(zhan)數(shu)據(ju)處理,轉換為芯片(pian)內部動(dong)作,并(bing)受到(dao)遠(yuan)端數(shu)據(ju),通過HCI上報給協議(yi)棧(zhan);
BLE PHY:BLE物(wu)理層
BLE LL:BLE鏈路層
TRANSPORT層:在硬件(jian)接(jie)口(kou)(UART/USB/SDIO)實現HOST跟CONTROLLER的(de)交互
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才(cai)添加):LE audio用的數據包格式


BT Controller:指(zhi)藍(lan)牙(ya)芯(xin)片(pian),包括BR/EDR芯(xin)片(pian)(藍(lan)牙(ya)2.1),AMP芯(xin)片(pian)(藍(lan)牙(ya)3.0),LE芯(xin)片(pian)(藍(lan)牙(ya)4.0)
BT Host:指藍(lan)牙協(xie)議(yi)棧

圖中內容簡介:
HW層:藍牙芯片
RF:射頻
BB:基帶
LMP:鏈路管理
HCI:主控制器接口
AUDIO:音頻
BLE PHY:低功耗藍牙物理層
BLE LL:低(di)功耗藍牙鏈(lian)路層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層:藍牙(ya)協議(yi)棧(zhan)HCI(HOST CONTROLLER INTERFACE):主機控制層接(jie)口,主要(yao)負責(ze)透(tou)過(guo)transport把協議(yi)棧(zhan)的(de)數(shu)據發送(song)給藍牙(ya)芯(xin)片,并且接(jie)受來自藍牙(ya)芯(xin)片的(de)數(shu)據,數(shu)據主要(yao)分為HCI COMMAND(HOST->CONTROLLER),HCI EVENT(HOST-CONTROLLER),HCI ACL(HOSTCONTROLLER),HCI SCO(這個有(you)點些微差異,因為部分芯(xin)片的(de)SCO數(shu)據不是透(tou)過(guo)TRANSPORT直接(jie)跟HOST溝通(tong),而是通(tong)過(guo)特殊的(de)引(yin)腳,PCM IN/OUT/SYNC/CLK腳來傳輸數(shu)據),core文(wen)檔HCI的(de)架構如上;



L2CAP(Logical Link Control and Adaptation Protocol):邏(luo)輯鏈路(lu)控制(zhi)與適配協(xie)(xie)議(yi)(yi)(yi),將ACL數(shu)據分組(zu)(zu)交換(huan)為便于高層(ceng)(ceng)應用(yong)的(de)數(shu)據分組(zu)(zu)格式,并提供協(xie)(xie)議(yi)(yi)(yi)復用(yong)和(he)服務質量交換(huan)等功能。通過協(xie)(xie)議(yi)(yi)(yi)多路(lu)復用(yong)、分段重組(zu)(zu)操作和(he)組(zu)(zu)概念,向高層(ceng)(ceng)提供面向連(lian)接的(de)和(he)無連(lian)接的(de)數(shu)據服務,L2CAP還(huan)屏蔽(bi)了(le)低層(ceng)(ceng)傳輸協(xie)(xie)議(yi)(yi)(yi)中的(de)很多特性,使得高層(ceng)(ceng)協(xie)(xie)議(yi)(yi)(yi)應用(yong)開(kai)發人員可以不必了(le)解基層(ceng)(ceng)協(xie)(xie)議(yi)(yi)(yi)而進行開(kai)發。架構(gou)如(ru)下:

SDP(SERVICE DISCOVERY PROTOCOL):服(fu)(fu)務(wu)(wu)發現協議,服(fu)(fu)務(wu)(wu)發現協議(SDP)為(wei)應用程(cheng)序提供(gong)了一種方法來(lai)發現哪些(xie)服(fu)(fu)務(wu)(wu)可用,并確定(ding)這些(xie)可用服(fu)(fu)務(wu)(wu)的(de)特征(zheng)

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):串口(kou)仿真協議,上層(ceng)協議藍(lan)(lan)牙(ya)電話,藍(lan)(lan)牙(ya)透傳SPP等(deng)協議都(dou)是(shi)直接走的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:對象交換協(xie)議(yi),藍牙電(dian)話本,藍牙短信,文件傳輸等協(xie)議(yi)都是走的(de)OBEX


HFP(Hands-Free):藍牙免提(ti)協議

Audio Gateway:比(bi)如(ru)手機,作為手機提(ti)供發現(xian)外設(she),連接(jie)外設(she),和雙向傳輸能力(li);
Hands-Free unit(HF):比(bi)如耳機(ji)(ji),手表,車(che)載(zai)設備,具備廣播能力,被(bei)手機(ji)(ji)連接后和手機(ji)(ji)通信(xin);
HSP:藍(lan)牙(ya)耳(er)(er)機協(xie)議,最開(kai)始的(de)藍(lan)牙(ya)耳(er)(er)機協(xie)議,目前(qian)已經沒有(you)產品在用這個了(le)吧(ba),至(zhi)少我沒有(you)看到了(le)。算是一(yi)個簡化版(ban)的(de)HFP。
SPP(SERIAL PORT PROFILE):藍牙串口協議,架構如下(xia):

IAP:蘋果的特有協議,分為IAP1/IAP2,一般做Carplay或者iPod功能的人肯定接觸過這塊,有需要這塊的私下聯系我10)
PBAP(Phone Book Access):藍牙電話本訪(fang)問(wen)協議,架(jia)構如下:

PCE->PSE:藍牙電話本(ben)客(ke)戶端通(tong)過服(fu)務(wu)端設備查看電話本(ben)內容
MAP(MESSAGE ACCESS PROFILE):藍牙短信訪問(wen)協議,架構如(ru)下:

OPP(OBJECT PUSH PROFILE):對(dui)象(xiang)推(tui)送協議(yi),架構如下

AVCTP(AUDIO/VIDEO CONTROL TRANSPORT PROTOCOL):音視頻控制傳輸(shu)協議(yi),是AVRCP的(de)地方,架(jia)構(gou)如下
AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL):音(yin)視頻(pin)分布傳輸協議(yi),是(shi)A2DP的底層,架構如下

HID(HUMAN INTERFACE DEVICE):人機(ji)接口(kou)協(xie)議,架構(gou)如下:

A2DP(Advanced Audio Distribution): 藍牙音樂協議
AVRCP(AUDIO/VIDEO REMOTE CONTROL PROFILE):藍(lan)牙(ya)音樂控制協議


ATT:藍牙屬性協議
GATT:藍牙通用屬性協議
SM: 藍牙安全管理協議
參考鏈接:
//pianyifa.com/index.php/en/business-news/104-2020-08-10-02-52-40
//www.crifan.com/files/doc/docbook/bluetooth_intro/release/pdf/bluetooth_intro.pdf
//github.com/sj15712795029/bluetooth_stack/blob/master/README_English.md
