Bluetooth 蓝牙连接超时

Bluetooth 蓝牙连接超时,bluetooth,bluetooth-lowenergy,bluez,Bluetooth,Bluetooth Lowenergy,Bluez,我有一个Linux设备,通过HCI使用标准蓝牙适配器。 安装BlueZ后,我可以使用gatttool连接到BLE设备: # gatttool -b OTHERWORKINGDEVICE --characteristics handle = 0x0002, char properties = 0x0a, char value handle = 0x0003, uuid = 00002a00-0000-1000-8000-00805f9b34fb ... 但是,有一个设备的100次超时次数为90次

我有一个Linux设备,通过HCI使用标准蓝牙适配器。 安装BlueZ后,我可以使用gatttool连接到BLE设备:

# gatttool -b OTHERWORKINGDEVICE --characteristics
handle = 0x0002, char properties = 0x0a, char value handle = 0x0003, uuid = 00002a00-0000-1000-8000-00805f9b34fb
...
但是,有一个设备的100次超时次数为90次:

# gatttool -b NOTWORKINGDEVICE --characteristics
connect error: Connection timed out (110)
现在我可以考虑“故障处理装置”有问题。 但“不幸的是”,它在其他设备(手机、nRF Connect应用程序)上工作时没有任何问题

因此,我连接了一个蓝牙链路层嗅探器,并在Linux尝试连接时进行了一些测量:

一些传说:

  • 橙色填充框为“故障”设备(BLE外围设备)
  • 红色填充框是Linux(BLE Central)
  • 红色矩形:标记通道更改
我相信那些“客户端接收MTU”请求来自外围设备(基于其信号dBm)

然而,在连接期间,我尝试在Linux上运行
btmon
,但没有显示这些MTU请求。似乎Linux在等待回答时发出了“LE Read Remote Used Features”和超时(我也尝试增加超时,但没有帮助):

HCI事件:命令状态(0x0f)plen 4#12[hci0]7.479342
LE读取远程使用功能(0x08 | 0x0016)ncmd 1
状态:成功(0x00)
>HCI事件:命令完成(0x0e)plen 14#13[hci0]7.479357
LE读取远程使用功能(0x08 | 0x0016)ncmd 1
状态:成功(0x00)
00 00 00 00 00 00 00 00 00 00                    ..........      
>HCI事件:LE元事件(0x3e)plen 12#14[hci0]7.993969
LE读取远程使用的功能(0x04)
状态:连接超时(0x08)
句柄:64
功能:0x2d 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
加密
扩展拒绝指示
从机启动的功能交换
数据包长度扩展
鉴于上述事实,我有什么选择来进一步调查导致此问题的子系统


注:我还试着把外围设备放得很近(你们两台设备使用什么蓝牙芯片? 您的计算机中的一个似乎有问题,因为它响应的是一个针对LE Read Remote Used Features命令的完整命令,该命令无效

无论如何,您计算机中的蓝牙芯片似乎无法正确接收来自远程设备的信号,因为它始终请求重新发送数据包。一段时间后,由于未能成功获取数据包而超时。在少数情况下,如果从蓝牙芯片到远程设备的USB或UART链接也会发生这种情况计算机已停止运行


蓝牙发射机和接收机的特定组合比另一种组合工作得更差并不罕见。通常根本原因是,例如,晶体被修剪到允许的范围之外,导致射频稍微超出限制。一些接收设备的公差比规范要求的要高,也许你的手机就是这样。

电脑使用Cypress CYW43455(实际上是RPi4)。其他设备未知,但其前身使用Cypress CY8C4248LQI-BL483。在这个新版本中,他们升级到BLE5.0。如果晶体修剪超出允许范围,为什么它有时工作没有问题?此外,一旦建立连接,它就不会断开,我可以与外围设备进行无问题通信(不丢失一个字节)。如果出现问题时,仅在连接开始时出现,则听起来蓝牙芯片中的蓝牙堆栈可能有问题。您是否有最新的蓝牙固件?对于水晶修剪,它还取决于温度。因此,它可以正常工作一段时间,但随着温度的变化,它会停止工作,反之亦然反之亦然。请运行一些BLE嗅探,看看是否有变化。我做了很多嗅探,它总是显示相同的图片:来自双方的请求,没有任何单一的响应。我如何检查蓝牙固件(如果有问题,我做了apt更新)?
< HCI Command: LE Read Remote Used... (0x08|0x0016) plen 2  #11 [hci0] 7.477210
        Handle: 64
> HCI Event: Command Status (0x0f) plen 4                   #12 [hci0] 7.479342
      LE Read Remote Used Features (0x08|0x0016) ncmd 1
        Status: Success (0x00)
> HCI Event: Command Complete (0x0e) plen 14                #13 [hci0] 7.479357
      LE Read Remote Used Features (0x08|0x0016) ncmd 1
        Status: Success (0x00)
        00 00 00 00 00 00 00 00 00 00                    ..........      
> HCI Event: LE Meta Event (0x3e) plen 12                   #14 [hci0] 7.993969
      LE Read Remote Used Features (0x04)
        Status: Connection Timeout (0x08)
        Handle: 64
        Features: 0x2d 0x00 0x00 0x00 0x00 0x00 0x00 0x00
          LE Encryption
          Extended Reject Indication
          Slave-initiated Features Exchange
          LE Data Packet Length Extension