我是BLE/蓝牙编程的新手。众所周知,BLE/蓝牙是一个完整的模块。最近我发现,NimBLE提供了Bluetooth.https://github.com/apache/mynewt-core的主机堆栈或控制器部分。在这里,他们提到它支持任何主机堆栈与任何控制器的混合和匹配。
-
那么,所有模块的HCI层(主机堆栈通过其交互)和控制器(较低的蓝牙层)实现是相同的还是特定于供应商的?
-
如果我从 NimBLE 中选择主机堆栈,HCI 的实现是否允许我使用任何供应商的控制器进行操作,或者 HCI 层是否应该按照供应商规范实现并依赖于控制器。
我假设蓝牙/BLE模块的控制器部分具有基本的射频和通信部分,对于所有模块的互操作性都是相同的。如果这个问题微不足道,我很抱歉。
任何具有 hci 接口的主机堆栈都应与任何 hci 控制器配合使用,只要它们都支持相同的传输方法(UART、USB 等)
有时,特别是对于 USB,您还需要一个特定的主机驱动程序来打开特定设备的传输接口。对于UART,一些供应商要求通过UART发送一些供应商特定的设置数据包,这些数据包配置波特率等,然后HCI才能启动。
此外,主机和控制器应具有通用功能集。例如,对于仅支持经典蓝牙的主机和仅支持 BLE 的控制器,您无法执行太多操作。
某些 hci 控制器实现自定义供应商命令以提供优于标准命令的额外功能,例如设置自定义公共蓝牙设备地址。主机还必须支持这些命令才能使用它们。