2019年1月24日 星期四

DIY - ESP32:ESP32 藍牙(Bluetooth)GAP 介紹(七十九)

DIY - ESP32:ESP32 藍牙(Bluetooth)GAP 介紹(七十九):

藍牙(Bluetooth)4.0 是 2012年公佈的最新標準,目標是更省電,通信距離更長,成本更低;藍牙 4.0 標準定義了兩種無線技術 BasicRate(BR)和 Bluetooth Low Energy(BLE)。 第二種 BLE 系統旨在每次傳輸非常小的資料包,這樣消耗更低的電量。BLE 協議棧中的重點則是與具體藍牙應用相關的 GAP(Generic Access Profile)和 GATT(Generic Attribute Profile),GAP 定義了 BLE 網絡堆棧的一般拓撲。GATT 詳細描述了設備具有專用連接後如何傳輸屬性(數據)。這兩層直接與應用程式打交道,最實用的對外介面為 GAP 和 GATT 層介面函數。我們的應用層代碼和 Profile 層都是建立在 GAP或者 GATT 之上,例如 GAP Peripheral Profile 就是建立在 GAP 層之上。

藍牙結構內的 GAP 與下層關係
GAP 為通用訪問規範,Profile 可以理解為共同約定的配置或規範,只要你我遵守同一個 Profile,就可以相互打招呼。 該 Profile 保證不同的 Bluetooth 產品可以互相發現對方並建立連接,GAP 定義了藍牙設備如何發現和建立與其他設備的安全或不安全的連接,其中具體包括:設備發現,創建連接,終止連接,安全結構的初始化和設備連接參數配置等。

GAP為通用訪問規範
GAP層通常扮演以下四種角色中的一種:
廣播者Broadcaster
廣告發送者,不是可連接的設備
觀察者Observer
掃描廣告,不能夠啟動連接
週邊設備Peripheral
廣告發送者,是可連接的設備,在單一鏈路層連接時作為一個從機
中央設備Central
掃描廣告啟動連接,在單一或者多鏈路層連接時作為主機,支援三個同時連接

藍牙 BLE 連接程序
藍牙低能耗技術完成一次連接(即掃描其它設備、建立鏈路、發送資料、認證和適當地結束)只需3ms。而標準藍牙技術完成相同的連接週期需要數百毫秒。

連接前,週邊設備需要先廣播,向中央設備通告自己的存在,主要有這幾個參數:
廣播間隔
  單位 0.625ms,廣播快,容易被中央設備發現,慢則省電.
廣播持續時間
  為了省電,可以廣播一段時間之後
 

藍牙 GAP 規範
GAP 層有 4種不同類型的廣播(Advertising):
PDU類型
PDU格式
說明
Advertising
ADV_IND

不可連接廣播(Non-connectable Undirected Advertising
AdvA(6 octets)
AdvData(0~31 octets)
connectable undirected advertising event,用於常規的廣播,可攜帶不超過 31bytes 的廣播資料,可被連接可被掃描
AdvA6bytes 的廣播者地址,並由 PDU Header TxAdd bit 決定地址的類型(0 public1 random);
AdvData,廣播資料。
 
ADV_DIRECT_IND

通用廣播(Connectable Directed Advertising
AdvA(6 octets)
InitA(6 octets)
connectable directed advertising event,專門用於點對點連接,且已經知道雙方的藍牙位址,不可攜帶廣播資料,可被指定的設備連接不可被掃描
AdvA6bytes 的廣播者地址,並由 PDU Header TxAdd bit 決定地址的類型(0 public1 random);
InitA6bytes 的接收者(也是連接發起者)位址,並由 PDU Header RxAdd bit 決定地址的類型(0 public1 random)。
 
ADV_NONCONN_IND

不可連接廣播(Non-connectable Undirected Advertising
AdvA(6 octets)
AdvData(0~31 octets)
ADV_IND 類似,但不可以被連接不可以被掃描
 
ADV_SCAN_IND

可發現廣播(Scannable Undirected Advertising
AdvA(6 octets)
AdvData(0~31 octets)
ADV_IND 類似,但不可以被連接可以被掃描
Scanning
SCAN_REQ
ScanA(6 octets)
AdvA(6 octets)
當接收到 ADV_IND 或者 ADV_SCAN_IND 類型的廣播資料的時候,可以通過該 PDU,請求廣播者廣播更多的資訊:
ScanA6bytes 的本機地址,並由PDU Header TxAdd bit 決定地址的類型(0 public1 random);
AdvA6bytes 的廣播者地址,並由PDU Header RxAdd bit 決定地址的類型(0 public1 random)。
 
SCAN_RSP
AdvA(6 octets)
ScanRspData(0~31 octets)
廣播者收到 SCAN_REQ 請求後,通過該 PDU 回應,把更多的資料傳送給接受者。
AdvA6bytes 的廣播者地址,並由PDU Header TxAdd bit 決定地址的類型(0 public1 random);
ScanRspDatascan 的應答數據。
Initiating
CONNECT_REQ
InitA (6 octets)
AdvA (6 octets)
LLData (22 octets)
當接收到 ADV_IND 或者ADV_DIRECT_IND 類型的廣播資料的時候,可以通過該 PDU,請求和對方建立連接:
InitA6bytes 的本機地址,並由 PDU Header TxAdd bit 決定地址的類型(0 public1 random);
AdvA6bytes 的廣播者地址,並由 PDU Header RxAdd bit 決定地址的類型(0 public1 random);
LLDataBLE 連接有關資訊。

藍牙 GAP 廣播資料和掃描應答資料的格式
GAP 通常還會負責啟動 BLE 連接的安全功能。只有對通過身份驗證的連接而言某些資料是可讀或可寫的。一旦形成一個連接,兩個設備可以通過一個過程被稱為配對。進行配對時,金鑰建立加密和認證的連結。在一個典型的案例,週邊設備需要中央設備提供金鑰以完成配對過程。這可能是一個固定值,如 0000,或可能是一個隨機生成的值被提供給用戶。中央設備發送正確的金鑰後,兩台設備交換安全金鑰加密和驗證的連結。在許多情況下,相同的中央設備和週邊設備將會經常建立連接和斷開連接。BLE 具有一個安全功能允許兩個設備在配對的時候給對方一個長久的安全金鑰。此功能稱為綁定,使得兩個重連設備能夠迅速重新確立加密和認證而不需要經過充分的配對過程,只要它們存儲長期的金鑰資訊。

藍牙內的 SMP 安全管理功能
2019年 1月 24日 天氣報告
氣溫:17.0@ 20:10
相對濕度:百分之 64%
天氣:天色良好

沒有留言:

張貼留言