Skip to content

SPI Receivers

HW Banner

Supported RF Modes

SPI receivers DO NOT support D(D250, D500), F(F500, F1000) and Full Res(100Hz Full Res, 333Hz Full Res) Modes (Packet Rates) and thus will not bind or sync with a TX module in any of these modes.

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 long range 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 using a second microcontroller, these can not be updated the same way external UART-based receivers are updated.

NOTE

You cannot use the ExpressLRS Configurator to update these FCs. You must update the flight controller software, e.g. Betaflight.

SPI receiver compatibility with ExpressLRS v3.x requires your flight controller be flashed with Betaflight 4.4. If you are running Betaflight 4.3.0 or Betaflight 4.3.1, your receiver will only work with ExpressLRS v2.x. Please update to Betaflight 4.4 for ExpressLRS v3.x compatibility.

In preparation for updating, you should save a copy of your diff all dump. Simply go into the CLI Tab of the Betaflight Configurator and execute the command diff all then press enter. A bunch of text will show up on the screen. At the bottom of the page, click the Save to File button and navigate to the folder you want the file to be saved. Finally click Save after taking note of the folder and filename of the text file. You will need to navigate to this file later on, moreover if you already have customized your settings on the flight controller, like rates, PID tune, OSD. For newly acquired flight controllers, this is often unnecessary.

Using the latest Betaflight Configurator, navigate into Firmware Flasher and select the latest Betaflight release. Depending on your AIO board, the target will differ:

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

If your Flight Controller model is not in the list above, consult your Flight Controller manufacturer for details.

NOTE

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.

Likewise, the v2.0 BetaFPV F4 1S 5A comes with an on-board UART-based ExpressLRS Receiver and doesn't use the SPI ExpressLRS implementation. Use the BETAFPV AIO 2400 RX Device target.

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 (no changes needed for the Receiver Type and Protocol; should already be set with SPI Receiver, with Provider as ExpressLRS).

As of Betaflight 4.4 (with Betaflight Configurator version 10.9.0 or newer), your ExpressLRS Binding Phrase can be set directly on the receiver tab in Betaflight Configurator.

BF settings

Proper configuration of the Betaflight Receiver tab for ExpressLRS SPI Receivers. Receiver Mode (1) should be set to SPI RX. SPI Bus Receiver Provider (2) should be set to EXPRESSLRS. Enter your binding phrase in the box (3) and it will be converted to UID bytes (4) and saved to your Betaflight config. You can also take this opportunity to enable Telemetry (5) if desired, and make sure RSSI_ADC (6) and RSSI Channel (7) are disabled as shown.

Alternate Binding Procedures

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

Once the SPI receiver is in Bind Mode (indicated by two immediate blinks followed by a short pause), execute the ExpressLRS Lua script in your handset and press the Bind option. 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 via CLI

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.

NOTE

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:

Not updating?

If the fields below don't update as you type your binding phrase above, refresh or reload this page in your browser.

UID Bytes


Setting Binding Phrase

Go to Betaflight CLI and enter the following commands.


As shown above, Betaflight Configurator 10.9.0 also supports entering the Binding Phrase directly in the Receiver Tab. It will generate the UID bytes for you. Clicking Save and Reboot will save the Binding Phrase into the flight controller configuration.

Supported RF Modes

SPI receivers DO NOT support D(D250, D500), F(F500, F1000) and Full Res(100Hz Full Res, 333Hz Full Res) Modes (Packet Rates) and thus will not bind or sync with a TX module in any of these modes.

Acknowledgments

The SPI ExpressLRS implementation would not have been possible without the work and huge efforts from the following developers: