nRF21540 FEM Not Improving Range in ESB Project (NCS 2.9)

We are currently working on a project based on Enhanced ShockBurst (ESB) and would like to use Front-End Module (FEM) support with the nRF21540.

In your Enhanced ShockBurst samples, you mention that there is support for the nRF21540 FEM. The Enhanced ShockBurst (ESB) documentation states:
“ESB requires the MPSL library for front-end module support. This library is always linked into the build, however, it is not initialized by default to provide your application and the ESB protocol with access to all hardware resources. See MPSL FEM-only configuration for more details.”

We have been testing the esb_ptx and esb_prx examples for a week now. We're evaluating the range of different setups using the nRF52840, the nRF21540-DK, and the nRF52840 with the nRF21540-EK.
We made a small modification to the esb_prx source code to read and log the RSSI value directly when a packet is received.

We are following the instructions provided in the Enhanced ShockBurst documentation. During build time, we can see confirmation that the FEM configuration is recognized. For example:

  • With the nRF21540-DK: -- Board: nrf21540dk, qualifiers: nrf52840

  • With the nRF52840 + nRF21540-EK: -- Shield(s): nrf21540ek

However, we are not observing any improvement in range when using the nRF21540, neither in transmission nor reception. In your blog and documentation, you mention that the FEM can significantly extend the range, even up to 8x.

We’ve reviewed various blogs and Q&A threads, but due to many recent changes in the SDK, we’ve lost track of the correct procedure. Most resources are based on older SDK versions and no longer apply.

We have a few specific questions:

Q1: We are only using ESB (not Bluetooth). Do we need to explicitly initialize MPSL in our code to enable FEM functionality?

Q2: Should I see additional log output at startup when MPSL is active? Right now, this is all we see:

*** Booting nRF Connect SDK v2.9.0-7787b2649840 ***
*** Using Zephyr OS v3.7.99-1f8f3dc29142 ***
[00:00:00.259,063] <inf> esb_prx: Enhanced ShockBurst prx sample
[00:00:00.266,052] <dbg> esb_prx: clocks_start: HF clock started
[00:00:00.272,857] <inf> esb_prx: Initialization complete
[00:00:00.278,930] <inf> esb_prx: Setting up for packet reception
[00:06:10.058,044] <dbg> esb_prx: event_handler: Packet received, 0xde, RSSI: 79 dBm
[00:06:14.964,416] <dbg> esb_prx: event_handler: Packet received, 0x0f, RSSI: 79 dBm
[00:06:15.164,001] <dbg> esb_prx: event_handler: Packet received, 0x11, RSSI: 78 dBm

Q3: How can we properly increase the TX output power? We’ve come across many examples, but are unsure which ones are correct for SDK v2.9.

Q4: How can we improve reception quality? Ideally, we want to use the nRF52840 + nRF21540-EK with an external antenna. Do we need to manually activate the LNA for this?

Q5: It would be very helpful if the ESB documentation or samples included more detailed instructions about FEM configuration, especially regarding what is required vs optional. A lot has changed in the SDK over the past years, and many online examples no longer work with SDK v2.9.

Parents
  • Hello,

    I am trying to answer your questions here. I am sorry for the late reply as we had easter vacation on last week.

    ''Q1: We are only using ESB (not Bluetooth). Do we need to explicitly initialize MPSL in our code to enable FEM functionality?''

    If you want to explicitly set MPSL then you need to set CONFIG_MPSL_FEM=y in the prj.conf file.

    Q2: Should I see additional log output at startup when MPSL is active? Right now, this is all we see:''

    Log does not show any indication of FEM activity.

    Q3: How can we properly increase the TX output power? We’ve come across many examples, but are unsure which ones are correct for SDK v2.9.

    You may need to enable runtime PA gain control for controlling TX power with the nRF21540 FEM.

    CONFIG_MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL=y
    Q4: How can we improve reception quality? Ideally, we want to use the nRF52840 + nRF21540-EK with an external antenna. Do we need to manually activate the LNA for this?
    You can go through this
    Q5: It would be very helpful if the ESB documentation or samples included more detailed instructions about FEM configuration, especially regarding what is required vs optional. A lot has changed in the SDK over the past years, and many online examples no longer work with SDK v2.9.
    I do agree with you. I will talk about this to the respective team.
    Thanks.
     
    BR
    Kazi

Reply
  • Hello,

    I am trying to answer your questions here. I am sorry for the late reply as we had easter vacation on last week.

    ''Q1: We are only using ESB (not Bluetooth). Do we need to explicitly initialize MPSL in our code to enable FEM functionality?''

    If you want to explicitly set MPSL then you need to set CONFIG_MPSL_FEM=y in the prj.conf file.

    Q2: Should I see additional log output at startup when MPSL is active? Right now, this is all we see:''

    Log does not show any indication of FEM activity.

    Q3: How can we properly increase the TX output power? We’ve come across many examples, but are unsure which ones are correct for SDK v2.9.

    You may need to enable runtime PA gain control for controlling TX power with the nRF21540 FEM.

    CONFIG_MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL=y
    Q4: How can we improve reception quality? Ideally, we want to use the nRF52840 + nRF21540-EK with an external antenna. Do we need to manually activate the LNA for this?
    You can go through this
    Q5: It would be very helpful if the ESB documentation or samples included more detailed instructions about FEM configuration, especially regarding what is required vs optional. A lot has changed in the SDK over the past years, and many online examples no longer work with SDK v2.9.
    I do agree with you. I will talk about this to the respective team.
    Thanks.
     
    BR
    Kazi

Children
  • Hi Kazi,

    Thank you for your response, and no worries about the delay – I understand the Easter break may have caused that.

    Regarding your suggestions: I’ve already gone through all of the steps you mentioned, and I’ve been testing them extensively over the past few weeks. I have several Nordic boards here, including the nRF52840-DK, nRF5340-DK, and the nRF21540-DK kit. I've been struggling for quite some time to get FEM support working reliably with the ESB sample. At this point, I could probably recite most of the documentation by heart, including the link you provided.

    Unfortunately, despite all of that, I still don’t see any improvement in either transmit or receive range when using the nRF21540. To me, the FEM support still feels very opaque. Besides the build-time confirmation (which I already mentioned), there's no clear indication that the FEM is actually doing anything. It would be incredibly helpful if there were some visual confirmation – such as a log message or LED – that shows the FEM is active, but even with full debugging enabled, I get no feedback.

    My primary goal is to improve reception range, as I plan to integrate the nRF21540 FEM into a gateway device, while keeping the client devices battery-friendly by using a standard nRF52840 or nRF5340. However, right now it feels like the nRF21540 FEM (either with the nRF21540-DK or the nRF21540-EK) is doing absolutely nothing in ESB mode with NCS 2.9 – unless I’m missing something crucial?

    It really shouldn’t require rocket science to get improved signal strength out of the ESB sample using the nRF21540. Once I can get it working there, I plan to integrate it into our own software solution that we’re developing.

    Would it be possible for Nordic to run a few internal tests using some typical setups? For example:

    • PTX: nRF52840, PRX: nRF52840 + nRF21540-EK

    • PTX: nRF21540-DK, PRX: nRF52840 + nRF21540-EK

    If these setups work as expected on your side, maybe you could share your modified sample so I can test the same setup locally. That would be very helpful.

    Also, if you are planning to run internal tests anyway, I would strongly recommend using nRF Connect SDK v3.0.0 instead of 2.9. I've been testing on 2.9 myself, but if there’s going to be an updated blog or sample, it makes more sense to use the latest version so it remains future-proof for others.

    Thanks again in advance,
    H. Dekker

Related