Bluetooth HCI简述

25 年 9 月 21 日 星期日 (已编辑)
487 字
3 分钟

HCI 是 Host 与 Controller 交互的桥梁. HCI的数据格式有以下几种:

  • Command
  • ACL
  • SCO
  • EVENT
  • ISO

Command

用于 Host 发送命令到 Controller. 如 Host 发送 HCI_Inquiry 命令使 Controller 进入 Inquiry 模式(用于发现周边的设备).

数据流向: Host --> Controller

数据组成: 由 headerparameters 组成. 总长度不超过258个字节, 其中前三个字节为header, 其余部分由数据参数组成.

  • Header Size: 3 bytes
  • Payload (Parameters) Size: 0 to 255 bytes
  • Total Packet Size: 3 to 258 bytes
hci-command-packet.excalidraw
hci-command-packet.excalidraw

Header 的构成:

  • 前两个字节组成了OPCODE
  • OPCODE由Opcode Group Field(OGF)和Opcode Command Field(OCF)组成
  • 高6位是OGF, 低10位bit是OCF
  • 第三个字节表示数据包中的参数长度(不是参数个数)

ACL

用于 Host 和 Controller 之间的数据交互. 如播放音乐的数据传输.

数据流向: Host <--> Controller

数据组成: 由 header 和 data 组成, 前4个字节是 header, 规范中并没有明确提及data部分的固定长度, 但是根据 Data Total Length 为2字节来看, 最长的 data 不超过65535字节.

  • Header Size: 4 bytes
  • Payload (Data) Size: 可变
hci-acl-packaet.excalidraw
hci-acl-packaet.excalidraw

SCO

用于 Host 与 Controller 之间的同步数据流交互(几乎只用于实时的语音交流). 如拨打电话的语音数据.

数据流向: Host <--> Controller

数据组成: 由 header 和 data 组成, 规范中并没有明确提及包大小. 前三个字节是header, 仅有一个字节表示data的大小, 所以data部分最大也只能是255字节

  • Header Size: 3 bytes
  • Payload (Voice Data) Size: 0 to 255 bytes
  • Total Packet Size: 3 to 258 bytes
hci-sco-packet.excalidraw
hci-sco-packet.excalidraw

Event

用于 Controller 通知 Host 存在事件发生. 如 Controller 发送 HCI_Inquiry_Complete 事件到 Host (表示 Inquiry 已经完成).

数据流向: Controller --> Host

数据组成: 由 headerparams 组成. 总长度不超过257个字节, 其中前两个字节为 header, 其余部分由数据参数组成.

  • Header Size: 2 bytes
  • Payload (Parameters) Size: 0 to 255 bytes
  • Total Packet Size: 2 to 257 bytes
hci-event-packet.excalidraw
hci-event-packet.excalidraw

ISO

文章标题:Bluetooth HCI简述

文章作者:zabbits

文章链接:https://zabbits.com/posts/bluetooth/hci[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。