Multiwii Serial Protocol (MSP)

ArduPilot supports the MSP protocol for telemetry, OSDs, and sensors via any of its serial ports. This allows ArduPilot to send its telemetry data to MSP compatible devices, such as DJI goggles, for On Screen Display (OSD) (See MSP OSD). It can also be used by external OSDS, such as MWOSD, when setup for MSP protocol (ie betaflight/Inav).

Protocol overview

MSP is the main communication protocol used by all Betaflight derived flight stacks. It’s a binary message based protocol used for control, telemetry and sensors. ArduPilot’s MSP protocol module is ported from Betaflight and iNav, and supports both MSPV1 and MSPV2.

At the moment, the ArduPilot implementation supports:

  • MSP Telemetry
  • MSP Telemetry OSDs such as DJI FPV Goggles, FatShark’s ByteFrost and SharkByte, MWOSD
  • MSP DisplayPort OSDs such as FatShark’s Shark Byte and MWOSD
  • MSP Sensors such as lidar, optical flow, gps, barometer, magnetometer and airspeed

ArduPilot configuration via MSP protocol is not supported, so for instance the Betaflight configurator won’t work.

Configuration

MSP requires a free serial port, and its speed defaults to 115200 baud. Below SERIAL2 is used for the examples.

There are 3 MSP backends selected by serial protocol:

  • SERIAL2_PROTOCOL = 33 is for DJI FPV or RE Goggles
  • SERIAL2_PROTOCOL = 32 is for sensors or generic MSP telemetry usage and MWOSD configured for MSP telemetry
  • SERIAL2_PROTOCOL = 42 is for DisplayPort OSDs (aka CANVAS MODE) such as FatShark’s SharkByte

Note

There are 2 different protocols to try to maintain compatibility with DJI’s evolving hardware.

When SERIAL2_PROTOCOL = 33 is selected the protocol decoder can work in polling mode (default) or in “telemetry push” mode. When working in polling mode, both TX and RX must be connected to the MSP telemetry transceiver. While in push mode only the TX line is used. To enable push mode, simply set MSP_OPTIONS bit 0 to “1”; to disable set it to “0” (default).

MSP sensors such as the Matek 3901-L0X are supported by both protocols.