認識BLE 5協議棧 主機控制器介面

2021-08-28 13:58:20 字數 4460 閱讀 8575

** 

ble協議棧規定物理層、鏈路層和dtm層屬於控制器,其他協議層屬於主機,主機與控制器之間的通訊是通過主機控制器介面傳輸層完成的。

主機控制器介面常簡稱為hci(host controller inte***ce)。

hci定義了一套「命令-事件」機制,主機向控制器傳送hci命令,控制器向主機返回命令執行結果。應用層的所有操作都會轉換成hci命令傳給控制器。

hci介面物理形式可以是串列埠、spi、usb和三線串列埠。

對於串列埠hci,其通訊模型如下:

左側藍芽主機向右側藍芽控制器傳送命令,控制器返回命令執行狀態。當收到對端裝置傳送的訊息,控制器會以事件形式傳送給主機。

通過hci的資料報括:hci命令、hci事件和連線資料。hci層本身不能區分這三種型別,因此在傳送hci資料報前需要先傳送該資料報的型別指示資訊。串列埠hci的資料報型別指示資訊如下:

hci包型別

指示資訊

hci命令

0x01

連線資料

0x02

hci事件

0x04

指示資訊中缺少0x03,該資訊用於經典藍芽概念。

包型別指示位在hci包傳送前發給給主機或控制器。

兩個裝置建立連線後相互收發資料,從主機將資料傳送給控制器,再通過無線傳送到對端裝置,或控制器接收到對端裝置資料後通過hci傳送給主機。連線資料的結構如下所示:

hci命令包包括:操作碼opcode、引數總長度和引數個數,如下所示:

為了避免控制器的緩衝區溢位,傳送命令包時需要應用流程控制。主機向控制器傳送乙個命令,控制器返回命令執行狀態事件,事件中包含引數num hci command packets,該引數指主機可以傳送的最大命令包的數量。

控制器按接收順序執行主機命令,但後面的命令可能提前執行完畢。

如果命令執行出錯,將在控制器的狀態事件中包含錯誤碼。

hci命令非常多,將近300個,ble僅支援部分命令,所有ble專屬的命令ogf欄位都等於0x08。

下面列出ble支援的最基礎的一部分hci命令:

命令描述

le add device to white list command

新增白名單

le clear white list command

清空白名單

le read buffer size command

讀控制器快取

le read local supported features command

讀本裝置支援的功能

le read supported states command

讀本裝置支援的狀態

le read white list size command

讀白名單空間

le remove device from white list command

從白名單移除裝置

le set event mask command

設定事件掩碼

le test end command

結束測試

read bd_addr command

讀取裝置位址

reset command

重啟le read advertising channel tx power command

讀取廣播發射功率

le transmitter test command

傳送資料測試

le set advertising data command

設定廣播資料

le set advertising enable command

開啟廣播

le set advertising parameters command

設定廣播引數

le set random address command

設定隨機位址

le receiver test command

接收資料測試

le set scan enable command

開啟掃瞄

le set scan parameters command

設定掃瞄引數

disconnect command

斷開連線

hci事件包包括:時間**, 引數總長度和具體引數,如下所示:

hci事件包不強制要求流程控制,因為通常主機總是具有充足資源來處理控制器返回的事件。

當連線斷開時,主機預設所有命令都已經執行完畢,將不再接收任何事件。

控制器收到不同的主機命令,可能返回以下型別事件:

對於不涉及連線的命令,可以立即得到執行結果,執行完畢事件報告該命令執行成功或失敗。

對於涉及連線的命令,無法立即得到執行結果,命令執行完畢後,先返回執行完畢事件,等命令最終結果產生,再返回新的執行完畢事件。比如le create connection command命令,執行命令時先返回執行完畢,表面鏈路層開始執行或加入執行佇列,待兩端裝置建立連線,將返回連線完成事件。

部分讀命令,比如le read advertising channel tx power command,執行完畢後將讀取結果存放在狀態資訊事件中返回。

hci事件包括ble專有事件和通用事件,通用事件適用於經典藍芽和ble。ble專有事件稱為「元事件(le meta event)」,共有20個,它們的事件**均為0x3e,事件引數的第乙個位元組為subevent_code,用以區分不同的元事件。如下:

事件subevent_code

描述le connection complete event

0x01

建立連線完畢

le advertising report event

0x02

檢測到廣播資料或收到掃瞄響應資料

le connection update complete event

0x03

連線引數更新完畢

le read remote features complete event

0x04

讀取對端裝置功能完畢

le long term key request event

0x05

控制器向主機傳送ltk以加密鏈結

le remote connection parameter request event

0x06

對端裝置發起更新連線引數請求

le data length change event

0x07

控制器通知主機鏈路層資料長度發生了更新

le read local p-256 public key complete event

0x08

控制器通知主機p-256金鑰生成完畢

le generate dhkey complete event

0x09

控制器通知主機橢圓加密演算法金鑰生成完畢

le enhanced connection complete event

0x0a

建立連線完畢(還支援擴充套件連線)

le directed advertising report event

0x0b

檢測到定向廣播資料或掃瞄響應資料

le phy update complete event

0x0c

物理層更新完畢

le extended advertising report event

0x0d

檢測到擴充套件廣播資料或掃瞄響應資料

le periodic advertising sync established event

0x0e

建立週期廣播同步完畢

le periodic advertising report event

0x0f

檢測到週期廣播資料或掃瞄響應資料

le periodic advertising sync lost event

0x10

週期廣播資料無法同步

le scan timeout event

0x11

掃瞄超時

le advertising set terminated event

0x12

終止廣播資料集事件

le scan request received event

0x13

收到掃瞄請求

le channel selection algorithm event

0x14

使用了通道選擇演算法

BLE協議棧 介紹

ble協議棧的官方文件 這些網路資源對於協議棧的細節大多點到為止,無以深入,於是我嘗試結合自己的經驗,挑重點介紹一下ble協議棧的內容。成文過程主要參考 ble權威指南 一書,也利用google baidu做了大量搜尋,借鑑了許多第三方部落格和論壇的優質答案並保留了原始鏈結,盡可能將一些問題解釋清楚...

ble不配對直接鏈結 BLE協議棧 HCI

在ble協議棧的層模型中,位於下部的物理層 鏈路層 dtm屬於控制器,位於上部的l2cap att gatt gap sm層則屬於主機,在主機之上使用者自己的程式稱為使用者程式。因此ble協議棧進一步可以抽象為三層 控制器 主機和使用者程式。ble協議棧規劃的晶元實現方案有單晶元方案,雙晶元方案和三...

藍芽4 0BLE協議棧介紹

問題 什麼是ble協議棧?ble協議棧與ble協議的關係?顧名思義,人類之間需要一種語言才能溝通,機器之間,電子之間也有乙個標準,也就是作為通訊標準,也就是通訊協議。協議 定義了一系列通訊標準,通訊雙方都按照這一標準,進行資料通訊。協議棧 協議的具體實現形式,實現的函式庫,韌體庫。把個個協議集合到了...