Por que la interfaz de host es el cuello de botella
Un módulo Bluetooth rara vez trabaja solo. Esta detras de un MCU que le pasa datos y lee eventos. La calidad de la interfaz de host — tramado, control de flujo, handshake de suspension — decide si el producto sale en una semana o en tres. Este articulo cubre un protocolo de host de grado produccion.
Capa fisica
- UART 115200-921600 bps, 8N1. A 921600 usa placa limpia y pistas <30 cm.
- RTS/CTS hardware obligatorio sobre 460800 para evitar desbordes.
- Opcional: un GPIO `HOST_WAKE` para coordinar suspension.
Dos estilos
| Estilo | Pros | Contras |
|---|---|---|
| Comando AT (texto) | facil de depurar, legible | verboso, sobrecarga parser |
| Binario (TLV/COBS) | compacto, rapido | requiere herramienta |
Usa AT para config, binario para datos bulk.
Tramado AT
<CR><LF>AT+NAME=Sensor01<CR><LF>
Respuesta: <CR><LF>OK<CR><LF>
Error: <CR><LF>ERROR:code<CR><LF>
- Terminador: CRLF. Nunca confies solo en `\n`.
- Eco ON en arranque, OFF en produccion.
- Eventos async llegan sin pedir: `+EVENT:conn 1`.
Tramado binario (TLV)
[0xAA][Len:2][Cmd:1][TLV...][CRC:2]
- COBS elimina escapes 0x00.
- CRC-16/CCITT; recalcula en cada trama.
Control de flujo
- CTS bajo = modulo ocupado, host debe parar.
- Para envios bulk, ventana 4-8 tramas; espera `OK` antes del siguiente burst.
Handshake de suspensión
El modulo duerme para ahorrar. El host debe despertarlo antes de enviar.
HOST: activa HOST_WAKE (o envia break)
MODULE: sube RTS en 2 ms
HOST: espera RTS alto, luego transmite
Sin esto, los bytes se pierden en silencio.
Matematica de throughput
A 115200 bps, 8N1 eficiencia ≈ 11 bit/byte → ~10.4 KB/s bruto. Overhead protocolo+ACK ≈ 30% → ~7 KB/s util. Para stream de 1 KB/s sobra; para audio usa 921600 o SDIO.
Errores comunes
- Olvidar CTS → perdidas aleatorias a alta velocidad.
- Sin watchdog en parser host → atascado en trama mala.
- Dormir modulo sin linea de wake → «dejo de funcionar».
- Mezclar `\n` y `\r\n` entre SDKs.
Maquina de estados minima
IDLE → SEND → WAIT_ACK → (RETRY|OK) → IDLE, timeout ACK 500 ms, 3 reintentos.
Un buen protocolo de host de módulo Bluetooth es aburrido por diseno — y eso es lo que deja el resto del firmware interesante.