I just received the nRF21540-DK and am trying to see the range enhancements.
I simply created a new application by copying the "Bluetooth Peripheral" sample in Visual Studio Code with nRF Connect SDK v2.9.0, added "CONFIG_BT_CTLR_PHY_2M=n" to prj.conf and then created a build config using nrf21540dk/nrf52840 as target board. No other changes. I use the devkit as is, no extra connection except the USB cable.
After flashing this code, I use nRF Connect app on a smartphone to see how good the range is and when the connectivity drops. Then I compare this with an nRF54L15 devkit that I also have on my desk (no FEM), using that as a peripheral connected to the same smartphone (using 1 MBit/s and 4 dBm TX power). I see that the range to the nRF54L15 devkit is better than the nRF21540-DK. At the position where nRF21540-DK drops the connection, the phone can still be connected to the nRF54L15 devkit. Also the RSSI is better from the nRF54, something like 5-15 dBm better.
Do I have to do something particular to make sure the FEM is activated and boosts TX and RX? I thought everything should just be baked into the SDK and be plug-n-play.
Note: I live in the EU so I guess the 20 dBm config cannot be used; only the 10 dBm is allowed, right?
In the generated .config file I can see these lines if those are of any importance:
# CONFIG_MPSL_FEM_ONLY is not set
CONFIG_MPSL_FEM_ANY_SUPPORT=y
CONFIG_MPSL_FEM_NRF21540_GPIO_SUPPORT=y
CONFIG_MPSL_FEM_NRF21540_GPIO_SPI_SUPPORT=y
CONFIG_MPSL_FEM_NCS_SUPPORTED_FEM_USED=y
CONFIG_MPSL_FEM_API_AVAILABLE=y
CONFIG_MPSL_FEM=y
CONFIG_MPSL_FEM_NRF21540_GPIO=y
# CONFIG_MPSL_FEM_NRF21540_GPIO_SPI is not set
CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB=10
CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB_POUTA=20
CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB_POUTB=10
CONFIG_MPSL_FEM_NRF21540_RX_GAIN_DB=13
# CONFIG_MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL is not set
# CONFIG_MPSL_FEM_POWER_MODEL is not set
CONFIG_MPSL_FEM_DEVICE_CONFIG_254=y