Intervalo de exploración BLE y ventana

5

Con Bluetooth Low Energy, especifica una ventana de escaneo (cuánto tiempo escanear) e intervalo (cuánto tiempo esperar entre escaneos).

¿Habría alguna diferencia entre escanear 10 ms cada 100 ms o escanear durante 1 segundo cada 10 segundos? Parece que la posibilidad de que dos dispositivos se encuentren entre sí (tienen sus radios encendidas simultáneamente) debería ser igual en ese caso?

¿Existe una fórmula simple para calcular la ventana / intervalo correcto en función del tiempo máximo permitido para conectarse?

    
pregunta Muis

3 respuestas

0

Según la especificación principal de Bluetooth 4.0, el período de tiempo de los "eventos publicitarios" se muestra a continuación para los diferentes tipos de paquetes publicitarios:

ADV_IND: El período de tiempo de los paquetes de anuncios conectables y escaneables en general oscila entre 20 ms y 10,24 s en pasos de 0,625 ms.

ADV_DIRECT_IND: El período de tiempo de los paquetes de publicidad dirigida es menor o igual a 3.75 ms. Este tipo de eventos publicitarios pueden suceder consecutivamente solo en 1.28s. Esto es para establecer una conexión rápida (si hay un dispositivo escuchando).

ADV_NONCONN_IND: El período de tiempo de los paquetes de anuncios no conectables y no escaneables varía de 100 ms a 10,24 s en pasos de 0,625 ms.

ADV_SCAN_IND: El período de tiempo de los paquetes de anuncios escaneables varía de 100 ms a 10,24 s en pasos de 0,625 ms.

Por lo tanto, a menos que sepa el tipo de dispositivo que está buscando para un buen enfoque, debería explorar continuamente durante aproximadamente 11 (máximo) segundos para ver si hay algún dispositivo publicitario. La frecuencia con la que se haga esto dependerá de la cantidad de batería o energía disponible.

Espero que esto ayude.

    
respondido por el EarthLord
4

Hay otro aspecto de esto que se está perdiendo en las otras respuestas. Según la especificación Core BLE, solo se está viendo un canal de publicidad durante cada scanInterval y se gira al siguiente de los 3 canales con cada intervalo. Por lo tanto, si hay interferencia de RF en ese canal, es posible que no vea el dispositivo, incluso si tiene el scanWindow igual al scanInterval para realizar un escaneo continuo.

El dispositivo periférico BLE que hace publicidad normalmente giraría en secuencia a través de los tres canales de publicidad muy rápidamente durante cada parpadeo de tiempo. Por lo tanto, el mejor algoritmo de escaneo del dispositivo central tendría ventanas e intervalos más cortos para verificar secuencialmente cada canal de publicidad. Aparentemente, Apple usa una ventana de escaneo de 30 ms con un intervalo de escaneo de 40 ms en iOS con aplicaciones en modo de primer plano. Eso significa que cada canal de publicidad será revisado cada 40 ms. Según la especificación básica de BLE:

  

Cada evento publicitario se compone de una o más PDU publicitarias enviadas en   Índices de canales de publicidad utilizados. El evento publicitario se cerrará después de   Se ha enviado una PDU publicitaria en cada uno de los canales de publicidad utilizados.   índices (consulte la Sección 4.4.2.1) o el anunciante puede cerrar un evento publicitario   antes para acomodar otras funcionalidades.

Otro aspecto muy importante es hacer que el dispositivo periférico establezca un intervalo de publicidad relativamente primordial en comparación con el intervalo de exploración en el dispositivo central . Por eso Apple especifica intervalos publicitarios específicos. Si tuviera que elegir un ScanInterval de 100 ms con un scanWindow que era más pequeño, digamos 80 ms y tenía un intervalo de publicidad de 1000 ms (1 segundo), podría tener mala suerte y estar siempre publicitando durante los 20 ms cuando el dispositivo Central No estaba escaneando durante cada scanInterval. En realidad, la especificación básica de BLE agrega de 0 a 10 ms aleatorios al intervalo publicitario que ayuda a evitar un bloqueo completo, pero en realidad se hace más para evitar que la publicidad de múltiples dispositivos casi exactamente al mismo tiempo interfiera entre ellos para siempre.

  

Para todos los eventos publicitarios no dirigidos o publicidad dirigida conectable   eventos utilizados en un modo de ciclo de trabajo bajo, el tiempo entre el comienzo de dos   consecutivo   los eventos publicitarios (T_advEvent) se calculan como sigue para cada uno   evento publicitario:

T_advEvent = advInterval + advDelay
     

El advInterval será un múltiplo entero de 0.625 ms en el rango de 20 ms   a 10.24 s. Si el tipo de evento publicitario es escaneable no direccionado   evento   tipo o un tipo de evento no direccionable no conectable, el advInterval no será   Menos de 100 ms. Si el tipo de evento publicitario es un conectable no dirigido.   tipo de evento o tipo de evento dirigido conectable utilizado en un modo de ciclo de trabajo bajo,   el advInterval puede ser de 20 ms o más.    advDelay es un valor pseudoaleatorio con un rango de 0 ms a 10 ms generado   por la capa de enlace para cada evento publicitario.

Piensa en tener dos frecuencias cercanas y en cómo obtienes una frecuencia de latido de su diferencia. Eso es esencialmente lo que puede suceder entre el intervalo de exploración y el intervalo de publicidad. Apple hizo un trabajo decente con sus configuraciones para esto, por lo que seguir sus estándares no solo funcionaría bien para iOS sino también para Android. El modo de primer plano de Apple de 30 ms scanWindow con 40 ms scanInterval significa que, para un intervalo de publicidad base de 1022.5 ms, verá el dispositivo dentro de 1 segundo aproximadamente 3/4 del tiempo y siempre dentro de 2 segundos, suponiendo que no haya interferencia de RF que oculte el paquete de publicidad. . En el modo de fondo con un scanWindow de 30 ms y un scanInterval de 300 ms, el tiempo medio se convierte en 5 segundos y el máximo habitual en 19 segundos, aunque con muy mala suerte de los cambios aleatorios podría ser un poco más largo.

enlace

Los intervalos de publicidad periférica recomendados por Apple son 152.5, 211.25, 318.75, 417.5, 546.25, 760, 852.5, 1022.5, 1285 ms.

    
respondido por el user4028
1

La respuesta de @ EarthLord me parece engañosa y por eso quiero compartir mi respuesta:

Creo que no entiende qué es un intervalo y una ventana en ese escenario específico. Una ventana especifica una hora en la que un dispositivo escucha anuncios y, opcionalmente, solicita registros de escaneo. El intervalo define el tiempo entre ventanas consecutivas.

En el Bluetooth Core Spec 4.0 dice

  

Los parámetros scanWindow y scanInterval deben ser menores que o   igual a 10.24 s . La ventana de exploración será menor o igual que   el scanInterval . Si los parámetros scanWindow y scanInterval   están configurados en el mismo valor por el Host, la capa de enlace debe escanear   continuamente .

Lo que significa establecer ambos en 5 cuadros y tendrá un escaneo continuo. Sin embargo, si realiza una exploración activa (lo que significa que solicita una respuesta de exploración), no debe hacer eso. Todos los periféricos que funcionan con batería serán succionados muy rápidamente.

En su lugar, defina un intervalo que funcione para su aplicación y configure una ventana de exploración que sea más pequeña que ella.

Sin embargo, no creo que haya algún valor predeterminado para esto.

    
respondido por el bluewhile

Lea otras preguntas en las etiquetas