藍牙協議專題 【1】—— HCI 協議

前言:

爲了方便查看博客,特意申請了一個公衆號,附上二維碼,有興趣的朋友可以關注,和我一起討論學習,一起享受技術,一起成長。

在這裏插入圖片描述


1. 簡述

HCI(Host Interface Controller):是 Host 和 Controller 通信之間的接口。定義了特定的格式來控制藍牙芯片來做相應的動作(比如:inquiry,connect,disconnect)

在這裏插入圖片描述

HCI 層爲上層級提供了一個統一訪問 HCI 控制器的接口,其接口爲一系列的指令和事件,接口適用於 BR/EDR/LE/AMP 控制器。

HCI 層位於藍牙高層協議和低層協議之間,其目的是實現主機設備與藍牙模塊之間的互操作,即 HCI 是藍牙主機與主機控制器間軟硬件接口。HCI 爲藍牙硬件中基帶控制器和鏈接管理器提供了命令接口,從而實現對硬件狀態註冊器和控制寄存器的訪問,提供了對藍牙基帶的統一訪問模式。 目前,HCI 的傳輸層主要有:USB,RS-232,UART 等。

2. 數據交互

HCI 是雙向的,發給 Controller 的命令稱之爲 HCI Command,Controller 發給上層的成爲 HCI Event。

在這裏插入圖片描述

模塊接收到每個 CMD 後都會回覆一個與之對應的 EVENT 作爲迴應。 此機制應作爲軟件流控機制處理。 即, MCU 發送 CMD 後應等待一個與之對應的 EVENT, 收到 EVENT 後再發送新的 CMD。

藍牙啓動的時候,主機會像藍牙發送:復位、波特率設置、協議代碼等,一般藍牙穩定後發送一個 READY EVENT 通知主機可以正常發送 CMD。

2.1 HCI CMD

Controller 可以接受除去 host 包頭外的 255 字節。

在這裏插入圖片描述
CMD 包格式參考: 【0x01 0x01 0x06 0x11 0x22 0x33 0x44 0x55 0x66】

類型 長度 數據
CMD Byte0 0x01
Opcode Byte1 0x01
Length Byte2 0x06
Payload Byte3~Byte8 0x11 0x22 0x33 0x44 0x55 0x66

在這裏插入圖片描述

2.2 HCI EVENT

模塊發送給 MCU 的包稱爲 EVENT(事件), 模塊通過發送 EVENT 來完成通知藍牙狀態變化、 上報數據等操作。

在這裏插入圖片描述

參數 解釋
Event Code 用以區分不同的事件(0x00~0xFF)
Parameter_Total_length 參數的長度(以字節爲單位)
Event Parameter[0] ~ Event Parameter[N] 參數列表

CMD 包格式參考:

在這裏插入圖片描述

參考:

  1. BLE(16)—— BLE 層次(HOST/HCI/Controller)
  2. 藍牙HCI剖析(一)
  3. BLUETOOTH SPECIFICATION Version 4.2
  4. 藍牙HCI剖析(三)
  5. 藍牙配對過程分析(經典藍牙)
  6. 藍牙HCI-UART主控制接口的FPGA設計與實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章