TRACE Request access
EN
Protocol analysis · MAVLink

Read MAVLink — with a verified CRC.

MAVLink runs between flight controller, telemetry radio and companion computer. Trace listens on the serial telemetry line, recognises v1 and v2 frames, verifies the CRC including CRC_EXTRA for the decoded messages and splits the most important messages into their fields.

No mail app set up? Write directly to support@trace-analyzer.net.

Access is currently free and granted on request.

  • v1 (0xFE) and v2 (0xFD)
  • CRC with CRC_EXTRA verified
  • 4 messages field by field
  • 10 message IDs named
Example

From the wire to the telegram.

A HEARTBEAT and a GPS position, both MAVLink v1 — exactly as Trace decodes them on the telemetry line.

// On the wire · bytes
FE 09 00 01 01 00 00 00 00 00 02 03 51 04 03 7D DD next frame FE 1E 00 01 01 18 00 00 00 00 00 00 00 00 00 65 CD 1D 80 B2 E6 0E A0 86 01 00 64 00 64 00 00 00 00 00 03 0A CF 4D
// In Trace · decoded telegrams
MAVLink v1 · HEARTBEAT
LEN · SEQ9 · 0
SYSID · COMPID1 · 1
MSGID0 (HEARTBEAT)
type2 (Quadrotor)
autopilot3 (ArduPilot)
base_mode0x51
system_status4 (Active)
CRC0xDD7D
MAVLink v1 · GPS_RAW_INT
lat · lon0x1DCD6500 · 0x0EE6B280
alt0x000186A0
fix_type3 (Fix3D)
satellites_visible10
CRC0x4DCF

Trace currently shows latitude, longitude and altitude as raw hex values: 0x1DCD6500 = 500000000 × 1e-7° = 50.0°, 0x000186A0 = 100000 mm = 100 m.

What Trace does

MAVLink as it is on the wire.

CRC including CRC_EXTRA

For every message, MAVLink folds a byte into the CRC that never appears on the wire. Trace knows it for the decoded messages and verifies the full checksum — a frame with a mismatched field layout stands out.

v1 and v2 in one stream

The definition tells both versions apart by their start byte, reads the v2 flags and skips an attached signature correctly.

Messages field by field

HEARTBEAT, SYS_STATUS, GPS_RAW_INT and ATTITUDE are split into their fields, with plain text for vehicle type, autopilot, system status and GPS fix. You add further messages in the definition.

  • SearchFull-text search across all telegrams, even in the live stream.
  • RecordingRaw bytes and the finished interpretation in one .msf file.
  • Multiple portsSeveral interfaces in one session, on a shared timeline.
  • RemoteProbe at the machine, analysis in the browser — no inbound port.
Honest about the state

What is still missing.

So you don't have to find the limits by trying:

  • Four messages in full. Ten message IDs are named; all others appear as a payload block, and their CRC is shown but not verified.
  • No floating-point or signed values. Angles, latitude and longitude are shown raw (hex or unsigned). Field names and boundaries are correct.
  • v2 edge cases. Messages with an ID of 256 or higher are not split into fields. Truncated v2 payloads (trailing zero bytes omitted) can shorten the last fields. The signature is read but not verified.
  • Serial lines only. Trace does not capture MAVLink over UDP or TCP — from SITL or a ground station, for example.
The definition

One CRC check for every message.

The CRC calculation appears once in the definition. Each message only supplies its CRC_EXTRA — so a new message takes just a few lines.

Open the TrIML reference →

<struct name="crc_check">
  <calc name="Crc" type="CRC" width="16"
        poly="0x1021" init="0xFFFF"
        reflectIn="true" reflectOut="true"
        xorOut="0x0000" byteOrder="little"
        resultType="word" appendValueRef="CrcExtra"
        from="1" to="-1" />
  <const ref="Crc" validate="true" name="CRC" />
</struct>

<struct name="msg_heartbeat">
  <struct sizeRef="LEN" name="HEARTBEAT">
    <dword name="custom_mode" />
    <byte  name="type" valuedescriptor="mav-type" />
    <!-- … -->
  </struct>
  <var value="50" name="CrcExtra" />
  <struct ref="crc_check" />
</struct>
FAQ

Frequently asked questions

What is CRC_EXTRA, and why does it matter?

A byte derived from a message's definition that enters the CRC without being sent. If sender and receiver use different message layouts, the CRC does not match — the error becomes visible instead of producing wrong values. HEARTBEAT, for example, has CRC_EXTRA 50.

Where do I connect Trace?

To the serial telemetry line, for instance between flight controller and radio or companion computer. A USB serial adapter listens with its receive input on one transmit line. For both directions you use two ports — Trace shows them on one timeline.

Do I need hardware to try it?

No. To try it, an excerpt from an existing hex capture is enough. For live use, the Trace probe runs on the computer the interface adapter is plugged into.

Try MAVLink with Trace.

Tell us briefly what you are measuring. We will enable your access — and whatever you find missing goes straight into development.

No mail app set up? Write directly to support@trace-analyzer.net.