1. 程式人生 > >BLE4.0教程一 藍牙協議連接過程與廣播分析

BLE4.0教程一 藍牙協議連接過程與廣播分析

black lap hit erl 改變 對象 藍牙低功耗 1.2 second

1.藍牙簡介

什麽是藍牙4.0

藍牙無線技術是使用範圍最廣泛的全球短距離無線標準之一,藍牙4.0版本涵蓋了三種藍牙技術,即傳統藍牙、高速藍牙和低功耗藍牙技術,將三種規範合而為一。它繼承了藍牙技術在無線連接上的固有優勢,同時增加了高速藍牙和低功耗藍牙的特點。這三個規格可以組合或者單獨使用。藍牙4.0規範的核心是低功耗藍牙(Low Energy),即藍牙4.0BLE。該技術最大特點是擁有超低的運行功耗和待機功耗,藍牙低功耗設備使用一粒紐扣電池可以連續工作數年之久。藍牙4.0技術同時還擁有低成本、向下兼容、跨廠商互操作性強等特點。

藍牙4.0 BLE的特點

藍牙4.0 BLE技術具有如下特點:

1.高可靠性

對於無線通信而言,由於電磁波在傳輸過程中容易受很多因素的幹擾,例如,障礙物的阻擋、天氣狀況等。因此,無線通信系統在數據傳輸過程中,具有內在的不可靠性。

藍牙技術聯盟(SIG)在制定藍牙4.0規範時已經考慮到了這種數據傳輸過程中的內在的不確定性,所以在射頻、基帶協議、鏈路管理協議(LMP)中采用可靠性措施,包括:差錯檢測和校正、進行數據編解碼、差錯控制、數據加噪等,極大地提高了藍牙無線數據傳輸的可靠性。另外,使用自適應跳頻技術,最大程度地減少和其他2.4GHz ISM頻段無線電波的串擾。

2.低成本、低功耗

低功耗藍牙支持兩種部署方式:雙模方式和單模方式。

(1)雙模方式,低功耗藍牙功能集成在現有的經典藍牙控制器中,或在現有經典藍牙技術(2.1+EDR/3.0+HS)芯片上增加低功耗堆棧,整體架構基本不變,因此成本增加有限。

(2)單模方式,面向高度集成、緊湊的設備,使用一個輕量級連接層(Link Layer)提供超低功耗的待機模式操作。藍牙4.0BLE技術可以應用於8bit MCU,目前TI公司推出的兼容藍牙4.0BLE協議的SoC芯片CC2540/CC2541,外接PCB天線和幾個阻容器件構成的濾波電路即可實現藍牙網絡節點的構建。

低功耗設計:藍牙4.0版本強化了藍牙在數據傳輸上的低功耗性能,功耗較傳統藍牙降低了百分之九十。

傳統藍牙設備的待機耗電量大一直是其缺陷之一,這與傳統藍牙技術采用 16~32 個頻道進行廣播不無關系,而低功耗藍牙僅使用了3個廣播通道,且每次廣播時射頻的開啟時間也由傳統的 22.5ms 減少到 0.6~1.2ms,這兩個協議規範的改變,大幅降低了因為廣播數據導致的待機功耗。

低功耗藍牙設計了用深度睡眠狀態來替換傳統藍牙的空閑狀態,在深度睡眠狀態下,主機(Host)長時間處於超低的負載循環(Duty Cycle)狀態,只在需要運作時由控制器來啟動,由於主機較控制器消耗的能源更多,因此這樣的設計也節省了最多的能源。

3.快速啟動,瞬間連接

此前藍牙版本為人詬病的地方就在於啟動速度方面,藍牙2.1版本的啟動連接需要 6s 時間,而藍牙4.0版本僅僅需要3ms即可完成,幾乎是瞬間連接。

4.傳輸距離極大提高

傳統藍牙傳輸距離為 2~10m,而藍牙4.0的有效傳輸距離可達到 60~100m,傳輸距離提升了十倍,極大開拓了藍牙技術的應用前景。當然,上述距離數值是在理想狀態下,實際使用過程中因為各種因素的影響,比如:空氣濕度、其他電磁信號幹擾等等,導致實際距離可能達不到上述理論值,通過抗幹擾等處理可以提高實際的傳輸距離。

5.高安全性

為了保證數據傳輸的安全性,使用AES-128 CCM加密算法進行數據包加密和認證。

藍牙4.0BLE無線網絡拓撲結構

藍牙4.0BLE網絡拓撲結構分為星型拓撲和廣播組拓撲。不同的網絡拓撲對應不同的應用領域,在藍牙4.0BLE的無線網絡中,不同的網絡拓撲結構對網絡節點的配置有不同的要求(藍牙網絡節點的類型可以分為主機、從機,也可以分為服務器、客戶端,具體配置需要根據配置文件決定)。

技術分享圖片 技術分享圖片

2.藍牙的狀態以及基本連接過程

2.1 藍牙的狀態:

藍牙具有5種狀態:

待機狀態(standby) :沒有連接任何設備,沒有傳輸和發送數據。

廣播狀態(Advertiser/advertising):周期性廣播狀態。

掃描狀態(Scanner/scanning) :主動尋找正在廣播的設備。

發起連接狀態(Initiator/initiating):主動發起連接。

連接狀態(connected) :已經連接。

2.2藍牙的角色

主設備 從設備

2.3藍牙的連接流程

技術分享圖片

BLE連接流程

找公司服務比喻

Master

Slave

消費者

服務方

待機模式

待機模式

空閑

空閑

掃描模式

廣播模式

尋找公司

發廣告

掃描請求

掃描回應

咨詢能提供什麽服務

告知服務

連接請求

簽署業務合同

連接參數請求

具體合同內容

參數更新請求

合同修改

參數更新回應

合同回應

建立連接

簽署合同

連接事件

開始業務合作

2.4連接事件和參數

2.4.1連接事件

主設備和從設備建立連接之後,所有的數據通信都是在連接事件(Connection Events)中進行的。

技術分享圖片

尖刺的波就是連接事件(Connection events),剩下的Sleeping是睡眠時間,設備在建立連接之後的大多數時間都是處於Sleeping,這種情況下耗電量比較低,而在連接事件(Connection events)中,耗電量就相對高很多,這也是BLE為什麽省電的原因之一。

每個連接事件(Connection events)中,都需要由Master發起包,再由Slave回復。

2.4.2連接參數

連接參數用於規定主從機數據通信時間,如果連接參數設置不合理,就會導致連接斷開。

主要連接參數有以下三個:

連接間隔(Connection interval

技術分享圖片

技術分享圖片

(GAPROLE_MIN_CONN_INTERVAL && GAPROLE_MAX_CONN_INTERVAL)連接間隔,在BLE的兩個設備的連接中使用跳頻機制。兩個設備使用特定的信道發送和接收數據,然後過一段時間後再使用新的信道(BLE協議棧的鏈路層處理信道的切換)。

兩個設備在切換信道後發送和接收數據稱為一個連接事件。盡管沒有應用數據被發送和接收,兩個設備仍舊會交換鏈路層數據(空包 Empty PDU)來維持連接。

連接間隔就是指在一個連接事件(Connection events)的開始到下一個連接事件(Connection events)的開始的時間間隔。連接間隔以1.25ms為單元,連接間隔的範圍是6 ~ 3200既7.5ms ~ 4s之間。

從機忽略(Slave Latency

技術分享圖片

允許Slave(從設備)在沒有數據要發的情況下,跳過一定數目的連接事件(Connection events),在這些連接事件(Connection events)中不必回復Master(主設備)的包,這樣就能更加省電。

範圍可以是0 ~ 499

更詳細的使用解析如下:

技術分享圖片

Slave Latency = OFF也就是Slave Latency為0時,Master發包,Slave必須回復,如果不回復,Master就會認為Slave那邊接收不正常。

Slave Latency = ON也就是Slave Latency不為0的時候,圖中Slave Latency為 3。Master發包,Slave沒有數據要回復的時候,就會忽略 3 個連接事件,在第 4 個連接事件接收到Master發送的數據之後,回復Master。如果Slave有數據要發送就會喚醒,也就是說即使Slave Latency為 3,但是在Master發第二包的時候Slave有數據要回復,這個時候就會立即回復Master而不是等到 3 個連接事件之後的第 4 個連接事件去回復。

超時時間(Supervision Timeout

技術分享圖片

這個參數設定了一個超時時間,如果BLE在這個時間內沒有發生通信的話,就會自動斷開。

單位是 10ms,該變量的範圍是10 ~ 3200,折算成時間範圍是100ms ~ 32s 。

連接間隔、從機時延以及超時時間這三者必須滿足如下公式:

Supervision Timeout > (1 +slaveLatency)* (connectionInterval)

上述公式必須滿足,否則連接就會不正常斷開。

這三個連接參數不同情況下對通信速率和功耗的影響:

1.Connection Interval縮短,Master和Slave通信更加頻繁,提高數據吞吐速度,縮短了數據發送的時間,當然也增加了功耗。

2.Connection Interval增長,通信頻率降低,數據吞吐速度降低,增加了數據發送的時間,當然,這種設置降低了功耗。

3.Slave Latency減少或者設置為 0,每次Connection Events中都需要回復Master的包,功耗會上升,數據發送速度會提高。

4.Slave Latency加長,功耗下降,數據發送速度降低。

註意修改連接參數的時候要滿足一定的要求:

1.安卓設備作主設備時,連接參數滿足的要求見本篇博文第二節"連接參數介紹"中提到的內容。另外實際開發過程中發現安卓設備作主設備時存在一個問題,就是部分安卓設備連接BLE設備之後,只能進行一次連接參數的修改。

2. 蘋果系統設備作主設備時,連接參數更新的要求比較苛刻,如下:

Interval Max * (Slave Latency + 1) ≤ 2 seconds

Interval Min ≥ 20 ms

Interval Min + 20 ms ≤ Interval Max

Slave Latency ≤ 4

connSupervisionTimeout ≤ 6 seconds

Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout

即:

最大連接間隔時間 *(從機延遲 + 1) ≤ 2s

最小連接間隔時間 ≥ 20 ms

最小連接間隔時間 + 20 ms ≤ 最大連接間隔時間

從機延遲 ≤ 4

超時時間 ≤ 6s

最大連接間隔時間 *(從機延遲 + 1)* 3 < 超時時間

所以如果你的BLE從設備需要被IOS主設備連接,那你的BLE從設備的默認申請的連接參數一定要滿足上述要求,並且連接過程中修改連接參數的時候也要滿足上述要求。

3.藍牙廣播的協議

藍牙廣播相關的參數有以下幾種:

Advertising interval 廣播間隔

Advertising_Type 廣播類型

Own_Address_Type 自身地址類型

Direct_Address_Type 定向地址類型

Direct_Address 定向地址

Advertising_Channel_Map廣播信道(一個廣播有三個信道)

Advertising_Filter_Policy 廣播過濾策略

Advertising Data 廣播數據

ScanReponse Data 響應數據

Advertising_Type廣播類型

技術分享圖片

1. 可連接的非定向廣播(Connectable Undirected Event Type):

這是一種用途最廣的廣播類型,包括廣播數據和掃描響應數據,它表示當前設備可以接受其他任何設備的連接請求。進行通用廣播的設備能夠被掃描設備掃描到,或者在接收到連接請求時作為從設備進入一個連接。通用廣播可以在沒有連接的情況下發出,換句話說,沒有主從設備之分。

鑒於此種廣播類型用的最多,下面我們來討論一下此類型下廣播事件中廣播包的發送情況,另外要註意在一個廣播事件中,前一個"ADV_IND PDUs"的開始到相鄰的下一個"ADV_IND PDUs"的開始處的時間要小於等於10ms

第一種情況:僅僅有廣播 PDUs 。截圖顯示如下:
技術分享圖片

第二種情況:在廣播事件的中間有"SCAN_REQ""SCAN_RSP PDUs"。截圖顯示如下:
技術分享圖片

第三種情況:在廣播事件的結尾有"SCAN_REQ""SCAN_RSP PDUs"。截圖顯示如下:
技術分享圖片

第四種情況:在廣播事件的中間接收到"CONNECT_REQ PDU"的情況。截圖顯示如下

技術分享圖片

2. 可連接的定向廣播(Connectable Directed Event Type):

定向廣播類型是為了盡可能快的建立連接。這種報文包含兩個地址:廣播者的地址和發起者的地址。發起者收到發給自己的定向廣播報文之後,可以立即發送連接請求作為回應。

定向廣播類型有特殊的時序要求。完整的廣播事件必須每3.75ms重復一次。這一要求使得掃描設備只需掃描3.75ms便可以收到定向廣播設備的消息。

當然,如此快的發送會讓報文充斥著廣播信道,進而導致該區域內的其他設備無法進行廣播。因此,定向廣播不可以持續1.28s以上的時間。如果主機沒有主動要求停止,或者連接沒有建立,控制器都會自動停止廣播。一旦到了1.28s,主機便只能使用間隔長得多的可連接非定向廣播讓其他設備來連接。

當使用定向廣播時,設備不能被主動掃描。此外,定向廣播報文的凈荷中也不能帶有其他附加數據。該凈荷只能包含兩個必須的地址。

3. 不可連接的非定向廣播(Non-connectable Undirected Event Type):

僅僅發送廣播數據,而不想被掃描或者連接。這也是唯一可用於只有發射機而沒有接收機設備的廣播類型。不可連接廣播設備不會進入連接態,因此,它只能根據主機的要求在廣播態和就緒態之間切換。

4. 可掃描的非定向廣播(Scannable Undirected Event Type):

又稱可發現廣播,這種廣播不能用於發起連接,但允許其他設備掃描該廣播設備。這意味著該設備可以被發現,既可以發送廣播數據,也可以響應掃描發送掃描回應數據,但不能建立連接。這是一種適用於廣播數據的廣播形式,動態數據可以包含於廣播數據之中,而靜態數據可以包含於掃描響應數據之中。

註意:所謂的定向和非定向針對的是廣播的對象,如果是針對特定的對象進行廣播(在廣播包PDU中會包含目標對象的MAC)就是定向廣播,反之就是非定向。可連接和不可連接是指是否接受連接請求,如果是不可連接的廣播類型,它將不回應連接請求。可掃描廣播類型是指回應掃描請求。

不同的廣播類型對掃描請求和連接請求的不同結果如下圖:

技術分享圖片

Advertising And ScanReponse Data (廣播和掃描回應數據)

廣播數據和掃描回應數據,它們的長度都不能超過31個字節(0 ~ 31),

數據的格式必須滿足下圖的要求,可以包含多個AD數據段,但是每個AD數據段必須由"Length:Data"組成,其中Length占用1個octet,Data部分占用Length個字節,所以一個AD段的長度為:Length+1。

格式圖如下所示:

技術分享圖片

註:1 octet = 1 byte = 8 bit

BLE4.0教程一 藍牙協議連接過程與廣播分析