Why the Host Interface Is the Integration Bottleneck
A Bluetooth module rarely works alone. It sits behind an MCU that feeds it data and reads events. The quality of the host interface — framing, flow control, sleep handshake — determines whether your product ships in a week or three months. This article covers a production-grade Bluetooth module host protocol.
Physical Layer
- UART 115200-921600 bps, 8N1. For 921600 use a clean board and traces under 30 cm.
- Hardware RTS/CTS is mandatory above 460800 to avoid overflow.
- Optional: a single `HOST_WAKE` GPIO for sleep coordination.
Two Protocol Styles
| Style | Pros | Cons |
|---|---|---|
| AT command (text) | easy to debug, human-readable | verbose, parser overhead |
| Binary (TLV/COBS) | compact, fast | needs tooling |
Choose AT for config and low-rate; binary for bulk data.
AT Command Framing
<CR><LF>AT+NAME=Sensor01<CR><LF>
Response: <CR><LF>OK<CR><LF>
Error: <CR><LF>ERROR:code<CR><LF>
- Terminator: CRLF. Never rely on `\n` alone.
- Echo on during bring-up, off in production.
- Async events arrive unsolicited: `+EVENT:conn 1`.
Binary Framing (TLV)
[0xAA][Len:2][Cmd:1][TLV...][CRC:2]
- COBS encoding removes 0x00 escapes.
- CRC-16/CCITT; recompute on every frame.
Flow Control
- CTS low = module busy, host must pause.
- For bulk sends, window size = 4-8 frames; wait for `OK` before the next burst.
Sleep Handshake
The module sleeps to save power; the host must wake it before sending.
HOST: assert HOST_WAKE (or send break)
MODULE: raises RTS within 2 ms
HOST: waits for RTS high, then transmits
Without this, bytes are lost silently.
Throughput Math
At 115200 bps, 8N1 efficiency ~ 11 bits/byte -> ~10.4 KB/s raw. Protocol + ACK overhead ~ 30% -> ~7 KB/s usable. A 1 KB/s sensor stream has headroom; for audio use 921600 or a dedicated SDIO.
Common Pitfalls
- Forgetting CTS -> random drops at high speed.
- No watchdog on the host parser -> stuck on a malformed frame.
- Sleeping the module without a wake line -> “it just stopped”.
- Mixing `\n` and `\r\n` terminators across SDKs.
Minimal Host-Side State Machine
IDLE -> SEND -> WAIT_ACK -> (RETRY|OK) -> IDLE, with a 500 ms ACK timeout and 3 retries.
A clean Bluetooth module host protocol is boring by design — and that is exactly what lets the rest of your firmware be interesting.