Hexxeh / rpi-firmware

Firmware files for the Raspberry Pi
Other
775 stars 208 forks source link

Strange Bluetooth problem #229

Closed danergo closed 4 years ago

danergo commented 4 years ago

I'm using RPi4 for communicating with a BLE peripherial devices via gatttool:

# gatttool -b OTHERWORKINGDEVICE --characteristics
handle = 0x0002, char properties = 0x0a, char value handle = 0x0003, uuid = 00002a00-0000-1000-8000-00805f9b34fb
...

I have at least 3 peripherial devices which I can query with gatttool.

But there is one device which timeouts 9 times of 10 during connection:

# gatttool -b NOTWORKINGDEVICE --characteristics
connect error: Connection timed out (110)

Now I could consider the "notworkingdevice" faulty. But "unfortunately" it is working from other devices (phones, with nRF Connect application) without any issues.

So I have hooked up a Bluetooth Link Layer Sniffer and took some measurements during the Pi tries to connect:

BT_Sniff

Some legend:

I believe those Client Rx MTU requests are coming from the Peripherial (based on their Signal dBm).

However I tried running btmon on the Pi during the connection and it is simply not showing these MTU Requests. It seems Pi sends out a "LE Read Remote Used Features" and timeouts while waiting for the answer (I also tried increasing the timeout, but it did not help):

< 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

My Pi's details: RPi4 Model B 1.1 (1GB RAM), Q2 2019 (Mfg by Sony) PRETTY_NAME=“Raspbian GNU/Linux 10 (buster)” NAME=“Raspbian GNU/Linux” VERSION_ID=“10” VERSION=“10 (buster)”

I also tried to put the peripherial very close (<1.5m) to the Pi and nothing has changed.

As last resort I tried to update the firmware but nothing has changed (I'm on 634e380a4d041492f859712bd2c81112a535b515).

Given the above facts, what are my options to further investigate what causes the problem? Is it possible to update the Cypress module itself?

popcornmix commented 4 years ago

This repo is only designed for distributing binary firmware updates. Can you create this issue here: https://github.com/raspberrypi/linux/issues where it's more likely to be found by interested people.