Follow-Up question on Electrical Engineering StackexchangeBluetooth Low Energy - la actualización de un valor característico repetidamente
Quiero escribir el valor de una Bluetooth Low Energy característica repetidamente en un corto periodo de tiempo (como un posible caso de uso, imaginar un ratón).
- La característica con un UUID de 128 bits es 20 bytes largo. Por lo tanto, puede escribirse en una sola transacción de baja energía.
- Las escrituras se producen a una velocidad de 50 Hz, que es igual a una escritura una vez cada 20 ms.
- Por lo tanto, se escriben 20 * 50 * 8 = 8 kbit/s.
- Estoy usando el comando /Escribir sin respuesta modo para escribir la característica. Por lo tanto, no hay reconocimientos en la capa de atributos.
- No hay otros dispositivos Bluetooth o Bluetooth de baja energía conectados. Nada se realiza a través de WLAN. No se leen o escriben otras características durante las pruebas.
Probé el programa enviando paquetes con números de secuencia de un iPhone 4S. El número de secuencia se incrementa en uno después de cada paquete enviado.
En el lado de recepción, se utiliza una placa de desarrollo programable, que incorpora un chip BLE CSR1000, que recibe los paquetes e imprime los números de secuencia recibidos en la conexión en serie.
Mis problemas son los siguientes:
Después de algún tiempo, comienza a recibir los paquetes cayeron. Los primeros ~ 100 paquetes funcionan bien a 50 Hz. A partir de ese momento, los paquetes comienzan a ser eliminados.
0x00 - 0x46 received 0x47, 0x48 missing 0x49, 0x4a, 0x4b, 0x4c received 0x4d missing 0x4e, 0x4f, 0x50, 0x51 received 0x52 missing 0x53, 0x54, 0x55, 0x56 received 0x57 missing ...
mayoría de las veces, un paquete de cuatro paquetes se transmite finas (en raras ocasiones, sólo 2 paquetes). Luego, faltan de 1 a 7 paquetes.
Cuando reduzco el tamaño del valor característico, el problema persiste.
Cuando escribo a 100Hz en lugar de a 50Hz, la imagen es la misma: solo que las caídas comienzan después de alrededor de 35 paquetes y que se cortan 5-7 paquetes entre la transmisión exitosa de cuatro paquetes.
Con los paquetes perdidos, la velocidad de transmisión resultante es de alrededor de 5 kbit/s, independientemente de la frecuencia de las escrituras. Esto está claramente por debajo de ~ 305 kbit/s que debería ser técnicamente posible con Bluetooth Low Energy.
El problema también ocurre en la dirección opuesta, cuando envío paquetes de la placa de desarrollo al iPhone 4S. De nuevo, 5 kbit/s es el máximo que obtengo. El mecanismo de notificación se usa para este escenario. De nuevo, no hay reconocimientos en la capa de atributos.
Cuando trato de enviar en ambas direcciones al mismo tiempo, las cosas empiezan a explotar hasta el punto en que tengo que restablecer tanto la placa de desarrollo como el iPhone 4S.
Preguntas:
Que este sea un problema del chip Bluetooth de baja energía, que se utiliza en la placa de desarrollo?
En caso afirmativo, ¿por qué el problema también ocurre en la dirección opuesta, donde el iPhone actúa como el receptor?
¿Existen placas de desarrollo en el mercado que admitan el acceso de alta frecuencia a las características?
¿Cuál podría ser el origen del problema?
Intente también hacer referencia a partes de las diapositivas/artículos de especificaciones/presentaciones de Bluetooth además de suposiciones.
Existen ratones Bluetooth Low Energy en el mercado. Los ratones tienen tasas de sondeo típicas de 125 Hz y tienen que enviar al menos dos valores de 16 bytes más gastos adicionales de HID por tick. Por lo tanto, una solución para mi problema debería estar disponible.
actualización
El conexión LE evento completo se describe en especificación Bluetooth versión 4.0 Vol 2 Parte E Sección 7.7.65.1. Recibo los siguientes valores para los diferentes parámetros de conexión:
Parameter Value Description
--------------------------------------------------
Conn_Interval 0x0054 Time = 105 ms
Conn_Latency 0x0000 Time = 0 ms
Supervision_Timeout 0x00fc Time = 2520 ms
Master_Clock_Accuracy 0x05 50 ppm
¿Qué tarjeta LE chip/dev utiliza? –
¿Qué parámetros ha configurado para la conexión? ¿Está utilizando el valor predeterminado? –
¿Cómo ves los tiempos de conexión? – chwi