Desert RC Logo
Interfacing to Remote Receivers

Spektrum Format

Spektrum Format:
Once a Spektrum receiver is turned on, it will begin sending serial data as soon as it syncs up with the transmitter. All data sent from a Spektrum receiver is sent using the familiar framed format of one start bit, 8 data bits, least significant bit first, no parity, and one stop bit. All data is sent at approximately 115.9K-baud. A total of 16-bytes are sent with a 16-bit header word and seven 16-bit transmitter channel words. The most significant byte is always sent first for each 16-bit word. Figure 1 shows three data frames on the top with a closeup of the first frame on the bottom. The time between frames is approximately 22mS. All data is provided as a contiguous stream. In this context, a data frame is defined as a single group of 16-bytes containing a header word and all transmitter stick and position data.

Figure 1: Spektrum Remote Receiver Data Frame

Spektrum Word Size and Channel ID:
The first two bytes are usually the same for any given Spektrum remote receiver, and begin with a 0x01 or 0x03 followed by another byte that is not always the same on every receiver. In my applications, I toss out the first two bytes and begin data retrieval from byte 2 (base zero). Each transmitter channel is represented by a 16-bit word where bits 0-9 represent the actual transmitter data and bits 10-15 represent the channel identifier. A total of 16-bytes are sent from the receiver representing the first two tossed-out bytes followed by 14-bytes defining 7 16-bit words of transmitter data. A closeup of the header word is shown in Figure 2. The location definitions of each byte is shown in Table 1.

Figure 2: Spektrum Header Word

Header MSBHeader LSBChannel MSBChannel LSBChannel MSBChannel LSBChannel MSBChannel LSB
Channel MSBChannel LSBChannel MSBChannel LSBChannel MSBChannel LSBChannel MSBChannel LSB
Table 1: Spektrum 16-byte Data Frame Format

The 6 most significant bits of a 16-bit word identify the transmitter channel number, while the lower 10-bits contain the transmitter channel value as shown in Table 2.

Channel = Bits 15 - 10Transmitter Channel Value = Bits 9 - 0
Table 2: Spektrum Transmitter Channel Data Format

Channel numbers are identified as follows:

Channel 0Throttle
Channel 1Aileron
Channel 2Elevator
Channel 3Rudder
Channel 4Gear
Channel 5AUX 1
Channel 6AUX 2
Table 3: Spektrum Channel Number Translation

The channel data is not sent in order, nor can the channel ordering be expected to remain constant. The channel number MUST be identified before its associated value can be used or stored by the target. The following example shows actual data sent from a Spektrum remote receiver:

Byte #ValueMSB/LSBWordDescription
0 0x03MSB0x039bHeader
1 0x9bLSB--
2 0x05MSB0x05ffChannel 1 Data = 0x01FF = 511
3 0xffLSB--
4 0x14MSB0x14aaChannel 5 Data = 0x00aa = 170
5 0xaaLSB--
6 0x10MSB0x10aaChannel 4 Data = 0x00aa = 170
7 0xaaLSB--
8 0x0aMSB0x0a02Channel 2 Data = 0x0202 = 514
9 0x02LSB--
100x1bMSB0x1b54Channel 6 Data = 0x0354 = 852
120x01MSB0x01ebChannel 0 Data = 0x01eb = 491
140x0dMSB0x0dfeChannel 3 Data = 0x01fe = 510
Table 4: Example Spektrum Remote Receiver Serial Data

Notice that the channel data is sent in the order of channel 1, 5, 4, 2, 6, 0, and 3. Using table 3 above, the channel data can be translated to an order of Aileron, AUX1, Gear, Elevator, AUX2, Throttle, and Rudder. Other receivers send data in a different order such as 1, 5, 2, 3, 0, 4, and 6. The channel numbers will range from 0 through 6 to define 7-channels of transmitter data.
The data values range from about 170 through 853 to define a servo pulse width from 1.2mS to 1.8mS, or approximately 0.9uS/count. This value can range from 0 to 1023 to define a servo pulse width from approximately 0.74mS to 2.24mS.

Spektrum Remote Receiver Binding:
It is recommended that the Spektrum remote receivers be bound using the procedure outlined by Spektrum, as it is not a task that a typical target can perform. Binding codes are not passed over the serial cable in binding mode, nor does the remote receiver get the codes directly from the transmitter. As near as I can tell, these codes are passed between the master and remote receiver wirelessly after the master receiver has bound to the transmitter. Getting the remote receiver into binding mode is not difficult, but it will not complete the binding process with just the transmitter. A master receiver must be turned on in binding mode, and must be physically nearby for the binding to complete. The master and remote receivers do not have to be electrically connected for this to occur. I abandoned my efforts to bind the remote receiver using my target hardware after I discovered this.
Getting the remote receiver into binding mode is done by passing a set of pulses to the receiver approximately 72mS after power is applied. Figure 3 shows the sequence where the pulses are started 72mS after power up, and shows the set of eight 116uS pulses required to get the remote receiver into binding mode. Entry into binding mode is indicated by the receiver LED flashing. Binding is complete once the LED stays on constantly. Good luck with that.

Figure 3: Spektrum Binding Sequence

You're On Your Own:
This information should be all that is required to write code on a computing platform of your choice, or to write a software application for a desktop machine to read transmitter channel data over a standard serial port. Signal level translation must be performed with an inversion between the receiver output and the RS232 input signal if this data is being read on a standard PC RS232 serial port. If I find some spare time I will post example circuits to perform this task, and I might write a PC application as a demonstration tool if I feel ambitious. If you find this information useful, or if you would like clarification on something within the scope of this article, please email me. I would love to hear about your projects. Please email me with any errors that you find so I can correct them.

Go build something! Send pictures!

~ Dave ~