# Binary Telemetry Transport The firmware initializes two physical transports for the existing binary telemetry packet: - USB FS CDC ACM on PA11/PA12, clocked from HSI48. - FDCAN1 classic CAN on PB8/PB9, default 500 kbit/s with an external CAN transceiver. Modbus RTU on USART2 remains active as the control channel. This is intentional: the host can always switch the telemetry mode back without reflashing. ## Modbus Selection Registers Modbus protocol/register-map version is `7`. | Address hex / dec | Field | Access | Purpose | |---:|---|---|---| | `0x001C` / `28` | `H028_control_host_protocol` | R/W | `0`=Modbus control only, `1`=binary telemetry output enabled | | `0x001D` / `29` | `H029_control_binary_transport` | R/W | `0`=USB CDC, `1`=CAN/FDCAN1, `2`=USB CDC and CAN | ## USB CDC USB is exposed as a CDC ACM serial stream. The stream does not guarantee message boundaries, so the PC side should parse by the telemetry header: - `magic` - `payload_size` - `sequence` - `crc16` ## CAN/FDCAN CAN carries the same binary packet split into classic 8-byte frames: | Standard ID | Payload | |---:|---| | `0x5A0` | packet bytes `0..7` | | `0x5A1` | packet bytes `8..15` | | `0x5A2` | packet bytes `16..23` | The base standard ID is controlled by `AD_CAN_TELEMETRY_STD_ID_BASE`, default `0x5A0`. The receiver reconstructs the packet from sequential frame IDs and uses the normal binary telemetry header to determine the full packet length.