蓝牙设备配对失败:认证问题排查求助
蓝牙配对失败问题排查与解决方案建议
使用bluetoothctl发起DeviceA(配对发起端)与DeviceB的蓝牙配对时,始终失败:DeviceA终端会显示PIN码及确认选项,但DeviceB无任何显示,最终连接超时。
HCI日志关键片段
< HCI Command: IO Capability Request Reply (0x01|0x002b) plen 9 #21 [hci0] 10.668077 Address: 58:63:9A:0B:75:28 (OUI 58-63-9A) IO capability: DisplayYesNo (0x01) OOB data: Authentication data not present (0x00) Authentication: Dedicated Bonding - MITM required (0x03) > HCI Event: Command Complete (0x0e) plen 10 #22 [hci0] 10.668776 IO Capability Request Reply (0x01|0x002b) ncmd 1 Status: Success (0x00) Address: 58:63:9A:0B:75:28 (OUI 58-63-9A) > HCI Event: IO Capability Response (0x32) plen 9 #23 [hci0] 10.714623 Address: 58:63:9A:0B:75:28 (OUI 58-63-9A) IO capability: DisplayYesNo (0x01) OOB data: Authentication data not present (0x00) Authentication: General Bonding - MITM not required (0x04) > HCI Event: User Confirmation Request (0x33) plen 10 #24 [hci0] 10.936580 Address: 58:63:9A:0B:75:28 (OUI 58-63-9A) Passkey: 377842
日志显示双方IO能力、OOB数据配置一致,但认证类型不匹配:DeviceA使用Dedicated Bonding - MITM required,DeviceB使用General Bonding - MITM not required,这是配对失败的核心诱因。
设备信息
- DeviceB:待配对设备,支持Bluetooth 4.2和BLE 5.0,无法获取其日志
- DeviceA:基于Buildroot 2020的嵌入式硬件,搭载rs9116N芯片组
- 蓝牙模块加载命令:
rmmod rsi_sdio rmmod rsi_91x insmod bt/rsi_91x.ko dev_oper_mode=4 insmod bt/rsi_sdio.ko - 曾尝试BT DUAL MODE 12模式,结果相同;dmesg显示加载正常:
[ 544.819149] rsi_91x: <==== Interface DOWN ====> [ 544.828699] phone0: port 1(wlan0) entered disabled state [ 544.863028] device wlan0 left promiscuous mode [ 544.863067] phone0: port 1(wlan0) entered disabled state [ 545.113488] rsi_91x: ***** Watch Dog Reset Successful ***** [ 546.324264] rsi_91x: rsi_reset_card: Set high speed mode [ 546.336188] rsi_91x: ##### RSI SDIO device disconnected ##### [ 546.470461] rsi_91x: rsi_probe: ***** 9116 Module ***** [ 546.470807] rsi_91x: rsi_hal_device_init: oper_mode = 4, coex_mode = 2 [ 546.475523] rsi_91x: ================================================ [ 546.475553] rsi_91x: ================ RSI Version Info ============== [ 546.475570] rsi_91x: ================================================ [ 546.475591] rsi_91x: FW Version : 1610.2.3.0.0001 [ 546.475610] rsi_91x: Driver Version : RS9116.NB0.NL.GNU.LNX.OSD.2.0.0.0024 [ 546.475627] rsi_91x: Operating mode : 4 [BT EDR alone] [ 546.475643] rsi_91x: Firmware file : pmemdata_wlan_bt_classic [ 546.475653] rsi_91x: ================================================ [ 546.571490] rsi_91x: ***** Firmware Loading successful *****
- 蓝牙模块加载命令:
操作步骤
- 在单独终端运行蓝牙守护进程:
bluetoothd -n - 启动bluetoothctl
- 执行
power on - 执行
scan on找到设备后关闭扫描 - 执行
pair XX:XX
执行配对命令后,DeviceA终端显示PIN码及确认选项,但DeviceB无显示,最终连接超时。尝试过在不同时机执行trust XX:XX,无效果。
hciconfig -a输出
hci0: Type: Primary Bus: SDIO BD Address: 88:DA:1A:EB:84:E3 ACL MTU: 1021:3 SCO MTU: 64:3 UP RUNNING PSCAN RX bytes:15113 acl:0 sco:0 events:156 errors:0 TX bytes:0 acl:0 sco:0 commands:75 errors:0 Features: 0xbf 0xc6 0x0d 0x7e 0x9b 0x1f 0x59 0x87 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'BlueZ 5.54' Class: 0x000000 Service Classes: Unspecified Device Class: Miscellaneous, HCI Version: 5.0 (0x9) Revision: 0x100 LMP Version: 5.0 (0x9) Subversion: 0x100 Manufacturer: not assigned (1791)
核心问题与解决建议
强制统一认证类型:
- 尝试通过
bluetoothctl设置通用绑定模式:执行set bonding general,再发起配对 - 编辑BlueZ配置文件
/etc/bluetooth/main.conf,找到#Bonding = dedicated,改为Bonding = general,重启蓝牙服务后重试
- 尝试通过
调整MITM要求:
- 在
bluetoothctl中执行set mitm off,关闭DeviceA的MITM强制要求,适配DeviceB的配置
- 在
蓝牙版本兼容性调试:
- DeviceA为Bluetooth 5.0,DeviceB支持4.2/5.0,理论兼容,但可尝试强制DeviceA使用经典蓝牙模式:在
main.conf中设置ControllerMode = bredr,重启服务后测试
- DeviceA为Bluetooth 5.0,DeviceB支持4.2/5.0,理论兼容,但可尝试强制DeviceA使用经典蓝牙模式:在
IO能力调整:
- 在
bluetoothctl中切换IO能力,比如执行set io-capability keyboardonly或set io-capability noinputnooutput,再尝试配对
- 在
内核与固件检查:
- 确认Buildroot编译时开启
CONFIG_BT_BREDR、CONFIG_BT_SECURITY、CONFIG_BT_BONDING等核心蓝牙配置 - 尝试升级rs9116N的驱动或固件到最新版本,修复绑定模式的兼容性问题
- 确认Buildroot编译时开启
内容的提问来源于stack exchange,提问作者bkekelic
相关产品推荐
相关产品推荐

