Frame Format
The XLRS protocol uses a fixed packet length of 33 bytes for the main channel data message (MSG_CHANNELS).
Message Types
| Type | ID | Description |
|---|---|---|
| MSG_CHANNELS | 0x01 | 8-channel control data (encrypted) |
| MSG_BATTERY | 0x02 | Battery telemetry from RX to TX |
| MSG_PAIRING | 0x03 | Pairing request with binding UID |
| MSG_PAIRING_ACK | 0x04 | Pairing acknowledgment |
| MSG_SYNC | 0x05 | Connection sync packet |
| MSG_SYNC_ACK | 0x06 | Sync acknowledgment |
Channel Frame (MSG_CHANNELS)
The main control frame consists of:
- Message Type: 1 byte
- Device ID: 8 bytes
- Channel Data: 16 bytes (8 channels × 2 bytes, big-endian)
- Sequence Number: 2 bytes
- HMAC-SHA256: 4 bytes (truncated)
- Total: 31 bytes payload + 2 bytes overhead = 33 bytes
Battery Telemetry (MSG_BATTERY)
The RX receives battery telemetry from the flight controller via CRSF and sends it to the TX over radio.
| Field | Format | Description |
|---|---|---|
| Voltage | V × 10 (16-bit BE) | Battery voltage in 0.1V units |
| Current | A × 10 (16-bit BE) | Battery current in 0.1A units |
| Remaining | 8-bit | Battery percentage (0-100) |
UART Protocol (RC ↔ TX)
The UART protocol between the RC board and TX module uses a similar frame-based structure with CRC8 checksums.
Commands (RC → TX)
| Command | ID | Description |
|---|---|---|
| UART_MSG_CMD_PAIR | 0x10 | Enter pairing mode |
| UART_MSG_CMD_BOND | 0x11 | Check bonding status |
| UART_MSG_CMD_RESTART | 0x12 | Restart TX module |
| UART_MSG_CMD_STATUS_REQ | 0x13 | Request status update |