FrSky XSR FPort Modification
HilldaFlyer, September 2019
This article will demonstrate how to modify the FrSky XSR receiver so the native non-inverted FPort (or SBUS) is delivered to the Rx’s connection plug via internal traces. Typical receiver modifications like this have the signal wire separate from the receiver’s plug.
A quick historical overview.
Back in the good old days, flight controllers (FC) were coupled to receivers via PWM leads, one lead for each channel coming from the receiver (FLIP32, KK2 etc). Then came SBUS, a serial based interface that allows for multiple channels to be communicated to the FC on one wire. Many of us became familiar with this type of connection by using a Spektrum satellite receiver to connect with the FC. SmartPort (SPort) was developed to transmit telemetry data back to the receiver. The downside to this is that each wire requires a separate UART, one UART to receive (Rx) and a different one to transmit (Tx). For large flight control boards this was not a problem since there were plenty of UARTs. However, the boards have been shrinking and UARTs have been removed from the designs. Additionally, more people are adding peripherals all of which require UART pads. One exciting advancement that came about some time ago was a protocol that transmitted and received on one wire, Introducing FPort, the combination of SBUS and SPort on one wire.
What is FPort and why would you want it?
FPort is FrSky’s bidirectional communication protocol that was developed with BetaFlight to transmit signal and receive telemetry on one wire, basically meshing SBUS and SPort onto one wire. To me, this advancement is not really a big deal, unless you are limited in the number of UARTs on the flight controller, in which case it saves one UART that can be repurposed. Additionally, it saves soldering one more wire lead to the flight controller.
The inversion conundrum with F4 boards
What I discovered while trying to connect my FrSky FPort-flashed XSR receiver to my FC was that FPort has a difficult relationship with F4 FCs. Unlike the newer F3 and F7-based FC that have inverters on the UARTs, most F4 FCs do not have inversion on the UART TX pads. The way I understand it, most F4 FCs do have an inverter, but it is placed on one of the Rx UARTs designed to receive SBUS. In order to make FrSky receivers compatible with the FC, the receivers have integrated hardware inverters between the MPU and the SBUS output pins in order to provide inverted signal for the FC. FPort, like SBUS and SPort, is natively a non-inverted protocol that passes through inverters on the receiver’s board before going to the connector. After FPort firmware is loaded onto the FrSky receiver, the SPort pad or pin is hijacked for the FPort, in other words, SPort pad/pin becomes FPort. FPort needs to be connected to the Tx pad of a FC, so connecting it to the inverting SBUS pad will not work since it is a UART Rx.
In the inverted state, the FPort signal is incompatible with F4 based FC’s non-inverted Tx UART pads. Therefore, to connect FPort to a F4 FC, the native or non-inverted FPort signal must be tapped off of the receiver prior to inversion. Thankfully, FrSky has placed non-inverted SPort pads on their boards, or there are simple hacks to grab non-inverted SPort signal outlined in this article by Oscar Liang (LINK). Hacks of this type typically leave a wire attached to the pad or component and are subsequently attached to the FC. The wire is vulnerable to be pulled on and therefore a risk of ripping off the component or pad of the receiver.
There are a couple of other ways to get the connection to work, like installing an inverter in the signal wire between the Rx and FC or lastly, connecting the FPort signal to a soft serial port that will accept the inverted signal. This article will demonstrate how to tap the native non-inverted FPort signal from the FrSky XSR receiver and deliver it to the receiver’s connection plug. All it takes is a bit of solder and a small wire. The FrSky XSR is very amenable to this modification since the location of the non-inverted SPort is easy to get to and many people have done this and it is well documented. But what isn’t well known is how to use the internal traces to deliver the non-inverted signal directly to the plug. What I find particularly handy with this modification to the FrSky XSR receiver is it delivers the Fport signal to a pin on the plug so you don’t have wires hanging from your receiver that can be pulled off.
Modifying the XSR to deliver non-inverted FPort to the plug
On the backside of the XSR, the native non-inverted SPort signal can be found at the red arrow. Just above it next to the MPU are a capacitor and resistors with a common pad that connects to the CPPM plug pin. Since CPPM out will never be used for FPort, or SBUS for that matter, these two components can be removed, which disconnects the CPPM plug from the MPU.
Soldering a small wire from the non-inverted lead to the lower pad that connects to the CPPM plug pin will deliver the non-inverted SPort directly to the plug. If the receiver is flashed with FPort firmware, it will then deliver non-inverted FPort on the fourth pin up from GND.
Joshua Bardwell - Notes
While doing my research for this project I got really excited about FPort because Joshua Bardwell stated @4:47 Josua "FPort is gets rid of the inversion issue. With FPort the protocol can be either inverted or un-inverted, so if you have an F4 flight controller you can put it on any UART pad that you have available."
@6:06 Joshua again reiterates, “So, FPort is just SmartPort plus SBUS on a single wire and no more inversion hassle”.
However, those statements turn out to be a presumption… in the comments:
“Are we sure about no more inverter hassle? The last time I checked, I still can't get FPort to work on most F4 FC, without applying the "uninverted hack" by soldering a wire to some tiny pad or chip leg. That's if the RX has an uninverted pad to solder. The new RX like R9 Mini doesn't seem to have an uninverted pad to hack, and fport didn't really solve the inverter issue.”
Joshua replied: “Yeah I think you're right. I was under the impression they were going to release an inverted-hack FPort firmware. But it seems that hasn't happened.”
DIY in-line inverter
So, even if we would like to use FPort, we are still left with the issue of figuring out a way to port the non-inverted signal from the Rx to the F4 FC. This can be done in several ways, one of which will be covered here. For reference, SoftSerial can be used (Reference Oscar Liang), an inverter can be easily built and put in the signal lead between the Rx and the FC (Reference Oscar Liang)
Tapping non-inverted signal
The non-inverted lead can be created by tapping the signal prior to the inversion hardware (Reference Oscar Liang). One of the attributes of this mod that is particularly disconcerting is having a wire connected to a lead on the processor that can easily be pulled causing irreparable damage to the Rx. In the modification I present for the XSR, the regular plug on the Rx can be used which alleviates this concern.