Analyse approfondie du serveur GATT du stylo de lecture, mise en file d'attente des notifications, lot, dimensionnement MTU et récupération des paquets perdus pour OEM BLE de qualité production

Publié le: sept. 28, 2020 - 55 Vues

Serveur GATT du stylo de lecture et mécanisme de notification : Débit, lot et paquets perdus

Public :Responsables firmware embarqué, développeurs d'applications mobiles et ingénieurs QA OEM qui doivent comprendre comment un stylo de lecture planifie les notifications BLE sur son serveur GATT, pourquoi l'intervalle de connexion est plus important que le débit, et comment le stylo récupère d'une notification perdue sans corrompre le flux d'événements OID.

Le serveur GATT d'un stylo de lecture est le sous-système le plus sollicité de l'ensemble du firmware. Sur firmware Q6/Q8 version 3.3.1, le serveur GATT gère jusqu'à 312 notifications par seconde en période d'utilisation intensive (taps OID continus plus télémétrie VU audio plus événements batterie). Sur firmware F8 version 3.1.2, le pic est de 184 notifications par seconde. Le serveur doit mettre en file d'attente, regrouper, fragmenter et renvoyer dans toutes ces conditions sans jamais bloquer le pipeline d'événements OID.

Cet article explique l'architecture du serveur GATT, la politique de planification des notifications, le modèle d'abonnement CCCD, les interactions MTU et intervalle de connexion, le mécanisme de récupération des paquets perdus et le limiteur de débit de télémétrie personnalisable par marque.

1. L'architecture du serveur GATT

Le serveur GATT réside dans un thread dédié à l'intérieur du RTOS du stylo. Sur Q6/Q8, le RTOS est FreeRTOS 10.3.1 ; sur F8, c'est Zephyr 3.2.0 ; sur K7/KF1, c'est FreeRTOS 8.2.0. La priorité du thread est définie comme la deuxième plus élevée du système, juste en dessous du thread d'interruption du capteur OID.

Composant RAM ROM Notes
Serveur GATT 4,2 Ko 12,8 Ko Table de services + caractéristiques
File d'attente de notifications 6,0 Ko 1,4 Ko 24 emplacements × 256 octets
Table CCCD 1,6 Ko 0,4 Ko 32 abonnés
Moteur MTU 0,8 Ko 2,4 Ko Fragmentation L2CAP

Le coût total en RAM du sous-système GATT est de 12,6 Ko sur firmware Q6/Q8 version 3.3.1, ce qui tient dans les 32 Ko alloués à la pile BLE.

2. La file d'attente de notifications

La file d'attente de notifications contient 24 emplacements, chacun de 256 octets. Les emplacements sont remplis par la source d'événements OID (16 octets par tap, voir TC-058) et par le générateur de télémétrie (taille variable). Les emplacements sont vidés par le thread du serveur GATT à chaque expiration de l'intervalle de connexion.

Métrique de file d'attente Valeur sur Q6/Q8 Valeur sur F8 Valeur sur K7/KF1
Nombre d'emplacements 24 16 12
Taille d'emplacement 256 octets 128 octets 96 octets
Débit de vidange 312/s 184/s 96/s
Débit de remplissage (pic) 280/s 152/s 72/s
Marge 11 % 17 % 25 %

Si la file d'attente se remplit, le stylo applique une politique de contre-pression : il supprime d'abord le plus ancien emplacement de télémétrie, puis supprime les événements OID en double, puis supprime la télémétrie VU. Le tap OID lui-même n'est jamais supprimé, car perdre un tap signifie que l'utilisateur voit une lecture audio manquante, ce qui constitue un échec UX critique.

3. Le modèle d'abonnement CCCD

Chaque caractéristique Notify ou Indicate sur le stylo a un descripteur de configuration de caractéristique client (CCCD). L'hôte écrit 0x0001 pour activer Notify ou 0x0002 pour activer Indicate. Le stylo stocke l'état d'abonnement par pair dans l'enregistrement de liaison.

Caractéristique État par défaut à la première connexion Après abonnement
0x2A4D (OID tap) Notification désactivée Notification activée
0x2A19 (Batterie) Notification désactivée Notification activée
8E0C0003 (État du dictionnaire) Notification désactivée Notification activée
8E0C0005 (Télémétrie) Notification désactivée Indication activée
8E0C0007 (VU audio) Notification désactivée Notification activée

Un point subtil : la caractéristique de télémétrie est de type Indication, et non Notification. L'Indication nécessite un ACK de l'hôte, ce qui garantit la livraison. Nous avons fait ce choix car la perte de données de télémétrie est inacceptable pour le QA. Le coût est une petite pénalité de latence (1,2 ms supplémentaire) mais le gain en fiabilité en vaut la peine.

4. La décision de l'intervalle de connexion

L'intervalle de connexion BLE est négocié entre le stylo et l'hôte. Le stylo préfère les intervalles de 15 ms ; il accepte tout ce qui se situe entre 7,5 ms et 4 s. L'hôte propose une valeur ; le stylo renvoie sa valeur préférée dans la demande de mise à jour des paramètres de connexion.

Intervalle Latence de notification Débit (PHY 1 Mo) Coût batterie (T2)
7,5 ms 3,75 ms en moyenne 220 Ko/s 12,4 mA
15 ms 7,5 ms en moyenne 110 Ko/s 6,2 mA
30 ms 15 ms en moyenne 55 Ko/s 3,1 mA
100 ms 50 ms en moyenne 16 Ko/s 0,9 mA
1 s 500 ms en moyenne 1,6 Ko/s 0,1 mA

Un intervalle de 15 ms est notre valeur par défaut en production. Il équilibre le débit et la batterie. Un déploiement scolaire qui privilégie la réactivité plutôt que l'autonomie verra une latence de bout en bout de 6,4 ms. Un déploiement à domicile qui privilégie l'autonomie plutôt que la réactivité verra 30 ms.

5. La négociation MTU

Le stylo préfère un MTU de 247 octets (le maximum BLE 5.0 pour non-DLE). Il accepte tout MTU de 23 à 247. Le MTU détermine combien d'octets d'une seule notification vont dans un paquet L2CAP.

MTU Rapports OID par intervalle Fragmentation
23 1 rapport (tronqué) Oui
64 3 rapports Non
128 7 rapports Non
185 11 rapports Non
247 15 rapports Non

La demande MTU du stylo est envoyée dans les 100 premières ms de connexion. Un hôte qui ignore la demande force le stylo à utiliser un MTU de 23 octets, ce qui fragmente chaque rapport et consomme la batterie. Nous avons expédié plus de 47 000 stylos et 4 des 38 applications partenaires ignorent la demande MTU. Ces quatre applications sont signalées dans notre tableau de bord QA.

6. L'algorithme de groupement des notifications

Pour minimiser le temps radio, le serveur GATT group les notifications dans un seul paquet L2CAP lorsque la charge utile totale le permet. L'algorithme de groupement s'exécute une fois par intervalle de connexion :

1. Vider la file d'attente des notifications dans le tampon de groupe
2. Tant que taille_groupe + taille_prochain_rapport <= MTU :
   a. Ajouter le prochain rapport au groupe
   b. Marquer le rapport comme envoyé
3. Envoyer le groupe comme un seul paquet L2CAP
4. Si la file d'attente contient encore des rapports non envoyés :
   a. Attendre le prochain intervalle de connexion

Sur le firmware Q6/Q8 3.3.1, l'algorithme de groupement empaquette en moyenne 8,4 rapports par paquet à un MTU de 185 octets. La radio est active pendant ~3,2 ms par intervalle de connexion. Sur le firmware F8 3.1.2, la moyenne est de 6,1 rapports par paquet.

7. Le mécanisme de récupération des paquets perdus

BLE Notify ne retransmet pas. Si un paquet est perdu, l'hôte n'a aucune idée qu'il a été envoyé. Le stylo gère cela en :

  1. Maintenir un numéro de séquence dans la charge utile du rapport OID.
  2. Enregistrer chaque notification envoyée avec son numéro de séquence dans le tampon de télémétrie QA.
  3. Fournir une caractéristique indicatrice « Rapport perdu » 8E0C000A-7B3C-4F8E-9F4D-2C8B5A1E0001 que l'hôte peut lire à la demande.

L'application hôte, lors de la détection d'un écart dans les numéros de séquence, peut :

  1. Émettre une lecture manuelle de l'état du dictionnaire.
  2. Comparer le dernier ID de page de dictionnaire vu avec l'actuel pour détecter les événements manqués.
  3. Se réabonner facultativement à la caractéristique OID pour forcer une réinitialisation.

Pour 99,4 % des incidents de paquets perdus, l'utilisateur ne perçoit pas la perte car l'événement suivant arrive dans les 15 ms et le pipeline audio n'est pas affecté.

8. Le limiteur de télémétrie

Les notifications de télémétrie constituent la caractéristique la plus gourmande en bande passante. Par défaut, le stylo envoie la télémétrie à 0,5 Hz (toutes les 2 s). Le client OEM peut demander un taux plus élevé (jusqu'à 10 Hz) en configurant un bit spécifique à la marque dans la caractéristique d'ID de marque.

Fréquence de télémétrie Bande passante Coût batterie (Q6/Q8) Cas d'usage
0,1 Hz 0,05 Ko/s +0,1 mA Stylo domestique
0,5 Hz (par défaut) 0,25 Ko/s +0,3 mA ODM standard
1 Hz 0,5 Ko/s +0,6 mA Programme scolaire
5 Hz 2,5 Ko/s +2,4 mA Test de stress QA
10 Hz 5,0 Ko/s +4,8 mA Débogage ingeniería

Un administrateur informatique scolaire qui a besoin de données de santé du stylo en temps réel définirait le bit spécifique à la marque pour activer la télémétrie à 1 Hz. Cela coûte ~3 % de batterie sur le Q6 (900 mAh), ce qui est acceptable pour un programme en classe.

9. La caractéristique VU audio

La caractéristique VU audio 8E0C0007-7B3C-4F8E-9F4D-2C8B5A1E0001 est un flottant 4 octets (précision simple IEEE 754) représentant le niveau de sortie audio actuel. Elle est envoyée à 30 Hz sur le firmware Q6/Q8 3.3.1 lorsque le TTS est actif. L'application hôte l'utilise pour afficher la petite barre VU à l'écran.

Modèle Fréquence VU Bande passante VU Coût batterie
Q6/Q8 30 Hz 0,12 Ko/s +0,2 mA
L5 30 Hz 0,12 Ko/s +0,2 mA
T2 60 Hz 0,24 Ko/s +0,4 mA
Y6 60 Hz 0,24 Ko/s +0,4 mA
F8 Aucun — 0

VU est désactivé sur F8 et P2 pour économiser la batterie. Sur T2/Y6, le débit est doublé car ces modèles disposent d'un écran OLED pour afficher une animation plus fluide.

10. Le test de contrainte que nous appliquons à chaque micrologiciel

Test Durée Critère de réussite
Appui OID continu pendant 1 heure 3 600 appuis 0 rapport perdu
Batterie à 10 Hz pendant 24 heures 864 000 événements Aucun débordement de file d'attente
Déconnexion + reconnexion 100 cycles 100 cycles Réappairage en <1,5 s
8 appariements + connexion séquentielle 8 cycles Les 8 pairs se reconnectent
MTU 23 forcé par l'hôte 5 min Aucun dépassement de tampon

Si un test échoue, le micrologiciel est rejeté. Sur 86 versions de micrologiciel depuis 2023, 3 ont échoué au test d'appui continu (débordement de file d'attente) et 1 au test MTU-23 (dépassement de tampon). Les quatre ont été corrigés avant d'être redistribués.


Peak Notification Rate (notifications/s)

11. Liens avec les autres articles

TC-061 se trouve au centre du pipeline BLE. TC-057 définit la couche HID au-dessus. TC-058 définit le descripteur en dessous. TC-059 définit le modèle d'appairage qui permet à un hôte de s'abonner. TC-060 documente le schéma implémenté par ce serveur. TC-062 couvre la voie Wi-Fi parallèle. TC-063 couvre la découverte LAN. TC-064 couvre CoAP, le protocole qui fonctionne sur la voie LAN.

13. Lectures connexes


Demander un devis — Obtenez une réponse rapide de l'usine

14. Télémétrie de production, données terrain et guide de l'acheteur

Sur les 86 versions de micrologiciel livrées depuis 2023, notre journal de serveur GATT montre un déclin constant des événements de débordement de file d'attente de notifications. La ligne de micrologiciel actuelle — B1/B2 à 2.4.7, F8 à 3.1.2, K7/KF1 à 1.9.5, L5 à 4.2.0, P2 à 2.0.3, Q6/Q8 à 3.3.1, et T2/Y6 à 2.6.4 — maintient le taux de débordement horaire continu en dessous de 0,06 pour cent sur plus de 47 000 unités déployées dans 47 pays. Ce chiffre compte parce qu'un seul débordement sur un bureau d'école fréquenté se traduit par un code OID manqué et un enfant qui fixe un stylo silencieux, ce qui est exactement le ticket de support qu'aucun importateur ne souhaite.

14.1 Débit réel par rapport à la classe de connexion

Le graphique ci-dessous trace le débit moyen soutenu de notifications que nous avons mesuré sur les stylos de production pendant la suite de tests de contrainte en 5 étapes. Les valeurs proviennent de 1 200 tests (100 unités × 12 versions de micrologiciel) collectés entre T2 2025 et T1 2026 dans notre chambre anéchoïque à 23°C et 55 pour cent d'humidité relative.

Sustained Notifications / Second (avg of 1,200 runs)

Latence de notification inter-modèles au 95e percentile

Le profil de latence change de manière notable lorsque vous passez du K7 et KF1 d'entrée de gamme au L5 et T2 phare parce que le cœur Cortex-M4F plus rapide dispose de 8 Ko de tampon de notification contre 2 Ko sur le Cortex-M0+. Les acheteurs qui gèrent une flotte de plus de 5 000 stylos dans un programme scolaire se soucient généralement davantage du 95e percentile que de la moyenne parce que la latence de queue entraîne la lenteur perçue sur l'application compagnon parentale.

Modèle Cœur Tampon Moyenne (ms) p95 (ms) p99 (ms) Débordement / heure
K7 Cortex-M0+ 2 Ko 38 86 142 0,12%
KF1 Cortex-M0+ 2 Ko 36 82 138 0,11%
B1 Cortex-M4F 4 Ko 24 54 96 0,04%
B2 Cortex-M4F 4 Ko 22 51 92 0,04%
F8 Cortex-M4F 4 Ko 26 58 101 0,05%
Q6 Cortex-M4F 4 Ko 23 52 95 0,04%
Q8 Cortex-M4F 4 Ko 21 49 89 0,03%
L5 Cortex-M4F 8 Ko 14 32 58 0,01%
T2 Cortex-M4F 8 Ko 12 28 52 0,01%
Y6 Cortex-M4F 8 Ko 13 30 55 0,01 %
P2 Cortex-M0+ 2 Ko 41 92 156 0,14 %

14.3 Règles de décision d'achat

Conseil acheteur : Si votre canal de distribution associe le stylo à une application parentale qui émet un ping toutes les 5 secondes (un schéma courant pour les traqueurs de lecture K-3), choisissez le L5 ou le T2 avec le tampon de 8 Ko. La latence p95 de 32 ms maintient la réponse perçue sous 50 ms, soit le seuil « instantané » humain. Les modèles d'entrée comme le P2 fuiront 0,14 pour cent des notifications par heure à ce rythme et votre boîte de support le sentira dès le premier trimestre.

14.4 Couverture de certification du bloc radio BLE

La radio qui transporte ces notifications est le même bloc testé dans le cadre de nos déclarations multi-juridictionnelles. CE-RED (EN 300 328 v2.2.2), FCC Part 15.247, UKCA-RER, RCM (AS/NZS 4268), KC (KN 301 489-1/-17) et ISED RSS-247 couvrent tous la bande 2 402 - 2 480 MHz avec les PHY 1M, 2M et Coded. EN 71-1/-2/-3, ASTM F963-17, CPSIA et PROP 65 couvrent le boîtier, l'aimant et l'encre. GCC (approbation SFDA pour l'Arabie saoudite), ESMA (EAU), SNI (Indonésie), NOM (Mexique) et INMETRO (Brésil) sont des couches supplémentaires d'accès au marché que nos clients importateurs réutilisent régulièrement. Chaque lot est accompagné d'un rapport d'examen de type de 38 pages et d'un numéro de série par unité qui correspond au voyageur QA.

14.5 Références croisées internes et chemins de lecture

Pour les mécanismes d'appairage en amont de la couche GATT, consultez Reading Pen Bluetooth Pairing SSP Secure Simple Pairing. Pour la conception UUID qui définit quelle caractéristique contient ces notifications, consultez Reading Pen BLE Service Characteristic UUID Design. Pour le pipeline OTA qui recharge ce code sur le terrain, consultez Reading Pen OTA Firmware Update Mechanism. Pour le format de fichier dictionnaire qui transite par ces notifications lorsqu'une nouvelle édition de livre OID est publiée, consultez Reading Pen Dictionary File Format and Edition. Pour le côté fabricant du programme, consultez ODM Reading Pen Engineering Service et OEM Reading Pen Manufacturing.

CTA : Spécifiez la bonne classe de firmware GATT pour votre marché en nous envoyant votre latence cible, votre SLA p95 et votre mix de classes de connexion. Demander un devisavec le mot « GATT-PERF » et nous vous enverrons un dossier d'analyse comparative de 6 pages par modèle ainsi qu'un devis d'intégration de micrologiciel à prix fixe dans les 24 heures. Les stylos neutres en stock sont prêts avec un minimum de commande de 500 unités, tandis que les gammes de marques privées commencent à partir de 3000 unités avec un délai de production de 4 semaines après approbation des visuels.

Frequently Asked Questions

Comment le stylo de lecture gère-t-il une notification perdue par la radio ?
BLE Notify n'a pas de retransmission. Le stylo marque le rapport comme envoyé dans le tampon de télémétrie QA avec son numéro de séquence. Si l'hôte détecte un écart, il peut relire l'état du dictionnaire pour récupérer. L'événement suivant arrive dans les 15 ms et l'utilisateur ne perçoit aucune perte dans 99,4 % des cas.
L'hôte peut-il s'abonner aux notifications avant ou après la découverte de services ?
Après. L'hôte doit terminer la découverte de services pour obtenir le handle CCCD, puis écrire 0x0001 (Notify) ou 0x0002 (Indicate) pour activer l'abonnement. Le stylo stocke l'état d'abonnement dans l'enregistrement de pairage afin que les reconnexions ultérieures activent automatiquement l'abonnement.
Pourquoi le stylo utilise-t-il Indicate pour la télémétrie plutôt que Notify ?
La télémétrie est essentielle pour le QA. Indicate nécessite un ACK de l'hôte, ce qui garantit la livraison au prix d'une latence supplémentaire d'environ 1,2 ms. Notify n'a pas d'ACK, donc un paquet de télémétrie perdu est invisible pour l'hôte. Nous acceptons la pénalité de latence pour la fiabilité QA.
Quel est le nombre maximal de pairs appairés dont le stylo suit les abonnements ?
Le stylo suit les abonnements CCCD pour les 8 pairs appairés simultanément. La table CCCD utilise 32 entrées (8 pairs x 4 caractéristiques), occupant 1,6 Ko de RAM. Lorsqu'un 9e pair essaie de se connecter, le pairage le plus ancien est écrasé selon la politique documentée dans TC-059.
Comment testez-vous le pipeline de notifications avant la publication du micrologiciel ?
Nous exécutons une suite de stress en 5 étapes : 1 heure de tapotage continu, 24 heures de batterie à 10 Hz, 100 cycles de déconnexion/reconnexion, connexion séquentielle de 8 pairs et 5 minutes de MTU-23 forcé. Si une étape échoue, le micrologiciel est rejeté. Cette validation a détecté 4 régressions sur 86 publications de micrologiciel.
Votre panier
Votre expérience sur ce site sera améliorée en autorisant les cookies. Politique de cookies
Chat on WhatsApp