Bluetooth Low Energy - mise à jour d'une valeur de caractéristique à plusieurs reprises

question de Suivi sur l'Ingénierie Électrique Stackexchange

Je veux écrire la valeur d'un Bluetooth Low Energy caractéristique à plusieurs reprises dans un court laps de temps (comme un possible cas d'utilisation, imaginez une souris).

  • La caractéristique avec un 128bit UUID est 20 octets de long. Par conséquent, il peut être rédigé en une seule Basse Énergie de la transaction.
  • Écritures se produisent à une fréquence de 50 Hz, qui est égale à une écriture une fois toutes les 20ms.
  • Par conséquent, 20 * 50 * 8 = 8 kbit/s sont écrits.
  • Je suis en utilisant le Commande /Écrire sans réponse mode d'écriture de la caractéristique. Par conséquent, aucun des accusés de réception de se produire sur la couche d'attribut.
  • Pas de Bluetooth ou Bluetooth Low Energy périphériques sont connectés. Rien n'est effectuée sur wi-fi. Pas d'autres caractéristiques sont lues ou écrites pendant les tests.

J'ai tester le programme en envoyant des paquets contenant des numéros de séquence à partir d'un iPhone 4S. Le numéro de séquence est incrémenté après chaque paquet envoyé.

Sur le côté réception, un programmables conseil de développement, qui intègre un CSR1000 BLE de la puce, qui reçoit les paquets et imprime le reçu les numéros de séquence de la connexion série.

Mes problèmes sont les suivants:

  • Après un certain temps, les paquets de démarrage supprimées. Le premier ~100 paquets beau travail @ 50 Hz. À partir de là, les paquets de démarrage supprimées.

               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
    ...

    Le plus souvent, un pack de quatre paquets transmis fine (rarement, et seulement 2 paquets). Ensuite, 1-7 paquets manquants.

    Quand j'réduire la valeur caractéristique de la taille, le problème persiste encore.

    Quand j'écris à 100 hz au lieu de 50 hz, l'image est la même - seulement que les gouttes commencent survenant après environ 35 paquets et que 5 à 7 paquets sont perdus entre le succès de la transmission des paquets de quatre.

    Avec la perte de paquets, le taux de transmission est d'environ 5 kbit/s, quelle que soit la fréquence d'écriture. C'est clairement en dessous de la ~305 kbit/s qui doit être techniquement possible au fil Bluetooth Low Energy.

  • Le problème se produit également dans le sens inverse, quand je suis en l'envoi de paquets à partir de la carte de développement pour l'iPhone 4S. Encore une fois, 5 kbit/s est le maximum que je reçois. Le mécanisme de Notification est utilisé pour ce scénario. Encore une fois, aucun des accusés de réception de se produire sur la couche d'attribut.

  • Lorsque j'essaie d'envoyer simultanément dans les deux directions, les choses commencent à souffler jusqu'au point où je dois remettre les deux le conseil du développement et de l'iPhone 4S.

Questions:

  • Que ce soit un problème de Bluetooth de Basse Énergie de la puce, qui est utilisé sur le conseil de développement?

    Si oui, pourquoi le problème est-il également se produire dans la direction opposée, où l'iPhone actes que le récepteur?

    Existe-il des conseils de développement sur le marché qui supporte la haute fréquence de l'accès aux caractéristiques?

  • Ce qui pourrait être l'origine du problème?

    Veuillez également essayer de référence des pièces de Bluetooth Spec /diapositives de la présentation /articles en plus à des hypothèses.

Il n'existe pas de Bluetooth de Basse Énergie de la souris sur le marché. Les souris ont d'interrogation standard taux de 125 Hz et avoir au moins envoyer deux de 16 octets valeurs plus CACHÉ des frais généraux par les tiques. Par conséquent, une solution pour mon problème devrait être disponible.

Mise à jour

La LE Raccordement Complet des Événements est décrit dans Spécification Bluetooth Version 4.0 Vol 2 Partie E, Section 7.7.65.1. Je reçois les valeurs suivantes pour les différents paramètres de la connexion:

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
  • Ce que LE chip/dev conseil utilisez-vous?
  • Les paramètres que vous avez défini pour la connexion - êtes-vous à l'aide de la valeur par défaut?
  • Comment voyez-vous le lien timings?
  • Le CHIER de Connexion Complet de l'Événement expose les paramètres. Voir Bluetooth De Base Spec Version 4.0 Volume 2, Partie E, Section 7.7.65.1. Je peux regarder ces valeurs sur mon périphérique.
  • Regardez-vous le moment où les paramètres ou les paramètres que vous définissez le périphérique pour le demander? I. e, sont le paramètre "live" de données?
  • Oui, elles sont données en direct.
  • Quel outil fait pour vous?
  • Ne pas comprendre la question. Ceux sont des événements standard que je reçois du firmware sur mon périphérique Bluetooth. Alternativement, vous pouvez également utiliser un périphérique Bluetooth Espion pour capturer un Air de Trace et de regarder pour le paramètre de connexion de paquets de là.
  • Aha, merci @Etan
  • Pouvez-vous fournir le code où avez-vous changer de 50 hz à 100 hz?
  • La modification est effectuée sur le périphérique latérale (pas sur l'iPhone). Par conséquent, le code dépend de votre puce utilisée. Vous devez envoyer un Paramètre de Connexion de Demande de mise à Jour, et l'iPhone répond par un accusé de réception positif ou négatif en fonction de vos paramètres.
  • Pourquoi avez-vous arrêter à 105 ms? L'Intervalle de Connexion peut aller aussi bas que 7.5 ms.
  • De retour au moment de la question, la valeur la plus basse qui a été accepté par iOS a été 18,75 ms (voir la réponse).

InformationsquelleAutor Etan | 2012-04-27