天天看點

BLE協定學習總結

1 提筆

最近因工作需要,投入到BLE項目中,故而花了不少時間翻看标準,鑽研原理,以求知其是以然。結合平頭哥BLE産品,實踐驗證理論,還是有了不少心得。一直想記錄下來,奈何一直忙(給自己找了個理由),哈哈,今天終于下筆,來個小結。當然,如有不準确之處,還望各位同學批評指正。

先聲明下,為了配合了解,文中很多圖檔資料來自SIG/IEEE标準組織或者網際網路,如有版權問題,還請聯系我,我會立刻糾正。不勝感激!

2 藍牙的演進史

藍牙(BlueTooth),是一種支援裝置短距離通信的無線電技術,誕生于1994年,最初由電信巨頭愛立信公司創制,當時是作為RS232資料線的替代方案。作為有線的無線替代方案,其理念是使用無線電傳輸來交換資料。名字取自于丹麥的一個國王Harold Bluetooth,此國王據說統一了四分五裂的國家,有點類似于我大秦帝國秦始皇。哈。

如今,藍牙由藍牙技術聯盟(Bluetooth Special Interest Group,簡稱SIG)管理。IEEE将藍牙技術列為IEEE 802.15.1。

版本演進史:

版本 主要功能
1.1 傳輸率約在748~810kb/s,因是早期設計,容易受到同頻率之間的類似通信産品幹擾,影響通訊品質;單工
1.2 同樣是隻有748~810kb/s的傳輸率,但增加了抗幹擾跳頻功能;單工
2.0 2.0是1.2的改良提升版,傳輸率約在1.8M/s~2.1M/s,可以有(雙工)的工作方式
2.1 為了改善藍牙技術存在的問題,藍牙SIG組織(Special InterestGroup)推出了Bluetooth 2.1+EDR版本的藍牙技術。改善裝置配對流程:以往在連接配接過程中,需要利用個人識别碼來確定連接配接的安全性,而改進過後的連接配接方式則是會自動使用數字密碼來進行配對與連接配接
3.0+HS 2009年4月21日,藍牙高速版,傳輸速率可達24Mbps
4.0 支援低功耗;AES-128加密 将傳統藍牙技術、高速藍牙技術和低功耗藍牙(Bluetooth Low Energy,簡稱BLE)技術集為一體
4.1 IoT相關的特性增強
4.2 2014年12月4日,支援:IPv6;隐私保護;加密算法更新;DLE支援
5.0 2016年6月16日在倫敦正式釋出,為現階段最進階的藍牙協定标準; • 4 X Range • 2 X Speed • 800% Broadcast Capacity

表格 1 藍牙版本演進

從上表演進史可以得出,4.0之前的版本演進主要在追求通信速度,3.0高速藍牙達到了24Mbps;4.0及其之後的版本演進主要在追求低功耗/低成本等物聯網IoT特性。一般将藍牙3.0之前的BR/EDR藍牙稱為經典藍牙,而将4.0開始後的藍牙稱為低功耗藍牙。本文重點介紹的是BLE。

BLE協定學習總結

圖表 1 藍牙分類

3 BLE協定詳解

我的經驗是,要學習掌握某一資料通信協定,先找出其OSI模型,然後從底層(實體層)向上層層剝離。閑話少說,上圖。

BLE協定學習總結

圖表 2 BLE OSI架構

那我們就從實體層開始,逐層向上講解。

BLE實體層主要的技術有4:

l 頻譜

BLE使用2.4GHz工業,科學及醫療ISM頻段,從2400MHz到2483.5MHz。信道帶寬2M, 共計40個信道。F=2402+k*2MHz,k=0,。。。39。37/38/39固定為廣播信道。

l GFSK調制解調

BLE采用的GFSK調制方式(高斯頻移鍵控),中心頻率容限是+/-150kHz

l AFH跳頻解決擁堵問題

l 1M/2M無編碼實體層,1M編碼實體層(S=2,S=8)

頻譜,哈,就不解釋了,省的大家說我啰嗦。

GFSK,我通俗的了解就是,以(中心頻率-150kHz)為頻點的頻率代表0,以(中心頻率+150kHz)為頻點的頻率代表1

AFH,adaptive frequency hopping自适應跳頻,大家都知道2.4G頻段是開放頻段,諸如WiFi,微波都在此頻段,那就會産生很多幹擾,BLE是通過此功能來盡量避開幹擾。具體做法就是,在Master請求連接配接的時候,需要告知後續和Slave通信時的可用Channel以及跳頻的步伐;當連接配接建立後,也可以動态更新可用channel和跳頻步伐。可用channel用ChannelMask字段表明,跳頻步伐用Hop字段表明。一圖勝千言:

BLE協定學習總結

圖表 3 跳頻

再看看有跳頻和無跳頻的對比:

BLE協定學習總結

圖表 4 有跳頻的效果圖

BLE協定學習總結

圖表 5 無跳頻的效果圖

無編碼實體層,顧名思義,一個實體symbol代表一個0或者1. 1M無編碼,也就是實體層1M symbol/s,對應的資料傳輸速率為1Mbps,2M無編碼同理。

編碼實體層,舉個栗子,11代表1,00代表0,在實體層symbol速率不變的情況下,有編碼意味着實際資料速率的降低,這個例子裡實際資料速率降低了1/2,但帶來的好處是糾錯能力的提高,破壞掉一位,仍可用還原,這樣也就變相地提高了接收靈敏度,進而提高了覆寫距離。其實這個栗子就是S=2編碼。

BLE支援1M symbol/s下的S=2和S=8,對應的資料速率也就是500kbps和125kbps。

BT4.0/4.1 BT4.2 BT5.0
1Mbps PHY 27Bytes PDU 305kbps 1Mbps PHY 27-255Byte with DLE 780kbps 2Mbps PHY 27-255Byte with DLE 1.4Mbps

圖表 6 BLE各版本速率

實體層 調制方式 編碼方案 (報頭部分) 編碼方案 (有效載荷) 比特率
1M PHY 1Msym/s 無編碼 1Mb/s
2M PHY 2Msym/s 2Mb/s
LE Coded PHY 編碼S=8 編碼S=8; 編碼S=2 125kb/s; 500kb/s

圖表 8 BLE支援的無編碼/編碼實體層

==========================稍歇會兒,畫個線,下面為LL層============================

BLE LL層,發展到這層,那就要從幀格式說起。

BLE幀主要分為兩種:廣播包和資料包。上圖。

BLE協定學習總結

圖表 9 BLE幀格式

兩種封包的差別主要靠Access Address來定義。廣播包的Access Address固定為0x8E89BED6. 廣播包和資料包從access address字段後就分道揚镳了,有不同的定義。

BLE協定學習總結

圖表 10 廣播包幀格式

顧名思義,廣播包就是所謂的燈塔包,主要目的是告知别人:我在這裡,我有哪些服務和能力。以友善Scan裝置掃描到,進而建立連接配接通信。廣播分為4種類型:(上圖PDU Type裡的4種)

再加Scan_Req和Scan_Rsp,用來發送掃描請求以獲得比廣播裡帶的資訊更多的Scan_Rsp。

再加Connect_Req,用來發送連接配接請求。

以上就構成了廣播包的所有類型。

========================畫個杠杠,下面講資料包幀格式===========================

二話不說,上圖:

BLE協定學習總結

圖表 11 資料包幀格式

很清晰吧,多強調一點,LL層封包主要分為兩類:LL Data PDU和LL Control PDU。LL Control PDU有以下内容:

BLE協定學習總結

圖表 12 LL層控制封包

繼續吧,後面該payload length字段了,也就是上圖綠色那個。

BLE協定學習總結

圖表 13 資料包幀格式續

========================LL層over,下面是L2CAP============================

L2CAP存在的價值就是可以适配不同的上層協定,諸如:ATT/SMP。繼續上圖:

BLE協定學習總結

圖表 14 L2CAP幀格式

繼續分解上圖黃色三條:

BLE協定學習總結

圖表 15 L2CAP幀格式續

講到這裡,BLE的幀結構基本就完了。那這些幀是以怎麼個序列互動的呢?協定其實就是一種語言,讓彼此能聽懂意思。

對于BLE的通信過程,我總結如下:

1. BLE廣播者廣播自己,廣而告之,告訴大家:我是誰?我有什麼服務?

2. BLE 掃描者掃描廣播者

a) 主動掃描,發送scan req封包,廣播者回應scan response封包

b) 被動掃描,默默掃。

3. BLE 掃描者發起連接配接請求。角色為Master,廣播者是Slave。請求裡告知後續通信的參數,諸如:Slave該什麼時候醒來打開Rx,跳頻怎麼跳等

4. 然後就是正常步調一緻的通信,同時醒來,Master Tx一包,Slave Tx回應一包,再睡,如此循環。

BLE協定學習總結

圖表 16 BLE廣播/連接配接/通信

BLE協定學習總結

圖表 17 Connect Req封包裡帶的連接配接參數

BLE協定學習總結

圖表 18 連接配接參數詳解

BLE協定學習總結

圖表 19 連接配接參數詳解續

BLE協定學習總結

圖表 20 BLE宏觀通信過程

==============================BLE基本通信過程over==============================

藍牙通信通道有了,那用來幹什麼呢?這就要談起ATT和GATT了。有了它們,才能完整地提供象運動手環檢測心率這樣的應用服務。哈哈,是不是很激動呀,終于從下蹿到頂了 :)

那我們就先說應用服務,GATT的規定,應用對應profile,profile裡包含若幹service,service由characteristic組成,characteristic又由attribute組成,attribute是資料細胞機關。

BLE協定學習總結

舉個栗子,如圖就是一個心率profile。

BLE協定學習總結

圖表 21 心率應用

應用定義是有了,但如何通過封包互動發現服務以及讀寫操作服務内容呢?這就是GATT/ATT幹的事。如下:

BLE協定學習總結

=============================BLE從下到上的通信過程over==========================

最後再講下BLE的安全,這就要提起SMP,還記得嗎?上面圖14和圖15 L2CAP其中支援的協定之一就是SMP。

SMP協定主要做2件事:鑒權和加密

為了這2件事,需要的過程分為3個階段:

BLE協定學習總結

具體封包互動過程:

BLE協定學習總結

圖表 22 SMP過程互動

每個BLE的裝置IO能力不一樣,合作起來就要雙方協商出一種鑒權方式,具體方法:

BLE協定學習總結

圖表 23 BLE裝置IO能力

裝置IO能力有表示方法了,那就雙方碰一碰下呗

BLE協定學習總結

這樣就決定好了鑒權方式,然後按照上面通信流程生成LTK密鑰,SKD為随機數,再合起來生成

Session Key,進行資料加解密。如下圖:

BLE協定學習總結

4 End

​ 基本就寫到這裡吧,後續再會補充點抓包封包,以供參考學習。歡迎同學們批評指正,随時拍磚...

5 文中引用的示圖出處

圖表編号 圖表描述 引用出處
圖表 2 BLE OSI架構 藍牙技術聯盟 Core_v5.1.pdf
圖表 3 跳頻 無線技術聯盟
圖表 4 有跳頻的效果圖
圖表 5 無跳頻的效果圖
圖表 12 LL層控制封包
圖表 16 BLE廣播連接配接通信
圖表 20 BLE宏觀通信過程
圖表 22 SMP互動過程
圖表 23 BLE裝置IO能力

原文作者:LG

點選檢視原文

繼續閱讀