Softserial stands for “Software Serial”, is a Betaflight feature to emulate serial port (UART) for connecting extra devices on a flight controller. It can also be used for connecting inverted SmartPort on F4 FC’s without hardware inversion.
Table of Contents
What can we use Softserial for?
Stuff that requires a UART connection but not timing critical, such as:
- SmartAudio,
- GPS
- SBUS
- ESC telemetry
- Smart Port
With the limited number of UART’s on a flight controller (only 2 or 3 on F3/F4 boards), you can turn unused pins like LED_Strip or PPM into softserial ports for connecting 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.
And Soft Serial also supports inverted signal like Smart Port. This is extremely useful for F1 and F4 flight controllers as they don’t have built-in inverters. With Softserial, you can connect SmartPort directly to the FC without performing the uninversion hack.
Softserial Limitations
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
- Baud rate limitation – Softserial works well at 9600 baud rate but not higher rates such as 115200
- Soft Serial consumes processor resources and will increase CPU load
- In the current Betaflight firmware, only two Soft Serial ports are allowed
- Softserial can be picky about what pins you are allowed to use – LED_Strips almost always work but other pins are uncertain, you just have to try
How to Configure Soft Serial
It’s much easier to understand how to use SoftSerial with examples, which I will show you later in this tutorial.
But in a nutshell, there are only 2 steps in configuring Softserial:
- Enable SoftSerial feature (in the Configuration tab)
- Assign SoftSerial TX/RX to spare pins using Betaflight Resource Remapping (in CLI)
Check out this beginner’s guide to Resource Remapping in Betaflight.
After FC rebooting, you should see a newly added “Soft Serial” port in the Ports 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
But most of the times, you just have to try.
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
- LED pad (It’s LED_STRIP in CLI, not LED which is the status LED on the FC)
- Motor 5, 6, 7 & 8 (if they are available)
If you run into any problem or have any technical questions, you should always email your FC manufacturer first.
Softserial Examples
Here are some common usage of Softserial. I am using Betaflight F4 flight controller in all of my examples below, 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 SOFTSERIAL_TX 1 A09 save
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.
Not working? Please try resetting the board and follow the exact instruction again. It’s been reported working after resetting the board, I don’t know why this is.
“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 save
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 SOFTSERIAL_TX 1 B06 save
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.
80 comments
Hi Oscar,
First of all, thank you for bringing us to this awesome knowledge. I appreciate that.
My question is: I have the same TX16S and RM Express LRS 2.4 RP1, I can get it to find only 10 sensors. Because my flight controller (Xilo Stax F4) has only 2 UART solder pads to use.
But I have a DJI o3 Unit, GPS, and the Express LRS.
I connect the DJI o3 Unit to the UART3.
I connect the GPS with Compass to the UART4.
So, I do not have any UARTS to connect Express LRS except SBUS. I solder the wires correctly, everything is working. Binding, talking to the FC. I also set up the RP1’s protocol to Inverted CRSF to be able to communicate with each other.
When I do this, I get only 10 Sensors. But when I change the CRSF instead of INVERTED, I get more than 20 sensors. Is there any solution for me?
If you are connecting via SBUS, you don’t really get any telemetry at all, that’s why you are not getting all the telemetry sensors.
You can try connecting DJI O3 to soft serial (I see there’s a SmartAudio port that isn’t used, and you have an LED Strip pad, you can perhaps remap these two pads to soft serial).
Hi Oscar,
Thank you for the answer. I am looking for a really good answer to why is not working. I know I have a telemetry in my OSD but I want to know why it is not working and I want to understand the reason.
As a beginner, let me clarify what I understood and what will I do.
I will be going to the CLI tab and typing RESOURCE to learn what the UART3 ‘s PINs And I will create SoftSerial by typing;
SET SOFTSERIAL_TX 3 B10 (because your example is the same as mine FC)
and setting theSmartPort on this under the Telemetry Output column.
If not work, I will do the same thing for the LED Strip Pad by typing:
resource LED_STRIP 1 none
resource SOFTSERIAL_TX 1 B06
Save
Right?
Hello
In betaflight 4.5, you now need to use “resource SOFTSERIAL_TX 1 –“
I’ve got an OrangeRX with an old original DX7 Tx that I’m trying to connect to a BetaflightF4 board. I’m not using telemetry. I have all that set up in the OSD. Does the SBUS signal from the OrangeRX need to be inverted? Ive got it soldered to UART6.
Hi Oscar.
Before I make some soldering, I was wondering if a could use the RX1 pad for Smartaudio and TX1 pad for F.Port with telemetry enabled, so I can use a GPS on the RX2 and TX2 pads. My FC is a Flywoo Goku GN413S 13A 2-4S AIO
Thanks!
No you need a TX pad for SmartAudio.
If you have a LED strip pad you can remap it to Softserial and use it for Smartaudio: https://oscarliang.com/betaflight-soft-serial/
Hi, so I’m using geprc f411 aio 36a fc and there is pin with numbers r11 and t11. So I wanted to connect gps to this place. So I have soldered, fixed everything in betaflight, but it still doesn’t appear in gps tab. When I type gpspassthrough in cli I’m getting all kind of symbols. Maybe you have idea how to solve it?
I have a Diatone Roma L3. In Betaflight I have stick inputs but doesn’t show RSSI channel. OSD stuck on 50 and doesn’t move.
If you go to the ELRS page, it has some settings for RSSI that are necessary for Betaflight to work that aren’t default settings. expresslrs.org/quick-start/pre-1stflight/#rssi-and-link-quality
I need to add an external barometer to my build, I wonder if it would be possible to use softserial. My I2c port is occupied owing to GPS+Compass module. Could I add to the same I2C? Could I buy a new module that includes Barometer? Is there an equivalent softserial for I2C ports? Is there a barometer that works on a UART? I still haven’t found a solution, but I do have one open UART, and some resources like LED_STRIP that I could remap.
What commands do I need to type in the cli for M5?
In CLI, type in “resource”, and see the pin number for Motor 5 is ….
For some strange reason I do not work smartudio at the softserial that is defined by default that I created for a VTX AKK Race but if it works in UART.
ae01.alicdn.com/kf/He7351e4c9c3b45919d9f11dd40d7f589K.jpg
Sorry, please send the previous post …
Oscar can you explain why
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.
In official betaflight documentation is write something opposite.
https://github.com/betaflight/betaflight/blob/master/docs/Telemetry.md
because they are trying to confuse people – There are inverters on Frsky receivers, hence the signal is inverted. But Betaflight take that as the normal signal, if we un-invert Frsky’s signal, to Betaflight that’s inverting the signal. Got it?
Hi Oscar !
I have a succex-d 20a aio which only has 2 uarts, one of which is a plug & play and the other pad is used for my crsf nano. I have a vista to be connected but the fc won’t slide in if I use the plug. I have no option but to solder the wires on the fc. There is one T1 pad but no R1.
Can I use the led pad and remap it to R1 ?
Will that work for vista without any issues ?
Thankyou ! ❤️
Hi PIJUSCH I have problems with my resource files can you please the resource list from the aio would help me a lot
Hello Oscar
Could you (or anyone) tell me if is it possible to connect bluetooth adaptor on RX3 and TX2? Is it possible to remap it so they will be together as UART5? I use MATEK F7 se and this ports are free, rest TX and RX are already in use. So please help me. Thank you for your time. Regards
It’s possible, just remap these pads to the same softserial UART, e.g. TX11 and RX11.
Hi, could someone help me to set up the RX1 on betafpv 20a aio board for whoops? I’ve tried remapping but it seems to me doesn’t work. There is no pad on the board but it’s in cli as “a10” I tried to assign it to a led strip pad by “resource led-strip 1 a10” but odd from vista unit still seems to not work.
Hey Oscar, I have a short question. I tried Soft serial (LED Strip Port) and it works fine. Now I need a second one for run cam split mini 2. On my Tyro79 F4FC are two pads I dont know (it is S5 and S6). So what is this S5 and S6? sorry there is nothing in the manual and I could not find anything in internet. :( Thanks for your help! Peter
hello oscar i am trying to get betaflight 4.1 running on ircfusionf3 its listed in hexfiles i have downloaded and flashed board crsf version all goes in and overclock support is there in cli.i am unable to get around the immersionrc tx wizard do you know if there is a way to do this please .if i select crsf and serial ports tab with bound rx fc still wants to go through tx wizzard .does this performance firmware need some other set up trick do you know please it would be great if i could succeed with this mod i have many other self built quads but there is either an issue with 4.1 f3 ircfusion version or i am missing a trick any info would be awesome.
many thanks
andy
Hi Oscar
I have a Omnibus F4 V3 board with Arducopter FW and crossfire nano diversity rx but I I can’t find the right way to connect. Can you help me?
Thanks
You say that You shouldn’t use softserial for rc link. But sbus just needs one pin/pad of the hardware uart – can You use the 2nd pin/pad with smartaudio for example by using softserial?
Hi, Oscar,
I have a mamba f411 nano FC . I want to connect TBs nano rx.
How do I Go about it?
Thanks In advance.
George
so i fly with spektrum and the sbus on my FC is basically useless to me. is it possible to use softserial on the sbus port and use it as a normal uart?
You can’t use softserial for RC link, it’s too slow.
Yea! Was able to use softserial to capture a tx pin and an LED pin to make a UART to tie to the new DJI air unit. So now I have drone voltage in my goggles!
Oscar, great tutorial as always!!! Could I use this to run a Frsky XM+ receiver on an F4 FC. The FC had one SBUS of which provided inverted on uart 6. That got ripped of the FC. Not sure if the FC is done or there is a way to run the receiver from the board. The board is a omnibus F4 AIO V6. Thanks in advance.
No, we don’t recommend running SBUS on softserial.
Hi Oscar, can you use I2C SCL for SmartAudio using this soft-serial method?
I’d like to free up UART6 for GPS on my KakuteF4 V2… SmartAudio currently occupies TX6.
Thanks!
Why don’t you give it a shot :)
Let’s say I want to use runcam protocol which requires a full rx tx uart but I have used my other uarts. Can I use softserial 11 as tx and softserial 12 as rx and enable runcam protocol on both soft serial ports in betaflight configuration?
Yea softserial should work.
But Softserial 11 and 12 are two different “UART”, you have to setup both TX and RX under the same Softserial (11 or 12).
For example,
resource SERIAL_TX 11 A09
resource SERIAL_RX 11 A10
Thank you very much Oscar. With this explanation I was able to configure my Mantis85 to have smart audio to contorl my new VTx. You rock man.
Ok so I got the beeper swapped to soft serial on a f3 whoop pro board. But I can’t get sbus to work. I pulled the rc pad off.
Hi Oscar,
If you are using tx6 for soft serial, do you still name it 11 ?
That’s right, 11 is basically means soft serial 1.
It’s possible to use serialpassthrough on softserial port?
Hey Oscar, So if I’m wiring up a R9mm, I’m not going to use s.port, as I was just going to go sbus to sbus on my FC. S.port is soldered on, due to updating firmware. I’m using a Omnibus f4v3, so I had my x4r-an going from sbus to sbus, 5v, gnd. I planed on taking this same approach with the R9mm. I dont care about telemetry, but I can still get rssi like I did with the x4r-sb correct? Thanks for your time
I am not sure what you mean, but SBUS and Smartport work the same way in R9MM as X4R, and connections are the same.
The trick where you share one uart for ESC Telemetry and Smartaudio. Will it work if I share my uart6 where RX6 would be SBUS and TX6 (Softserialed) would be Smart port ?
Why don’t you give it a try and let me know :)
Hi. I have already connected sbus to uart1. Can I share TX1 with smartport?.
I have a Wizard TS215 wich only has 2 usable UART’s, but this drone has 4 RGB LED ports with LEDIN and LEDOUT pins (plus 5v and GND). Its possible to conect to RGB LED pins uninverted smartport? if its posible, it will go to ledin or ledout?
Thanks a lot!!!!
Hello Oscar, my idea is to use soft serial to free up enough UARTs for me to use them as PWM outputs to run two servos for a camera gimbal. Do you think it’s possible? I would like to use a flight controller that only has the 4 motor outputs in each corner because they are cleaner and just use UARTs to run servos with the cam stab feature and manual control with channel forwarding. Do you think UARTs would support this function? Thanks!
Hello,
one of my motor signal pads doesnt work anymore and there are only 4. Can i resource that signal pad to another pad that isnt specific for a motor signal??? Need an idea.
Thanks
It really depends on the FC design, you should consult your FC manufacturer or get in touch with Betaflight dev team.
Hi Oscar is it possible to change a sbus pad to a TX pad as I have Fport on a uart TX3 and I want to use a GPS that requires a TX and a RX and all I have left is TX2 and sbus
This is very helpful. I have a question about using an open UART for Sbus. I have an AIO F4 FC. I ripped off the pad and would like to use an open UART. Only avail UART that is visible is TX6/RX6. Will the soft serial work in this situation?
Soft serial is not good enough for timing critical applications like RC link. Use a hardware UART for it.
Can I use softaerial to run the new fport protocol? Will cycle times running SBUS be fine? Running on a xracer F4 board
Not a good idea. Soft Serial is too slow for timing critical tasks like RC control.
Use a hardware UART for it.
Hello Oscar,
Im currently running a Kombini Dshot, and i either have to put telemetry or smart audio on a softserial. which one would you recommend to go on the softserial port?
doesn’t matter.
Hello Oscar,
I’m in a bit of a pickle with my FC. I’m using a Cicada F4 AIO. I like the board and works great in my purple 215 since there is such limited space. I was pushing it pretty close to some tree tops and managed to have a twig lodge underneath my camera and rip the sbus pad right off the board. Everything else on the board is working just fine (motors spin, OSD in/out work). So I’ve been trying to get my Sbus to work on another pad and I can’t quite figure it out. I have used the resource commands and softserial to try to move it to the LED pad as well as the rx6 pad. Neither one has worked out. I’m also using an XM+ if that makes any difference ( probably not, just minus tlm). Any advice or guidance would be greatly appreciated.
Thanks,
RipTwist
If you are using FrSky with Fport capable RX, you are in luck. all you need is to connect the fport RX to any spare TX and you are done! It works for me on two quads running R-XSR.
Did anyone successfully get the soft serial to work on Omnibus F4 v3? I’ve tried many different pins without much success, and am wondering if this FC supports it at all.
I don’t think u need oft serial on an omnibus f4. I just got the omnibus f4 pro corner and it has a built in inverter/unconverted on hart 3&6. You just have to use the jumper on the board to enable it
Hey guys. Dealing with the midguard f4 or same as racerstar starF4 as they only have 2 uarts and no osd I am trying to do sbus telem and irc tramp tel on a maytek vtx. I’ve tried remapping two pins now, both with the smartport and vtx on soft serial. Here is the crazy thing, everything works right after i set it up, but after 1 power cycle it will no longer work… Is this a glitch? Firmware soft serial or what? I’ve googled everywhere and cant find an answer.
sorry i haven’t used that FC and not had this problem before, might be worth checking with the reseller.
Hi Oscar, I´m trying to get tlm but in my taranis i can´t see data. I´ve enable softserial, resourde serial tx 1. All is ok but i can´t see the data, it doesn´t appear new sensors. What can i do? thanks
What RX are you using? some old RX firmware doesn’t work with the latest BF, and need updating.
Hi Oscar. I.m using d4r-ii. I.ll te to update it and try again. I.ll tell you ir i can do it
Thanks
# resource
resource BEEPER 1 B04
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 A03
resource MOTOR 4 A02
resource MOTOR 5 A01
resource MOTOR 6 A08
resource PPM 1 B08
resource PWM 1 B08
resource PWM 2 B09
resource PWM 3 C06
resource PWM 4 C07
resource PWM 5 C08
resource PWM 6 C09
resource LED_STRIP 1 A08
# resource led_strip 1 none
Resource is freed
# resource SERIAL_TX 11 a08
Invalid
# resource motor 6 none
Resource is freed
# resource serial_tx 11 a08
Invalid
any ideas?
is soft serial feature enabled?
try: “resource serial_tx 11 A08”
Hi, i break the usb port, can i use some other way to acces to the card? (like vp dm dp?)
i try to use uart1 and ftdi but you have to configute it in betaflight…
thank a lot
I had the Tramp hv working with BF lua script. I changed out my xsr for an r-xsr but I went back to xsr. Since then I have been unable to get the VTX values in the BF lua script. Smart port will work on uart 3, however uart6 seems to be non-functional. I have tried cli command to tlm inversions both on and off, I have conductivity between the TX6 pad and the pin entering the IRC tramp telemetry. Pids and rates are showing, vtx selected in config, port setup to UART6 IRC tramp. Literally 6 weeks I’ve been trying to solve this :-/
you may need to rediscover sensors on your TX.
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.
Just to avoid ambiguity of my comment above… The SDA and SCL will be used for the magnetometer :)
curious why for your first TX example you do not have to set to “none” like is done for the led pin?
Thanks
Best explanation of soft serial I’ve seen.
Your led_strip example worked great on a spracingf3 board where the uarts are too few!
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
Try to enable soft serial feature first.
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?
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.
youtube.com/watch?v=xY4Ck0Sp8RQ
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.
This is the help article I’ve been looking for to get smartaudio working on my omnibusF4. Thank you so much.