參考文獻(xiàn):
How Bluetooth LE works? — Link layer | by Jacob su | Medium
Bluetooth Protocol Stack - MATLAB & Simulink (mathworks.com)
藍(lán)牙協(xié)議分析(1)_基本概念 (wowotech.net)? ?系列藍(lán)牙技術(shù)介紹
(41條消息) 藍(lán)牙BLE LINK LAYER剖析(二) -- PDU_朝氣蓬勃-CSDN博客
(41條消息) BLE_StephenZhou-CSDN博客
藍(lán)牙核心系統(tǒng)結(jié)構(gòu)
藍(lán)牙協(xié)議分為四個(gè)層次:物理層(Physical Layer)谈息、邏輯層(Logical Layer)漾狼、L2CAP Layer和應(yīng)用層(APP Layer)。
物理層
負(fù)責(zé)提供數(shù)據(jù)傳輸?shù)奈锢硗ǖ溃ㄍǔ7Q為信道)腐泻。通常情況下歼跟,一個(gè)通信系統(tǒng)中存在幾種不同類型的信道呕童,如控制信道砚婆、數(shù)據(jù)信道绷柒、語(yǔ)音信道等等志于。
邏輯層
在物理層的基礎(chǔ)上,提供兩個(gè)或多個(gè)設(shè)備之間废睦、和物理無(wú)關(guān)的邏輯傳輸通道(也稱作邏輯鏈路)伺绽。
在BR/EDR系統(tǒng)中,與對(duì)端的Link Manager通過(guò)LMP協(xié)議(Link Manager Protocol)進(jìn)行通信嗜湃;在BLE系統(tǒng)中則使用的是LL協(xié)議(Link Layer Protocol)奈应。
BLE鏈路層的狀態(tài)機(jī)
包含Standby、Advertising购披、Scanning杖挣、Initiating、Connection刚陡、Synchronization惩妇、Isochronous?Broadcasting state,轉(zhuǎn)換圖如下所示
Master:從Initiating state進(jìn)入Connection state
Slave:從Advertising state進(jìn)入Connection state
HCI
HCI數(shù)據(jù)包分為command橘荠、event和data三種類型屿附。command表示Host發(fā)送給Controller的命令,event為Controller發(fā)送給Host的事件哥童,data通常是實(shí)際的藍(lán)牙傳輸數(shù)據(jù)挺份。
command格式:opcode 16 bit? |? 參數(shù)長(zhǎng)度 8 bit? |? 可變參數(shù)
event格式:event code 1 bit? |? 參數(shù)長(zhǎng)度 1 bit? |? 可變參數(shù)
通常Host發(fā)送的command都會(huì)收到Controller的返回event,提示命令的執(zhí)行結(jié)果贮懈。例如匀泊,HCI命令0x200c表示 LE Set Scan Enable优训,并通過(guò)參數(shù)控制開(kāi)啟和關(guān)閉BLE的掃描,Controller執(zhí)行完畢后返回event code?0x0e各聘,即Command Complete揣非,并附帶status作為參數(shù)表示結(jié)果是否成功。
ACL
HCI的ACL協(xié)議主要用于在Host和Controller之間躲因,傳輸數(shù)據(jù)早敬。
ACL數(shù)據(jù)包格式:Handle 12 bit? |? PB flag 2 bit? |? BC flag 2 bit? |? Data Total Length 16 bit? |? data?
其中,Handle用于區(qū)分Host與Controller之間的邏輯鏈路大脉,PB為Packet Boundary即包邊界標(biāo)志搞监,BC(Broadcast)為廣播標(biāo)志。由于數(shù)據(jù)總長(zhǎng)度只用2個(gè)字節(jié)(16bit)表示镰矿,因此數(shù)據(jù)加上頭部最多也只有65535bit琐驴,這意味著在發(fā)送過(guò)大的數(shù)據(jù)時(shí)需要在ACL層進(jìn)行分包和重組,PB Flag就是為了這個(gè)目的而設(shè)置的秤标,根據(jù)PB Flag的值可以表示當(dāng)前數(shù)據(jù)包在完整數(shù)據(jù)中所處的位置绝淡。
L2CAP層
L2CAP是邏輯鏈路控制和適配協(xié)議(Logical Link Control and Adaptation Protocol)的縮寫,負(fù)責(zé)管理邏輯層提供的邏輯鏈路苍姜±谓停基于該協(xié)議,不同Application可共享同一個(gè)邏輯鏈路怖现。類似TCP/IP中端口(port)的概念茁帽。
ACL只提供了一個(gè)數(shù)據(jù)傳輸協(xié)議,類比于網(wǎng)絡(luò)協(xié)議棧中的IP協(xié)議屈嗤,在其之上使用的L2CAP協(xié)議可以類比于TCP/UDP協(xié)議潘拨,實(shí)現(xiàn)了更為完善的數(shù)據(jù)傳輸功能,包括:
協(xié)議/信道(L2CAP channel)多路復(fù)用饶号、分段(segmentation)和重組(reassembly)铁追、基于L2CAP channel的流量控制機(jī)制、錯(cuò)誤控制重傳機(jī)制茫船、支持流式傳輸(streaming)琅束、分片(fragmentation)和重組(recombination)、QoS(Quality of Service)…
L2CAP channel表示兩個(gè)設(shè)備之間的一條邏輯鏈路算谈,使用Channel ID(CID)進(jìn)行區(qū)分涩禀,并以此為基本單元在Controller邏輯鏈路上進(jìn)行多路復(fù)用。在基于連接的信道(connection-oriented channels)中然眼,L2CAP PDU也稱為B-Frame艾船,其格式如下:
L2CAP PDU格式:length 16 bit? |? CID 16 bit? |? information payload
前32bit稱為L(zhǎng)2CAP header,length是除了header以外的payload長(zhǎng)度。在不同的L2CAP模式中屿岂,information payload的內(nèi)容也不盡相同践宴,比如在Supervisor Frame(S-Frame)、Information Frame(I-Frame)爷怀。而對(duì)于無(wú)連接的L2CAP數(shù)據(jù)包阻肩,在payload之前還包含大于等于2字節(jié)的PSM(Protocol/Service Multiplexer),頭部還是和B-Frame一致的运授。
在L2CAP之上烤惊,有著各種各樣的應(yīng)用層協(xié)議,比如服務(wù)發(fā)現(xiàn)協(xié)議SDP吁朦,藍(lán)牙傳輸協(xié)議RFCOMM/OBEX撕氧,BLE的屬性協(xié)議ATT,甚至是通用以太網(wǎng)協(xié)議BNEP以及其上的TCP/IP網(wǎng)絡(luò)棧等喇完。通過(guò)分層和抽象使得上層應(yīng)用無(wú)需關(guān)心底層的細(xì)節(jié),從而實(shí)現(xiàn)了整個(gè)藍(lán)牙協(xié)議棧的普適性和拓展性剥啤。
APP層
理解藍(lán)牙協(xié)議中的應(yīng)用層锦溪,基于L2CAP提供的channel,實(shí)現(xiàn)各種各樣的應(yīng)用功能府怯。Profile是藍(lán)牙協(xié)議的特有概念刻诊,為了實(shí)現(xiàn)不同平臺(tái)下的不同設(shè)備的互聯(lián)互通,藍(lán)牙協(xié)議不止規(guī)定了核心規(guī)范(稱作Bluetooth core)牺丙,也為各種不同的應(yīng)用場(chǎng)景则涯,定義了各種Application規(guī)范,這些應(yīng)用層規(guī)范稱作藍(lán)牙profile冲簿。