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 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).


You cannot use the ExpressLRS Configurator to update these FCs. See the updating section below.

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 the ExpressLRS lua script in your handset and press the Bind button. The RX and TX should be now bound (indicated by a SOLID LED on the Flight Controller).

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


Recent Betaflight 4.3 firmwares for these AIOs no longer needs the following CLI command. Adjustments from the Lua script propagates into the FCs.

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 (e.g. Betaflight 4.3-RC1 5933d96). You don't need to update the FC firmware whenever there's minor updates on the main ExpressLRS codebase, unless there's any update on the Betaflight codebase itself for the SPI ExpressLRS receivers.

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

Using the latest Betaflight Configurator, navigate into Firmware Flasher and select the latest Betaflight release (at the time of writing, it should be set to Release and Release Candidate; and use the latest 4.3.0 Release Candidate). Depending on your AIO board, the target will differ:

  • Happymodel AIO: CRAZYBEEF4SX1280
  • SPRacing SPH7RF: Coming soon!

The Happymodel Mobula6 900MHz AIO with the CrazyF4 ELRS FC (Target: CRAZYBEEF4DX) doesn't use an SPI ExpressLRS receiver. Check the page for ES915RX instead.

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. You may need to set your Binding Phrase once again if you pasted in Factory Diff All. Review your Betaflight settings (no changes needed for the Receiver Type and Protocol; should already be set with SPI Receiver, with Provider as ExpressLRS), and check your RC link in the Receiver Tab (were sticks moving?).

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

Content taken from the PR page ℅ of @phobos-