XTRX – A Fairwaves tiny SDR

High performance Software Defined Radio in a tiny miniPCIe format. Embedded applications, massive MIMO, IoT, 4G/5G and space ships.

Table of Contents

XTRX in hands

XTRX is a tiny yet high performance Software Defined Radio (SDR).

Most important posts about XTRX:

  1. Tech specs for the XTRX
  2. MIMO and independent receive/transmit
  3. XTRX pinout
  4. XTRX pinout FAQ
  5. 33с3 Talk: Lessons learnt in building a low latency, high throughput PCIe based SDR


Featured post

09 – Status update

Andrey has just finished a redesign of the RF part of XTRX to reduce Tx-Rx leakage and external interference. XTRX has much stronger RF shielding now to protect the most sensitive parts of the RF chains and will hopefully pass our internal tests.

If you wonder why it took us so long – Andrey had about 6 (yes, six!) redesigns of this tiny piece of the board before he was satisfied with the result – given how packed the board is, adding a new component is quite tricky. This is the part of Andrey which I admire as an engineer and hate as a manager; – he never compromise quality no matter how long it takes him.

Now we’re onto a more boring part – manufacturing a small batch of samples for our own testing before we can release XTRX to early adopters.

Stay tuned, LO locked!


08 – XTRX pinout FAQ

  1. Max height from carrier PCB includes XTRX components in C.S.
    It depends of the connector type of carrier board, but not XTRX.
    In according to miniPCIe standard, thickness of the component layer on the bottom side of the XTRX board itself is 1mm maximum.
    We use 1.55 mm gap connector MM60-52B1-G1-R850 with stand off NT1R3000, so thermal pad (gap filler) to carrier PCB would be ~0.8mm like H48-6G-50-10-0.8-1A.
  2. Do you use USB2 port on the miniPCIe slot?
    No. We use PCIe lane(s) to communicate.
  3. How do you download bitstream into FPGA?
    We’re planing to implement software re-flashing to make update procedure seamless for users. Right now this function is not ready yet, so we’re using JTAG (see pinout for spring contacts at the XTXR Connectors Pinout). When software re-flashing is implemented, JTAG will only be needed for FPGA development.
  4. Do you need I2C bus connection? If yes which I2C address is being used?
    We don’t use I2C
  5. Do you use WLAN LEDs?
    Yes. All LEDs are connected to the FPGA and can be configured in software.
  6. Do you use PCIe-WAKE# signal?
  7. Do you need 39,41 pins? We may need them for our own purpose.
    We use these pins for the second PCIe lane. The XTRX board has 0-ohm resistor on the second lane, so you can disable it by unsoldering these resistors.
  8. Do you use 1.5V? if yes do you need some 3.3V -> 1.5V sequence?
    We don’t use 1.5V.
  9. Do you use 3.3VAUX? if yes do you need some 3.3V → 3.3VAUX sequence?
    We don’t use 3.3VAUX.
  10. Which reserved pins do you use for RF clock synchronization? Is it possible to synchronize XTRX from external 10MHz clock or 1pps? If yes, which pin numbers are used?
    Yes, you can use 1PPSI_GPIO1 for 1PPS in and MHZ_IN for input reference clock. 10MHz to 52MHz reference clock frequencies should work fine (we need to test frequencies >32MHz to be 100% sure, but we expect them to work).

07 – XTRX pinout

First of all – the project is not dead. 🙂 We decided to spend a bit more time optimizing RF performance to make sure we don’t disappoint you.

Meantime, some people are already adding support for XTRX into their future products, so we’ve prepared an XTRX pinout to facilitate this development.

Add XTRX support into your next product as well!

UPD May 4, 2017: Uploaded rev7 of the pinout datasheet with minor corrections.

XTRX rev3 pinout (click to download pdf)
XTRX rev3 pinout (click to download pdf)

06 – MIMO and independent receive/transmit

We often get asked how many receive and transmit chains does XTRX have and whether you can tune them to different frequencies, so I decided to clarify this once and for all.

XTRX is a 2×2 MIMO transceiver, which means that Continue reading “06 – MIMO and independent receive/transmit”

05 – Update & 33с3 Talk: Lessons learnt in building a low latency, high throughput PCIe based SDR


We recently gave a talk and a workshop at 33rd Chaos Communication Congress aka 33C3 on funny and not so funny issues one faces while building a high performance SDR. If you missed 33C33, video recordng of the presentation is available here (and slides are attached here).

When we prepared the talk, we listed all challenges Sergey had while debugging PCIe, but the list went so long that we had to move it to a separate workshop. So this talk was focused on more generic issues without going deep into PCIe internals, which I hope will be interesting for a wider audience working on SDR devices and aiming to achieve maximum performance.


We know the blog has been silent for a while, but the talk shows some of the challenges we have been facing in getting the most out of XTRX. And the significant effort that is being put into making a solid product which “just works” – as far as it’s possible with SDR of course 🙂 .

At this moment we’re very close to place an order for the next prototyping run which (if no new critical bugs shows up) will be available for selected early adopters.

Stay tuned!





04 – First prototypes

XTRX in hands

Just got the first batch of test boards. Feels really good to hold them. Onto the testing.

03 – First Batch of PCBs!


First prototype PCBs are ready for assembly at our fab! Can’t wait to get our hands on the prototypes.

Meantime Andrey Sviyazov has found the first hardware bug, so we know where will have a wire on the prototypes! (every device prototype should have a wire or it’s no fun) We have an RF switch to switch bands and we connected it to 1.8V control lines. But according to its documentation:

VHIGH = 2.5 V to VDD
VLOW = 0 to 0.8 V
Any state other than described in this Table places the switch into an undefined state.


PS SMT (Surface-mount technology) is a technology used to populate bare PCBs with SMD (surface-mount device) components – basically, a robot putting components on a board and soldering in an oven. XTRX don’t have any through-hole components, – all components are SMD – which means it will be assembled by a robot without any manual soldering. An important optimization for mass production.

PPS – You don’t need a robot if you are resourceful – see



02 – SPI is now working

So while we’re waiting for the first test run of the boards to be manufactured, I have been working on advancing the software side of things.

Check out the below video where Alexander walks through the development rig and demonstrates a “Hello World” app – using SPI to control the LMS7002M chip and generate a sine wave. While sounds easy, it actually requires the whole stack to work in coordination as control commands travel through Linux userspace => Linux kernel module => PCIe => FPGA => SPI => LMS7002M.

Next steps are now to get I/Q data transfer up using DMA transfer over PCIe. Stay tuned.

UPD: See pages 14-16 of the LMS7002M data sheet for the details of the LMS7 SPI interface.


Blog at

Up ↑