未完待續……
BLE協議 |
Bluetooth Application |
Applications |
|
GATT-Based Profiles/Services |
|||
Bluetooth Core (Stack) |
BLE Host |
ATT、GATT、SM |
|
GAP |
|||
L2CAP |
|||
HCI(對藍牙協議無影響) |
|||
BLE Controller |
Link Layer |
||
Physical Layer
|
1 Bluetooth Core(Stack)
藍牙核心協議,關注藍牙核心技術的描述和規范,只提供基礎的機制。
藍牙核心協議由Controller和Host兩部分組成,在一個系統中,Host只有一個,但Controller可以有多個,如:單獨的LE Controller;單獨的BR/EDR Controller;單獨的LE+BR/EDR Controller;在單獨的BR/EDR Controller或LE+BR/EDR Controller基礎上,增加一個或多個額外的AMP Controller。
1.1 Controller
Controller實現射頻相關的模擬和數字部分,完成最基本的數據發送和接收,Controller對外接口是天線,對內接口是主機控制器接口HCI(Hostcontroller interface);控制器包含物理層PHY(physicallayer),鏈路層LL(linker layer),直接測試模式DTM(Direct Test mode)以及主機控制器接口HCI。
1.1.1 Physical Layer
頻率選擇(2402-2480MHz) + 信道選擇(40) + 信道間隔(2MHz) + 調制方式(GFSK) + 數據傳輸速率(1Mbps)+ 接收靈敏度 + 發射功率 + 雜散輻射 + 射頻容差
1、信道選擇
物理信道(Physical Channel)為: F=2402+k*2MHz ,k=0,…,39,共40個信道。
Physical Channel = RF Channel
1.1.2. Link Layer
信道分類(3+37) + 廣播信道定義(37、38、39) + 數據通道分發(跳頻) + 狀態角色定義和切換 + 數據包校驗重傳
LL – Link Layer – Logic Link
1、廣播信道定義
37ch —— 2402MHz
38ch —— 2426MHz
39ch —— 2480MHz
之所以選定3個廣播信道是一種權衡,少了可能會被阻塞,多了會增加功耗。3個廣播信道剛好避開了WiFi的1ch,6ch,11ch,所以BLE廣播的時候,不會被WiFi影響。(PS:可以人為阻塞這三個通道)
2、數據信道切換
BLE匹配之后,LL由廣播信道切換到數據信道,具體使用哪個數據信道在匹配時約定,且連接不會長期使用一個固定通道,會通過跳頻技術隨機有規律切換。
3、定義狀態和角色
圖 2 Link Layer狀態機
Standby狀態是初始狀態,即不發送數據,也不接收數據。根據上層實體的命令(如位於host軟件中GAP),可由其它任何一種狀態進入,也可以切換到除Connection狀態外的任意一種狀態。
Advertising狀態是可以通過廣播通道發送數據的狀態,由Standby狀態進入。它廣播的數據可以由處於Scanning或者Initiating狀態的實體接收。上層實體可通過命令將Advertising狀態切換回Standby狀態。另外,連接成功后,也可切換為Connection狀態。
Scanning狀態是可以通過廣播通道接收數據的狀態,由Standby狀態進入。根據Advertiser所廣播的數據的類型,有些Scanner還可以主動向Advertiser請求一些額外數據。上層實體可通過命令將Scanning狀態切換回Standby狀態。
Initiating狀態和Scanning狀態類似,不過是一種特殊的接收狀態,由Standby狀態進入,只能接收Advertiser廣播的connectable的數據,並在接收到數據后,發送連接請求,以便和Advertiser建立連接。當連接成功后,Initiater和對應的Advertiser都會切換到Connection狀態。
Connection狀態是和某個實體建立了單獨通道的狀態,在通道建立之后,由Initiating或者Advertising自動切換而來。通道斷開后,會重新回到Standby狀態。
通道建立后(通常說“已連接”),處於Connection狀態的雙方,分別有兩種角色Master和Slave:
Initiater方稱作Master
Advertiser方稱作Slave
4、Air Interface Protocol
解決兩個問題:不同實體間在對應狀態下的數據交換,根據上層實體的指令以及實際情況負責狀態之間的切換。
定義Physical Channel上收發的數據包格式:
Preamble(1 octet) Access Address(4 octets) PDU(2 to 257 octets) CRC(3 octets)
定義不同類型的PDU及其格式:
Advertising channel中Advertising有關的PDU
Advertising channel中Scanning有關的PDU
Advertising channel中Initialing有關的PDU
Data channel中LL data有關的PDU
Data channel中LL control有關的PDU
針對廣播通道以白名單(White List)的形式定義Link Layer的數據過濾機制
執行廣播通道上實際的packet收發操作
定義連接建立的方式及過之后的應答、流控等機制
5、Link Layer Control
抽象出來一個鏈路控制協議(Link Layer Control),用於管理、控制兩個Link Layer實體之間所建立的這個Connection,主要功能包括:
更新Connection相關的參數,如transmitWindowSize、transmitWindowOffset、connInterval等等(具體意義這里不再詳述);
更新該連接所使用的跳頻圖譜(使用哪些Physical Channels);
執行鏈路加密(Encryption)有關的過程。
1.2. HCI
-
- HCI作用圖解
圖 3 HCI作用圖解
定義Host和Controller(通常是兩顆IC)之間的通信協議,對理解藍牙協議來說,是無關緊要的。向上為主機提供軟件應用程序接口(API)。
-
- HCI內容
HCI邏輯上定義一系列的命令,事件;
物理上有UART,SDIO,USB,SPI接口;
實際可能包含里面的任意1種或幾種。常見RF測試時,我們常使用UART發送標准的HCI指令控制Controller。
1.3. Host
主機host是藍牙協議棧的核心部分,GAP層負責制定設備工作的角色,SS層負責指定安全連接,Logic Link層功能非常強大,官方作用為協議/通道的多路復用,負責上層應用數據(L2CAPService Data Units,SDUs)的分割(和重組),生成協議數據單元(L2CAP Packet Data Units,PDUs),以滿足用戶數據傳輸對延時的要求,並便於后續的重傳、流控等機制的實現。
1.3.1 L2CAP
提供數據封裝服務,將LL提供的Logical Channel換分為一個個的L2CAP Channel,以便提供應用程序級別的通道復用。
邏輯連接控制和適配協議,Logic Link Control and Adaptation Protocol
Protocol/channel multiplexing,協議/通道的多路復用;
Segmentation and reassembly,上層應用數據(L2CAP Service Data Units,SDUs)的分割(和重組),生成協議數據單元(L2CAP Packet Data Units,PDUs),以滿足用戶數據傳輸對延時的要求,並便於后續的重傳、流控等機制的實現;
Flow control per L2CAP channel,基於L2CAP Channel的流控機制;
Error control and retransmissions,錯誤控制和重傳機制;
Support for Streaming,支持流式傳輸(如音頻、視頻等,不需要重傳或者只需要有限重傳);
Fragmentation and Recombination,協議數據單元(PDUs)的分片(和重組),生成符合Link Layer傳輸要求的數據片(長度不超過251,具體可參考5.4.1中有關的介紹);
Quality of Service,QoS的支持。
Protocol/channel multiplexing
channel multiplexing(基於通道的多路復用)—— CID,Channel ID
Protocol multiplexing(基於協議的多路復用)——只允許在BR/EDR controller中使用
1.3.2 ATT(Attribute Protocol)
負責數據檢索
對上文的總結:Physical Layer負責提供一系列的Physical Channel;基於這些Physical Channel,Link Layer可在兩個設備之間建立用於點對點通信的Logical Channel;而L2CAP則將這個Logical Channel換分為一個個的L2CAP Channel,以便提供應用程序級別的通道復用。到此之后,基本協議棧已經構建完畢,應用程序已經可以基於L2CAP歡快的run起來了。
-
- 特點
基於L2CAP,使用固定的Channel ID(0x004)
采用client-server的形式。提供信息(以后都稱作Attribute)的一方稱作ATT server(一般是那些傳感器節點),訪問信息的一方稱作ATT client。
一個Attribute由Attribute Type、Attribute Handle和Attribute Value組成。
Attribute可以定義一些權限(Permissions),以便server控制client的訪問行為
根據所定義的Attribute PDU的不同,client可以對server有多種訪問方式
1.3.3 GATT(Generic Attribute Profile)
ATT之所以稱作“protocol”,是因為它還比較抽象,僅僅定義了一套機制,允許client和server通過Attribute的形式共享信息。
GATT是一個profile(更准確的說是profile framework)
在藍牙協議中,profile一直是一個比較抽象的概念,我們可以將其理解為“應用場景、功能、使用方式”都被規定好的Application。傳統的BR/EDR如此,BLE更甚。上面我們講過,BLE很大一部分的應用場景是信息(Attribute)的共享,因此,BLE協議棧基於Attribute Protocol,定義了一個稱作GATT(Generic Attribute)的profile framework(它本身也是一個profile),用於提供通用的、信息的存儲和共享等功能。
圖 4 GATT Profile層次結構
1.3.4 SM(Security Manager)
1.3.5 GAP(Generic Access Profile)
通用訪問配置文件,實現功能如下:
-
- 定義GAP層的藍牙設備角色
Broadcaster Role,設備正在發送advertising events;
Observer Role,設備正在接收advertising events;
Peripheral Role,設備接受Link Layer連接(對應Link Layer的slave角色);
Central Role,設備發起Link Layer連接(對應Link Layer的master角色)。
-
- 定義GAP層的、用於實現各種通信的操作模式和過程
Broadcast mode and observation procedure,實現單向的、無連接的通信方式;
Discovery modes and procedures,實現藍牙設備的發現操作;
Connection modes and procedures,實現藍牙設備的連接操作;
Bonding modes and procedures,實現藍牙設備的配對操作。
-
- 定義User Interface有關的藍牙參數
藍牙地址(Bluetooth Device Address);
藍牙名稱(Bluetooth Device Name);
藍牙的pincode(Bluetooth Passkey);
藍牙的class(Class of Device,和發射功率有關);
等等。
-
- Security有關的定義
2. Application
藍牙應用層協議,在藍牙核心協議的基礎上,根據具體的應用需求,定義出各種各樣的策略,如FTP、文件傳輸、局域網等。
Profile是Application的代指,翻譯為服務,具體有:SPP、HSP、HFP、FTP、IPv6/6LoWPAN等。