Skip to content

SPI Receivers

HW Banner

A few Flight Controllers and AIOs have been released with ExpressLRS receivers on-board using SPI instead of a regular UART. This means you can build a more compact and lightweight whoop or nano longrange rig without the need for an external receiver. More of these flight controllers are coming into stores.

Because the ExpressLRS code is "baked-in" to the flight controller firmware instead of a second microcontroller, these can not be updated the same way external receivers are. These SPI receivers will work always work with the ExpressLRS firmware of the same major version. That is, ExpressLRS 1.x.x and ExpressLRS 2.x.x need different Flight Controller firmware (Betaflight builds).

Binding Procedure

There are two ways to bind the receiver, as shown below

Button Binding

Put the receiver into bind mode using any of these procedures:

  • "Bind" button in the Betaflight Configurator, Receiver Page (if can't be found, update the Betaflight firmware).
  • using the CLI, type in bind_rx and press enter once.
  • press the bind button on the flight controller.
  • using the CLI, type in set expresslrs_uid = 0, press enter once, then save and reboot

Execute elrs.lua in your handset and press the Bind button. The RX and TX should be now bound.

Please mind the order, RX first, TX second.

Video Tutorial (thanks to @JyeSmith):

Binding Phrase

The binding phrase is hashed into 6 bytes represented as numbers. These 6 bytes are referred to as the UID bytes. UID bytes are entered into the Betaflight CLI for binding. Please look below for instructions. When building via ExpressLRS Configurator or via VS Code, note down the UID bytes from the build log. You can also use the generator below to retrieve your UID bytes from your binding phrase.

UID String

UID Byte Generator

Binding Phrase

UID Bytes

Setting Binding Phrase

Go to Betaflight CLI and enter the following commands. (Enter your binding phrase above)

RF Mode Adjustment

These AIOs with ExpressLRS SPI Receivers are set to use 500Hz as default. To adjust it, you will need to go into Betaflight CLI and use the following commands:

set expresslrs_rate_index = [your index]

Where [your index] corresponds to the following :

  • 500Hz = 0
  • 250Hz = 1
  • 150Hz = 2
  • 50Hz = 3

With the Updated Betaflight firmware, adjusting your packet rate from the Lua Script will also adjust the packet rate in the AIO.


As mentioned, you must flash a Betaflight firmware that's compatible with the ExpressLRS major version on your transmitter. ExpressLRS 1.x.x TX only works with Betaflight firmware for ExpressLRS 1.x.x, and upgrading the transmitter to ExpressLRS 2.x.x means flashing the flight controller with a different Betaflight version. If upgrading minor versions, such as from ExpressLRS 1.1.0 to 1.2.0 on the transmitter, no changes to the flight controller are needed although there may be bug fixes to the ExpressLRS Betaflight implementation as well.

In preparation for this, you should save a copy of your diff all dump.

Download the necessary binaries (zipped) from this Betaflight PR page. Extract the Hex File and, using Betaflight Configurator 10.8.0 (Nightly), flash the binary using the Load Firmware [Local] button found at the bottom right of the Firmware Flasher (Flight Controller in DFU Mode).

Once flashed, you will need to paste in the diff all you have saved. Don't forget to type in save and press enter once done. Power cycle your flight controller, and you should be set. Review your Betaflight settings, and check your RC link.

This procedure will only apply while Betaflight 4.3.0 is not yet released. Section will be updated appropriately for any changes in procedures.

For more information, head over to the Betaflight PR page. We can also help out over at Discord!

Content taken from the PR page ℅ of @phobos-