BLE 入門 01

BLE協(xié)議棧主要由如下幾部分組成:?

PHY層(Physical layer物理層)

PHY層用來指定BLE所用的無線頻段途事,調(diào)制解調(diào)方式和方法等验懊。PHY層做得好不好,直接決定整個BLE芯片的功耗尸变,靈敏度以及selectivity等射頻指標(biāo)义图。

LL層(Link Layer鏈路層)。

LL層是整個BLE協(xié)議棧的核心召烂,也是BLE協(xié)議棧的難點(diǎn)和重點(diǎn)碱工。像Nordic的BLE協(xié)議棧能同時支持20個link(連接),就是LL層的功勞。

LL層要做的事情非常多怕篷,比如具體選擇哪個射頻通道進(jìn)行通信历筝,怎么識別空中數(shù)據(jù)包,具體在哪個時間點(diǎn)把數(shù)據(jù)包發(fā)送出去廊谓,怎么保證數(shù)據(jù)的完整性梳猪,ACK如何接收,如何進(jìn)行重傳蒸痹,以及如何對鏈路進(jìn)行管理和控制等等春弥。LL層只負(fù)責(zé)把數(shù)據(jù)發(fā)出去或者收回來,對數(shù)據(jù)進(jìn)行怎樣的解析則交給上面的GAP或者GATT电抚。

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ū)分是加密通道還是普通通道腿准,同時還要對連接間隔進(jìn)行管理际起。

SMP(Secure manager protocol)

SMP用來管理BLE連接的加密和安全的,如何保證連接的安全性吐葱,同時不影響用戶的體驗(yàn)街望,這些都是SMP要考慮的工作。

ATT(Attribute protocol)弟跑。

簡單來說灾前,ATT層用來定義用戶命令及命令操作的數(shù)據(jù),比如讀取某個數(shù)據(jù)或者寫某個數(shù)據(jù)孟辑。BLE協(xié)議棧中哎甲,開發(fā)者接觸最多的就是ATT。BLE引入了attribute概念饲嗽,用來描述一條一條的數(shù)據(jù)炭玫。Attribute除了定義數(shù)據(jù),同時定義該數(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)互通就會出問題,也正是因?yàn)橛辛薌ATT和各種各樣的應(yīng)用profile巫财,BLE擺脫了ZigBee等無線協(xié)議的兼容性困境盗似,成了出貨量最大的2.4G無線通信產(chǎn)品?

BLE引入access address概念,用來指明接收者身份

0x8E89BED6這個access address比較特殊平项,它表示要發(fā)給周邊所有設(shè)備赫舒,即廣播。

如果你要一對一的進(jìn)行通信(BLE協(xié)議將其稱為連接)闽瓢,即設(shè)備A的數(shù)據(jù)包只能設(shè)備B接收接癌,同樣設(shè)備B 的數(shù)據(jù)包只能設(shè)備A接收,那么就必須生成一個獨(dú)特的隨機(jī)access address以標(biāo)識設(shè)備A和設(shè)備B兩者之間的連接扣讼。?

廣播情況

設(shè)備A叫advertiser(廣播者)缺猛,設(shè)備B叫scanner或者observer(掃描者)。廣播狀態(tài)下設(shè)備A的LL層API將變成send_LL(0x53,2402M, 0x8E89BED6)椭符。

由于設(shè)備B可以同時接收到很多設(shè)備的廣播荔燎,因此數(shù)據(jù)包還必須包含設(shè)備A的 device address(0xE1022AAB753B)以確認(rèn)該廣播包來自設(shè)備A,為此send_LL參數(shù)需要變成(0x53,2402M, 0x8E89BED6, 0xE1022AAB753B)销钝。

設(shè)備A和設(shè)備B建立藍(lán)牙連接

指設(shè)備A和設(shè)備B兩者一對一“同步”成功有咨,其具體包含以下幾方面:?

設(shè)備A和設(shè)備B對接下來要使用的物理信道達(dá)成一致

設(shè)備A和設(shè)備B雙方建立一個共同的時間錨點(diǎn),也就是說蒸健,把雙方的時間原點(diǎn)變成同一個點(diǎn)

設(shè)備A和設(shè)備B兩者時鐘同步成功座享,即雙方都知道對方什么時候發(fā)送數(shù)據(jù)包什么時候接收數(shù)據(jù)包

設(shè)備A和設(shè)備B通信流程

設(shè)備A稱為Master或者Central,把設(shè)備B 稱為?Slave或者?Peripheral

設(shè)備A將周期性以CI(connection interval)為間隔向設(shè)備B發(fā)送數(shù)據(jù)包似忧,而設(shè)備B也周期性地以CI為間隔打開射頻接收窗口以接收設(shè)備A的數(shù)據(jù)包

同時按照藍(lán)牙spec要求渣叛,設(shè)備B 收到設(shè)備A數(shù)據(jù)包150us后,設(shè)備B切換到發(fā)送狀態(tài)橡娄,把自己的數(shù)據(jù)發(fā)給設(shè)備A

設(shè)備A則切換到接收狀態(tài)诗箍,接收設(shè)備B發(fā)過來的數(shù)據(jù)。

由此可見挽唉,連接狀態(tài)下滤祖,設(shè)備A和設(shè)備B的射頻發(fā)送和接收窗口都是周期性地有計劃地開和關(guān),而且開的時間非常短瓶籽,從而大大降低系統(tǒng)功耗并大大提高系統(tǒng)效率匠童。

連接狀態(tài)下是如何把數(shù)據(jù) 0x53發(fā)送出去的

對開發(fā)者來說,很簡單塑顺,他只需要調(diào)用send(0x53)

- GATT層定義數(shù)據(jù)的類型和分組汤求,方便起見俏险,我們用0x0013表示電量這種數(shù)據(jù)類型,這樣GATT層把數(shù)據(jù)打包成130053(小端模式Q镄鳌)

- ATT層用來選擇具體的通信命令竖独,比如讀/寫/notify/indicate等,這里選擇notify命令0x1B挤牛,這樣數(shù)據(jù)包變成了:1B130053

- L2CAP用來指定connection interval(連接間隔)莹痢,比如每10ms同步一次(CI不體現(xiàn)在數(shù)據(jù)包中),同時指定邏輯通道編號0004(表示ATT命令)墓赴,最后把ATT數(shù)據(jù)長度0x0004加在包頭竞膳,這樣數(shù)據(jù)就變?yōu)椋?40004001B130053

- LL層要做的工作很多

? ? ?首先LL層需要指定用哪個物理信道進(jìn)行傳輸(物理信道不體現(xiàn)在數(shù)據(jù)包中)

? ? ?然后再給此連接分配一個Access address(0x50655DAB)以標(biāo)識此連接只為設(shè)備A 和設(shè)備B 直連服務(wù),然后加上LL header和payload length字段诫硕,LL header標(biāo)識此packet為數(shù)據(jù)packet坦辟,而不是control packet等,payload length為整個L2CAP字段的長度章办,

? ? ? 加上CRC24字段锉走,以保證整個packet的數(shù)據(jù)完整性,所以數(shù)據(jù)包最后變成:

o??AAAB5D65501E08040004001B130053D550F6? ??

???????????o??AA – 前導(dǎo)幀(preamble)

? ? ? ? ? ?o??0x50655DAB – 訪問地址(access address)

? ? ? ? ? ?o??1E – LL幀頭字段(LL header)

? ? ? ? ? ?o??08 – 有效數(shù)據(jù)包長度(payload length)

? ? ? ? ? ?o??04000400 – ATT數(shù)據(jù)長度纲菌,以及L2CAP通道編號

? ? ? ? ? ?o??1B – notify command

? ? ? ? ? ?o??0x0013 – 電量數(shù)據(jù)handle

? ? ? ? ? ?o??0x53 – 真正要發(fā)送的電量數(shù)據(jù)

? ? ? ? ? ?o??0xF650D5 – CRC24值

雖然開發(fā)者只調(diào)用了 send(0x53)挠日,但由于低功耗藍(lán)牙協(xié)議棧層層打包,最后空中實(shí)際傳輸?shù)臄?shù)據(jù)將變成下圖所示的模樣翰舌,這就既滿足了低功耗藍(lán)牙通信的需求,又讓用戶API變得簡單冬骚,可謂一箭雙雕椅贱!


參考

1,
https://mp.weixin.qq.com/s?__biz=MzIyOTIxODc5Mw==&mid=2247484942&idx=1&sn=3f54b6a37ecfec8f6fa13f0fd427126c&chksm=e8474688df30cf9e89e1d98a930696bc50d1127bc54bf78b17a3386de2e11a1fb7e964387638&scene=4&subscene=126&ascene=0&devicetype=android-28&version=2700033a&nettype=WIFI&abtest_cookie=BQABAAoACwASABMAFAAFACOXHgBamR4Am5keAMWZHgDUmR4AAAA%3D&lang=zh_CN&pass_ticket=2XeB53BCX2VXcaT10P45w%2BNIqnaqa6scJr6J%2Bbab4lZbmVtvdwtZmbYAs%2Bl12B%2Fl&wx_header=1

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末只冻,一起剝皮案震驚了整個濱河市庇麦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喜德,老刑警劉巖山橄,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舍悯,居然都是意外死亡航棱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門萌衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饮醇,“玉大人,你說我怎么就攤上這事秕豫∑蛹瑁” “怎么了观蓄?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祠墅。 經(jīng)常有香客問我侮穿,道長,這世上最難降的妖魔是什么毁嗦? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任撮珠,我火速辦了婚禮,結(jié)果婚禮上金矛,老公的妹妹穿的比我還像新娘芯急。我一直安慰自己,他們只是感情好驶俊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布娶耍。 她就那樣靜靜地躺著,像睡著了一般饼酿。 火紅的嫁衣襯著肌膚如雪榕酒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天故俐,我揣著相機(jī)與錄音想鹰,去河邊找鬼。 笑死药版,一個胖子當(dāng)著我的面吹牛辑舷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播槽片,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼何缓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了还栓?” 一聲冷哼從身側(cè)響起碌廓,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剩盒,沒想到半個月后谷婆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辽聊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年纪挎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片身隐。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡廷区,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贾铝,到底是詐尸還是另有隱情隙轻,我是刑警寧澤埠帕,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站玖绿,受9級特大地震影響敛瓷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斑匪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一呐籽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚀瘸,春花似錦狡蝶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寂嘉,卻和暖如春奏瞬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泉孩。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工硼端, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寓搬。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓珍昨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親订咸。 傳聞我的和親對象是個殘疾皇子曼尊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一、BLE協(xié)議棧架構(gòu) BLE 協(xié)議棧(簡稱“協(xié)議”)由兩部分組成: 和 脏嚷。控制器與主機(jī)分離的形式來自標(biāo)準(zhǔn)的藍(lán)牙 B...
    Leung_ManWah閱讀 2,632評論 0 3
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 9,008評論 0 13
  • 一瞒御、BLE知識 1.關(guān)于BLE BLE(Bluetooth low energy)藍(lán)牙低功耗是藍(lán)牙4.0新增的子規(guī)...
    空_歡喜閱讀 3,689評論 0 10
  • Key Terms And Concepts 關(guān)鍵術(shù)語和概念 Here is a summary of key B...
    Jaesoon閱讀 2,432評論 0 5
  • 藍(lán)牙 藍(lán)牙的波段為2400-2483.5MHz(包括防護(hù)頻帶)父叙。這是全球范圍內(nèi)無需取得執(zhí)照(但定不是無管制的)的工...
    蘇永茂閱讀 6,170評論 0 11