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.