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 :
- Maintenir un numéro de séquence dans la charge utile du rapport OID.
- Enregistrer chaque notification envoyée avec son numéro de séquence dans le tampon de télémétrie QA.
- 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 :
- Émettre une lecture manuelle de l'état du dictionnaire.
- Comparer le dernier ID de page de dictionnaire vu avec l'actuel pour détecter les événements manqués.
- 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.
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
- Stylo de lecture USB HID et HID sur GATT
- Descripteur de rapport HID du stylo de lecture et page d'utilisation
- Appairage Bluetooth SSP Secure Simple Pairing du stylo de lecture
- Conception des caractéristiques de service BLE du stylo de lecture
- Mécanisme de mise à jour du micrologiciel OTA du stylo de lecture
- Fréquence d'échantillonnage de la télémétrie du stylo de lecture
- Consommation d'énergie et test d'autonomie du stylo de lecture
- Format de fichier et édition du dictionnaire du stylo de lecture
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.
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.