蓝牙协议专题 【1】—— HCI 协议

前言:

为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

在这里插入图片描述


1. 简述

HCI(Host Interface Controller):是 Host 和 Controller 通信之间的接口。定义了特定的格式来控制蓝牙芯片来做相应的动作(比如:inquiry,connect,disconnect)

蓝牙协议专题 【1】—— HCI 协议_第1张图片

HCI 层为上层级提供了一个统一访问 HCI 控制器的接口,其接口为一系列的指令和事件,接口适用于 BR/EDR/LE/AMP 控制器。

HCI 层位于蓝牙高层协议和低层协议之间,其目的是实现主机设备与蓝牙模块之间的互操作,即 HCI 是蓝牙主机与主机控制器间软硬件接口。HCI 为蓝牙硬件中基带控制器和链接管理器提供了命令接口,从而实现对硬件状态注册器和控制寄存器的访问,提供了对蓝牙基带的统一访问模式。 目前,HCI 的传输层主要有:USB,RS-232,UART 等。

2. 数据交互

HCI 是双向的,发给 Controller 的命令称之为 HCI Command,Controller 发给上层的成为 HCI Event。

蓝牙协议专题 【1】—— HCI 协议_第2张图片

模块接收到每个 CMD 后都会回复一个与之对应的 EVENT 作为回应。 此机制应作为软件流控机制处理。 即, MCU 发送 CMD 后应等待一个与之对应的 EVENT, 收到 EVENT 后再发送新的 CMD。

蓝牙启动的时候,主机会像蓝牙发送:复位、波特率设置、协议代码等,一般蓝牙稳定后发送一个 READY EVENT 通知主机可以正常发送 CMD。

2.1 HCI CMD

Controller 可以接受除去 host 包头外的 255 字节。

蓝牙协议专题 【1】—— HCI 协议_第3张图片
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

蓝牙协议专题 【1】—— HCI 协议_第4张图片

2.2 HCI EVENT

模块发送给 MCU 的包称为 EVENT(事件), 模块通过发送 EVENT 来完成通知蓝牙状态变化、 上报数据等操作。

蓝牙协议专题 【1】—— HCI 协议_第5张图片

参数 解释
Event Code 用以区分不同的事件(0x00~0xFF)
Parameter_Total_length 参数的长度(以字节为单位)
Event Parameter[0] ~ Event Parameter[N] 参数列表

CMD 包格式参考:

蓝牙协议专题 【1】—— HCI 协议_第6张图片

参考:

  1. BLE(16)—— BLE 层次(HOST/HCI/Controller)
  2. 蓝牙HCI剖析(一)
  3. BLUETOOTH SPECIFICATION Version 4.2
  4. 蓝牙HCI剖析(三)
  5. 蓝牙配对过程分析(经典蓝牙)
  6. 蓝牙HCI-UART主控制接口的FPGA设计与实现

你可能感兴趣的:(Bluetooth)