Pourquoi l’interface hote est le goulot

Un module Bluetooth travaille rarement seul. Il est derriere un MCU qui lui passe des donnees et lit les evenements. La qualite de l’interface hote — tramage, controle de flux, handshake de sommeil — decide si le produit sort en une semaine ou trois. Cet article couvre un protocole hote de qualite production.

Couche physique

  • UART 115200-921600 bps, 8N1. A 921600, carte propre et pistes <30 cm.
  • RTS/CTS materiel obligatoire au-dela de 460800 pour eviter les debordements.
  • Option : un GPIO `HOST_WAKE` pour coordonner le sommeil.

Deux styles

Style Avantages Inconvenients
Commande AT (texte) debug facile, lisible verbeux, charge parser
Binaire (TLV/COBS) compact, rapide outil requis

AT pour config, binaire pour donnees bulk.

Tramage AT

<CR><LF>AT+NAME=Sensor01<CR><LF>
Reponse: <CR><LF>OK<CR><LF>
Erreur:  <CR><LF>ERROR:code<CR><LF>
  • Terminaison : CRLF. Ne jamais compter seul sur `\n`.
  • Echo ON au demarrage, OFF en production.
  • Evenements async arrivent sans demande : `+EVENT:conn 1`.

Tramage binaire (TLV)

[0xAA][Len:2][Cmd:1][TLV...][CRC:2]
  • COBS supprime les echappements 0x00.
  • CRC-16/CCITT ; recalcule sur chaque trame.

Controle de flux

  • CTS bas = module occupe, hote doit pauser.
  • Pour l’envoi bulk, fenetre 4-8 trames ; attendre `OK` avant le prochain burst.

Handshake de sommeil

Le module dort pour economiser. L’hote doit le reveiller avant d’envoyer.

HOST: assert HOST_WAKE (ou envoie break)
MODULE: monte RTS en 2 ms
HOST: attend RTS haut, puis transmet

Sans cela, les octets sont perdus en silence.

Mathematique du debit

A 115200 bps, 8N1 efficacite ≈ 11 bit/octet → ~10.4 KB/s brut. Overhead protocole+ACK ≈ 30% → ~7 KB/s utiles. Pour un flux capteur de 1 KB/s il reste de la marge ; pour l’audio, 921600 ou SDIO.

Pieges courants

  • Oublier CTS → pertes aleatoires a haute vitesse.
  • Pas de watchdog dans le parser hote → bloque sur trame erronee.
  • Dormir le module sans ligne de wake → « ca s’est arrete ».
  • Melanger `\n` et `\r\n` entre SDK.

Machine a etats minimale

IDLE → SEND → WAIT_ACK → (RETRY|OK) → IDLE, timeout ACK 500 ms, 3 reessais.

Un bon protocole hote d’un module Bluetooth est ennuyeux par conception — et c’est exactement ce qui rend le reste du firmware interessant.