目录

在 BLE 协议中,传输层位于 Host 和 Controller 之间,提供一种无需知道数据内容便可以传输数据的能力。其主要是通过硬件传输介质(如:UART、SDIO、USB 等),传输上层数据。

上图即是 UART 传输层的功能框图。
一、HCI 简介
Core5.4 P1728
该图展示了两个设备之间的数据传输路径。Host 通过 HCI Driver 和 Controller 硬件上的 HCI Firmware 交换数据和命令,这就是 HCI 的功能。
HCI提供了一种统一接口用来访问,控制Controller,传输层是透明的,独立于底层传输技术,并且无需关系Host传输给Controller的数据是什么内容.- 在
HOST与Controller之间,以Command与Event命令方式进行传输。Host发送Command信息到Controller,Controller将Command Status和Params以Event的形式返回给Host,最后返回Command Complete Event表示连接完成。
二、HCI 数据包
1、HCI 数据包类型
HCI 有五种类型的包格式,见下表:

HCI Command Packet:由主机向控制器发送命令,即Host -> ControllerHCI Event Packet:由蓝牙芯片上报给蓝牙协议栈的事件,即Controller -> HostHCI ACL Data Packet:用于主机和 ACL 之间的数据交换。HCI Synchronous Data Packet:用于在主机和控制器之间交换同步数据。HCI ISO Data packet:用于在主机和控制器之间交换同步数据。
在 Host 和 Controller 之间,HCI 的命令和事件类型如下:
详见 Core v5.4 P1731
2、HCI 数据包格式
下面对刚才讲到的五种 HCI 通信包的格式进行分析。
Core v5.4 P1800
2.1 HCI Command packet
HCI Comand 包用于从主机向控制器发送命令。HCI Command 数据包的格式如下图所示,下面将解释每个字段的定义。
控制器应该能够接受 HCI Command 包的数据最多 255 字节,不包括 HCI 命令包头。HCI 命令报文头是报文的前 3 个字节。

2.1.1 Opcode 字段

每个命令都分配了一个 2 字节的操作码(Opcode),用于唯一标识不同类型的命令。Opcode 参数分为两个字段,分别称为操作码组字段(Opcode Group Field,OGF)和操作码命令字段(Opcode Command Field,OCF)。
OGF:占据高 6bit,对应不同类别的蓝牙命令OCF:占据低 10bit,对应某一类别下的唯一的蓝牙命令,其中 0X3F 为制造商的调试命令.
比如有一个二维数组,也就是多个一维数组的集合,
OGF则定位到是第几个一维数组,OCF则是定位到一维数组的的具体的元素上



最低0.47元/天 解锁文章
2431





