藍牙協議規范遵循開放系統互連參考模型(OSI/RM),從低到高地定義了藍牙協議棧的各個層次。SIG所定義的藍牙技術規范的目的是使符合該規范的各種應用之間能夠實現互操作。互操作的遠端設備需要使用相同的協議棧,不同的應用需要不同的協議棧。完整的藍牙協議棧如下圖所示,不是任何應用都必須使用全部協議,而是可以只使用其中的一列或多列。圖中顯示了所有協議之間的相互關系,但這種關系在某些應用中是有變化的。
BLE協議棧主要用來對你的應用數據進行層層封包,以生成一個滿足BLE協議的空中數據包。也就是說,把應用數據包裹在一系列的幀頭和幀尾中。藍牙協議棧分為:應用層、主協議層、控制層,如下圖所示:
1、藍牙核心協議
藍牙核心協議關注對藍牙核心技術的描述和規范,它只提供基礎的機制,并不關心如何使用這些機制。藍牙核心協議又包含BLE Controller和BLE Host兩部分。
Controller:負責定義RF、Baseband等偏硬件的規范,并在這之上抽象出用于通信的邏輯鏈路;
Host:負責在邏輯鏈路的基礎上,進行更為友好的封裝,這樣就可以屏蔽掉藍牙技術的細節,讓Bluetooth Application更為方便的使用。
2、藍牙應用層協議
藍牙應用層協議,是在藍牙核心協議的基礎上,根據具體的應用需求,百花齊放,定義出各種各樣的策略,如FTP、文件傳輸、局域網等等。
3、低功耗藍牙核心協議層
主要分為如下幾層:
① 物理層
PHY層用來指定BLE所用的無線頻段,調制解調方式和方法等。PHY層做得好不好,直接決定整個BLE芯片的功耗,靈敏度以及selectivity等射頻指標。
② 鏈路層
LL層是整個BLE協議棧的核心。LL層要做的事情非常多,比如具體選擇哪程度 個射頻通道進行通信,怎么識別空中數據包,具體在哪個時間點把數據包發送出去,怎么保證數據的完整性,ACK如何接收,如何進行重傳,以及如何對鏈路進行管理和控制等等。LL層只負責把數據發出去或者收回來,對數據進行怎樣的解析則交給上面的GAP或者ATT。
③ 主機控制接口層
HCL是可選的,主要用于兩個芯片實現BLE協議棧的場合,用來規范兩者之間的通信協議、通信命令等。
④ 通用訪問配置文件層
GAP主要用來進行廣播、掃描和發起連接等。
⑤ 邏輯鏈路控制及自適應協議層
L2CAP對LL進行了一次簡單封裝。LL層只關心傳輸的數據本身,L2CAP就要區分加密通道還是普通通道,同時還要對連接間隔進行管理。
⑥ 安全管理層
SM用來管理BLE連接的加密和安全的。
⑦ 屬性協議層
簡單來說,ATT層用來定義用戶命令及命令操作的數據,比如讀/寫某個數據。開發者接觸最多的就是ATT。BLE引入了attribute(屬性)概念,用來描述一條條數據,attribute除了定義數據,還定義該數據可以使用的ATT命令,因此這一層被稱為ATT層。
⑧ 通用屬性配置文件層
GATT用來規范attribute中的數據內容,并用group(分組)的概念進行分類管理。
下圖是協議棧的總體結構分層圖: