7.2.9 蓝牙初始化说明
本章节介绍开发板蓝牙功能的初始化流程和使用方法。
概述
开发板支持通过 USB 或 UART 接口连接蓝牙模块。系统启动时,hobot-bluetooth 服务会自动检测并初始化蓝牙设备。
支持的蓝牙类型
| 类型 | 接口 | 说明 |
|---|---|---|
| USB 蓝牙 | USB 接口 | 通过 USB 接口连接的蓝牙适配器 |
| UART 蓝牙 | UART 串口 | 通过 UART 串口连接的蓝牙模块(如 CYW55560) |
系统服务
hobot-bluetooth 服务
蓝牙初始化由 hobot-bluetooth.service 系统服务管理,该服务在系统启动时自动运行。
服务配置文件位置: /lib/systemd/system/hobot-bluetooth.service
[Unit]
Description=Hobot init Bluetooth
Before=getty.target system-getty.slice
After=hobot-loadko.service
StartLimitIntervalSec=60
StartLimitBurst=5
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/hobot-bluetooth start
ExecStop=/usr/bin/hciconfig hci0 down > /dev/null 2>&1
TimeoutStartSec=1min
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
服务管理命令
# 查看服务状态
systemctl status hobot-bluetooth
# 手动启动服务
sudo systemctl start hobot-bluetooth
# 手动停止服务
sudo systemctl stop hobot-bluetooth
# 启用开机自启
sudo systemctl enable hobot-bluetooth
# 禁用开机自启
sudo systemctl disable hobot-bluetooth
初始化脚本说明
初始化流程
蓝牙初始化脚本 /usr/bin/startbt.sh 会按以下顺序检测和初始化蓝牙设备:
┌─────────────────────────────┐
│ 蓝牙初始化开始 │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ 检测 USB 蓝牙设备 │
│ (lsusb -t | grep btusb) │
└──────────────┬──────────────┘
│
┌───────┴───────┐
│ │
▼ ▼
检测到 USB 未检测到 USB
│ │
▼ ▼
┌──────────────┐ ┌──────────────────┐
│ 加载 btusb │ │ 检测 UART 蓝牙 │
│ 驱动模块 │ │ (/dev/ttyS1) │
└──────┬───────┘ └────────┬─────────┘
│ │
│ ┌───────┴───────┐
│ │ │
│ ▼ ▼
│ 检测到 UART 未检测到 UART
│ │ │
│ ▼ ▼
│ ┌──────────────┐ ┌──────────────┐
│ │ GPIO 控制 │ │ 报错退出 │
│ │ 固件下载 │ │ │
│ │ hciattach │ │ │
│ └──────┬───────┘ └──────────────┘
│ │
└─────┬─────┘
│
▼
┌──────────────────┐
│ hciconfig hci0 up │
│ hciconfig piscan │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 初始化完成 │
└──────────────────┘
USB 蓝牙初始化
当检测到 USB 蓝牙设备时,初始化流程如下:
# 1. 加载 btusb 驱动模块
modprobe btusb
# 2. 等待固件加载完成
sleep 3
# 3. 启用蓝牙设备
hciconfig hci0 up
sleep 2
hciconfig hci0 piscan
UART 蓝牙初始化
当检测到 UART 蓝牙设备时,初始化流程如下(以 XM612为例,如果用户选择了不同的蓝牙模组,请联系蓝牙模组厂提供):
# 配置参数
BT_REG_GPIO=427 # 蓝牙使能 GPIO
UART_PORT="/dev/ttyS1" # UART 端口
UART_BAUD=921600 # 波特率
FW="/lib/firmware/cypress/CYW55560A1.hcd" # 固件路径
# 1. 导出并配置 GPIO
echo 427 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio427/direction
# 2. 复位蓝牙模块
echo 0 > /sys/class/gpio/gpio427/value
sleep 1
echo 1 > /sys/class/gpio/gpio427/value
sleep 2
# 3. 下载固件
mbt download /lib/firmware/cypress/CYW55560A1.hcd --autobaud3M
mbt update_baudrate 921600
# 4. 启动 HCI attach
hciattach -s 921600 /dev/ttyS1 any 921600 &
# 5. 启用蓝牙设备
hciconfig hci0 up
hciconfig hci0 piscan
蓝牙固件
固件存放路径
蓝牙固件存放在以下目录:
| 芯片型号 | 固件路径 |
|---|---|
| Realtek RTL8852BTU | /lib/firmware/rtl_bt/rtl8852btu_fw.bin |
| Realtek RTL8723BS | /lib/firmware/rtl_bt/rtl8723bs_fw.bin |
| Cypress CYW55560 | /lib/firmware/cypress/CYW55560A1.hcd |
查看已加载固件
# 查看 rtl_bt 固件
ls -la /lib/firmware/rtl_bt/
# 查看 cypress 固件
ls -la /lib/firmware/cypress/