BLE4.0教程一 藍牙協議連接過程與廣播分析
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教程一 藍牙協議連接過程與廣播分析