Android 中的蓝牙通信流程

Bluetooth Communication flow in Android

我正在尝试了解 Android 从蓝牙堆栈到蓝牙芯片的通信流程。我找到了有关 Android here 蓝牙的文档。但是,它没有详细描述通信,尤其是从蓝牙堆栈到芯片的通信。这是我的问题:

  1. 与BT芯片通讯涉及的系统模块有哪些 及其流程?

  2. HCI在上述流程中的作用是什么?

  3. HCI 是否执行与蓝牙芯片的实际通信(命令和数据传输)?或者它只执行记录通信(HCISnoop 日志)。

如果有人能就我的查询提供明确的解释或链接,我将不胜感激。

提前致谢。

What are the System modules involved in communication to BT chip and its flow?

一般来说,蓝牙堆栈(不仅是 Bluedroid)会通过 uart(嵌入式设备,例如 phone 或 carkit)或 USB(最常用于 PC)与芯片通信,然后在一个线程用于读取来自芯片(使用H4协议或BCSP),我们可以将写入线程视为一个线程(也是相同的协议)。 流程就像在初始化过程中一样,蓝牙芯片将上电(使用 rfkill 例如在 Linux 或 Android 上),并且堆栈将打开硬件接口,例如UART,写入一些配置文件(例如本地蓝牙地址)和补丁文件,然后对芯片进行预热。之后芯片和堆栈就可以工作了:normally:.

What is the role of HCI in the above flow?

我不确定您所说的术语 "HCI in the above flow" 是什么意思,我想您指的是数据流还是其他?堆栈会判断从芯片发送的数据包类型,将其分为HCI事件,用户数据(L2CAP)或其他类型的数据包格式,然后将它们传输(回调)到上层,例如RFCOMM 或 AVDTP。另一方面,上层协议和配置文件将收集数据,然后将其发送到蓝牙芯片。

Does HCI perform the actual communication (command and data transfer) to the Bluetooth chip? Or does it perform only logging the communication (HCISnoop log).

HCI 实际上只是主机和控制器之间的一个接口,所以首先是的,它们是某些部分代码会在某处生成 btsnoop 日志,关​​于实际通信,您可以说它属于 HCI 部分(从代码角度来看)但你也可以说它不属于HCI部分(从逻辑角度)。