本文介绍蓝牙协议从物理层到应用层的完整通信流程,并详解了 Linux 下主流蓝牙调试工具的使用方法,适用于嵌入式蓝牙驱动开发、BLE调试、通信协议分析等场景。
Host层 ←→ 高层协议栈(L2CAP、ATT/GATT、SM)
Transport层 ←→ 传输协议(HCI over UART/USB/SDIO)
Controller层 ←→ 硬件控制器(Link Layer、PHY)
BLE 总共有 40 个频道:
状态 | 描述 |
---|---|
Standby | 待机状态,不发不收 |
Advertising | 广播状态,监听/发送广播包 |
Scanning | 扫描广播包 |
Initiating | 发起连接请求 |
Connection | 建立连接后的通信状态 |
Preamble + Access Address + PDU + CRC
包类型 | 描述 |
---|---|
HCI Command Packet | Host → Controller,发送命令 |
HCI Event Packet | Controller → Host,事件响应 |
HCI ACL Data Packet | 双向数据包(异步) |
HCI Sync Data Packet | 双向数据包(同步) |
OpCode = OGF(6bit) + OCF(10bit)
Parameter Total Length
Parameters(每个命令不同)
一条 ACL 链路上可以存在多个 L2CAP 信道,便于多协议并存。
HCI_Reset
HCI_Read_Local_Supported_Features
HCI_Set_Event_Mask
HCI_Read_Buffer_Size
HCI_Read_BDADDR
LE_Set_Advertising_Parameters
LE_Set_Advertising_Data
LE_Set_Scan_Response_Data
LE_Set_Advertising_Enable
LE_Set_Scan_Parameters
LE_Set_Scan_Enable
LE Advertising Report
(扫描结果)LE_Create_Connection
LE_Connection_Complete
HCI_Disconnect
Disconnection Complete
hciconfig
- HCI设备配置工具hciconfig hci0 up # 启动设备
hciconfig hci0 down # 关闭设备
hciconfig hci0 reset # 重置蓝牙设备
hciconfig hci0 name NAME # 设置蓝牙名称
hciconfig hci0 leadv # 开启广播
hcitool
- HCI命令工具hcitool dev # 查看HCI设备
hcitool inq # 发现设备
hcitool name <MAC> # 获取设备名称
hcitool lescan # BLE扫描
hcitool lecc <MAC> # 连接BLE设备
hcitool ledc <MAC> # 断开BLE设备
hcidump
- 蓝牙包嗅探工具hcidump -i hci0 -Xt -w bt_debug.cfa &
-X
: ASCII + 十六进制-t
: 显示时间戳-w
: 输出到文件hciattach
- 绑定串口蓝牙模块到 HCIhciattach -n -s 115200 ttyS0 rtk_h5 &
-s
: 波特率-n
: 不脱离控制台ttyS0
: 串口名称btmon
- 蓝牙日志抓取工具btmon -i hci0 -w btmon_debug.log &
btmon -r btmon_debug.log # 回放日志
-i
: 指定 HCI 设备-w
: 写入文件-r
: 读取文件回放bluetoothd
- BlueZ 后台服务bluetoothd -C -d -n &
-d
: DEBUG 模式-C
: 支持 legacy 命令-n
: 前台运行,方便调试日志查看bluetoothctl
- 蓝牙交互工具bluetoothctl
> list # 查看控制器
> show # 详细信息
> power on # 打开设备
> scan on # 开始扫描
> pairable on # 设置可配对
> discoverable on # 可发现
> pair <MAC> # 配对设备
> connect <MAC> # 连接设备
> exit # 退出
本文系统地梳理了蓝牙 BLE 协议从底层到上层的通信机制,涵盖 HCI 结构、通信流程,并结合 Linux 下 BlueZ 提供的调试工具,提供了命令级的使用方式。
如果你觉得有帮助,欢迎点赞、收藏、转发!