Android 6.0 Marshmallow BLE: Verbindungsparameter

Die Verwaltung der Bluetooth Low Energy-Verbindungsparameter scheint sich in Android 6 geändert zu haben.

Ich habe ein BLE-Peripheriegerät, das bestimmte Verbindungsparameter (insbesondere das Verbindungsintervall) verwenden muss, und ich möchte das nach der BLE-Spezifikation zulässige Mindestverbindungsintervall (d. H. 7,5 ms) verwenden.

Das Android SDK erlaubt es nicht, es von der BLE GAP Central-Seite (dem Smartphone) auszuwählen. Daher ist es die richtige Methode, mein GAP-Peripheriegerät zum Senden eines @ zu veranlasseL2CAP Connection Parameter Update Request nachdem die GAP-Verbindung hergestellt wurde.

Die von mir angeforderten Parameter sind:

Verbindungsintervall min: 7,5ms Verbindungsintervall max: 7,5msslave Latenz: 0supervision timeout: 2000ms

Dies funktionierte erwartungsgemäß mit allen Android-Geräten, die ich getestet habe, von 4.3 bis 5.x.Nach dem Senden desL2CAP Connection Parameter Update Request, mein Gerät erhält einL2CAP Connection Parameter Update Response mit 0x0000 (akzeptiert), gefolgt von einemLE Connection Update Complete event wo ich sehe, dass die angeforderten Verbindungsparameter gut berücksichtigt wurden.

Nun, mit einem Nexus 9-Tablet oder mit 2 verschiedenen Nexus 5-Geräten, die alle Android 6.0.1 haben, kann ich sehen, dass dasL2CAP Connection Parameter Update Request wird immer abgelehnt (ich erhalte einL2CAP Connection Parameter Update Response mit 0x0001 (abgelehnt)). Dann erhalte ich einLE Connection Update Complete event wo ich sehe, dass die angeforderten Verbindungsparameter NICHT berücksichtigt wurden.

Ich habe dies mit 2 verschiedenen Implementierungen auf der Peripherieseite versucht (eine mit BlueNRG von ST Microelectronics, eine mit nRF52 von Nordic Semiconductor), beide mit genau demselben Ergebnis.

Dann nach weiteren Tests: Ich habe verschiedene Parametersätze ausprobiert und das maximale Verbindungsintervall geändert (andere Parameter wurden beibehalten). Folgendes habe ich gefunden:

mit dem Verbindungsintervall max = 18,75 ms wurde die Aktualisierungsanforderung mit dem Intervall 18,75 ms angenommen.mit Verbindungsintervall max = 17,50 ms, Aktualisierungsanforderung wurde mit einem auf 15,00 ms festgelegten Intervall akzeptiertmit dem Verbindungsintervall max = 15.00ms wurde die Aktualisierungsanforderung mit dem Intervall 15.00ms angenommenmit Verbindungsintervall max = 13,75 ms wurde die Aktualisierungsanforderung mit einem Intervall von 11,25 ms angenommen.mit max. Verbindungsintervall = 11,25 ms wurde die Aktualisierungsanforderung mit einem Intervall von 11,25 ms angenommen.mit einem anderen Maximalwert für das Verbindungsintervall unter 11,25 ms werde ich abgelehnt.

So ist die Beobachtung, dass sich etwas an der Art und Weise, wie der BLE-Stack von Android 6 mit den Verbindungsparametern umgeht, deutlich geändert hat. Es scheint jedoch keine Informationen oder Unterlagen zu geben, die dies bestätigen.

Meine Beobachtungen lassen den Schluss zu, dass das zulässige Mindestverbindungsintervall jetzt 11,25 ms beträgt (was eigentlich meinen Anforderungen entspricht), anstatt 7,5 ms in früheren Android-Versionen. Aber nachdem ich es empirisch herausgefunden habe, möchte ich sichergehen, dass ich keine anderen Einschränkungen / Regeln verpasse oder dass dieses Minimum nicht dynamisch ist, abhängig zum Beispiel vom aktuellen Akkuladestand ...

Was wäre toll, wäre das Äquivalent von Apples Bluetooth-Designrichtlinien (vgl. §3.6), um zu verdeutlichen, wie ein LE-Peripheriegerät mit diesem Thema umgehen soll.

Ist jemand mit demselben Problem oder sind ihm weitere hilfreiche Informationen von Google bekannt?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage