HCI 简介
BLE 协议栈分为 Host 和 Controller 两大部分,通过 HCI (Host Controller Interface) 进行相互通讯,而 HCI 硬件传输接口又分为多种,包括 USB、UART 和 SDIO 等。 在 esp-idf 中 Host 分为 bluedroid 和 nimble, 相关的一些应用例程也在 bluedroid 和 nimble 目录下,同时 esp-idf 也提供了不使用以上两个 Host 仅使用芯片 BT Controller 的例程,以满足使用者的其他需求,如 Host 协议栈运行在其他 MCU 上仅需要一个 BT Controller 硬件,或者作为一个 PC 机上的蓝牙适配器的功能
如下来介绍 在 Linux 系统上 esp 芯片的一些 HCI 例程的使用
BlueZ 的安装和使用
-
BlueZ 版本查看
BlueZ 是 linux 官方蓝牙协议栈,一般在 linux 系统都会自带,使用以下指令查看 BlueZ 版本
$ dpkg -s bluez |grep ^Version Version: 5.53-0ubuntu3.5
BlueZ 的安装或更新可参考以下文章或自行搜索:Ubuntu 20.04编译安装BlueZ-5.6
-
hciattch 的使用
hciattch 用于把串行 UART 挂载为 HCI 传输接口,与 BlueZ 协议栈进行通讯,命令格式如下
hciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [sleep|nosleep] [bdaddr] -n 不脱离控制终端 -p 当脱离时打印 PID -t 指定初始化超时时间,默认5秒 tty 指定要挂在的串口设备,可以省略 /dev/ 前导 type|id 一般是 any, 不指定厂商等 speed 一般支持以下速度 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 flow 使用硬件流量控制, noflow不使用 sleep|nosleep 是否进行睡眠 bdaddr 蓝牙设备地址
-
hciconfig 的使用
hciconfig 用于配置蓝牙设备, hciX 是系统中安装的蓝牙设备的名称, 常用参数如下
-a 显示蓝牙设备信息 up 开启蓝牙设备 down 关闭蓝牙设备 reset 重置蓝牙设备 pscan 启用页面扫描,禁用查询扫描 -
btmon 的使用
btmon 是一个蓝牙监视器,会记录 Host 与 Controller 之间的 HCI 命令、事件和数据的交互
也有很多参数,不过一般直接输入
sudo btmon
执行监视 -
bluetoothctl 的使用
bluetoothctl 是输入命令操作蓝牙设备的工具,如搜索、配对、广播、连接等操作
终端输入
bluetoothctl
进入其环境,可以键入help
命令查看命令列表及其描述bluetoothctl 是一个新的操纵蓝牙设备的工具,相比于 hcitool、gatttool 等旧工具,更推荐使用 bluetoothctl
LINUX 下 UART HCI 例程
-
编译烧录到 esp32, UART 波特率可以在
Component config → Bluetooth → Bluetooth → Bluetooth controller → HCI UART(H4) Options
配置中进行修改默认是 921600 ,重启后 log 如下:
I (410) cpu_start: Starting scheduler on PRO CPU. I (0) cpu_start: Starting scheduler on APP CPU. I (443) CONTROLLER_UART_HCI: HCI UART1 Pin select: TX 5, RX 18, CTS 23, RTS 19 I (453) BTDM_INIT: BT controller compile version [5688ed5] I (453) system_api: Base MAC address is not set I (453) system_api: read default base MAC address from EFUSE I (463) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07 W (473) phy_init: failed to load RF calibration data (0x1102), falling back to full ca