藍牙(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為通用訪問規範 |
廣播者(Broadcaster)
|
廣告發送者,不是可連接的設備
|
觀察者(Observer)
|
掃描廣告,不能夠啟動連接
|
週邊設備(Peripheral)
|
廣告發送者,是可連接的設備,在單一鏈路層連接時作為一個從機
|
中央設備(Central)
|
掃描廣告啟動連接,在單一或者多鏈路層連接時作為主機,支援三個同時連接
|
藍牙 BLE 連接程序 |
連接前,週邊設備需要先廣播,向中央設備通告自己的存在,主要有這幾個參數:
廣播間隔
|
單位 0.625ms,廣播快,容易被中央設備發現,慢則省電.
|
廣播持續時間
|
為了省電,可以廣播一段時間之後
|
藍牙 GAP 規範 |
狀態
|
PDU類型
|
PDU格式
|
說明
|
Advertising
|
ADV_IND
不可連接廣播(Non-connectable Undirected
Advertising)
|
AdvA(6 octets)
AdvData(0~31 octets) |
connectable undirected advertising event,用於常規的廣播,可攜帶不超過 31bytes 的廣播資料,可被連接,可被掃描:
AdvA,6bytes 的廣播者地址,並由 PDU Header 的 TxAdd bit 決定地址的類型(0 public,1 random); AdvData,廣播資料。 |
ADV_DIRECT_IND
通用廣播(Connectable Directed Advertising)
|
AdvA(6 octets)
InitA(6 octets) |
connectable directed advertising event,專門用於點對點連接,且已經知道雙方的藍牙位址,不可攜帶廣播資料,可被指定的設備連接,不可被掃描:
AdvA,6bytes 的廣播者地址,並由 PDU Header 的 TxAdd bit 決定地址的類型(0 public,1 random); InitA,6bytes 的接收者(也是連接發起者)位址,並由 PDU Header 的 RxAdd bit 決定地址的類型(0 public,1 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,請求廣播者廣播更多的資訊:
ScanA,6bytes 的本機地址,並由PDU Header 的 TxAdd bit 決定地址的類型(0 public,1 random); AdvA,6bytes 的廣播者地址,並由PDU Header 的 RxAdd bit 決定地址的類型(0 public,1 random)。 |
SCAN_RSP
|
AdvA(6 octets)
ScanRspData(0~31 octets) |
廣播者收到 SCAN_REQ 請求後,通過該 PDU 回應,把更多的資料傳送給接受者。
AdvA,6bytes 的廣播者地址,並由PDU Header 的 TxAdd bit 決定地址的類型(0 public,1 random); ScanRspData,scan 的應答數據。 |
|
Initiating
|
CONNECT_REQ
|
InitA (6 octets)
AdvA (6 octets) LLData (22 octets) |
當接收到 ADV_IND 或者ADV_DIRECT_IND 類型的廣播資料的時候,可以通過該 PDU,請求和對方建立連接:
InitA,6bytes 的本機地址,並由 PDU Header的 TxAdd bit 決定地址的類型(0 public,1 random); AdvA,6bytes 的廣播者地址,並由 PDU Header 的 RxAdd bit 決定地址的類型(0 public,1 random); LLData,BLE 連接有關資訊。 |
GAP 通常還會負責啟動 BLE 連接的安全功能。只有對通過身份驗證的連接而言某些資料是可讀或可寫的。一旦形成一個連接,兩個設備可以通過一個過程被稱為配對。進行配對時,金鑰建立加密和認證的連結。在一個典型的案例,週邊設備需要中央設備提供金鑰以完成配對過程。這可能是一個固定值,如 0000,或可能是一個隨機生成的值被提供給用戶。中央設備發送正確的金鑰後,兩台設備交換安全金鑰加密和驗證的連結。在許多情況下,相同的中央設備和週邊設備將會經常建立連接和斷開連接。BLE 具有一個安全功能允許兩個設備在配對的時候給對方一個長久的安全金鑰。此功能稱為綁定,使得兩個重連設備能夠迅速重新確立加密和認證而不需要經過充分的配對過程,只要它們存儲長期的金鑰資訊。
藍牙內的 SMP 安全管理功能 |
2019年 1月 24日 天氣報告
氣溫:17.0度 @ 20:10
相對濕度:百分之 64%
天氣:天色良好
沒有留言:
張貼留言