Issues with +8DB TX power

Are there any known issues when using a nRF52840 and S140 6.0.0 soft device and trying to transmit at +8 dB?  From our measurements is appears that +4dB does indeed increase the signal strength but when using +8 dB, it measures the same as 0dB.  Is there reference material on what soft devices would be capable of +8dB with the nRF52840?

 

It looks like the S113 would not transmit at +8dB at one point.

 When using nRF52820, which SoftDevice will support +8dB Tx power? 

Thank you

  • Hello,

    This is a bit strange, all version of the s140 variant should support +8 dBm. Please try to run the code below enclosed by the '#if MONITOR_TXPOWER_SETTING' to verify if the TXPOWER register actually matches your power setting.

    #define MONITOR_TXPOWER_SETTING 1
    
    #if MONITOR_TXPOWER_SETTING
    
    void SWI3_IRQHandler(void)
    {
        /* Clear event register */
        NRF_EGU3->EVENTS_TRIGGERED[0] = 0;
        NRF_LOG_INFO("TX power: %d dBm", NRF_RADIO->TXPOWER);
    }
    
    void monitor_tx_power_register(void)
    {
        /* 6 is the default int. priority used in SDK drivers */
        NVIC_SetPriority(SWI3_IRQn, 6);
        NVIC_EnableIRQ(SWI3_IRQn);
    
        NRF_EGU3->INTENSET = EGU_INTEN_TRIGGERED0_Msk;
    
        NRF_PPI->CH[0].EEP = (uint32_t) &NRF_RADIO->EVENTS_TXREADY;
        NRF_PPI->CH[0].TEP = (uint32_t) &NRF_EGU3->TASKS_TRIGGER[0];
    
        NRF_PPI->CHENSET = PPI_CHENSET_CH0_Msk;
    }
    #endif
    
    /**@brief Function for application main entry.
     */
    int main(void)
    {
        bool erase_bonds;
    
        // Initialize.
        log_init();
        timers_init();
        buttons_leds_init(&erase_bonds);
        power_management_init();
        ble_stack_init();
        gap_params_init();
        gatt_init();
        advertising_init();
    #if MONITOR_TXPOWER_SETTING
        monitor_tx_power_register();
        uint32_t err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, 0, 8);
        APP_ERROR_CHECK(err_code);
    #endif //MONITOR_TXPOWER_SETTING
        ...

    Expected log output:

    Thanks,

    Vidar

    Edit: In case you are wondering why I had to read the register right after the EVENTS_TXREADY event: the Softdevice will reset the RADIO peripheral after every BLE event, so the register will have to be read while the Softdevice is using the radio. The register will be read as 0 otherwise.

Related