小結(jié):
BLE協(xié)議就是實(shí)現(xiàn)低功耗藍(lán)牙協(xié)議的代碼,實(shí)現(xiàn)過程是層層打包。
對于開發(fā)而言,只需要知道以下幾點(diǎn):
1.不需要具體了解BLE協(xié)議棧的具體復(fù)雜的過程,只需要知道它的數(shù)據(jù)從哪里來,需要到哪里去就行了。
2.根據(jù)BLE協(xié)議棧調(diào)用它里面的函數(shù),實(shí)現(xiàn)自己的一些功能。
3.可以自己編寫一些函數(shù),實(shí)現(xiàn)自己需要特定的功能。
協(xié)議??蚣?br>
????????BLE協(xié)議棧就是實(shí)現(xiàn)低功耗藍(lán)牙協(xié)議的代碼,圖解如下:

BLE協(xié)議棧主要由如下幾部分組成:
PHY層(Physical layer物理層)。PHY層用來指定BLE所用的無線頻段,調(diào)制解調(diào)方式和方法等。PHY層做得好不好,直接決定整個(gè)BLE芯片的功耗,靈敏度以及selectivity等射頻指標(biāo)。
LL層(Link Layer鏈路層)。LL層是整個(gè)BLE協(xié)議棧的核心,也是BLE協(xié)議棧的難點(diǎn)和重點(diǎn)。像Nordic的BLE協(xié)議棧能同時(shí)支持20個(gè)link(連接),就是LL層的功勞。LL層要做的事情非常多,比如具體選擇哪個(gè)射頻通道進(jìn)行通信,怎么識(shí)別空中數(shù)據(jù)包,具體在哪個(gè)時(shí)間點(diǎn)把數(shù)據(jù)包發(fā)送出去,怎么保證數(shù)據(jù)的完整性,ACK如何接收,如何進(jìn)行重傳,以及如何對鏈路進(jìn)行管理和控制等等。LL層只負(fù)責(zé)把數(shù)據(jù)發(fā)出去或者收回來,對數(shù)據(jù)進(jìn)行怎樣的解析則交給上面的GAP或者ATT。
HCI(Host controller interface)。HCI是可選的(具體請參考文章: 三種藍(lán)牙架構(gòu)實(shí)現(xiàn)方案(藍(lán)牙協(xié)議棧方案)),HCI主要用于2顆芯片實(shí)現(xiàn)BLE協(xié)議棧的場合,用來規(guī)范兩者之間的通信協(xié)議和通信命令等。
GAP層(Generic access profile)。GAP是對LL層payload(有效數(shù)據(jù)包)如何進(jìn)行解析的兩種方式中的一種,而且是最簡單的那一種。GAP簡單的對LL payload進(jìn)行一些規(guī)范和定義,因此GAP能實(shí)現(xiàn)的功能極其有限。GAP目前主要用來進(jìn)行廣播,掃描和發(fā)起連接等。
L2CAP層(Logic link control and adaptation protocol)。L2CAP對LL進(jìn)行了一次簡單封裝,LL只關(guān)心傳輸?shù)臄?shù)據(jù)本身,L2CAP就要區(qū)分是加密通道還是普通通道,同時(shí)還要對連接間隔進(jìn)行管理。
SMP(Secure manager protocol)。SMP用來管理BLE連接的加密和安全的,如何保證連接的安全性,同時(shí)不影響用戶的體驗(yàn),這些都是SMP要考慮的工作。
ATT(Attribute protocol)。簡單來說,ATT層用來定義用戶命令及命令操作的數(shù)據(jù),比如讀取某個(gè)數(shù)據(jù)或者寫某個(gè)數(shù)據(jù)。BLE協(xié)議棧中,開發(fā)者接觸最多的就是ATT。BLE引入了attribute概念,用來描述一條一條的數(shù)據(jù)。Attribute除了定義數(shù)據(jù),同時(shí)定義該數(shù)據(jù)可以使用的ATT命令,因此這一層被稱為ATT層。
GATT(Generic attribute profile )。GATT用來規(guī)范attribute中的數(shù)據(jù)內(nèi)容,并運(yùn)用group(分組)的概念對attribute進(jìn)行分類管理。沒有GATT,BLE協(xié)議棧也能跑,但互聯(lián)互通就會(huì)出問題,也正是因?yàn)橛辛薌ATT和各種各樣的應(yīng)用profile,BLE擺脫了ZigBee等無線協(xié)議的兼容性困境,成了出貨量最大的2.4G無線通信產(chǎn)品。