The S132 SoftDevice for the nRF52 has support for enable/disable switching of external Power Amplifiers (PA) and Low Noise Amplifiers (LNA) using GPIO pins. This was introduced in S132 version 2.0.0-7.alpha.
In the nRF51 there was an option to use the VDD_PA pin to detect when the radio was in TX mode, but this is not an option on the nRF52, making the SoftDevice solution necessary.
The following function can be used to enable PA/LNA signal. Adapt it as required in order to change the number of pins (1 or 2), pin numbers, polarity etc.
static void pa_lna_assist(uint32_t gpio_pa_pin, uint32_t gpio_lna_pin)
{
ret_code_t err_code;
static const uint32_t gpio_toggle_ch = 0;
static const uint32_t ppi_set_ch = 0;
static const uint32_t ppi_clr_ch = 1;
// Configure SoftDevice PA/LNA assist
ble_opt_t opt;
memset(&opt, 0, sizeof(ble_opt_t));
// Common PA/LNA config
opt.common_opt.pa_lna.gpiote_ch_id = gpio_toggle_ch; // GPIOTE channel
opt.common_opt.pa_lna.ppi_ch_id_clr = ppi_clr_ch; // PPI channel for pin clearing
opt.common_opt.pa_lna.ppi_ch_id_set = ppi_set_ch; // PPI channel for pin setting
// PA config
opt.common_opt.pa_lna.pa_cfg.active_high = 1; // Set the pin to be active high
opt.common_opt.pa_lna.pa_cfg.enable = 1; // Enable toggling
opt.common_opt.pa_lna.pa_cfg.gpio_pin = gpio_pa_pin; // The GPIO pin to toggle
// LNA config
opt.common_opt.pa_lna.lna_cfg.active_high = 1; // Set the pin to be active high
opt.common_opt.pa_lna.lna_cfg.enable = 1; // Enable toggling
opt.common_opt.pa_lna.lna_cfg.gpio_pin = gpio_lna_pin; // The GPIO pin to toggle
err_code = sd_ble_opt_set(BLE_COMMON_OPT_PA_LNA, &opt);
APP_ERROR_CHECK(err_code);
}
The plot below shows a measurement using the PA/LNA signal when starting up the radio in TX mode. In the plot, M2 is the point where the analyzer triggered on the PA signal from the GPIO. This is ~7.6 us after the radio was turned on (M1) and ~5.8 us before the radio starts to modulate data (M3). The measurement was performed using S132 version 2.0.0-7.alpha.