Bluetooth BLE Android escribir en el periférico con el rendimiento máximo

Nuestra empresa desarrolla una unidad de hardware que tiene Bluetooth BLE y tenemos una aplicación de servicio en un Nexus 7 (2013) que queremos enviar archivos de firmware a la unidad con. Los archivos pueden ser tan grandes como 500kb.

El chip BT es un Texas Instruments CC2540.

He pasado por toneladas de páginas de nosotros, y el desbordamiento de la pila explorado para la información cómo acelerar la transferencia de datos del dispositivo androide al CC2540, pero no ha encontrado ningún ejemplo realmente bueno.

En la página principal de semiconductores nórdicos encontré un ejemplo de cómo calculan el rendimiento máximo de una unidad Android: ( https://devzone.nordicsemi.com/index.php/how-do-i-calculate-throughput-for-a-ble -link )

Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps 

Se dice que una unidad de Android puede enviar 4 paquetes de 20 bytes por intervalo de conexión, y que Android puede manejar intervalos de conexión de 7,5 ms.

En nuestra aplicación estamos enviando datos con writeCharateristics y esperamos la devolución de llamada onWriteCharateristics antes de enviar el siguiente fragmento de datos. Sin embargo, esa tasa de envío es dolorosamente lenta, ya que la llamada tarda unos 2 segundos en llamarse (!!). Eso hace que una tasa de transferencia de datos de 10 bytes / s que está lejos de los 10.6kb / s en el ejemplo de cálculo anterior.

Hemos intentado transferir 50kb de datos entre dos dispositivos iOS (con una versión modificada de la demo de KeyFob para iOS) y obtuvimos una velocidad de transferencia de 3.4kb / s. Pero que estaba utilizando el CBPeripheralManager UpdateValue que entiendo es una forma de enviar una notificación de periféricos a centrales.

Lo que he leído allí no es ninguna manera ahora para tener un dispositivo androide que trabaja como periférico. ¿Significa esto que es imposible que un CC2540 envíe notificaciones al Nexus 7? ¿Y es la única manera de maximizar el rendimiento para enviar los datos a través de notificaciones?

¿Es la pila en el dispositivo TI lo que hace que todo sea lento, o hay alguna manera de cambiar los parámetros para hacer la transferencia de datos más rápido entre el Nexus y la CC-unidad?

Tuvimos la idea de implementar un servidor GATT en el dispositivo Nexus 7 y hacer que el CC2540 se suscribiera para recibir notificaciones de él. ¿Es eso posible? Eso significa que el Nexus primero tiene que buscar el CC2540 y conectarse a él cuando encuentre el servicio. Cuando se establece la conexión, el CC2540 comienza a suscribirse a las notificaciones del Nexus 7. Después de que el envío de notificaciones desde el Nexus al CC2540 con una tasa de transferencia más alta.

Espero que alguien más ha estado tratando de hacer lo mismo que estamos tratando de hacer!

Hace unos meses trabajé para un proyecto usando el CC2540, por desgracia el proyecto era sobre otro campo de aplicación.

De todos modos recuerdo que puede establecer sus parámetros de conexión como Connection_Interval o Slave_Latency para mejorar su rendimiento, incluso si el consumo de energía será mayor que antes. Probablemente ya has intentado hacer eso, pero creo que esta es la única manera de obtener un buen resultado.

  • Nexus 7 Soporte para Android Application Manifest Assembly
  • Android Nexus 7 DPI para Eclipse
  • Nexus 7 y Kindle Fire HD, piensan diferente
  • Rendimiento de la interfaz de usuario web de Android es dramáticamente más lento que iOS (¿por qué?)
  • Lolipop dispositivo no se abre en genymotion
  • Nexus 7 se desconecta en Windows / Eclipse / ADB
  • Conversión de px a dp para Google nexus 7
  • Android Studio no reconocerá Nexus 7 como dispositivo
  • No se han encontrado desafíos de autenticación. Las discusiones pertinentes pueden encontrarse en Internet en
  • Cómo conectar nexus 7 a ADT en vmware Windows invitado
  • Nexus 7 no es recogido por adb (cuando lo conecto a la computadora portátil a través de usb)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.