Bluetooth BLE Android schreiben an Peripheriegeräte mit maximalem Datendurchsatz

9

Unser Unternehmen entwickelt eine Hardwareeinheit mit Bluetooth BLE und wir haben eine Service-App in einem Nexus 7 (2013), an die wir Firmwaredateien senden wollen. Die Dateien können bis zu 500 KB groß sein.

Der BT-Chip ist ein Texas Instruments CC2540.

Ich habe unzählige Webseiten durchsucht und den Stack-Überlauf gescannt, um zu erfahren, wie man die Datenübertragung vom Android-Gerät zum CC2540 beschleunigt, aber kein wirklich gutes Beispiel gefunden hat.

Auf der Nordic Semiconductor Homepage fand ich ein Beispiel, wie sie den maximalen Durchsatz für eine Android-Einheit berechnen: ( Ссылка )

%Vor%

Es besagt, dass eine Android-Einheit 4 Pakete mit 20 Bytes pro Verbindungsintervall senden kann und dass Android Verbindungsintervalle von 7,5 ms verarbeiten kann.

In unserer App senden wir gerade Daten mit writeCharateristics und warten auf onWriteCharaterialis Callback, bevor wir den nächsten Datenblock senden. Diese Übertragungsrate ist jedoch sehr langsam, da der Rückruf ungefähr 2 Sekunden dauert, um aufgerufen zu werden (!!). Das ergibt eine Datenübertragungsrate von 10 Bytes / s, die in der obigen Beispielrechnung weit von den 10.6kb / s entfernt ist.

Wir haben versucht, 50kb Daten zwischen zwei iOS-Geräten zu übertragen (mit einer modifizierten Version der KeyFob-Demo für iOS) und eine Übertragungsrate von 3.4kb / s erhalten. Aber das war die Verwendung des CBPeripheralManager UpdateValue , von dem ich verstehe, dass es eine Möglichkeit ist, eine Benachrichtigung vom Peripheriegerät an die Zentrale zu senden.

Was ich dort gelesen habe, ist momentan nicht möglich, ein Android-Gerät als Peripheriegerät zu betreiben. Bedeutet dies, dass ein CC2540 keine Benachrichtigungen an das Nexus 7 senden kann? Und ist der einzige Weg, den Durchsatz zu maximieren, um die Daten über Benachrichtigungen zu senden?

Ist es der Stack im TI-Gerät, der alles langsam macht, oder gibt es irgendeine Möglichkeit, irgendwelche Parameter zu ändern, um den Datentransfer zwischen dem Nexus und der CC-Einheit zu beschleunigen?

Wir hatten eine Idee, einen GATT-Server in das Nexus 7-Gerät zu implementieren und den CC2540 dazu zu veranlassen, Benachrichtigungen von ihm zu abonnieren. Ist das möglich? Das bedeutet, dass das Nexus zuerst nach dem CC2540 suchen und sich mit ihm verbinden muss, wenn es den Dienst findet. Wenn die Verbindung hergestellt ist, beginnt der CC2540, Benachrichtigungen vom Nexus 7 zu abonnieren. Danach sendet er Benachrichtigungen vom Nexus an den CC2540 mit einer höheren Übertragungsrate.

Hoffentlich hat jemand anderes versucht, das Gleiche zu tun, wie wir es versuchen!

    
Daniel Hansander 22.05.2014, 08:57
quelle

1 Antwort

0

Vor einigen Monaten habe ich an einem Projekt mit dem CC2540 gearbeitet, leider ging es im Projekt um ein anderes Anwendungsfeld.

Wie auch immer, ich erinnere mich, dass Sie Ihre Verbindungsparameter wie Verbindungs_Intervall oder Slave_Latenz einstellen können, um Ihren Durchsatz zu verbessern, auch wenn der Stromverbrauch höher ist als vorher . Wahrscheinlich haben Sie das schon versucht, aber ich denke, das ist der einzige Weg, um ein gutes Ergebnis zu erzielen.

    
Pale90 28.05.2014 17:47
quelle