前言:
爲了方便查看博客,特意申請了一個公衆號,附上二維碼,有興趣的朋友可以關注,和我一起討論學習,一起享受技術,一起成長。
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 包格式參考: