BLE-Scan-Intervall und -Fenster

Mit Bluetooth Low Energy geben Sie ein Scanfenster (wie lange gescannt werden soll) und ein Intervall (wie lange zwischen den Scans gewartet werden soll) an.

Gibt es einen Unterschied zwischen dem Scannen für 10 ms alle 100 ms oder dem Scannen für 1 s alle 10 s? Scheint, als ob die Wahrscheinlichkeit, dass sich zwei Geräte finden (ihre Funkgeräte gleichzeitig eingeschaltet haben), in diesem Fall gleich sein sollte?

Gibt es eine einfache Formel, um das richtige Fenster/Intervall basierend auf der maximal zulässigen Verbindungszeit zu berechnen?

Da es nur 3 Werbekanäle gibt, haben sich meine BLE-Geräte meiner Erfahrung nach sehr schnell verbunden. Aufgrund der geringen Leistung stellt selbst sekundenschnelles Scannen kein Problem dar.

Antworten (3)

Gemäß der Bluetooth 4.0-Kernspezifikation sind die Zeiträume von „Werbeereignissen“ für die verschiedenen Arten von Werbepaketen wie folgt:

ADV_IND: Die Zeitspanne der allgemeinen verbindbaren und scanbaren Ankündigungspakete reicht von 20 ms bis 10,24 s in Schritten von 0,625 ms.

ADV_DIRECT_IND: Die Zeitdauer der Directed Advertisement-Pakete ist kleiner oder gleich 3,75 ms. Diese Art von Werbeereignissen kann nur für 1,28 Sekunden nacheinander stattfinden. Dies dient zum Aufbau einer schnellen Verbindung (wenn ein Gerät zuhört).

ADV_NONCONN_IND: Der Zeitraum von nicht verbindbaren und nicht scanbaren Ankündigungspaketen reicht von 100 ms bis 10,24 s in Schritten von 0,625 ms.

ADV_SCAN_IND: Die Zeitspanne der durchsuchbaren Ankündigungspakete reicht von 100 ms bis 10,24 s in Schritten von 0,625 ms.

Wenn Sie also nicht wissen, welche Art von Gerät Sie scannen, wäre es ein guter Ansatz, kontinuierlich etwa 11 (maximal) Sekunden lang zu scannen, um festzustellen, ob Werbegeräte in der Nähe sind. Wie oft dies zu tun ist, hängt von der Menge der Batterie oder der verfügbaren Leistung ab.

Hoffe das hilft.

Es gibt noch einen weiteren Aspekt, der in den anderen Antworten übersehen wird. Gemäß der Core BLE-Spezifikation wird während jedes ScanIntervals nur ein Werbekanal betrachtet und mit jedem Intervall auf den nächsten von 3 Kanälen rotiert. Wenn also auf diesem Kanal HF-Störungen auftreten, sehen Sie das Gerät möglicherweise nicht, selbst wenn Sie das ScanWindow gleich dem ScanInterval haben, um kontinuierlich zu scannen.

Das BLE-Peripheriegerät, das Werbung macht, würde normalerweise während jeder Werbezeit sehr schnell nacheinander alle drei Werbekanäle durchlaufen. Der beste Scanalgorithmus für zentrale Geräte hätte also kürzere Fenster und Intervalle, um jeden Werbekanal nacheinander zu überprüfen. Apple verwendet offenbar ein 30 ms scanWindow mit 40 ms scanInterval in iOS mit Apps im Vordergrundmodus. Das bedeutet, dass jeder Werbekanal alle 40 ms überprüft wird. Gemäß der BLE-Core-Spezifikation:

Jedes Werbeereignis besteht aus einer oder mehreren Werbe-PDUs, die auf verwendeten Werbekanalindizes gesendet werden. Das Werbeereignis wird geschlossen, nachdem eine Werbe-PDU auf jedem der verwendeten Werbekanal-Indizes gesendet wurde (siehe Abschnitt 4.4.2.1), oder der Werbetreibende kann ein Werbeereignis früher schließen, um andere Funktionen unterzubringen.

Ein weiterer sehr wichtiger Aspekt besteht darin , dass das Peripheriegerät ein Ankündigungsintervall eingestellt hat , das im Vergleich zum ScanInterval auf dem zentralen Gerät relativ prim ist . Aus diesem Grund gibt Apple bestimmte Werbeintervalle vor. Wenn Sie ein ScanInterval von 100 ms mit einem ScanWindow auswählen, das kleiner ist, sagen wir 80 ms, und ein Werbeintervall von 1000 ms (1 Sekunde) hat, dann könnten Sie Pech haben und während der 20 ms immer Werbung machen, wenn das zentrale Gerät hat nicht während jedes scanIntervals gescannt. In Wirklichkeit fügt die BLE-Kernspezifikation dem Werbeintervall zufällig 0-10 ms hinzu, was dazu beiträgt, einen vollständigen Stillstand zu verhindern, aber es wird wirklich mehr getan, um zu vermeiden, dass sich mehrere Geräte, die fast zur gleichen Zeit Werbung machen, für immer gegenseitig stören.

Für alle ungerichteten Werbeereignisse oder zuschaltbaren gerichteten Werbeereignisse, die in einem Low-Duty-Cycle-Modus verwendet werden, wird die Zeit zwischen dem Beginn zweier aufeinanderfolgender Werbeereignisse (T_advEvent) für jedes Werbeereignis wie folgt berechnet:

T_advEvent = advInterval + advDelay

Das advInterval soll ein ganzzahliges Vielfaches von 0,625 ms im Bereich von 20 ms bis 10,24 s sein. Wenn der Werbeereignistyp entweder ein abtastbarer ungerichteter Ereignistyp oder ein nicht verbindbarer ungerichteter Ereignistyp ist, darf das advInterval nicht weniger als 100 ms betragen. Wenn der Werbeereignistyp ein verbindbarer ungerichteter Ereignistyp oder ein verbindbarer gerichteter Ereignistyp ist, der in einem Low-Duty-Cycle-Modus verwendet wird, kann das advInterval 20 ms oder mehr betragen. Das advDelay ist ein pseudozufälliger Wert mit einem Bereich von 0 ms bis 10 ms, der von der Verbindungsschicht für jedes Werbeereignis generiert wird.

Stellen Sie sich vor, zwei Frequenzen nahe beieinander zu haben und wie Sie eine Schwebungsfrequenz ihrer Differenz erhalten. Das ist im Wesentlichen das, was zwischen dem scanInterval und dem Werbeintervall passieren kann. Apple hat mit seinen Einstellungen dafür gute Arbeit geleistet, sodass das Befolgen ihrer Standards nicht nur für iOS, sondern auch für Android gut funktionieren würde. Apples Vordergrundmodus von 30 ms scanWindow mit 40 ms scanInterval bedeutet, dass Sie bei einem Basiswerbeintervall von 1022,5 ms das Gerät innerhalb von 1 Sekunde etwa 3/4 der Zeit und immer innerhalb von 2 Sekunden sehen, vorausgesetzt, dass keine HF-Störungen das Werbepaket verschleiern . Im Hintergrundmodus mit einem ScanWindow von 30 ms und einem ScanInterval von 300 ms beträgt die mittlere Zeit 5 Sekunden und das übliche Maximum 19 Sekunden, obwohl es mit sehr viel Pech der zufälligen Verschiebungen etwas länger sein könnte.

https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

Die von Apple empfohlenen peripheren Werbeintervalle sind 152,5, 211,25, 318,75, 417,5, 546,25, 760, 852,5, 1022,5, 1285 ms.

Für Apple-Geräte (iOS) erwähnen Sie Foreground Scan mit 30 ms/40 ms und Background Scan mit 30 ms/300 ms. Kannst du sagen, wo das angegeben ist? Oder hast du das irgendwie aus der Liste der empfohlenen Werbeintervalle abgeleitet? Haben Sie Informationen zu Nicht-Apple-Geräten?
Unter listen.apple.com/archives/bluetooth-dev/2014/Sep/msg00001.html erfahren Sie , wo ich die iOS-Zentralgerät-ScanInterval- und ScanWindow-Nummern für Vorder- und Hintergrund habe. Weitere Informationen zur Technik, um diese zu erhalten, finden Sie hier: listen.apple.com/archives/bluetooth-dev/2015/Feb/msg00000.html Für Android suche ich meine Quellen und werde sie in Kürze hier bearbeiten ...
Für Android siehe stackoverflow.com/questions/48686074/… wo eine niedrige Latenz konstant scannen sollte, also seien Sie schnell in der Entdeckung. Sie werden auch feststellen, wie Android die Einstellungen geändert hat, um sie von ganzen 100 im Vergleich zu älteren Einstellungen hier auszugleichen: stackoverflow.com/questions/40720638/…

Ich finde die Antwort von @EarthLord irreführend und möchte daher meine Antwort teilen:

Ich glaube, Sie missverstehen, was ein Intervall und ein Fenster in diesem speziellen Szenario ist. Ein Fenster gibt eine Zeit an, in der ein Gerät auf Werbung lauscht und optional Scanrecords anfordert. Das Intervall definiert die Zeit zwischen zwei aufeinanderfolgenden Fenstern.

In der Bluetooth Core Spec 4.0 heißt es

Die Parameter scanWindow und scanInterval müssen kleiner oder gleich 10,24 s sein . Das scanWindow muss kleiner oder gleich dem scanInterval sein . Wenn die Parameter scanWindow und scanInterval vom Host auf denselben Wert gesetzt werden, sollte die Verbindungsschicht kontinuierlich scannen .

Das heißt, stellen Sie beide auf 5 Frames ein und Sie haben einen kontinuierlichen Scan. Wenn Sie jedoch einen aktiven Scan durchführen (was bedeutet, dass Sie eine Scanantwort anfordern), sollten Sie dies nicht tun. Jegliche batteriebetriebene Peripherie wird sehr schnell ausgesaugt.

Definieren Sie stattdessen ein für Ihre Anwendung geeignetes Intervall und legen Sie ein kleineres Scanfenster fest.

Ich glaube jedoch nicht, dass es dafür einen Standardwert gibt.