TX_EN Pin Stuck High on nRF54L15 + nRF21540

HI,

I am using the nRF54L15 + nRF21540 with SDK v3.2.1, and performing custom development based on the periodic_adv_conn sample.

issue Description

During runtime, I found that the TX_EN pin (nRF54L14 controlling nRF21540) is stuck HIGH at all times with no toggling, while the RX_EN and PDN pins toggle normally between high and low.

Troubleshooting Attempts

  1. Flashed the code to the nRF54L15 PDK — TX_EN remains constantly HIGH after power-on.
  2. Moved the identical FEM configuration into the DTM sample — TX_EN works normally after flashing DTM firmware.
What is causing this issue?
I have added the FEM configuration in the devicetree overlay file.

Overlay Configuration

&dppic10 {
    status = "okay";
};
&dppic20 {
    status = "okay";
};
&dppic30 {
    status = "okay";
};
&ppib11 {
    status = "okay";
};
&ppib21 {
    status = "okay";
};
&ppib22 {
    status = "okay";
};
&ppib30 {
    status = "okay";
};

/ {
    nrf_radio_fem: nrf21540_fem{
          compatible="nordic,nrf21540-fem";
          tx-en-gpios=<&gpio1 9 GPIO_ACTIVE_HIGH>;
          rx-en-gpios=<&gpio1 11 GPIO_ACTIVE_HIGH>;
          mode-gpios=<&gpio1 12 GPIO_ACTIVE_HIGH>;
          ant-sel-gpios=<&gpio1 10 GPIO_ACTIVE_HIGH>;
          pdn-gpios=<&gpio1 8 GPIO_ACTIVE_HIGH>;
          supply-voltage-mv=<3000>;
          trx-hold-time-us = <5>;
          pdn-settle-time-us = <18>;
          rx-en-settle-time-us = <12>;
          tx-en-settle-time-us = <27>;
    };

    leds {
        runled: runled {
            gpios = <&gpio1 3 0>;
            label = "Run_LED";
        };
        testpin: testpin {
            gpios = <&gpio1 2 0>;
            label = "Test_LED";
        };
        testpin2: testpin2 {
            gpios = <&gpio0 4 0>;
            label = "Test2_LED";
        };
    };

    chosen {
        zephyr,bt-c2h-uart = &uart30;
        zephyr,bt-mon-uart = &uart30;
        zephyr,console = &uart30;
        zephyr,shell-uart = &uart30;
        zephyr,uart-mcumgr = &uart30;
    };
};

&uicr {
    nfct-pins-as-gpios;
};

&radio {
    status = "okay";
    fem=<&nrf_radio_fem>;
};
prj.conf
CONFIG_BT=y
CONFIG_BT_BROADCASTER=y
CONFIG_BT_EXT_ADV=y
CONFIG_BT_PER_ADV=y
CONFIG_BT_DEVICE_NAME="CowEarTag"
CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER=y
CONFIG_BT_PER_ADV_RSP=y

CONFIG_BT_MAX_CONN=1
CONFIG_BT_CENTRAL=y
CONFIG_BT_PRIVACY=y
CONFIG_BT_SMP=y


#long range
CONFIG_BT_CTLR_PHY_CODED=y
CONFIG_BT_CTLR_ADV_EXT=y
# CONFIG_BT_USER_PHY_UPDATE=y
CONFIG_BT_EXT_ADV_CODING_SELECTION=y

CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=255
CONFIG_BT_CTLR_SDC_PERIODIC_ADV_RSP_TX_MAX_DATA_SIZE=249



CONFIG_LOG=y


CONFIG_SERIAL=y
CONFIG_UART_ASYNC_API=y

CONFIG_FLASH=y
CONFIG_FLASH_JESD216_API=y

CONFIG_EVENTS=y

#reboot
CONFIG_REBOOT=y

#watchdog
CONFIG_WATCHDOG=y
CONFIG_WDT_LOG_LEVEL_DBG=y

#spsc
CONFIG_SPSC_PBUF=y

#fem
CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB=20
CONFIG_MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL=y
CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y

# CONFIG_NRFX_TIMER=y
# CONFIG_NRFX_GPPI=y
# CONFIG_CLOCK_CONTROL=y
# CONFIG_FEM_AL_LIB=y


Generated .config (MPSL Section)

#
# Multiprotocol service layer (MPSL)
#
# CONFIG_MPSL_FEM_ONLY is not set
CONFIG_MPSL_FEM_ANY_SUPPORT=y
CONFIG_MPSL_FEM_NRF21540_GPIO_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_TX_GAIN_DB=20
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=y
# CONFIG_MPSL_FEM_POWER_MODEL is not set
CONFIG_MPSL_FEM_DEVICE_CONFIG_254=y
CONFIG_MPSL_FEM_INIT_PRIORITY=50
# CONFIG_MPSL_FEM_LOG_LEVEL_OFF is not set
# CONFIG_MPSL_FEM_LOG_LEVEL_ERR is not set
# CONFIG_MPSL_FEM_LOG_LEVEL_WRN is not set
# CONFIG_MPSL_FEM_LOG_LEVEL_INF is not set
# CONFIG_MPSL_FEM_LOG_LEVEL_DBG is not set
CONFIG_MPSL_FEM_LOG_LEVEL_DEFAULT=y
CONFIG_MPSL_FEM_LOG_LEVEL=3
CONFIG_MPSL_THREAD_COOP_PRIO=6
CONFIG_MPSL_TIMESLOT_SESSION_COUNT=0
# CONFIG_MPSL_ASSERT_HANDLER is not set
CONFIG_MPSL_LOW_PRIO_IRQN=28
CONFIG_MPSL_HFCLK_LATENCY=1650
CONFIG_MPSL_CALIBRATION_PERIOD=60000
CONFIG_MPSL_INIT_PRIORITY=40
# CONFIG_MPSL_LOG_LEVEL_OFF is not set
# CONFIG_MPSL_LOG_LEVEL_ERR is not set
# CONFIG_MPSL_LOG_LEVEL_WRN is not set
# CONFIG_MPSL_LOG_LEVEL_INF is not set
# CONFIG_MPSL_LOG_LEVEL_DBG is not set
CONFIG_MPSL_LOG_LEVEL_DEFAULT=y
CONFIG_MPSL_LOG_LEVEL=3
# CONFIG_MPSL_PIN_DEBUG is not set
# CONFIG_MPSL_USE_EXTERNAL_CLOCK_CONTROL is not set
# end of Multiprotocol service layer (MPSL)

Related