一. 蓝牙Host(蓝牙协议栈)跟蓝牙Controller(蓝牙芯片)交互格式
蓝牙协议栈跟蓝牙芯片都是使用统一的数据来交互的,由SIG规定(备注:部分芯片有HCI vendor命令),一般交互的有以下几种类型(注意:如果没有特别声明,所有的数据)
1) HCI command,由蓝牙协议栈给蓝牙芯片发送命令,来控制芯片行为,分几个OGF(Groups)在后面小节讲HCI command的时候会介绍。
2)HCI event,由蓝牙芯片上报事件给蓝牙协议栈的事件
3)HCI acl数据,蓝牙协议栈跟蓝牙芯片双向交互的L2CAP以及上层数据
4)HCI sco,蓝牙协议栈跟蓝牙芯片交互的SCO音频是数据
5)HCI iso,蓝牙协议栈跟蓝牙芯片交互的BLE audio的数据(Core 5.2才增加)
二. HCI Command(HCI命令介绍)
HCI命令包用于从协议栈发送给芯片的命令。HCI命令包的格式如下图所示:
Opcode:每个命令被分配一个2字节的操作码(opcode),用来唯一地识别不同类型的命令,操作码(opcode)参数分为两个字段,称为操作码组字段(Opcode Group Field, OGF)和操作码命令字段(Opcode Command Field, OCF)。其中OGF占用高6bit字节,OCF占用低10bit字节。
一共有以下几组OGF:
1)Link Control commands, the OGF is defined as 0x01.
2)Link Policy commands, the OGF is defined as 0x02
3)HCI Control and Baseband commands, the OGF is defined as 0x03
4)Informational Parameters commands, the OGF is defined as 0x04
5)status p