蓝牙协议专题 【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设计与实现
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章