Un módulo Bluetooth en campo solo es tan bueno como el firmware que puedes empujarle. OTA (over-the-air) DFU es cómo corriges bugs, cierras CVEs y agregas funciones sin un camión. Este artículo cubre la arquitectura de actualización de un módulo Bluetooth: dual-bank, imágenes firmadas, diffs delta y rollback.
Topologías de actualización
Un módulo Bluetooth recibe firmware de dos formas:
- Directa: el smartphone conecta y transmite la imagen por GATT (típico en consumo).
- Indirecta: un gateway bufferea la imagen y la reenvía a muchos módulos (flotas industriales).
Dual-bank vs single-bank
El diseño más seguro de módulo Bluetooth guarda dos bancos:
| Esquema | Riesgo al fallar | Costo almacenamiento |
|---|---|---|
| Single-bank | brick si se corta energía al escribir | 1x |
| Dual-bank (A/B) | arranca banco viejo al fallar | 2x |
| Staging en SPI externa | arranca interno al fallar | 1x + ext |
Dual-bank vale la flash para algo crítico de seguridad o ingresos.
Imágenes firmadas
Nunca flashees código sin firma. El módulo Bluetooth verifica una firma antes de cambiar bancos:
if Verify(pubkey, image_hash, sig) == OK:
swap_bank()
else:
reject_and_stay()
Usa ECDSA P-256 con clave raíz grabada en fábrica. Una imagen mala simplemente no arranca.
Actualizaciones delta / parciales
Las imágenes completas son 200-500 KB; enviar eso a 10.000 módulos duele. Un diff delta envía solo los bloques cambiados:
patch = bsdiff(old_image, new_image) # a menudo 5-20% del tamaño total
El módulo Bluetooth aplica el parche en el área de staging, verifica el hash resultado y luego cambia. Esto recorta ancho de banda y tiempo de update dramáticamente.
La máquina de estados de update
Un DFU disciplinado de módulo Bluetooth corre como máquina de estados:
IDLE -> DOWNLOAD -> VERIFY -> SWAP -> REBOOT -> (OK | ROLLBACK)
Ante cualquier fallo de checksum retrocede al banco bueno y reporta. Nunca borres el banco activo hasta verificar el nuevo.
Energía y tiempos
Un DFU a 1-2 KB/s por BLE tarda minutos para imagen completa; un delta son segundos a un minuto. Avisa al usuario, mantén alimentado (o exige >50% batería) y throttlea para evitar sobrecalentar.
Notas de seguridad
- Autentica el origen: solo imagen firmada de tu servidor, por canal cifrado.
- Rate-limit a updates para bloquear un DoS que desgasta la flash.
- Versiona el protocolo para que módulos viejos aún actualicen.
Un módulo Bluetooth con DFU dual-bank firmado y soporte delta convierte una emergencia de firmware en un trabajo silencioso en segundo plano.