Tutorial: How to use Betaflight Softserial

Softserial stands for “Software Serial”, which can create software emulated serial port (UART) for connecting extra devices on the flight controller, and it’s also a great solution to the inverted SmartPort on F4 FC’s.

What can we use Softserial for?

Stuff that requires a UART connection, such as:

  • SmartAudio,
  • GPS
  • SBUS
  • ESC telemetry
  • Smart Port

With the limited number of UART’s on a flight controller (only three on F3/F4 boards), you can turn unused pins like LED_Strip or PPM into softserial ports and connect additional devices.

You can even “split“ one UART for two things. For example if you use UART1 RX pin for ESC Telemetry. you can use UART1 TX pin for SmartAudio or SmartPort if you set it to Soft Serial. This allows you to free up a whole UART for something else.

Oh, did I mention that Soft Serial also supports inverted Smart Port signal? This is extremely useful for F1 and F4 flight controllers because they don’t have built-in inverter. With Softserial, you can connect SmartPort directly to the FC without doing the uninversion hack.

Softserial Limitation

Nothing is perfect, there are some disadvantages in using Soft Serial:

  • Duty cycle limitation – Softserial is not suitable for high duty cycle and “chatty” applications that occupy too much processor time like OSD and serial RX
  • Soft Serial consumes processor resources and will increase CPU load
    • F1 flight controllers cannot run Soft Serial on the latest Betaflight firmware due to the lack of processing power
    • It might not be a good idea to run Softserial on some F3’s if you want fast looptime and to use some other resource-hungry features at the same time
    • Some FC have softserial disabled in the official firmware, you can only enable it with custom-built firmware
  • In the current firmware, it’s limited to 2 Soft Serial ports maximum

How to configure and use Soft Serial?

It’s much easier to demonstrate how to use SoftSerial with examples, which I will show you later in this tutorial.

But in a nutshell, there are only 2 steps to configuring Softserial:

  1. Enable SoftSerial feature
  2. Assign SoftSerial TX/RX to spare pins using Betaflight Resource Remapping

Check out this beginner’s guide to Resource Remapping in Betaflight.

After FC rebooting, you should now see a newly added “Soft Serial” port in port tab.

Which pins can i use for Soft Serial?

This depends on the FC, and what timers the pins are connected to, you can find out what pins can be used for Soft Serial on your particular FC at this page: https://github.com/betaflight/betaflight/wiki/Single-Wire-Software-Serial

In general you should be able to find the following pins on MOST FC’s and use them for soft serial:

  • UART TX & RX
  • PPM Input
  • Programmable LED Strip Pin
  • Motor 5, 6, 7 & 8 (if they are available)

If you run into any problem or have any technical questions, you should always contact your FC manufacturer first.

Examples of Using Softserial

Here are some common usage of Softserial. I am using Betaflight F4 flight controller in all of my examples, but the same steps and concept should apply to other FC’s.

Connecting “inverted” SmartPort signal to an F4 flight controller

By using Softserial, we can connect SmartPort directly to an F4 FC without worrying about signal inversion.

In this example we will connect it to the TX of UART1.

In CLI, type in “resource”, and we can see the pin number of TX1, which is A09 (it might be different  in another FC).

Let’s assign A09 to Softserial 1, by entering in CLI:

resource SERIAL_TX 11 A09

Note that, Soft Serial port number starts from 11, which means, 11 is Softserial #1, 12 is Softserial #2

Enable “Softserial” feature in Betaflight, and you should see Softserial1 in the Ports Tab. Then select “SmartPort” under Telemetry Output.

This should now be working! If not, go to CLI, and make sure:

set tlm_halfduplex = on
set tlm_inverted = off

For inverted S.Port signal, you should have “tlm_inverted” set to “off”, however for uninverted SmartPort, it should be set to “on”. Just try both if you are not sure.

After making these changes, you will need to switch off the FC (by unplugging the USB cable and battery), then switch them back on. Sometimes softserial needs to be power-cycled to work properly.

“Sharing” one UART between SmartAudio and ESC Telemetry

By using the TX and RX pins of the same UART for two devices, you can free up a whole UART for something else.

For example you can hook up ESC Telemetry to UART1 RX, and configure UART1 TX as Softserial1 and use that for your SmartAudio.

In CLI, type in “resource”, and we can see the pin number of TX1, which is A09.

Let’s assign A09 to Softserial 1, by entering in CLI:

resource SERIAL_TX 11 A09

Enable “Softserial” feature in Betaflight, and you should now see Softserial1 in the Ports Tab. Choose “ESC” in UART1 and choose SmartAudio in Softserial1, before saving it.

You might need to restart the FC by disconnecting the USB cable and battery, then turn it back on for it to start working.

Not enough UART? Let’s use LED_Strip pin for SmartPort

if you have LED_Strip pin on your FC, and you are not using LED, you can turn it into a softserial port and use it for devices like SmartPort and SmartAudio.

In CLI, type in “resource”, and we can see the pin number for LED_Strip is B06.

Let’s assign B06 to Softserial 1, by entering in CLI:

resource LED_STRIP 1 none
resource SERIAL_TX 11 B06

Enable “Softserial” feature in Betaflight, and you should now see Softserial1 in the Ports Tab. Select “SmartPort” under Telemetry Output.

if it’s not working, please see example 1 for tips to troubleshoot the issue.

Possible Errors

index not between 1 and 10

Two possible causes:

  • You should check if Softserial feature is enabled. Give the FC a reboot after enabling the “Softserial” feature (unplug USB cable and battery), and check again just in case
  • Your particular FC has Softserial disabled in the firmware. This is because F1 and some F3 FC have limited memory to store the firmware, and features like Softserial have to be removed to save memory space.

10 thoughts on “Tutorial: How to use Betaflight Softserial

  1. Pawx

    Can you remap the LED pins to be I2C SDA and SCL? trying to make a GPS build with cramped spaces and the FC i have that fits does not have these ports.

  2. Daniel

    Best explanation of soft serial I’ve seen.
    Your led_strip example worked great on a spracingf3 board where the uarts are too few!

  3. Bas

    I get his error
    # resource
    resource BEEPER 1 B04
    resource MOTOR 1 B00
    resource MOTOR 2 B01
    resource MOTOR 3 A03
    resource MOTOR 4 A02
    resource PPM 1 B09
    resource LED_STRIP 1 B07
    resource SERIAL_TX 1 A09
    resource SERIAL_TX 3 B10
    resource SERIAL_TX 4 A00
    resource SERIAL_TX 6 C06
    resource SERIAL_RX 1 A10
    resource SERIAL_RX 3 B11
    resource SERIAL_RX 4 A01
    resource SERIAL_RX 6 C07
    resource INVERTER 3 C15
    resource LED 1 B05
    resource LED 2 B06
    resource SPI_SCK 1 A05
    resource SPI_SCK 3 C10
    resource SPI_MISO 1 A06
    resource SPI_MISO 3 C11
    resource SPI_MOSI 1 A07
    resource SPI_MOSI 3 C12
    resource ESCSERIAL 1 B00
    resource CAMERA_CONTROL 1 B07
    resource ADC_BATT 1 C02
    resource ADC_CURR 1 C01
    Then i do
    resource SERIAL_TX 11 A09 to activate softserial 1 on A09
    Then i get this error
    index not between 1 and 10

  4. JonnyVolts

    Hi Oscar, great article!
    I’m curious, can you use two devices over the one channel? For instance is it possible to run camera control and smart audio simultaneously?

    1. Matt Mendez

      JB made a video on how to set this up (using softserial I believe). you can run both simultaneously. Requires some HW mods too but is definitely interesting.


      1. Oscar Post author

        On the same pin? No.
        I haven’t covered camera control, because I personally think it’s a bit complicated for what it does at the moment.
        As far as I know, new hardware/tech is coming, and it will be plug and play in the future so I wouldn’t bother with it now.

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I only check blog comments once or twice a week, if you want a quick reply you can post your question on this forum IntoFPV.com... You might get a faster response from me there (multirotor related only).