Un module Bluetooth sur le terrain n’est aussi bon que le firmware que vous pouvez lui pousser. L’OTA (over-the-air) DFU est le moyen de corriger des bugs, fermer des CVE et ajouter des fonctions sans camion. Cet article couvre l’architecture de mise à jour d’un module Bluetooth : dual-bank, images signées, diffs delta et rollback.

Topologies de mise à jour

Un module Bluetooth reçoit le firmware de deux façons :

  • Directe : le smartphone connecte et stream l’image via GATT (typique grand public).
  • Indirecte : une gateway bufférise l’image et la relaie à beaucoup de modules (flottes industrielles).

Dual-bank vs single-bank

Le design le plus sûr d’un module Bluetooth garde deux banques :

Schéma Risque en échec Coût stockage
Single-bank brick si coupure de courant en écriture 1x
Dual-bank (A/B) démarre ancienne banque en échec 2x
Staging sur SPI externe démarre interne en échec 1x + ext

Le dual-bank vaut le flash pour tout ce qui est critique sûreté ou revenu.

Images signées

Ne flashez jamais de code non signé. Le module Bluetooth vérifie une signature avant de changer de banque :

if Verify(pubkey, image_hash, sig) == OK:

swap_bank()

else:

reject_and_stay()

Utilisez ECDSA P-256 avec une clé racine gravée en usine. Une mauvaise image ne démarre simplement pas.

Mises à jour delta / partielles

Les images complètes font 200-500 Ko ; les envoyer à 10 000 modules fait mal. Un diff delta n’envoie que les blocs changés :

patch = bsdiff(old_image, new_image) # souvent 5-20% de la taille totale

Le module Bluetooth applique le patch dans la zone de staging, vérifie le hash résultat puis bascule. Cela réduit drastiquement bande passante et temps de mise à jour.

La machine à états de l’update

Un DFU discipliné d’un module Bluetooth tourne en machine à états :

IDLE -> DOWNLOAD -> VERIFY -> SWAP -> REBOOT -> (OK | ROLLBACK)

À tout mismatch de checksum il rollback vers la bonne banque et rapporte l’échec. N’effacez la banque active qu’après vérification de la nouvelle.

Puissance et temps

Un DFU à 1-2 Ko/s sur BLE prend des minutes pour une image complète ; un delta va de quelques secondes à une minute. Prévenez l’utilisateur, gardez l’appareil alimenté (ou exigez >50% batterie) et throttlez pour éviter la surchauffe.

Notes sécurité

  • Authentifiez la source : seulement image signée de votre serveur, sur canal chiffré.
  • Rate-limit les updates pour bloquer un DoS qui use la flash.
  • Versionnez le protocole pour que les vieux modules updates.

Un module Bluetooth avec DFU dual-bank signé et support delta transforme une urgence firmware en job silencieux en arrière-plan.